新唐单片机与INA226实现高精度数字电压电流表
1. 项目背景与核心器件选型在电子测量领域电压电流表头是最基础也最常用的工具之一。传统指针式表头虽然直观但精度和功能扩展性有限。基于单片机的数字表头不仅读数精确还能实现数据记录、报警阈值设置等智能功能。这次我选择新唐单片机搭配INA226的方案主要看中其高性价比和易用性。1.1 为什么选择新唐单片机新唐科技Nuvoton的8051内核单片机在工控领域应用广泛特别是NuMicro系列。以常用的N76E003为例它具备以下优势内置16KB Flash和1KB SRAM足够处理测量数据12位ADC分辨率基准电压可选内部2.4V或外部输入支持硬件SPI接口与INA226通信更高效工作电压2.4V-5.5V适合电池供电场景价格通常在5元以内性价比极高相比STM32等ARM内核芯片新唐单片机开发环境更简单特别适合快速原型开发。我用的是Keil C51开发环境配合Nu-Link调试器烧录调试都很方便。1.2 INA226的关键特性INA226是TI推出的双向电流/功率监测芯片通过I2C接口输出数据。其核心参数测量范围±36V总线电压±3.2A电流可外接分流电阻扩展内置0.1Ω分流电阻最大耐受2W功耗16位ADC电压测量精度±0.1%可编程警报输出工作电压3-5.5V这个芯片最实用的特点是自带校准功能通过写入校准寄存器值0x0054即可自动计算电流值省去了软件校准的麻烦。实际测试在0-3A范围内线性度非常好。2. 硬件电路设计详解2.1 整体架构设计系统框图如下[被测电路] → [INA226] ←I2C→ [新唐单片机] → SPI→ [OLED] ↑(分流电阻) ↑ └───── 供电 ─────┘2.2 关键电路设计要点INA226外围电路电源引脚VCC接3.3VGND接地总线电压检测VBUS接被测电压正极VBUS-接负极分流电阻连接IN和IN-之间接被测电路电流路径I2C接口SCL/SDA接单片机对应引脚需加上拉电阻4.7kΩ特别注意当测量高压28V时需要在VBUS串联100kΩ电阻保护分流电阻功率要足够建议选用1206封装1%精度的合金电阻布局时INA226要尽量靠近测量点避免引线电阻引入误差2.3 单片机最小系统新唐N76E003的最小系统包含电源电路AMS1117-3.3稳压芯片输入5V输出3.3V复位电路10kΩ上拉电阻104电容晶振电路内置RC振荡器可外接12MHz晶振提高精度调试接口SWD四线接口SWDIO/SWCLK/RST/GND3. 软件实现关键代码解析3.1 INA226驱动开发首先定义器件地址和寄存器映射#define INA226_ADDR 0x40 // A0A1GND时的地址 typedef enum { INA226_REG_CONFIG 0x00, INA226_REG_SHUNT_VOLTAGE 0x01, INA226_REG_BUS_VOLTAGE 0x02, INA226_REG_CALIBRATION 0x05 } INA226_Registers;初始化配置函数void INA226_Init(void) { // 设置采样参数平均128次总线电压采样8.244ms I2C_WriteWord(INA226_ADDR, INA226_REG_CONFIG, 0x47FF); // 写入校准值0.1Ω分流电阻最大3.2A I2C_WriteWord(INA226_ADDR, INA226_REG_CALIBRATION, 0x0054); }数据读取函数示例float ReadBusVoltage(void) { uint16_t raw I2C_ReadWord(INA226_ADDR, INA226_REG_BUS_VOLTAGE); return raw * 1.25f; // 1.25mV/LSB }3.2 OLED显示驱动使用硬件SPI驱动OLED 12864屏幕void OLED_ShowMeasurement(float voltage, float current) { char buf[16]; OLED_Clear(); sprintf(buf, V: %.2f V, voltage); OLED_ShowString(0, 0, buf); sprintf(buf, I: %.3f A, current); OLED_ShowString(0, 2, buf); // 计算并显示功率 float power voltage * current; sprintf(buf, P: %.2f W, power); OLED_ShowString(0, 4, buf); }4. 校准与精度优化实践4.1 三点校准法为提高测量精度建议采用三点校准零点校准输入端短路读取偏移值满量程校准施加已知电流如1A标准源中间点验证检查线性度校准数据存储到单片机Flash中上电时自动加载。4.2 软件滤波算法实测中发现电源噪声会影响测量值采用滑动平均滤波#define FILTER_SIZE 8 float voltage_buffer[FILTER_SIZE]; uint8_t filter_index 0; float Filter_Voltage(float new_val) { voltage_buffer[filter_index] new_val; filter_index (filter_index 1) % FILTER_SIZE; float sum 0; for(int i0; iFILTER_SIZE; i) { sum voltage_buffer[i]; } return sum / FILTER_SIZE; }4.3 温度补偿INA226的精度会受温度影响可通过以下方式补偿测量芯片温度内置传感器根据温度-误差曲线进行修正公式V_corrected V_raw × (1 0.0005×(T-25))5. 常见问题与解决方案5.1 I2C通信失败排查现象单片机无法读取INA226数据 排查步骤检查电源电压3.3V要稳定测量SCL/SDA波形应有标准方波确认上拉电阻值4.7kΩ最佳检查地址配置A0/A1引脚电平5.2 测量值跳变问题可能原因及解决电源噪声 → 增加10μF电解电容分流电阻发热 → 改用更大封装电阻SPI与I2C干扰 → 分开布线降低时钟频率5.3 量程扩展技巧当需要测量更大电流时外接分流电阻如0.01Ω/5W修改校准寄存器值// 新分流电阻0.01Ω最大10A uint16_t cal 0.00512 / (0.01 * 0.00002); I2C_WriteWord(INA226_ADDR, INA226_REG_CALIBRATION, cal);6. 进阶功能扩展6.1 数据记录功能添加SD卡模块实现测量数据存储void SaveToSD(float v, float i) { FIL file; f_open(file, data.csv, FA_WRITE | FA_OPEN_ALWAYS); f_lseek(file, f_size(file)); char buf[64]; sprintf(buf, %.2f,%.3f\n, v, i); f_puts(buf, file); f_close(file); }6.2 蓝牙传输通过HC-05模块上传数据到手机配置蓝牙模块为从机模式单片机通过UART发送AT指令手机端用Serial Bluetooth Terminal等APP接收6.3 报警功能实现利用INA226的警报引脚// 设置电流超限报警3A I2C_WriteWord(INA226_ADDR, 0x06, 0x8000); // 警报使能 I2C_WriteWord(INA226_ADDR, 0x07, 3000); // 3A对应值 // 中断服务函数 void EXTI_IRQHandler(void) { if(EXTI_GetFlag(ALERT_PIN)) { Buzzer_On(); // 触发蜂鸣器 EXTI_ClearFlag(); } }这个项目最让我惊喜的是INA226的易用性相比传统的运放方案集成芯片大大降低了开发难度。实际测试在0-30V/0-3A范围内精度可以达到0.5%以内完全满足日常电子制作需求。如果要做产品化改进建议考虑添加隔离电路和外壳防护。

相关新闻

轴承故障诊断:OCSSA-VMD-CNN-BiLSTM智能优化方案

轴承故障诊断:OCSSA-VMD-CNN-BiLSTM智能优化方案

1. 项目概述:轴承故障诊断的智能优化方案轴承作为旋转机械的核心部件,其健康状态直接影响设备运行安全。传统诊断方法依赖专家经验和信号处理技术,存在效率低、误判率高的问题。本项目提出了一种融合鱼鹰优化算法(Osprey Optimization Algori…

2026/10/14 9:08:38 阅读更多 →
基于深度学习的肺炎X光片自动检测系统设计与实现

基于深度学习的肺炎X光片自动检测系统设计与实现

1. 项目背景与核心价值肺炎作为全球范围内的高发呼吸道疾病,早期准确诊断对临床治疗至关重要。传统X光片诊断依赖放射科医师经验,存在主观性强、效率低下等问题。我们团队开发的基于深度神经网络的肺炎检测系统,通过卷积神经网络(…

2026/10/14 9:50:13 阅读更多 →
2026年腰椎治疗仪选购指南与核心技术解析

2026年腰椎治疗仪选购指南与核心技术解析

1. 项目概述:久坐族的腰椎健康危机与解决方案作为一名长期伏案工作的文字工作者,我深刻理解久坐带来的腰椎问题。每天8小时以上的坐姿工作,加上不正确的坐姿习惯,让我的腰椎在去年发出了严重抗议 - 持续性的酸痛、僵硬感&#xff…

2026/10/3 4:41:10 阅读更多 →

最新新闻

Django+Flask智能营销系统:银行数字化转型实战

Django+Flask智能营销系统:银行数字化转型实战

1. 项目背景与核心价值在金融数字化转型浪潮中,银行业务营销正从传统人工经验驱动转向数据智能驱动。这个基于DjangoFlask的智能营销系统,正是利用爬虫技术获取多维金融数据,通过大数据分析生成客户画像,最终以可视化大屏呈现营销…

2026/10/14 10:10:46 阅读更多 →
从混乱到有序:打造本地优先的游戏库管理工具

从混乱到有序:打造本地优先的游戏库管理工具

最近我把游戏相关的一堆零散信息从脑子里和表格里拎了出来,整合成一个跑在局域网里的本地资料库小工具,代号 AnyPS5 。起因特别朴素:每次想开一个新游戏,我都得先花几分钟去回忆这台主机还剩多少空间、某张光盘到底通关没有、存…

2026/10/14 10:10:46 阅读更多 →
PHP服装购物系统开发实战:LAMP架构与电商解决方案

PHP服装购物系统开发实战:LAMP架构与电商解决方案

1. 项目概述:PHP木兮服装购物系统 这套基于PHP开发的服装购物系统,是我在电商领域摸爬滚打多年后沉淀下来的实战作品。系统采用经典的LAMP架构(LinuxApacheMySQLPHP),特别适合中小型服装商家快速搭建线上销售渠道。源码…

2026/10/14 10:10:46 阅读更多 →
CATIA零件设计必备:点线面创建方法详解与避坑指南

CATIA零件设计必备:点线面创建方法详解与避坑指南

简介:这套培训课件名为《点线面的创建》,是一份面向初学者的演示文稿教材。内容围绕零件设计工作台展开,重点讲解参考点、参考线和参考平面的构建方法。课件先介绍进入工作台的几种方式,然后系统演示点的生成:可通过坐…

2026/10/14 10:10:46 阅读更多 →
深入理解DiT:视频生成背后的统一架构

深入理解DiT:视频生成背后的统一架构

Sora刚发布那阵子,整个视频生成圈子几乎可以用"炸锅"来形容。大家看完官方放出的几个demo,第一反应是画质真高、时长真长、物理规律像模像样,第二反应才是琢磨:这玩意到底是怎么做的?OpenAI没发技术报告&…

2026/10/14 10:10:46 阅读更多 →
对话式地图助手落地实践:语言模型到地图动作的适配层设计

对话式地图助手落地实践:语言模型到地图动作的适配层设计

从聊天机器人一脚踩进地图场景的那段时间,我被一个问题折磨了很久:语言模型再能聊,跟地图引擎之间始终隔着一道墙。用户在对话框里说"帮我找滨河公园附近评分高的粤菜馆,然后规划一条地铁过去的路线",前端却…

2026/10/14 10:09:42 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →