伤寒是什么意思| 血小板减少有什么症状| 人为什么会做春梦| 吃大米配什么菜| 喝了蜂蜜水不能吃什么| 偏头痛什么原因引起| 牛油果坏了是什么样| 中国最大的海是什么海| 小叶紫檀五行属什么| 高质量发展是什么| 云南白药治什么| 两边太阳胀痛什么原因引起的| 沙眼衣原体是什么| 萎缩性胃炎是什么原因引起的| 梦见死人和棺材预示着什么| 酚氨咖敏片的别名叫什么| 乘务长是干什么的| 启字五行属什么| 小孩经常肚子疼是什么原因| cm医学上是什么意思| 蓦然回首什么意思| 大家闺秀是什么生肖| 信息是什么意思| 人参归脾丸适合什么人吃| 腋下黑是什么原因| 01年是什么年| 网盘是什么东西| 疱疹病毒是什么引起的| 痔疮坐浴用什么药效果好| ra什么意思| 冰枕对人有什么危害吗| 女方什么人不能送亲| 什么是节气| 墓库是什么意思| 睾丸炎有什么症状| 文旦是什么| 人民币用什么材料做的| 沉甸甸的爱是什么意思| 荨麻疹挂什么科| cg动画是什么意思| 什么是遗憾| 什么锅好| 心脏跳的快什么原因| 什么是水印照片| 减肥平台期什么意思| 鹿晗什么星座| 夏天做什么菜| 彼此彼此是什么意思| 外出是什么意思| 什么虎不吃人| 租赁费计入什么科目| 嘴咸是什么原因| 肝病不能吃什么| 不甚是什么意思| 胃息肉是什么原因造成的| 手指长水泡很痒是什么原因| 阴道口溃疡用什么药| 开车不能穿什么鞋| pr医学上什么意思| 4月1日是什么星座| 晚上剪指甲有什么说法| 星期一左眼皮跳是什么预兆| 草鱼又叫什么鱼| comeon什么意思| 上传下达是什么意思| 什么林什么染| 老是腹泻是什么原因导致的| 婴儿大便绿色是什么原因| 屁股抽筋疼是什么原因| 肚兜是什么| 什么是音序| 孩子老是流鼻血是什么原因| 头孢有什么用| 德国为什么发动二战| 孕妇吃什么牌子奶粉| 1971年是什么年| 西游记主题曲叫什么| 血压偏高喝什么茶| 官员出狱后靠什么生活| 孩子流黄鼻涕吃什么药效果好| 为什么会梦到蛇| 扁桃体发炎吃什么药好得快| 拔完牙可以吃什么| 是什么原因导致肥胖| 车水马龙的意思是什么| 尿有泡沫是什么原因| 宫颈粘膜慢性炎是什么意思| 产妇适合吃什么水果| 做梦捡到钱了什么预兆| 英雄难过美人关是什么生肖| hpv52型阳性是什么意思严重吗| 向日葵是什么意思| 乖戾是什么意思| 花枝招展什么意思| 小产后可以吃什么水果| 送荷花的寓意是什么| 月经不调吃什么药| 手脚发热吃什么药| 间质性改变是什么意思| 杞人忧天是什么故事| 锻练与锻炼有什么区别| 梦见一个人说明什么| 长脸适合什么耳环| 热惊厥病发是什么症状| 刘备代表什么生肖| 手掌心发热是什么原因| 想做肠镜挂什么科| 小孩铅过高有什么症状| 表面抗体阳性什么意思| 净化心灵是什么意思| 膝盖骨质增生用什么药效果好| 做些什么| 吃什么水果退烧| 天下无不是的父母是什么意思| 晋是什么意思| 心率低于60说明什么| 卵巢多囊症是什么原因造成| bb霜和粉底液有什么区别| 蜂蜜为什么会结晶| 补铁吃什么| 曙光是什么意思| 屁股疼痛是什么原因引起的| 绿巨人是什么意思| ky什么意思| 鼠妇是什么动物| 水滴鱼长什么样子| 法王是什么意思| 12320是什么电话| 什么是多囊卵巢综合症| 吃什么都吐是什么原因| 手麻木吃什么药好| 什么是血管瘤| 气短吃什么药立马见效| 血糖低吃什么补得最快| 茧子是什么意思| nk细胞是什么| 什么是放疗治疗| 范字五行属什么| 阴道是什么样的| amy是什么意思| 一 什么云| 水怡是什么| 又热又冷是什么原因| 6月6日是什么日子| 股癣用什么药膏效果最好| 真菌孢子阳性什么意思| 乳腺癌多发于什么年龄| 什么是情趣| 倒数是什么| 高中生吃什么提高记忆力| 洗牙喷砂是什么意思| 粉色裤子搭什么上衣| 孕妇什么情况下打肝素| 女是念什么| 什么时候种大白菜| 莫西沙星片主治什么病| 变态是什么意思| 肚子里有积水是什么病| 红萝卜不能和什么一起吃| 子宫内膜薄有什么影响| 什么是梦| 辰五行属性是什么| 什么是避孕套| 什么叫唐卡| 脱口秀是什么意思| 奶油色是什么颜色| 01年是什么年| 我低头向山沟是什么歌| 回头是什么意思| 什么充电宝可以带上飞机| 处心积虑是什么意思| 医院属于什么行业| 耳前瘘管有什么危害| 自食其力是什么意思| 腹腔肠系膜淋巴结是什么病| 孕妇刚生完孩子吃什么好| 美国为什么叫鹰酱| 419什么意思| 痤疮是什么样子的| 吃什么能生精和提高精子质量| 鼻窦炎用什么药好| 脑死亡是什么意思| 肺部气肿吃什么药能治好| 黄体期什么意思| 米索前列醇片是什么药| 复杂性囊肿是什么意思| 21三体综合征是指什么| 每天拉肚子是什么原因引起的| 流光是什么意思| 白果有什么功效与作用| 什么食物含叶酸| 10月24号什么星座| 神经炎是什么症状| r车标是什么牌子| 臭宝是什么意思| 牙龈炎吃什么消炎药| kps是什么意思| 处女膜是什么颜色| 出什么什么什么| 手足口病用什么药最好| 孕妇吃什么胎儿智商高| 角鲨烯有什么作用| 为什么叫新四军| 墨镜什么牌子好| 12月10号什么星座| 皮肤过敏用什么药最好| 泥鳅不能和什么一起吃| 验精挂什么科室| 以梦为马是什么意思| 幽门螺杆菌是什么病| 姌是什么意思| 增强免疫力打什么针| 麦粒肿用什么药| 小马过河的故事告诉我们什么道理| 一月18号是什么星座| 关节间隙变窄什么意思| 小孩突然抽搐失去意识是什么原因| 伪骨科什么意思| 猫的胡须是干什么用的| love是什么词性| 吃哈密瓜有什么好处| 69年属什么生肖| 龙冲什么生肖| 荷叶有什么功效| 心焦是什么意思| 夏天受凉感冒吃什么药| 鬼火是什么| 山梨酸钾是什么添加剂| 胸膜炎吃什么消炎药| 太妃糖为什么叫太妃糖| 吃什么不上火| p是什么意思啊| 喝什么茶对睡眠有帮助| 拉条子是什么意思| 手上为什么长湿疹| 静谧是什么意思| 四维是检查什么| 梦见黑棺材是什么征兆| 什么是华盖| 胸围98是什么罩杯| 堂客是什么意思| 口臭睡觉流口水什么原因| 厦门房价为什么那么高| 幻觉幻听是什么症状| 腿弯处的筋痛是什么原因| 人最怕什么| 菡字五行属什么| 太原为什么叫龙城| 什么泡水喝可以降血糖| 下次闰六月是什么时候| 陛下的陛是什么意思| 什么药| 玻璃用什么材料做的| 灵芝孢子粉是什么| diy什么意思| 男女授受不亲是什么意思| delvaux是什么牌子| 喝断片了是什么意思| 月经不调挂什么科室| 521是什么意思| 气血两虚吃什么中成药| 孕妇吸二手烟对胎儿有什么影响| 胃病忌什么| 木槿花的花语是什么| 百度
这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 ? 论坛首页 ? DIY与开源设计 ? 电子DIY ? 【功率监测与控制系统DIY活动过程贴】INA219功率信息检测与实时显示

共1条 1/1 1 跳转至

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

助工
2025-08-05 03:15:55     打赏
百度 其中,住宅施工面积430669万平方米,增长%。

【功率监测与控制系统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         

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]
金棕色是什么颜色 阳虚是什么意思 霸天虎和威震天是什么关系 大腿前侧是什么经络 mw是什么意思
粉瘤是什么东西 什么样的人容易中暑 备是什么意思 什么水果最老实 米线里的麻油是什么油
月非念什么 偏激是什么意思 谷维素是什么 手抓饼里面夹什么好吃 尖锐湿疣是什么病
小孩流鼻血什么原因 独角兽是什么意思 水过鸭背是什么意思 一般什么人容易得甲亢 加味逍遥丸和逍遥丸有什么区别
冰释前嫌是什么意思hcv7jop7ns4r.cn hk是什么意思zsyouku.com 什么叫通分hcv9jop6ns6r.cn 砧木是什么意思hcv7jop4ns8r.cn 大肠杆菌用什么药治疗效果好hcv8jop5ns2r.cn
钾高是什么原因造成的hcv9jop2ns8r.cn 私处变黑是什么原因hcv8jop2ns5r.cn 马提尼是什么酒hcv9jop0ns8r.cn 癫疯病早期有什么症状hcv8jop4ns9r.cn 奚字五行属什么hcv8jop4ns8r.cn
梅毒症状男有什么表现travellingsim.com 5D电影是什么效果gysmod.com 眼睛过敏用什么眼药水hcv9jop5ns2r.cn 兴渠是什么菜hcv7jop4ns8r.cn 鹰的天敌是什么动物hcv7jop5ns0r.cn
宫寒应该吃什么怎样调理hcv8jop4ns2r.cn 风寒感冒吃什么药hcv9jop5ns2r.cn 骗婚是什么意思bjhyzcsm.com 墨绿色是什么颜色hcv9jop5ns9r.cn 带翅膀的黑蚂蚁是什么hcv9jop2ns0r.cn
百度