Files
2026-06-27 00:39:04 +03:00

4.3 KiB
Raw Permalink Blame History

Драйвер прецизионного монитора питания DS_INA226

Инструментальный драйвер на Си для микросхемы INA226, работающей по интерфейсу I2C. Чип позволяет с высокой точностью измерять падение напряжения на токоизмерительном шунте, напряжение на шине питания (до 36В), автоматически рассчитывать протекающий ток и потребляемую мощность в ваттах.

📌 Особенности реализации

  • Масштабируемый LSB: Встроенный расчет калибровочного коэффициента под максимальный ток 1 Ампер и сопротивление шунта 100 мОм.
  • Прямое чтение физических величин: Функции возвращают напряжение шины в милливольтах (mV), напряжение шунта в микровольтах (uV), а ток и мощность в виде значений с плавающей точкой (float).
  • Кэширование памяти: Драйвер содержит массив SensorData для хранения сырых образов всех девяти внутренних 16-битных регистров чипа.

🔌 Схема подключения (I2C)

Вывод модуля INA226 Вывод STM32 Назначение
VCC 3.3V Питание цифровой части
GND GND Общая земля
SCL TIMx_SCL / I2Cx_SCL Тактовая линия шины I2C
SDA TIMx_SDA / I2Cx_SDA Линия данных шины I2C
IN+ К источнику питания Вход контроля тока (до шунта)
IN- К нагрузке Выход контроля тока (после шунта)

💻 Пример использования в main.c

#include "DS_INA226.h"

extern I2C_HandleTypeDef hi2c1;
DS_INA226 power_monitor;

int main(void) {
    // ... Автоматическая инициализация HAL, GPIO, I2C ...

    /* 1. Инициализация INA226. Адрес по умолчанию обычно 0x40 (зависит от пинов A0, A1) */
    DS_INA226_Init(&power_monitor, &hi2c1, 0x40);

    while (1) {
        /* 2. Считывание текущих показателей */
        uint16_t bus_voltage_mv = DS_INA226_GetBusVoltage(&power_monitor);
        float current_amps       = DS_INA226_GetCurrent(&power_monitor);
        float power_watts        = DS_INA226_GetPower(&power_monitor);

        // Полученные данные можно выводить на дисплей или отправлять в UART/USB
        HAL_Delay(250);
    }
}

📋 Справочник API функций

void DS_INA226_Init(DS_INA226 *DS_INA226, I2C_HandleTypeDef *hi2c, uint8_t DevAddr)

Выполняет первичную привязку к шине I2C, вычитывает все внутренние регистры в кэш-память структуры и рассчитывает математическую матрицу калибровки CAL для регистра 05h.

uint16_t DS_INA226_GetBusVoltage(DS_INA226 *DS_INA226)

Выполняет чтение регистра 02h и возвращает текущее напряжение на контролируемой шине питания.

  • Цена деления (LSB): 1.25 мВ.
  • Возвращаемое значение: Напряжение в милливольтах (mV).

float DS_INA226_GetCurrent(DS_INA226 *DS_INA226)

Считывает аппаратно рассчитанное значение тока из регистра 04h.

  • Возвращаемое значение: Ток в Амперах (float).

float DS_INA226_GetPower(DS_INA226 *DS_INA226)

Считывает значение мгновенной потребляемой мощности из регистра 03h.

  • Возвращаемое значение: Мощность в Ваттах (float).