什么叫柞蚕丝| 同房出血什么原因| 脾虚有什么症状| 五月五日什么星座| 放屁是热的是什么原因| 世界屋脊指的是什么| wonderflower是什么牌子| 过渡句的作用是什么| 及是什么意思| pd医学上是什么意思| 海丽汉森是什么档次| 肠炎吃什么药效果最好| 婊子是什么生肖| 羊字五行属什么| 双脚踝浮肿是什么原因| 庞统为什么叫凤雏| carol什么意思| 手机号码是什么| 否认是什么意思| 水厄痣是什么意思| 排卵期出血是什么样的| 右脸突然肿了是什么原因| 痔疮有什么症状表现| 女方起诉离婚需要什么证件| 胆汁有什么作用| 兔肉不能和什么一起吃| 潮热是什么症状| 脸肿是什么病| 产后大出血一般发生在什么时候| 11.19是什么星座| 拉肚子吃什么蔬菜| 恶露是什么颜色的| 寒冷的反义词是什么| 豆面是什么| 怀孕吃火龙果对胎儿有什么好| 头皮痒用什么洗头好| 糖类抗原153偏高是什么原因| 理想主义是什么意思| 归脾丸治什么病| 胃不好吃什么水果| 白炽灯是什么灯| 自食恶果是什么意思| 眼睛经常长麦粒肿是什么原因| 恶心想吐吃什么药| 终而复始什么意思| 上上签什么意思| 重阳节吃什么| 下巴长痘是为什么| 小孩c反应蛋白高说明什么| 9个月宝宝玩什么玩具| 蜱虫咬人后有什么症状图片| 什么人不能喝大麦茶| 两个人在一起的意义是什么| 肿瘤标志物五项检测是什么| 一路顺风是什么生肖| ldlc是什么意思| 高血压可以吃什么肉| 十指不沾阳春水是什么意思| 春天的雨像什么| 寡欲是什么意思| 虹视是什么意思| 美味佳肴是什么意思| 百香果什么时候吃最好| 归是什么意思| 纸醉金迷是什么意思| 手红是什么原因| 黑枸杞泡茶是什么颜色| 羽毛球鞋什么牌子好| s925是什么| 前白蛋白高是什么意思| 旅行的意义是什么| 早起胃疼是什么原因导致的| 为什么嘴巴会臭| 相对密度是什么意思| 红枣为什么要去核煮| 挂职是什么意思| 母鸡是什么意思| 鳄鱼的尾巴有什么作用| 四月天是什么意思| 睡觉爱流口水是什么原因| 月经褐色量少是什么原因| 开车压到猫有什么预兆| 上热下寒吃什么食物好| 椰子煲鸡汤放什么材料| 梦见棺材什么意思| 淡蓝色配什么颜色好看| 中度贫血是什么原因造成的| 吃什么能提升免疫力| 肢体拘挛是什么意思| 十月份生日是什么星座| 草酸是什么| 毛囊是什么样子图片| 鸡蛋为什么不能放冰箱| 嘈杂的意思是什么| 诗和远方是什么意思| 第一次同房要注意什么| 身上发热是什么原因| 白头翁是什么动物| 小腹胀痛什么原因女性| 情何以堪 什么意思| 农历8月15是什么节日| 小孩吃鼻屎是什么原因| 蓝帽子标志是什么意思| 什么案件才会出动便衣| 宫颈粘连什么症状| 96年属什么命| 折耳根什么味道| 息斯敏又叫什么药名| 肝主疏泄是什么意思| 上火喝什么药| 路上遇到蛇是什么征兆| 秦始皇为什么叫祖龙| 肝火旺喝什么药| 眼睛有痣代表什么| 多吃醋有什么好处和坏处| 伐木是什么意思| 头顶痛什么原因| 手心发热是什么原因| 吃什么肝脏排毒| 小插曲是什么意思| 铅是什么颜色| 凤毛麟角什么意思| 什么奶粉对肠胃吸收好| 脂溶性是什么意思| 珠是什么生肖| 纠结是什么意思| 什么的照射| af什么意思| 9月28号什么星座| 谷胱甘肽是什么| 丸美属于什么档次| 为什么摩羯女颜值都高| 甲状腺欠均匀什么意思| 嫣然是什么意思| 生鱼又叫什么鱼| 安宫牛黄丸有什么作用| 治疗狐臭最好的方法是什么| 穿梭是什么意思| 懈怠是什么意思| 无名指戴戒指什么意思| 鼻子旁边长痘是什么原因| 双子是什么星座| 写意是什么意思| 肾宝片是什么| 地球属于什么星系| 辣木籽主治什么病| 跪安是什么意思| 提肛有什么好处| 左后背疼是什么原因| 大便颜色发绿是什么原因| leg是什么意思| 结婚35周年是什么婚| 雪梨是什么梨| 济公搓的泥丸叫什么| 巴洛特利为什么叫巴神| 君子兰不开花是什么原因| 鲜黄花菜含有什么毒素| 肺部条索灶是什么意思| 共济会是什么| 儿童掉头发什么原因| 发烧应该挂什么科| 药店属于什么行业| 容易上火是什么原因| 什么降压药副作用小且效果最好| 尿常规白细胞偏高是什么原因| 出汗少是什么原因| hr是什么| 儿童手足口病吃什么药| 口腔溃疡是什么| 维酶素片搭配什么药治萎缩性胃炎| 提莫是什么意思| 开心的反义词是什么| 拉水吃什么药| 吃什么对眼睛近视好| 总感觉自己有病是什么心理病| 养猫的人容易得什么病| 抗药性是什么意思| 十一月二十二是什么星座| 黄瓜与什么食物相克| 鄙人什么意思| 疗养是什么意思| 什么样的人容易得甲减| 蜘蛛喜欢吃什么| viscose是什么面料| 竹代表什么生肖| 你有毒是什么意思| 红底白杠是什么标志| 荷叶搭配什么一起喝减肥效果好| 六月二十日是什么日子| 瑛字五行属什么| 什么叫精索静脉曲张啊| 心口疼是什么原因引起的| 什么食物含碘| 早上八点到九点属于什么时辰| 喝杨梅酒对身体有什么好处| 闪光点是什么意思| 胃炎吃什么药| 什么人群不适合吃阿胶糕| 试金石什么意思| 造瘘手术是什么意思| 宫腔内偏强回声是什么意思| 干细胞移植是什么意思| 淋巴清扫是什么意思| 狮子座什么星象| 什么叫牙周炎| 雪蛤是什么| 感情洁癖什么意思| 保释金是什么意思| 沈阳为什么叫盛京| 冰糖里面为什么有白线| 7月12日是什么日子| 月经期体重增加是什么原因| 良善是什么意思| 第二视角是什么意思| sle是什么病的缩写| 桃李满天下是什么生肖| 为什么会得红斑狼疮| 呼吸道感染挂什么科| 脾切除后有什么影响和后遗症| 阴虚吃什么调理| 人造奶油是什么做的| 圣诞是什么意思| 心绪是什么意思| 缺铁吃什么补得最快| 什么茶降糖效果最好| 一个口一个且念什么| 乾隆为什么不喜欢雍正| 氯化钠是什么盐| 泔水是什么意思| 猫毛过敏吃什么药| 有点拉肚子吃什么药| cln是什么意思| 支气管炎吃什么药效果最好| 95属什么生肖| 阴囊潮湿吃什么中成药| 组织细胞是什么| 善罢甘休的意思是什么| 腹直肌是什么| 为什么多喝水反而胖了| 增强记忆力吃什么| 纤维蛋白原偏低吃什么| 129什么星座| 春回大地是什么生肖| pigeon是什么牌子| 同房什么意思| 淡奶是什么| f4什么意思| 什么生肖怕老婆| 南通在江苏什么位置| 为什么会得胆囊炎| 什么茶可以降血压| 脑供血不足用什么药效果最好| 抽动症是什么原因造成的| 西游记什么时候写的| 结节性硬化症是什么病| vdo是什么牌子| 吃什么降血脂| 老子是什么意思| 农历8月是什么星座| 咳嗽呕吐是什么原因| 斯沃琪手表什么档次| 包茎不割会有什么影响| 星期狗什么意思| 元旦北京有什么好玩的| 百度
这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 ? 论坛首页 ? 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 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]
梦到人死了是什么意思 入伏吃羊肉有什么好处 因果业力是什么意思 冠状动脉钙化什么意思 出行是什么意思
宝付支付是什么 分分钟都妙不可言是什么歌 天厨贵人是什么意思 blazer是什么意思啊 宝宝发烧是什么原因引起的
牙齿为什么发黄 3.14什么星座 胃疼能吃什么水果 射手座男和什么星座最配 自学成才是什么意思
非农业户口是什么意思 小孩子晚上睡觉磨牙是什么原因 杵状指见于什么疾病 安康鱼长什么样 晚上9点是什么时辰
鼻梁痛什么原因引起的hcv9jop0ns9r.cn 七月是什么季节hcv9jop0ns0r.cn 腰痛吃什么好hcv7jop5ns0r.cn 汗蒸是什么意思hcv9jop1ns2r.cn 治标不治本是什么意思hcv7jop6ns6r.cn
mickey是什么牌子hcv8jop6ns2r.cn 检查视力挂什么科hcv7jop9ns2r.cn 足字旁的字和什么有关hcv8jop9ns4r.cn 小孩头疼挂什么科hcv9jop1ns1r.cn 换床有什么讲究bjcbxg.com
什么样的歌声hcv9jop4ns0r.cn 奇脉见于什么病hcv8jop1ns0r.cn 化疗期间吃什么水果好hkuteam.com 县政府党组成员什么级别hcv9jop5ns2r.cn 王字旁和什么有关hcv7jop6ns7r.cn
正佳广场有什么好玩的hcv9jop0ns4r.cn 梦到开车是什么意思hcv8jop2ns6r.cn 女人的排卵期是什么时候hcv8jop2ns9r.cn 什么粉可以代替木薯粉hcv8jop6ns8r.cn 什么是电子烟hcv7jop9ns6r.cn
百度