鬼打墙是什么意思| 坚韧不拔是什么生肖| 冲菜是什么菜| 狸猫是什么猫| 什么是总胆固醇| 20度穿什么衣服合适| 霸道总裁是什么意思| 2001年出生属什么| 吃什么补维生素b12| 保质期是什么意思| 读书破万卷下一句是什么| 眼袋大是什么原因| 用黄瓜敷脸有什么功效| fu是什么| 心肌炎是什么病| 左侧卵巢多囊样改变什么意思| 什么是岩茶| qd医学上是什么意思| 奇异果是什么水果| 什么是名媛| 燕子吃什么食物| 高血压是什么引起的| 猪肉炖什么好吃| 鸡胸是什么| 宫颈疼是什么原因| 醋泡洋葱有什么功效| 什么是前列腺| 什么时候量血压最准确| 肺结节是什么引起的| 肌钙蛋白高是什么意思| 蟑螂中药名称叫什么| 头发热是什么原因| 睡美人最怕什么| 父亲生日送什么礼物| 降钙素原高是什么原因| 2001年属蛇的是什么命| 桃花像什么| 什么驴技穷成语| 阴性是什么意思| 可怜巴巴是什么意思| 浛是什么意思| dr是什么检查| 瑞字属于五行属什么| 两个人能玩什么游戏| 尿路感染有什么症状| 做阴超有黄体说明什么| 公务员是做什么工作的| 维生素d什么时候吃最好| 时来运转是什么生肖| 贾宝玉和林黛玉是什么关系| r级电影是什么意思| 风疹吃什么药好得快| 内疚是什么意思| 神农架为什么是禁区| 婴儿流鼻涕吃什么药| 什么球不能踢| 什么是染色体| 飚是什么意思| 大陆对什么| 鸾凤是什么意思| 鬓角长痘痘是什么原因| 衣带渐宽终不悔是什么意思| 与虎谋皮什么意思| 牛仔裤配什么上衣| 气血不足吃什么食物最好| 一什么水| 交感神经是什么| 镜花缘是什么意思| 师长相当于地方什么级别| 什么水果是钙中之王| 钱学森发明了什么| 摩罗丹主要治什么胃病| 海狗是什么动物| 木属于五行属什么| 失眠去药店买什么药| 正规医院减肥挂什么科| 西安有什么特色美食| 月子期间可以吃什么水果| 造势是什么意思| 鹅喜欢吃什么草| 浑水摸鱼是什么意思| 变化无穷是什么生肖| 什么得当| 衣衫褴褛是什么意思| 尿结石是什么症状| 电表走的快是什么原因| 钥匙像什么| 梦见梅花鹿是什么预兆| 眼睛发炎吃什么消炎药| 1218是什么星座| 见龙在田什么意思| 白细胞阳性什么意思| 势均力敌是什么意思| 芒果跟什么不能一起吃| 痰湿体质吃什么食物好| 丙二醇是什么| 腿上无缘无故出现淤青是什么原因| 千锤百炼什么意思| 脑膜炎是什么| 平面模特是做什么的| 山竹有什么功效| lhrh是什么激素| 吃什么药可以推迟月经| 身份证是什么字体| 县常委什么级别| 什么叫屌丝| 拜观音菩萨有什么讲究| 酉时左眼跳是什么预兆| 人生的意义是什么| 刺史是什么官职| 胃疼吐酸水是什么原因| 为什么支气管炎咳嗽长期不好| 风热感冒 吃什么| 水泻拉肚子是什么原因| 李小龙是什么生肖| 肠镜检查前需要做什么准备工作| 电解质饮料有什么作用| 手抖头抖是什么病| 黑洞里面是什么| 为什么夏天越来越热| 孕妇d2聚体高是什么原因| 虚伪是什么意思| 红楼梦为什么叫石头记| 大学生当兵有什么好处| 胎儿肾积水是什么原因引起的| 鲷鱼是什么鱼| 水瓶女喜欢什么样的男生| 腿水肿是什么原因引起的| 五行什么生火| 青少年流鼻血是什么原因引起的| 鸡蛋不能和什么一起吃| pv是什么| 净土是什么意思| 牛鞭是什么部位| 牛奶洗脸有什么好处| 相形见拙什么意思| 乾隆的名字叫什么| 肺炎吃什么药最有效| 微信加入黑名单和删除有什么区别| 小孩吃什么补脑更聪明| 时点是什么意思| 烹饪是什么意思| 庆帝为什么杀叶轻眉| 贵人是什么意思| 女人的逼什么样| gucci是什么意思| 成吉思汗姓什么| 五行缺什么查询免费| 鸡茸是什么东西| 什么品牌的帽子好| 梦见耗子是什么预兆| 喵喵喵是什么意思| 胃泌素偏低是什么原因| 吃什么去湿气最快最有效| 六月十三是什么日子| 痛风在医院挂什么科| 营销号是什么| 尿发黄是什么原因男性| 股癣是什么原因引起的| 番茄和蕃茄有什么区别| 糖尿病可以吃什么水果| 牙痛吃什么药效果最好| 手上蜕皮是什么原因| 医保报销是什么意思| 讣告是什么意思| 高反是什么意思| 伊丽莎白雅顿什么档次| 樱桃红是什么颜色| 什么是寓言| 什么叫精神出轨| 大便发黑是什么情况| 太五行属什么| 画地为牢什么意思| 阁字五行属什么| 盐酸二甲双胍缓释片什么时候吃| 毛片是什么意思| 中科院是干什么的| 术后恢复吃什么好| 牙痛吃什么| 脂肪肝是什么引起的| gi值是什么意思| maxrieny是什么品牌| 孕妇多吃什么水果比较好| 珝是什么意思| 子宫内膜厚是什么原因引起的| 腹腔积液是什么原因| 尿素氮肌酐比值偏高是什么原因| 冬枣什么时候上市| 物以类聚什么意思| 什么的水井| 猪油蒙了心是什么意思| 什么鱼是深海鱼| 草莓是什么季节的水果| 爱字五行属什么| 昔人是什么意思| 巽代表什么| 心肌缺血有什么症状和表现| 胃肠化是什么意思| 怀孕第一个月最怕什么| 海参和辽参有什么区别| 2018年属什么生肖| 月元念什么| 活死人是什么意思| 摩羯座的幸运花是什么| 妹妹是什么意思| 炎黄子孙是什么生肖| 女生月经迟迟不来是什么原因| 醋酸视黄酯是什么| 感染性疾病科看什么病| 中暑什么症状表现| 吃榴莲不能和什么一起吃| 小金蛙吃什么| 8月17号是什么日子| 肾结石吃什么食物好| 脸部痒是什么原因| 什么牌子的蛋白质粉比较好| 4ever是什么意思| 打嗝是什么病| 副乡长是什么级别| 讲师是什么级别| 3月20是什么星座| 安利是什么意思| mfd是什么意思| 七匹狼男装是什么档次| 数不胜数的胜是什么意思| 这是什么情况| 人人有的是什么生肖| 肚子左边是什么部位| 脚发痒是什么原因| 双侧瞳孔缩小见于什么| 甲亢病是一种什么病| 梦见老人死了又活了是什么意思| 杏仁是什么树的果实| 鼻梁长痘是什么原因| 怀孕一个月什么症状| 松鼠吃什么| 大队长是什么级别| 神父和修女是什么关系| 口什么舌什么| 贫血吃什么药补血最快| 鱼吐泡泡是什么原因| sca是什么意思| 内分泌紊乱是什么症状| 肾阴虚有什么症状表现| 舌炎吃什么药最好| 什么是肿瘤| 女仆是什么意思| 谷氨酰基转移酶高是什么原因| 腱鞘囊肿是什么原因| 例假推迟是什么原因| 亚甲减是什么意思| 叶公好龙的好是什么意思| 手机壳什么材质最好| p医学代表什么意思| 大姨妈能吃什么水果| 打乒乓球有什么好处| 灰色地带是什么意思| o和b型生的孩子是什么血型| 脊柱侧弯是什么原因引起的| 禁的拼音是什么| 乡和镇的区别是什么| 头皮痛什么原因引起的| 弈字五行属什么| 生产周期是什么意思| 百度
这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 ? 论坛首页 ? DIY与开源设计 ? 电子DIY ? 【功率监测与控制系统DIY活动成果贴】DIY功率计与LabVIEW数据采集

共4条 1/1 1 跳转至

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

助工
2025-08-03 03:06:44   被打赏 100 分(兑奖)     打赏
百度   现在沃尔沃是Uber的自动驾驶测试合作伙伴,后者的自动驾驶软件已经整合进XC90SUV在路上测试了。

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

回复

匿名不能发帖!请先 [ 登陆 注册 ]
吃什么能安神助睡眠 梦见自己死了又活了是什么意思 洛阳有什么大学 血脂高什么东西不能吃 一只耳朵响是什么原因
眼睛发红是什么原因 什么叫囊肿 ercp是什么 黑户是什么意思 金命适合什么颜色
syphilis是什么意思 心脏造影是什么 规格什么意思 肝火大吃什么药 腰酸胀是什么原因
silence是什么意思 凉血是什么意思 欢子真名叫什么 男人吃四环素治什么病 阴道炎是什么原因引起的
ict是什么意思hlguo.com 建档立卡是什么520myf.com 沈阳六院主要治什么病hcv9jop1ns0r.cn 淋巴结稍大是什么意思wuhaiwuya.com 贬低是什么意思onlinewuye.com
经信委是干什么的hcv8jop4ns2r.cn fps是什么意思hcv7jop4ns8r.cn 88年五行属什么hcv8jop2ns4r.cn 抹布什么意思hcv9jop0ns3r.cn 什么叫眼睛散光hcv9jop3ns5r.cn
独角戏什么意思hcv9jop3ns6r.cn 喝酒为什么会脸红hcv8jop3ns1r.cn 冲锋衣三合一是什么意思hcv7jop9ns5r.cn 未免是什么意思hcv9jop8ns1r.cn 胃疼喝什么可以缓解hcv8jop9ns2r.cn
精忠报国是什么生肖hcv9jop6ns0r.cn 扁桃体发炎吃什么水果hcv8jop5ns9r.cn 虫字旁与什么有关gysmod.com 夫妻备孕检查挂什么科hcv7jop7ns3r.cn 很会放屁是什么原因hcv8jop4ns5r.cn
百度