本文以KL25为例,其他型号类似,讲解如何使用芯片内部的bandgap以及ADC相结合,实现对芯片VDD电压的检测,这样可以跟踪实际VDD的电压,防止芯片电压过低。尤其适用于电源使用的是电池的情况。
硬件平台: FRDM-KL25
代码平台:官方的LQRUG_bme_ex2
原理及思想:
当VDDA和VREFH连接在一起的时候,使用内部的bandgap 电压,这个电压为1V,作为ADC的输入,然后倒推实际的VDDA电压,这里配置转换模式为16位单端模式,倒推VDDA的公式为:
VDDA=(Vbg*65535)/Conversion result (1)
其中:VDDA就是实际芯片的电压
Vbg:bandgap电压为1V
Conversion result:以1Vbandgap为输入时,对应得到的AD转换结果。
实际代码配置:
0
|
|
|
|
本实验是在官方的LQRUG_bme_ex2的基础上加以修改,主要修改点有三点:
1,选择BANDGAP 为ADC的输入,则将ADC0_CHANB配置为0X1B.具体选择参考RM:
2:配置ADC的转换模式为单端16位模式
ADC0_CFG1 |= ADC_CFG1_MODE(3);
|
|
|
|
|
3:打开bandgap模块。
PMC_REGSC |= 0X01; //OPEN BANDGAP
经过以上3点配置,然后根据公式(1)的计算方法就可以实现电压的采集了。
代码请查看附件,或者自行根据官方例程修改。
实际测试结果为:
万用表测试:VDDA=2.92
软件测试结果如下:
ADC conversion for potentiometer started, press any key to stop ADC conversion
R0A= 22534
Vdd= 2908
R0A= 22523
Vdd= 2909
R0A= 22533
Vdd= 2908
R0A= 22526
Vdd= 2909
R0A= 22516
Vdd= 2910
R0A= 22531
Vdd= 2908
R0A= 22528
Vdd= 2909
R0A= 22535
Vdd= 2908
R0A= 22517
和实际稍微有些偏差,原因是内部的bandgap电压范围为(0.97V 到1.03V).所以,这种方法适合初略测试。
如果大家还有其他好的方法,欢迎一起交流!
|
|
|
|
|