
立创 CW32-电压电流表训练营基于CW32F030的ADC采样与数码管显示实战解析最近有不少朋友在问想自己动手做一个数字电压电流表既能学习嵌入式开发又能得到一个实用的桌面小工具。正好立创的CW32-电压电流表训练营项目就是一个绝佳的起点。这个项目以国产的CW32F030微控制器为核心带你从硬件选型、电路设计一路走到软件编程完整地实现一个能测量电压电流并显示出来的设备。今天我就以一位过来人的身份结合这个项目的硬件设计部分给大家掰开揉碎了讲讲如何从零开始搭建一个电压电流表。我会重点解析ADC采样电路和数码管驱动的设计思路这些都是嵌入式测量类项目的核心。无论你是电子爱好者还是刚入门的学生跟着这篇文章的思路走一遍你不仅能做出这个表更能理解背后的“为什么”。1. 项目核心硬件电路设计解析一个电压电流表说白了就是把外部的模拟信号电压、电流转换成数字信号再显示出来。这个过程的核心硬件就是微控制器MCU、ADC模数转换器和显示单元。我们先来看看这个项目的整体硬件框架是怎么搭建的。1.1 供电与主控为系统打下坚实基础任何电子系统供电是第一位的。这个项目面向工业场景输入电压可能高达24V甚至36V所以电源部分选用了SE8550K2这款LDO低压差线性稳压器。它最高能承受40V的输入电压输出稳定的3.3V或5V给后续电路使用。注意这里为什么用LDO而不用效率更高的DCDC降压芯片主要是为了避免开关电源带来的纹波干扰。ADC采样对电源噪声非常敏感一点小小的纹波都可能影响测量精度。LDO虽然效率低一些但输出干净对于测量仪表这类对精度要求高的设备稳定性优先。接下来是大脑——微控制器。项目选用的是立创·地文星CW32F030C8Tx开发板作为核心。选型不是拍脑袋决定的尤其是做测量设备MCU的某些特性至关重要。这里拿大家熟悉的STM32F103C8T6做个对比就能看出CW32F030的优势宽工作电压1.65V~5.5V。这意味着你的系统电源设计可以更灵活不像某些芯片必须卡在3.3V。超强抗干扰HBM ESD达到8KVSTM32通常为2KV。在复杂的工业环境或你手摸来摸去调试时芯片更不容易被静电打坏系统更可靠。强大的ADC这是本项目的重中之重。CW32的12位ADC性能优异并且支持多种内部参考电压源Vref比如1.5V、2.0V、2.5V等。而STM32F103的ADC参考电压通常只能等于电源电压VDD。可选的Vref给了我们更大的设计自由度后面设计分压电阻时会体会到。1.2 电压采样电路如何安全又精确地测量高压直接测量30V的电压不行MCU的ADC引脚承受不了这么高的电压。我们需要通过电阻分压把高压“压缩”到ADC能测量的安全范围比如0-1.5V内。项目设计的测量量程是0-30VADC参考电压Vref选为1.5V。分压电路由两个电阻串联组成一个高侧电阻R_high和一个低侧电阻R_low。ADC测量的是低侧电阻上的电压。分压电阻计算步骤手把手教学确定分压比ADC能测量的最大电压就是Vref1.5V对应外部输入的最大电压30V。所以分压比 Vref / Vin_max 1.5V / 30V 0.05。选择低侧电阻通常根据经验为了平衡功耗和阻抗低侧电阻选10kΩ。这个阻值不会太小耗电大也不会太大易受噪声干扰。计算高侧电阻根据分压公式V_adc Vin * (R_low / (R_high R_low))可以推导出R_high R_low / 分压比 - R_low。代入数值R_high 10kΩ / 0.05 - 10kΩ 190kΩ。选择标准电阻190kΩ不是标准E24系列阻值。为了确保输入电压超过30V时ADC输入也不会超过1.5V留点余量我们选择一个略大于计算值的标准电阻即220kΩ。这样实际分压比约为 10k / (220k 10k) ≈ 0.0435最大测量电压约为 1.5V / 0.0435 ≈ 34.5V更安全。最终电压采样通道ADC_IN11的分压电阻为R_high 220kΩ R_low 10kΩ。在R_low上还并联了一个10nF的电容用于滤除高频噪声让采样值更稳定。“换挡”提高精度你有没有发现如果用30V量程去测一个3V的电池ADC得到的数字量很小精度损失严重。这就好比用一把米尺去量一张纸的厚度不准。 为了解决这个问题板上设计了第二路电压采样电路接ADC_IN9它的分压比例更小比如只分压到3.3V量程。软件可以这样工作先用ADC_IN11大量程测一下如果发现电压值很低比如小于3V就自动切换到ADC_IN9小量程再测一次从而获得更高的测量精度。这就是数字万用表“自动量程”功能的简单实现思路。1.3 电流采样电路把电流信号变成电压信号测量电流通常是在电流流经的路径上串联一个很小的采样电阻也叫检流电阻。根据欧姆定律UI*R电流会在电阻上产生一个微小的压降测量这个电压值就能反推出电流。项目采用低侧采样方式即采样电阻放在负载和地之间。这种方式电路简单但会使负载的地电位略微抬高等于采样电压在精密系统中需要注意。采样电阻选型分析量程设计最大测量电流为3A。压降与功耗采样电阻不能太大否则压降大、功耗也大。一般压降建议不超过0.5V。功耗决定了电阻的封装功率大小发热不能太严重。计算与选型项目选择了100mΩ0.1Ω的采样电阻。压降在3A时压降 U 3A * 0.1Ω 0.3V300mV在安全范围内。功耗P I² * R 3A² * 0.1Ω 0.9W。因此项目选用了1W封装的金属绕线电阻确保有足够的功率余量不会过热。重要提示原文中特别强调“学习时请不要焊接U3”。U3就是这个采样电阻。因为在学习调试阶段如果焊接了电阻你的测量回路就通了可能无意中短路烧坏东西。调试时可以用导线短接U3的焊盘或者等所有逻辑调试完毕再焊接。1.4 数码管显示驱动让数据“亮”出来项目用两颗0.28寸的三位共阴数码管来显示电压电流值。为什么用数码管而不是LCD屏在工业环境或需要远距离、强光下观察的场合数码管的高亮度和高可靠性是巨大优势而且驱动相对简单。驱动原理简述一个数码管由8个LED段a,b,c,d,e,f,g,dp组成。共阴数码管意味着所有LED的阴极连在一起COM端。要点亮某一段需要将对应的段引脚置为高电平同时将COM端置为低电平。动态扫描驱动我们有6位数码管两位显示电压四位显示电流可能还有小数点如果每个数码管单独控制需要很多IO口。动态扫描是节省IO口的经典方法在极短的时间内比如2ms只点亮一位数码管将其COM端拉低并设置好这位数码管要显示的数字对应的段码a-g, dp。然后快速切换到下一位数码管重复步骤1。由于人眼的视觉暂留效应只要切换得足够快50Hz看起来就像是所有位数同时点亮一样。限流电阻与电流计算LED必须串联限流电阻否则电流过大会烧毁。项目中将限流电阻300Ω放在了位选COM端上而不是每个段上。这样6位数码管只需要5个电阻一位电压、四位电流节省了元件但对亮度均匀性有轻微影响实际测试可以接受。我们来算一下电流当一位数码管的所有段8段全亮时电流最大。IO口输出高电平约为3.3V限流电阻300Ω单段电流约为 3.3V / 300Ω ≈ 11mA。8段全亮就是88mA。这个电流对于CW32F030的IO口驱动能力来说是绰绰有余的查阅数据手册可知其IO驱动能力较强。但如果你用的某些MCU驱动能力弱就可能出现亮度不足的情况这时就需要外加驱动芯片如74HC595了。1.5 其他辅助电路LED指示灯电源指示灯LED_PWR常亮表示供电正常。另一个IO控制的工作指示灯LED1设计为低电平点亮这是因为多数MCU的IO口“灌电流”电流流入芯片能力比“拉电流”电流从芯片流出能力更强这样设计LED更亮。按键电路得益于CW32的IO内部可配置上拉电阻外部按键电路极其简单按键一端接IO一端接地。按下时IO被拉低松开时内部上拉电阻将IO拉高。TL431基准源这是一个经典的2.5V精密电压基准芯片。虽然CW32的ADC内部参考电压已经很准但板上保留这个电路是为了教学目的。你可以用这个极其稳定的2.5V电压来校准你的ADC了解基准源在精密测量中的重要性。2. 从硬件到软件核心设计思路总结走完了整个硬件设计我们可以总结出做一个测量仪表的几个关键点信号调理是前提无论是用电阻分压测高压还是用采样电阻测电流都要先把待测信号安全、线性地转换到ADC的测量范围0-Vref之内。这是硬件设计的核心。ADC性能是关键ADC的分辨率这里是12位、线性度、参考电压的稳定性直接决定了测量的精度。CW32F030支持多种内部Vref给设计带来了灵活性。电源干净是保障使用LDO为模拟电路特别是ADC供电能有效避免噪声这是提高测量精度的一个简单却有效的技巧。驱动能力要匹配设计数码管、LED等负载时一定要计算所需电流并确认MCU的IO口能否驱动不能想当然。硬件是骨架软件是灵魂。有了这些精心设计的硬件电路下一步就是编写软件去配置ADC进行采样读取数据经过计算转换成实际的电压电流值再通过动态扫描驱动数码管显示出来。这个过程涉及到ADC的初始化、采样触发、数据处理滤波、校准、显示刷新等逻辑我们将在下一篇软件实战教程中详细讲解。先把硬件电路理解透彻搭好平台软件写起来就会顺畅很多。