低血钾吃什么| 癔症是什么意思| 草字头加全念什么| 章子怡是什么脸型| 公检法是什么| 梦见父亲死了是什么意思| 妞字五行属什么| 炮灰是什么意思| 手淫过度吃什么药调理| 金融bp是什么意思| 梦到被蛇咬是什么意思| 典狱长是什么意思| 肝阳虚吃什么中成药| 遐想的意思是什么| 为什么会得口腔溃疡| 几天不大便是什么原因| 冻感冒吃什么药| 什么是高嘌呤食物| 滴虫性阴炎用什么药效果最好| dm代表什么| 心房扑动是什么意思| 牙齿突然酸痛什么原因| 男的纹般若有什么寓意| 月经为什么叫大姨妈| 什么食物含维生素c最多| 睡眠不好用什么泡脚助于睡眠| 女生排卵期在什么时候| 狗狗不能吃什么水果| 朱元璋代表什么生肖| 炒菜用什么油比较好| 耳道炎用什么药最有效| 梵高属于什么画派| 肺阴虚吃什么中成药| 为什么半夜流鼻血| 十三幺是什么意思| 杰士邦是什么| 低回声结节什么意思| 烤鱼什么鱼好吃| 糖尿病人吃什么主食| qcy是什么牌子| 南枝是什么意思| 血小板高是什么原因| ibd是什么意思| 为什么容易出汗| 8月8号什么星座| 茄子和什么不能一起吃| 新疆有什么民族| 苦口婆心是什么生肖| 昀字五行属什么| 白粥配什么菜好吃| 什么是生化流产| 梦见老公出轨预示什么| 美人是什么生肖| 骨头是什么垃圾| 什么东西人们都不喜欢吃| 六月五号是什么星座| 经期喝茶有什么影响| prp治疗是什么意思| 口苦口臭吃什么药效果最佳| 碱什么意思| 吃什么药去体内湿气| 扁桃体结石是什么原因引起的| 双鱼座是什么性格| 总胆红素升高是什么原因| 大象的耳朵有什么作用| 缺血灶是什么病| 葡萄代表什么生肖| 点读笔什么牌子好| 病人说胡话是什么征兆| 财政部部长什么级别| 不言而喻的喻是什么意思| 柔软的什么| 嘴巴苦是什么原因引起的| 肚子疼用什么药好| 时光静好是什么意思| 梦见给别人理发是什么意思| 眼压高滴什么眼药水| 白玉菩提是什么材质| 慈禧为什么要毒死光绪| 尿潴留吃什么药| 2018年属什么| 胃疼喝什么能缓解疼痛| 当枪使什么意思| 银河系是什么| 王八和乌龟有什么区别| 女人排卵期有什么反应| 茂密的枝叶像什么| 什么是滑精| 未土是什么土| 退役和退伍有什么区别| a型血和b型血生的孩子是什么血型| 肺部挂什么科| 接吻要注意什么| 3.17是什么星座| 局级干部是什么级别| 什么原因引起耳鸣| 开颌是什么意思| 三个土是什么字| 什么可以解酒最快方法| 白头翁代表什么生肖| 什么情况下要做肌电图| 查血脂挂什么科| 炒米是什么米做的| 翅膀车标是什么车| 上飞机不能带什么| 骨挫伤是什么意思| 6.19什么星座| 弓山文念什么| 伟字五行属什么| 案底是什么意思| 花斑癣用什么药膏好| 机化是什么意思| 海棠花的花语是什么| 天外飞仙是什么意思| 户籍地址填什么| 眼睛肿是什么原因| 绿壳鸡蛋是什么鸡生的| funfair是什么意思| 肚脐眼大代表什么| 肠胃不好吃什么食物好| 拉屎发黑是什么原因| 走路不稳是什么原因| 刮目相看是什么意思| 女命劫财代表什么| 水是什么意思| 孩子发烧手脚冰凉是什么原因| 竹节麻是什么面料| 过堂是什么意思| 萎缩性胃炎不能吃什么食物| 嗜睡是什么意思| 阳虚吃什么调理| 下关沱茶属于什么茶| 天河水是什么意思| 19年是什么年| 完美收官什么意思| 茄子什么人不能吃| 军长相当于地方什么官| 左传是一部什么体史书| 避重就轻什么意思| 什么叫三本| 跖疣是什么原因造成的| 医保乙类是什么意思| 今天什么冲什么| 鼻梁长痘是什么原因| 花絮是什么意思| 胃不舒服吃什么水果| 木指什么生肖| 地藏经适合什么人念| 九三年属什么生肖| 刘备是一个什么样的人| wrangler是什么牌子| 嗝什么意思| 早搏有什么症状| 更年期出虚汗吃什么药| 牙龈疼是什么原因| 四个火是什么字| 为什么睡不着| 遗忘的遗是什么意思| 孕妇为什么会便秘| 备孕前吃什么调理身体| 阴道痒用什么药好| 灰指甲是什么原因| 螃蟹不能跟什么一起吃| 闲云野鹤是什么意思| 卯戌相合发生什么| 不疼不痒的红疹是什么| 圣诞节的礼物什么时候送| haze是什么意思| 箔是什么意思| 全身皮肤瘙痒是什么原因| 此地无银三百两是什么意思| 高血糖吃什么水果最好| vivi是什么意思| 气血不足什么症状| 后背疼是什么原因| 电荷是什么意思| 定坤丹什么时候吃最好| dex是什么药| 61年属什么生肖| 司令员是什么军衔| b族维生素是什么意思| 肌层回声均匀是什么意思| 人肉搜索是什么| 太阳穴长痘痘什么原因| CA是什么激素| 脚踝肿是什么原因引起的| 小孩吃什么能长高| 工程院院士是什么级别| 睡觉磨牙齿是什么原因| o型血可以接受什么血型| 知了猴什么时候出土| 250为什么是骂人的话| 国五行属什么| 五阴是什么| se是什么意思| 赵丽颖原名叫什么| 伪娘是什么| 六十六大寿有什么讲究| fe是什么元素| 2.10是什么星座| 同床出血什么原因呢| 吃什么全面补充维生素| 风流倜傥是什么意思| 直爽是什么意思| 燕子每年从什么方飞往什么方过冬| 空唠唠的意思是什么| 布施什么意思| 草字头加全念什么| 肝回声改变是什么意思| 婴儿蓝是什么颜色| 打马赛克是什么意思| 减肥早上吃什么| 2021年是什么生肖| 和尚命是什么意思| 生粉和淀粉有什么区别| 人生只剩归途什么意思| 后背发痒是什么原因| 流弹是什么意思| 擦伤用什么药好得快| 2月8日什么星座| 弥勒佛为什么是未来佛| 腮腺炎吃什么食物| 春天像什么的比喻句| 梦见桥塌了有什么预兆| 7月26日是什么日子| 时点是什么意思| 便秘吃什么好| 口头禅什么意思| 5月26是什么星座| 轮回什么意思| 圣是什么生肖| 猪肚子和什么煲汤最好| 罚的部首是什么| 过敏性结膜炎用什么药| 皮是什么意思| 眼睛里有红血丝是什么原因| bff是什么意思| 心跳加快是什么病| 抗ccp抗体高说明什么| 什么克土| 鸡汤是什么意思| 什么茶不影响睡眠| 甲亢属于什么科室| 感冒咳嗽吃什么食物好| dfi是什么意思| 氢键是什么| 宝宝体检挂什么科| 五体投地是什么意思| 佃农是什么意思| 女生的名字叫什么好听| 皮下男是什么意思| 溃疡用什么药| 密度是什么意思| 汇字五行属什么| 肝郁脾虚是什么意思| 10月1日是什么日子| 低密度脂蛋白偏低是什么意思| ts和cd有什么区别| 大圈是什么意思| 阴道出血用什么药| 临兵斗者皆阵列在前什么意思| 女的肾虚是什么症状| charleskeith什么牌子| 贫血缺什么| 百度
这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 ? 论坛首页 ? DIY与开源设计 ? 电子DIY ? 【功率监测与控制系统DIY活动成果贴】DIY功率计与LabVIEW数据采集

共4条 1/1 1 跳转至

【功率监测与控制系统DIY活动成果贴】DIY功率计与LabVIEW数据采集

助工
2025-08-03 03:06:44   被打赏 100 分(兑奖)     打赏
百度 一是要在同以习近平同志为核心的党中央保持高度一致上勇当尖兵。

【功率监测与控制系统DIY活动成果贴】DIY功率计与LabVIEW数据采集

本文介绍并展示了功率监测与控制系统DIY活动的 成果 ,即通过 NUCLEO-F411RE 开发板结合 INA219 传感器采集功率器件运行时的电压、电流、功率数据,并通过 OLED 显示采集的数据,进一步通过串口中断查询的方式,使用 LabVIEW 上位机,实现功率信息的采集、监测、曲线分析与保存。

项目介绍

开箱贴和过程贴汇总:

1.【功率监测与控制系统DIY活动开箱贴】开箱、介绍、环境搭建-电子产品世界论坛

2.【功率监测与控制系统DIY活动过程贴】LED的定时器中断控制LED闪烁-电子产品世界论坛

3.【功率监测与控制系统DIY活动过程贴】OLED显示-电子产品世界论坛

4.【功率监测与控制系统DIY活动过程贴】INA219功率信息检测与实时显示-电子产品世界论坛

5.【功率监测与控制系统DIY活动过程贴】功率计与LabVIEW数据采集-电子产品世界论坛


一、在前面帖子中介绍的开发流程的基础上,汇总、分析和整理成果内容;

二、从系统框图、电路原理、使用步骤、代码流程图、软件调试、关键代码解析等方面具体展开描述;

三、进一步展示DIY项目的效果、多角度展现该 DIY 设计的功能实现;

四、分析该项目可能存在的问题,并给出优化和解决方案。


系统框图

系统主控为 NUCLEO-F411RE 开发板,INA219 传感器通过 IIC 协议与主控进行通信,将采集的信息传输至主控开发板;

INA219 传感器模块的采集端与电机和供电电源相连,获取功率器件运行时的功率信息;

OLED 显示屏通过 IIC 协议与主控相连,用以实时显示采集到的功率信息;

LabVIEW上位机通过 UART 协议与主控板进行串口通信,实现串口发送指令、功率数据的串口中断接收,并显示功率演化曲线、数据采集保存和分析。

system_block.jpg

电路原理图

电路原理图包括开发板、OLED、INA219模块、直流电机、供电电源的连接方式。

oled_motor_ina219_power_uart.jpg


PB9 ---- SDA (INA219)

PB10 ---- SCL (INA219)

PB7 ---- SDA (OLED)

PB6 ---- SCL (OLED)

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

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

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

实物连接

uart_ina219_empty.jpg

使用步骤

    将电路系统按照原理图连接完成,工程编译和固件上传至开发板,主控程序自动运行;

    打开 LabVIEW上位机,配置目标串口对应的端口号、波特率,运行该程序;

    点击 Start 开始采集数据,并显示功率曲线;OLED 显示实时功率信息;

    待功率监测结束,点击 Stop 停止采集,此时采集数据以 dat 格式自动保存至目标路径;

    点击 Terminate 终止 LabVIEW 程序。


程序流程图

flowchart_labview.jpg


软件调试


本项目工程使用 STM32CubeMX 创建基本框架,完成系统时钟配置、硬件 IIC 和串口通信配置,

labview_ina219_uart.jpg

逻辑代码修改及工程编译、工程调试、固件上传均使用 STM32CubeIDE 软件。

stm32cubeide_run.jpg

关键代码

这里展示了 main.c 关键代码

#include "main.h"
#include "i2c.h"
#include "usart.h"
#include "gpio.h"
#include "ina219.h"
#include "stdio.h"
#include "oled.h"
#include "string.h"

#define CMD_LENGTH 3
uint8_t uart_rx_buffer[CMD_LENGTH];  // 接收指令缓冲区
uint8_t uart_rx_index = 0;          // 接收索引
uint8_t command_received = 0;       // 指令接收完成标志

// printf 重定向
#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);
void process_command(void);

// 串口接收回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    if(huart->Instance == USART2) {
        uart_rx_index++;
        if(uart_rx_index >= CMD_LENGTH) {
            uart_rx_index = 0;
            command_received = 1;  // 设置指令接收完成标志
        }
        // 重新启动接收
        HAL_UART_Receive_IT(&huart2, &uart_rx_buffer[uart_rx_index], 1);
    }
}
// 处理接收到的指令
void process_command(void)
{
    // 检查指令前缀是否为0x55 0xAA
    if(uart_rx_buffer[0] == 0x55 && uart_rx_buffer[1] == 0xAA)
    {
        switch(uart_rx_buffer[2])
        {
            case 0x10:  // 读取电压
            {
                float busVoltage = INA219_GetBusVoltage_V();
                printf("%.2f\r\n",busVoltage);
                break;
            }

            case 0x11:  // 读取电流
            {
                float current = INA219_GetCurrent_mA();
                printf("%.2f\r\n",current);
                break;
            }

            case 0xFF:  // 读取功率
            {
                float power = INA219_GetPower_mW();
                printf("%.2f\r\n",power);
                break;
            }

            default:
                // 无效指令,可以发送错误码
                uint8_t error_code = 0xEE;
                HAL_UART_Transmit_IT(&huart2, &error_code, 1);
                break;
        }
    }
    command_received = 0;  // 清除标志
}

void data_display()
{
     float busVoltage = INA219_GetBusVoltage_V();
  float current = INA219_GetCurrent_mA();
  float power = INA219_GetPower_mW();
  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);
}

int main(void)
{
  HAL_Init();
  /* USER CODE BEGIN Init */
  INA219_Init(&hi2c2);
  SystemClock_Config();
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_I2C1_Init();
  MX_I2C2_Init();
  MX_USART2_UART_Init();
  // 启动串口接收中断
  HAL_UART_Receive_IT(&huart2, &uart_rx_buffer[0], 1);
  // OLED display frame
      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);

  while (1)
  {
   if(command_received)
   {
    process_command();
    data_display();
   }
   HAL_Delay(1);
  }
}


效果演示

包括 OLED 实时显示、串口打印功率信息,以及 LabVIEW 上位机实现数据采集的效果展示。

OLED显示

OLED 显示实时电压、电流和功率信息

motor_running_oled_display

motor_running_oled_display.gif

串口打印

串口打印电压、电流和功率信息

motor_steady_running_oled_display.gif

LabVIEW 数据采集

演示了开启电机瞬间的电压、电流以及功率的变化情况。

INA219_power_labview_uart.gif

分析

可以看出,直接采集 INA219 传感器获取的数据存在较大的抖动,可采取 滤波算法 (软件滤波、低通滤波、滑动平均等)进行参数优化,使输出功率更为稳定、更符合实际情况。


总结

本文介绍并展示了功率监测与控制系统DIY活动的 成果 ,即通过 NUCLEO-F411RE 开发板结合 INA219 传感器采集功率器件运行时的电压、电流、功率数据,并通过 OLED 显示采集的数据,进一步通过串口中断查询的方式,使用 LabVIEW 上位机,实现功率信息的采集、监测、曲线分析与保存,为相关产品及项目的开发设计提供了参考。

再次感谢 DigiKey 和 EEPW 共同举办的 Let's Do 活动,参加本次活动让我学习到更多电子设计和嵌入式开发的实际项目内容,提升了自身的知识广度和深度,对今后的学习和研究大有裨益,感谢活动的组织者,感谢活动讲师和各位志同道合的同学的积极讨论,期待在今后的活动中继续交流、共同进步。





关键词: 功率     成果     LabVIEW     数据采集     INA219    

工程师
2025-08-03 13:51:14     打赏
2楼

大佬的文章写得真心不错。

建议采用状态机来增增强实时性。或者把显示与采集分离。


专家
2025-08-03 13:57:51     打赏
3楼

写的真好啊


院士
2025-08-03 23:59:38     打赏
4楼

真棒 真棒



共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]
为什么眨眼睛 复检是什么意思 吃蒲公英有什么好处 韩国烧酒什么味道 病入膏肓什么意思
拉肚子发热是什么情况 性生活过后出血是什么原因 米加白念什么 有品味什么意思 翡翠是什么意思
2025年是什么命 验大便能查出什么 喝酒对胃有什么伤害 伤口溃烂不愈合用什么药 套牌是什么意思
什么是水印 全身检查挂什么科 礼金是什么意思 什么原因引起耳石症 菖蒲是什么
一九九七年属什么生肖hcv8jop4ns7r.cn 强直性脊柱炎是什么hcv9jop4ns2r.cn 跖疣是什么原因引起的hcv9jop1ns4r.cn 五脏六腑指什么hcv9jop2ns5r.cn 祛斑喝什么花茶最有效hcv8jop6ns4r.cn
梦见死人笑什么预兆hcv9jop2ns4r.cn 皮肤爱出油是什么原因xianpinbao.com 猫的眼睛晚上为什么会发光inbungee.com 乳糖不耐受不能吃什么hcv8jop2ns2r.cn 减肥吃什么主食hcv8jop0ns4r.cn
米田共是什么意思hcv8jop1ns0r.cn 情投意合是什么意思hcv8jop0ns0r.cn 入睡困难是什么原因引起的hcv8jop2ns2r.cn jeans什么意思hcv8jop4ns0r.cn 什么叫甲状腺弥漫病变hcv8jop1ns3r.cn
本科什么意思hcv9jop0ns7r.cn 胰腺在人体起什么作用hcv9jop5ns4r.cn 急性肠胃炎应该吃什么药hcv9jop1ns2r.cn 阴宅是什么意思hcv9jop0ns4r.cn 79年属什么生肖hcv8jop1ns4r.cn
百度