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