Первая итерация

This commit is contained in:
2026-06-27 00:39:04 +03:00
parent 2009035bb4
commit c4ec2b64cd
12 changed files with 951 additions and 180 deletions
+69
View File
@@ -0,0 +1,69 @@
# Драйвер прецизионного монитора питания 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`).