# Драйвер прецизионного монитора питания 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` ```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`).