当前位置:首页 > 技术学院 > 技术前线
[导读]在嵌入式物联网低功耗设备开发中,电池电量采集是几乎所有便携终端的核心基础功能。常规的实现思路是依托微控制器内置的ADC外设,直接采样电池电压,再通过电压和剩余电量的对应关系换算出剩余电量百分比。但在大量低成本国产MCU方案中,受芯片成本和规格限制,很多入门级主控芯片根本没有集成ADC外设,想要实现电池电量采集,就必须找到不需要专用ADC硬件的替代方案。

在嵌入式物联网低功耗设备开发中,电池电量采集是几乎所有便携终端的核心基础功能。常规的实现思路是依托微控制器内置的ADC外设,直接采样电池电压,再通过电压和剩余电量的对应关系换算出剩余电量百分比。但在大量低成本国产MCU方案中,受芯片成本和规格限制,很多入门级主控芯片根本没有集成ADC外设,想要实现电池电量采集,就必须找到不需要专用ADC硬件的替代方案。

PWM模拟ADC采集电量就是在这种场景下诞生的经典低成本解决方案,它完全不需要专用的ADC外设,仅依靠微控制器自带的普通GPIO、定时器PWM外设,搭配一个低成本运算放大器,就能实现足够满足电池采集精度要求的电压测量功能,把硬件BOM成本控制到极低的水平,大量对成本极其敏感的物联网低功耗传感器、蓝牙小配件中,都能看到这个方案的身影。很多开发者刚接触这个方案时,觉得原理抽象难懂,不知道怎么把数字PWM信号和模拟电压测量关联起来。今天我们就从底层原理出发,逐层拆解这套方案的运行逻辑、硬件设计要点和软件实现细节,帮你彻底掌握这项极具实用价值的低成本采集技术。

PWM模拟ADC的核心实现逻辑

PWM实现模拟电压采集的核心思路,是把传统逐次逼近型ADC的硬件DAC部分,完全用PWM信号加滤波电路替代,用软件逐步调节PWM的占空比,最终通过对比电平翻转时刻的占空比数值,反向推算出被测电压的实际大小,本质是用数字外设的特性反向实现模拟量到数字量的转换。

PWM本身是一种周期完全固定、高电平持续时间可以任意调节的数字方波信号,它的核心参数就是占空比,也就是一个完整周期内,高电平持续时间占总周期的比例。如果直接把PWM信号接到一个低通滤波电路上,利用电容两端电压不能突变的特性,把高频的方波信号中的交流纹波完全滤除,最终输出的就是一个非常平滑稳定的直流电压,这个直流电压的大小,完全和PWM的占空比成正比。也就是说,只要我们能精准调节PWM的占空比,就能在滤波电路的输出端,得到0到PWM高电平幅值之间任意大小的稳定直流电压,这是整个方案能够实现的最核心基础。

整个测量过程采用逐次比较的思路完成:首先通过分压电阻网络,把电池的高电压降压到适配PWM输出电压范围的区间,得到一个缩小后的被测电压。之后把软件调节PWM滤波得到的可变直流电压,和分压后的被测电压,分别接到电压比较器的两个输入端。软件从低到高逐步调节PWM的占空比,让滤波输出的直流电压慢慢上升,当这个电压刚好超过被测电压的瞬间,电压比较器的输出电平就会立刻发生翻转。我们在这个时刻立刻记录下当前PWM的占空比数值,结合分压比例,就能反向推算出原始的电池实际电压,之后再根据电池的放电电压曲线,把电压值换算成对应的剩余电量百分比,就完成了一次完整的电量采集过程。

这套方案完全模拟了传统逐次逼近型ADC的工作逻辑,只不过把原本用硬件电阻网络实现的DAC部分,替换成了PWM加积分滤波电路,把原本的硬件逐次比较逻辑,替换成了软件的占空比逐步调节,在保证基本可用精度的前提下,把硬件成本降到了最低,完美适配没有内置ADC的低成本MCU场景。

硬件电路的两大核心模块设计要点

PWM模拟ADC的硬件电路非常精简,总共只有两大核心功能模块,二者配合完成PWM方波到平滑直流电压的转换,以及两个电压的对比判断,每一个细节的设计都会直接影响最终的采集精度。

第一个核心模块是PWM积分滤波电路。从MCU输出的PWM信号本身是高频方波,里面带有大量的高频纹波,直接接到比较器上根本无法和被测电压进行稳定对比,必须经过滤波处理,转换成足够平滑的直流电压。为了尽可能降低输出电压的纹波,行业内通常会采用三阶RC积分滤波电路,通过三级RC网络逐步滤除PWM中的高频交流成分。比如输入是频率100kHz、高电平幅值3.3V的PWM信号,哪怕占空比设置为70%,经过三阶积分电路之后,输出的直流电压几乎看不到任何波动,纹波幅度可以控制在几毫伏级别,完全满足电池电压采集的精度要求。如果想要进一步降低纹波,可以适当增大RC的时间常数,不过这样会让滤波之后的电压稳定时间变长,整个采集过程的耗时会增加,实际设计时需要根据项目对采集速度和精度的要求做平衡。

第二个核心模块是电压比较器电路。它的核心作用就是实时判断PWM滤波输出的电压和分压后被测电压的大小关系,当二者的大小关系发生变化时,立刻翻转输出电平,给MCU提供明确的触发信号。实际电路设计中,通常会在比较器的输出引脚增加一个上拉电阻,用来提升运算放大器的输出驱动能力,保证电平翻转的边沿足够陡峭,MCU的GPIO可以精准识别到电平跳变。同时为了适配电池的高电压测量,避免分压后的被测电压超过PWM的最大输出电压,通常会用两个分压电阻把原始电池电压缩小三倍,这样哪怕电池满电电压是4.2V,分压之后的电压也不会超过1.4V,完全落在3.3V的PWM输出电压范围内,不会出现超出量程的问题。

除此之外,还需要在被测分压后的电压输出端,额外增加一个大容量的滤波电容,让被测电压的电平更加平稳,避免电池负载突变导致的电压短暂波动,引发比较器误翻转,大幅提升采集结果的稳定性。

软件驱动的实现与精度优化技巧

硬件电路搭建完成之后,软件的控制逻辑直接决定了最终的采集精度和采集速度,核心是PWM占空比的精准控制和中断触发的处理逻辑。

绝大多数MCU都自带硬件PWM外设,可以直接生成频率稳定、占空比精度可调的PWM波形,不需要软件模拟输出,性能和稳定性都更好。比如常用的君正X1000这类没有内置ADC的低成本主控,直接调用芯片自带的PWM外设接口,就能输出完全符合要求的高频PWM信号。如果你的主控连硬件PWM外设都没有,也可以通过定时器中断,手动控制GPIO输出高低电平,用软件模拟生成PWM波,完全可以满足基础的采集需求。

接下来把比较器的输出引脚配置为外部双边沿中断,当比较器的输出电平发生翻转时,立刻触发MCU的外部中断,在中断服务函数里,立刻读取当前PWM的占空比寄存器数值,记录下翻转时刻的准确占空比,完成一次采集过程。为了避免单次采集的偶然误差,软件可以连续执行多次采集,把得到的多个占空比数值取平均值,再参与后续的电压计算,通过数字滤波的方式消除偶然误差。

实际工程中,这套方案的默认采集精度大概在50mV左右,对于普通电池电量采集来说完全够用,如果想要进一步提升精度,可以针对性调整几个关键参数:适当提高PWM的工作频率,同时增大定时器的自动重装载值,让PWM占空比的调节步进变得更小,相当于提升了整个模拟ADC的分辨率;适当增加采样的次数,多次采集取平均值,进一步消除随机干扰带来的误差;在软件逻辑中增加电压稳定等待机制,每次调节PWM占空比之后,等待200微秒左右,让滤波电路的输出电压完全稳定下来,再继续后续的比较判断,避免在电压还没稳定的时候就触发比较,导致采集结果出现偏差。

这套PWM模拟ADC的方案,虽然在精度和采样速度上无法和真正的硬件ADC相提并论,但对于电池电量采集这类对精度要求不高、采样速度要求很低的场景来说,完全是性价比最高的解决方案。它用极低的硬件成本,在没有ADC的主控芯片上实现了原本需要专用外设才能完成的功能,大量量产的低成本物联网设备中都能看到它的身影,是嵌入式工程师用现有资源灵活解决实际问题的典型范例。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭