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