番茄什么时候种植| 乳糖是什么| 名列前茅的茅是什么意思| 胃泌素瘤是什么意思| 男人好难做人好难是什么歌| 66年属马是什么命| 城隍庙是什么神| 吃杏子有什么好处| 星巴克是什么| 淡定从容是什么意思| 沉香茶属于什么茶| 山峰是什么意思| 即兴是什么意思| 外地车进北京有什么限制| 癫痫属于什么科| 11月10号是什么星座| 6周岁打什么疫苗| 藿香泡水喝有什么好处| ny是什么牌子| 剑桥英语和新概念英语有什么区别| 尿酸高可以吃什么鱼| 百香果不能和什么一起吃| 何首乌长什么样子图片| 为什么蛋皮会痒| 过敏可以吃什么| 妈富隆是什么药| 什么叫疱疹| 木加一笔有什么字| 身上痒但是什么都没有| 姝字五行属什么的| 什么是幂| 什么事情只能用一只手去做| 世袭罔替什么意思| 喜欢白色的女人是什么性格| 大便脂肪球是什么意思| 血小板吃什么补得快点| 18点是什么时辰| 为什么要小心吉普赛人| 洋生姜的功效与作用是什么| hc是什么意思| 今天立冬吃什么| 不走心是什么意思| 为什么青霉素要做皮试| 枯木逢春是什么意思| 声音嘶哑吃什么药好| 胸椎退变是什么意思| 什么加什么等于粉色| 25度天气穿什么衣服| 曹丕为什么不杀曹植| 起什么转什么成语| 无花果为什么叫无花果| 双侧骶髂关节致密性骨炎是什么病| 10mg是什么意思| 牛油果对身体有什么好处| cpv是什么病毒| 尾插是什么| 内蒙有什么特产| 缺钾是什么原因造成的| 感化是什么意思| 气血亏虚什么症状| 奚字五行属什么| 肝有问题会出现什么症状| 淋巴结增大是什么原因严重吗| 平安果什么时候吃| 冷冻是什么意思| 腿发软无力是什么原因引起的| 老友记是什么意思| 医保报销是什么意思| 四平八稳是什么意思| 牙痛安又叫什么| 心脏长在什么位置| 广式腊肠炒什么菜好吃| 三焦指的是什么器官| 什么贵人能治孤辰寡宿| 希腊用什么货币| 纳是什么| 为什么会拉肚子| 美籍华裔是什么意思| 消炎药有什么| 月经量少是什么原因| 老婆的弟弟叫什么| 猪肝配什么菜炒好吃| cpap是什么意思| 什么水果减肥| 什么情况需要打破伤风针| 血压高呕吐是什么征兆| 小孩嘴唇发红是什么原因| 尿潴留是什么症状| 怀孕了为什么还会出血| 什么是隐匿性包茎| 白带什么样子| 为什么单位不愿意申请工伤| 鼎是干什么用的| vc是什么药| 阴阳两虚吃什么药| 脚趾头抽筋是什么原因| 孕妇羊水多是什么原因造成的| 曹操是什么帝| 陈赫为什么离婚| opo是什么| 水样分泌物是什么炎症| 空腹胰岛素低说明什么| 姐姐的女儿叫什么称呼| 黑t恤搭配什么裤子| 洋桔梗的花语是什么| 未退化胸腺是什么意思| 胸部正位片检查什么| 辣椒代表什么生肖| 手术后吃什么鱼伤口愈合快| 癌胚抗原偏高说明什么| 抗宫炎软胶囊主要治什么| 什么水果泡酒最好喝| 业报是什么意思| 胰腺的作用和功能是什么| 鸡皮肤是什么原因引起的| 子宫有积液是什么原因引起的| 故宫什么时候闭馆| 玉米淀粉可以做什么| 双字五行属什么| 同心同德是什么意思| 北京为什么叫帝都| 什么叫幸福| 钯金和铂金有什么区别| 卫戍部队是什么意思| 肝虚火旺吃什么中成药| 滞纳金是什么| 口腔溃疡是缺少什么维生素| 天上九头鸟地上湖北佬是什么意思| 睾酮素低了有什么症状| 足跟疼痛用什么药| 10月13号是什么星座| 晚霞是什么颜色的| 婴儿大便隐血阳性是什么意思| 支气管舒张试验阳性是什么意思| 内分泌代谢科是看什么病的| 望远镜10x50什么意思| hpv什么病毒| 什么而去| 快走对身体有什么好处| 肚子胀气吃什么食物好| 嘴唇淡紫色是什么原因| 铁子是什么意思| hvi是什么病| 疑心病是什么意思| 眼疖子用什么药| 鸡和什么属相相冲| 心脏检查挂什么科| 乌贼是什么动物| 脾主四肢是什么意思| 点睛之笔是什么意思| 多汗症挂什么科| 左是什么意思| 喝什么汤下奶最快最多| 埋汰什么意思| 锑是什么| 心服口服是什么意思| 人得布病什么症状| hm是什么牌子的衣服| 哺乳期上火了吃什么降火最快| 什么水果是降火的| 便秘灌肠用什么水| 纯牛奶什么时候喝最好| 水果有什么| 内火重吃什么药见效快| 2020年是什么命| 九月份是什么星座| 手腕关节疼痛什么原因引起的| 彼岸花什么时候开花| 爬楼是什么意思| 2023年属什么生肖| 饮食男女是什么意思| 枇杷是什么季节的水果| 93年属相是什么| 喉咙看什么科| 井是什么生肖| 直言不讳是什么意思| 眼角流泪是什么原因| 高铁列车长是什么级别| 尿渗透压低是什么原因| 男人遗精是什么原因| 空腹血糖17已经严重到什么时候| chevy是什么车| 5月25日什么星座| 巨峰葡萄为什么叫巨峰| 子宫内膜增厚是什么原因| 这是什么车| 星座上升是什么意思| 学生是什么阶级| 附件炎吃什么药| 咖色裤子配什么颜色上衣| 胃疼肚子疼是什么原因| 肠癌吃什么好| 欠佳是什么意思| 腘窝囊肿是什么原因引起的| 上校相当于政府什么官| 马黛茶什么味道| 验血肝功能看什么指标| 玉林狗肉节是什么时候| 为什么会精神衰弱| 荸荠读音是什么| 扁平足看什么科| 10度左右穿什么衣服合适| 人为什么会长痣| 什么是酸性食物| 喝水都长肉是什么原因| 什么是u| 参片泡水喝有什么功效| 糖类抗原是检查什么的| 自食恶果是什么意思| 什么叫空调病| 护肝养肝吃什么药最好| 雷诺氏病是一种什么病| 被蜈蚣咬了有什么症状| 海豹吃什么| 恐龙为什么叫恐龙| 照猫画虎什么意思| 胃总疼是什么原因| 鼻炎是什么引起的| furk是什么意思| 王八吃什么| 宰相是什么意思| super star是什么意思| 什么是湿气重| 什么旺水命| 门静脉高压是什么意思| 折服是什么意思| 解脲脲原体阳性是什么病| 免疫系统由什么组成| 猩红热是什么病| 断更是什么意思| 做肠镜需要准备什么| 12月3日什么星座| 什么方法| 看肺应该挂什么科| 女人什么血型最聪明| 很多屁放是什么原因| 发财树为什么叫发财树| 慢性结肠炎吃什么药| 贫血吃什么可以补血| 丽珠兰是什么| 南枝是什么意思| 今年88岁属什么生肖| 疣是什么病毒| 女性甲状腺挂什么科| 送礼送什么烟比较好| 桦树茸的功效主治什么病| 身上老出汗是什么原因引起的| 肺结节是什么症状| 落差是什么意思| 羊字五行属什么| 火拼是什么意思| 爱出汗是什么原因| 儿童急性肠胃炎吃什么药| 卡地亚蓝气球什么档次| 感冒喉咙痒吃什么药| 冷幽默是什么意思| 刚怀孕吃什么好| 食管炎有什么症状| 配送是什么意思| 2011年是什么生肖| 卡尔文克莱恩是什么牌子| 红细胞分布宽度偏低是什么意思| 玻璃五行属什么| 脚有酸臭味是什么原因| 百度
这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 ? 论坛首页 ? DIY与开源设计 ? 电子DIY ? 【功率监测与控制系统DIY活动过程贴】INA219功率信息检测与实时显示

共5条 1/1 1 跳转至

【功率监测与控制系统DIY活动过程贴】INA219功率信息检测与实时显示

助工
2025-08-04 03:15:55     打赏
百度 标准提高的同时,补贴金额总体下降。

【功率监测与控制系统DIY活动过程贴】功率信息检测与实时显示

本文介绍了 NUCLEO-F411RE 开发板通过硬件 I2C 实现 INA219 功率传感器的驱动与串口信息打印 ,并进一步结合 IIC 驱动 OLED 的项目设计,实现功率数据采集与实时显示。

项目介绍

一、介绍 INA219 功率传感器模块;

二、使用 STM32CubeMX 新建工程,并添加驱动工程代码;

三、获取 INA219 传感器数据,并通过串口发送功率信息;

四、进一步结合 OLED 实现电压、电流和功率信息的实时显示。

SEN0291 模块

DFRobot Gravity:I2C数字功率计 是一款可测量 26V, 8A 以内各类电子模块、用电设备的电压、电流和功率,最大相对误差不超过±0.2%的高分辨、高精度、大量程测量模块(首次使用需进行手动校准)。

可用于太阳能系统、电池库仑计、电机、主控板或电子模块的功耗测量、电池续航评估与实时电源参数在线监控。

SEN0291.jpg

模块采用 TI INA219 零温漂电流/功率监控芯片和 2W 大功率低温漂 10mΩ 合金采样电阻,

电压和电流分辨率分别可达 4mV 与 1mA,

在满量程测量条件下,电压与电流的最大测量相对误差不超过±0.2%,

并提供4个可通过拨码开关配置的I2C地址。

模块可对双向高侧电流(流经电源或电池正极的电流)进行准确测量,这在太阳能或库仑计应用,电池既需要充电,也需要放电的场合尤为有用,

用户可通过电流的正负读数了解电池的充放电状态,也可以了解电池的冲放电的实时电压、电流与功率。

在电机应用场景,可通过实时监控电机电流是否由于堵转或负载过大导致电流过大,从而及时采取保护措施。

此外,也可以使用该模块测量各类电子模块或整个项目的实时功耗,从而评估电池的续航时间。


特性

高精度、高分辨率、大量程、低温漂

双向电流高侧测量

兼容3.3V/5V控制器

精致小巧,方便项目嵌入


应用场景

太阳能系统

电池库仑计

电子模块功耗评估


技术规格

供电电压(VCC):3.3V ~ 5.5V

电压量程(IN+或IN-相对GND):0 ~ 26V

电压分辨率:4 mV

电压相对误差:<±0.2%(典型值)

电流量程:0 ~ ±8A(可测双向电流)

电流分辨率:1 mA

电流相对误差:<±0.2%(典型值,需手动校准)

功率量程:0 ~ 206 W

功率分辨率:20 mW(硬件)/4mW(软件)

静态电流:0.7 mA

通信接口:Gravity I2C (逻辑电平0-3.3V)

I2C地址:4个,0x40,0x41,0x44,0x45(默认)

尺寸:30.0mm×22.0mm

重量:4g


接口说明

pinout_sen0291.jpg


名称功能描述
VCC电源正极(3.3~5.5V)
GND电源负极
SCLI2C时钟线
SDAI2C数据线
ADDRI2C地址选择拨码开关
3P TERMINAL电压与电流测量接线柱3P


模块原理图

SCH_SEN0291.jpg

INA219 原理图

SCH_INA219.jpg

总线时序图

IIC 通信起始地址为 0x40

bus_timing_diagram.jpg

详见:Gravity: I2C Digital Wattmeter SKU: SEN0291-DFRobot .

12V直流电源

MEAN WELL 的 RS-15 系列单路输出开关电源是高度可靠的紧凑型 15 W AC/DC 电源。MEAN WELL 公司的电源为低功耗工业应用提供了可靠的解决方案。

power_supply_12V_top_view

power_supply_12V_top_view.jpg

其主要特点包括:较高的工作温度(高达 +70°C)、空载功耗小于 0.5 W、高效率、高可靠性以及承受 5G 振动测试和 300 VAC 浪涌输入电压的能力。

特性

通用交流输入/全范围

短路、过压和超温保护

自由空气对流冷却

电源开启 LED 指示灯

通过了 100% 满负载老化测试

空载功耗小于 0.5 W

全部使用 +105°C 长寿命电解电容器

承受 300 VAC 5 秒浪涌输入

工作温度高达 +70 °C

通过 5G 振动测试

高效率、长寿命和高可靠性

接口说明

power_supply_12V_left_view

power_supply_12V_left_view.jpg


名称功能描述
L火线(交流市电)
N零线(交流市电)
GND地线
-V输出直流电压负极
+V输出直流电压正极
ADJ微调旋钮,调整输出直流电压


使用时需将前盖取下,旋转螺丝压紧导线,避免接触不良或短路,安装完成后将前盖合上,避免触电;

注意接线安全。


工程创建


实现 INA219 的硬件 IIC 驱动和串口打印信息。


1.打开 STM32CubeMX 软件,新建 ST 板卡工程;

2.时钟配置:采用默认设置,系统时钟频率 84MHz;

3. Pinout & Configuration 标签下选择 Connectivity - I2C2 ,  右侧 Mode 选择 I2C 使能 IIC 总线功能,此时 Pinout View 中 IIC 对应的管脚被标注为 I2C2 ;

4.配置完成后,进入 Project Manager 标签栏,进行项目命名、保存路径设置、编译器选择等操作;

5.点击 Generate Code 按钮,使用 STM32CubeIDE 或 Keil 打开目标工程;

6.编译工程,0 error, 0 warning .



工程代码

介绍了 INA219 传感器的头文件 ina219.h 和驱动文件 ina219.c 的相关代码。


ina219.h

#ifndef __INA219_H
#define __INA219_H

#include "stm32f4xx_hal.h"

#define INA219_ADDRESS (0x40 << 1) // 默认地址,左移1位

// 寄存器地址
#define INA219_REG_CONFIG         0x00
#define INA219_REG_SHUNTVOLTAGE   0x01
#define INA219_REG_BUSVOLTAGE     0x02
#define INA219_REG_POWER         0x03
#define INA219_REG_CURRENT        0x04
#define INA219_REG_CALIBRATION    0x05

// 配置选项
#define INA219_CONFIG_RESET       0x8000
#define INA219_CONFIG_BVOLTAGERANGE_32V 0x2000
#define INA219_CONFIG_GAIN_8_320MV 0x1800
#define INA219_CONFIG_BADCRES_12BIT 0x0180
#define INA219_CONFIG_SADCRES_12BIT_1S_532US 0x0018
#define INA219_CONFIG_MODE_SANDBVOLT_CONTINUOUS 0x0007

// 函数声明
void INA219_Init(I2C_HandleTypeDef *hi2c);
float INA219_GetShuntVoltage_mV(void);
float INA219_GetBusVoltage_V(void);
float INA219_GetCurrent_mA(void);
float INA219_GetPower_mW(void);
uint16_t INA219_ReadReg(uint8_t reg);
void INA219_WriteReg(uint8_t reg, uint16_t value);

extern I2C_HandleTypeDef *hina219_i2c;

#endif


ina219.c

#include "ina219.h"
#include <math.h>

I2C_HandleTypeDef *hina219_i2c;
float currentLSB = 0.0f;
float powerLSB = 0.0f;

void INA219_Init(I2C_HandleTypeDef *hi2c) {
    hina219_i2c = hi2c;

    // 计算LSB
    // 假设使用0.1欧姆分流电阻,最大预期电流为3.2A
    float maxExpectedCurrent = 3.2f;
    currentLSB = maxExpectedCurrent / 32768.0f;
    powerLSB = 20.0f * currentLSB;

    // 写入校准寄存器
    uint16_t calibrationValue = (uint16_t)(0.04096f / (currentLSB * 0.1f));
    INA219_WriteReg(INA219_REG_CALIBRATION, calibrationValue);

    // 配置寄存器
    uint16_t config = INA219_CONFIG_BVOLTAGERANGE_32V |
                     INA219_CONFIG_GAIN_8_320MV |
                     INA219_CONFIG_BADCRES_12BIT |
                     INA219_CONFIG_SADCRES_12BIT_1S_532US |
                     INA219_CONFIG_MODE_SANDBVOLT_CONTINUOUS;

    INA219_WriteReg(INA219_REG_CONFIG, config);
}

uint16_t INA219_ReadReg(uint8_t reg) {
    uint8_t data[2];
    HAL_I2C_Mem_Read(hina219_i2c, INA219_ADDRESS, reg, 1, data, 2, HAL_MAX_DELAY);
    return (data[0] << 8) | data[1];
}

void INA219_WriteReg(uint8_t reg, uint16_t value) {
    uint8_t data[2] = {value >> 8, value & 0xFF};
    HAL_I2C_Mem_Write(hina219_i2c, INA219_ADDRESS, reg, 1, data, 2, HAL_MAX_DELAY);
}

float INA219_GetShuntVoltage_mV(void) {
    int16_t value = (int16_t)INA219_ReadReg(INA219_REG_SHUNTVOLTAGE);
    return value * 0.01f; // LSB = 10uV
}

float INA219_GetBusVoltage_V(void) {
    uint16_t value = INA219_ReadReg(INA219_REG_BUSVOLTAGE);
    return (value >> 3) * 0.004f; // LSB = 4mV
}

float INA219_GetCurrent_mA(void) {
    int16_t value = (int16_t)INA219_ReadReg(INA219_REG_CURRENT);
    return value * currentLSB * 1000.0f;
}

float INA219_GetPower_mW(void) {
    int16_t value = (int16_t)INA219_ReadReg(INA219_REG_POWER);
    return value * powerLSB * 1000.0f;
}

头文件和驱动文件是实现 INA219 功率参数读取的关键,对于后续参数调用和输出具有重要意义。


串口打印功率

介绍了通过串口重定向实现电压、电流、功率等信息的打印输出。

printf 重定向

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "stdio.h" // printf used
/* USER CODE END Includes */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif

PUTCHAR_PROTOTYPE
{
 HAL_UART_Transmit(&huart2, (uint8_t*)&ch,1,HAL_MAX_DELAY);
    return ch;
}
/* USER CODE END PD */


串口输出浮点型数据

进入项目资源管理器,右键项目,选择属性;

在弹出的对话框中,选择 C/C++ Build ,展开 C/C++ Build 并选择 Settings ;

选择 Tool Settings - MCU Settings ;

勾选 Use float with printf from newlib-nano (-u printf float) ;

点击 Apply 应用自动重新构建项目,点击 Apply and Close 保存配置。

右键项目 - 属性 - C/C++ Build - Setting - Tool Settings - MCU GCC Linker - Miscellaneous - Other flags - 点击添加符号,输入 -u_printf_float ,应用并关闭。

参考:STM32CubeIDE之printf重定向及串口输出浮点型数据 . 解决STM32CubeIDE出现 The float formatting support is not enabled 错误提示 .

main.c

主函数添加 ina219 初始化、调用电压、电流读取函数,以及串口重定向输出

/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "i2c.h"
#include "usart.h"
#include "gpio.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "ina219.h"
#include "stdio.h" // printf used
/* USER CODE END Includes */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif

PUTCHAR_PROTOTYPE
{
//同样USART2改为你的串口
 HAL_UART_Transmit(&huart2, (uint8_t*)&ch,1,HAL_MAX_DELAY);
    return ch;
}

void SystemClock_Config(void);

int main(void)
{
  HAL_Init();
    
  SystemClock_Config();

  MX_GPIO_Init();
  MX_I2C2_Init();
  MX_USART2_UART_Init();
  /* USER CODE BEGIN 2 */
  INA219_Init(&hi2c2);
  char buffer[100];
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
   float busVoltage = INA219_GetBusVoltage_V();
   float shuntVoltage = INA219_GetShuntVoltage_mV();
   float current = INA219_GetCurrent_mA();
   float power = INA219_GetPower_mW();
   printf("Voltage: %.2f (%.2f) V, Current: %.2f mA, Power: %.2f mW\r\n",busVoltage,shuntVoltage,current,power);
   HAL_Delay(500);
  }


编译并运行工程,使用 串口调试助手 软件打开 STLINK 虚拟串口,即可获得功率信息。

硬件连接

PB9 ---- SDA (INA219)

PB10 ---- SCL (INA219)

GND (INA219) ---- Negative (Motor) ---- Negative (Power Supply)

IN+ (INA219) ---- Positive (Power Supply)

IN- (INA219) ---- Positive (Motor)

示意图

motor_connect_ina219.jpg


实物连接

uart_ina219_empty.jpg

效果

空载情况下的电压、电流和功率输出

uart_print_power_ina219.gif

打开电源情况下的功率输出情况

uart_print_power_ina219_motor.gif

OLED显示功率

在实现串口输出的基础上,结合前面帖子构建的 OLED 功率显示框架,实现 INA219 功率读取、串口打印以及 OLED 显示。

硬件连接

PB9 ---- SDA (INA219)

PB10 ---- SCL (INA219)

GND (INA219) ---- Negative (Motor) ---- Negative (Power Supply)

IN+ (INA219) ---- Positive (Power Supply)

IN- (INA219) ---- Positive (Motor)

PB7 ---- SDA (OLED)

PB6 ---- SCL (OLED)

示意图

oled_motor_ina219_power_uart.jpg


代码

/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "i2c.h"
#include "usart.h"
#include "gpio.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "ina219.h"
#include "stdio.h"
#include "oled.h"
/* USER CODE END Includes */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif

PUTCHAR_PROTOTYPE
{
 HAL_UART_Transmit(&huart2, (uint8_t*)&ch,1,HAL_MAX_DELAY);
    return ch;
}

void SystemClock_Config(void);

int main(void)
{
  HAL_Init();
  INA219_Init(&hi2c2);
  SystemClock_Config();

  MX_GPIO_Init();
  MX_I2C1_Init();
  MX_I2C2_Init();
  MX_USART2_UART_Init();
  /* USER CODE BEGIN 2 */
      OLED_Init();
     OLED_Clear();
     /* --- 1st row --- */
     OLED_ShowString(0,0,"DIY",16,1); // DIY
     OLED_ShowCHinese(24,0,0,1); // 功
     OLED_ShowCHinese(39,0,1,1); // 率
     OLED_ShowCHinese(54,0,2,1); // 监
     OLED_ShowCHinese(69,0,3,1); // 测
     OLED_ShowCHinese(84,0,4,1); // 与
     OLED_ShowCHinese(99,0,5,1); // 控
     OLED_ShowCHinese(113,0,6,1); // 制
  /* --- 2nd row --- */
     OLED_ShowCHinese(0,2,7,0); // 电
     OLED_ShowCHinese(15,2,9,0); // 流
     OLED_ShowChar(30,2,':',16,0);
     OLED_ShowString(100,2,"mA",16,0);
  /* --- 3rd row --- */
     OLED_ShowCHinese(0,4,7,0); // 电
     OLED_ShowCHinese(15,4,8,0); // 压
     OLED_ShowChar(30,4,':',16,0);
     OLED_ShowString(100,4,"V",16,0);
  /* --- 4th row --- */
     OLED_ShowCHinese(0,6,0,0); // 功
     OLED_ShowCHinese(15,6,1,0); // 率
     OLED_ShowChar(30,6,':',16,0);
     OLED_ShowString(100,6,"mW",16,0);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
 float busVoltage = INA219_GetBusVoltage_V();
 float shuntVoltage = INA219_GetShuntVoltage_mV();
 float current = INA219_GetCurrent_mA();
 float power = INA219_GetPower_mW();
 printf("Voltage: %.2f (%.2f) V, Current: %.2f mA, Power: %.2f mW\r\n",busVoltage,shuntVoltage,current,power);
 OLED_ClearLinePart(2, 45, 99);
 OLED_ClearLinePart(3, 45, 99);
 OLED_ShowDecimal(45,2,current,2,2,16,0);
 OLED_ClearLinePart(4, 45, 99);
 OLED_ClearLinePart(5, 45, 99);
 OLED_ShowDecimal(45,4,busVoltage,2,2,16,0);
 OLED_ClearLinePart(6, 45, 99);
 OLED_ClearLinePart(7, 45, 99);
 OLED_ShowDecimal(45,6,power,2,2,16,0);
 HAL_Delay(500);
  }
  /* USER CODE END 3 */
}


效果

电机静止

motor_steady_oled_display.jpg

电机运行

motor_running_oled_display

motor_running_oled_display.jpg

动态

motor_running_oled_display

motor_running_oled_display.gif

同时串口打印

motor_steady_running_oled_display.gif




12V电源

使用12V直流电源带动负载运行,通过INA219检测功率信息。


硬件连接

PB9 ---- SDA (INA219)

PB10 ---- SCL (INA219)

PB7 ---- SDA (OLED)

PB6 ---- SCL (OLED)

GND (INA219) ---- Negative (12V) ---- Negative (LOAD)

IN+ (INA219) ---- Positive (12V)

IN- (INA219) ---- Positive (LOAD)

示意图

power_12V_oled_ina219_load.jpg

实物连接

ina219_power_12V_oled

ina219_power_12V_oled.jpg

动态展示

ina219_power_12V_oled.gif


串口打印功率

ina219_power_12V_print

ina219_power_12V_print.gif


总结

本文介绍了 NUCLEO-F411RE 开发板通过硬件 I2C 实现 INA219 功率传感器的驱动与串口信息打印 ,并进一步结合硬件 IIC 驱动 OLED 的项目设计,实现功率数据采集与实时显示,工程使用 SMT32CubeMX 软件快速构建,为相关产品及项目的开发设计提供了参考。





关键词: 功率     INA219     监测     显示     串口     stm32         

工程师
2025-08-04 07:26:57     打赏
2楼

大佬,这连线图是用什么工具画的呀?


助工
2025-08-04 10:52:36     打赏
3楼

大佬的帖子写的真详细


院士
2025-08-04 15:38:21     打赏
4楼

厉害 厉害

有速度,有质量


菜鸟
2025-08-04 15:42:41     打赏
5楼

来了来了 蹲


共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]
氟利昂是什么味道 红痣是什么原因引起的 盆腔炎吃什么药效果最好 什么是音节什么是音序 梦见自己打胎是什么意思
医者仁心什么意思 乳头为什么是黑的 呼吸道感染挂什么科 雷贝拉唑钠肠溶片什么时候吃 身份证后4位代表什么
美容美体是干什么的 心脏为什么会跳动 马和驴为什么能杂交 政字五行属什么 otc什么意思
厌氧菌感染用什么药 手指缝痒是什么原因 木棉是什么面料 中级会计什么时候报名 社康是什么
吃什么可以解酒最快简单xinmaowt.com 18岁是什么生肖hcv7jop5ns5r.cn 足齐念什么hcv9jop5ns5r.cn 山什么水什么cj623037.com 什么食物化痰hcv9jop3ns6r.cn
足癣用什么药hcv8jop1ns1r.cn 美色是什么意思hcv9jop0ns0r.cn 灵芝长什么样dajiketang.com 9.30号是什么星座hcv8jop6ns4r.cn 小钙化灶是什么意思hcv9jop4ns1r.cn
眼科pd是什么意思hcv8jop3ns8r.cn 什么长什么短hcv8jop7ns9r.cn 电镀是做什么的hcv8jop4ns8r.cn 什么叫蜘蛛痣hcv9jop3ns7r.cn 金代表什么生肖hcv8jop3ns5r.cn
吃什么可以降低尿酸hcv7jop6ns5r.cn 客观原因是什么意思baiqunet.com 梦见自己打胎是什么意思hcv7jop5ns3r.cn 笙是什么意思hcv8jop4ns8r.cn 美国绿卡有什么好处hcv8jop9ns2r.cn
百度