在低功耗的蓝牙系统中,电源管理的优劣为使用者带来不同的体验感受,也为产品带来不同的定位,PAR2822 是原相科技的蓝牙SOC,内部包含一个低功耗 10 位通用模数转换器 (GPADC),频率为 1MHz採样率。每一次测量,数据採集仅需要25us。通过切换它可以作为 10 通道通用模数转换,其中1 个额外通道用于电池电压检测,而另外 10个通道用于监控GPIO0~GPIO9。为了获得更好的精度,内部参考电压校准是首选。该 GPADC 可应用于电池监控、温度电阻、模拟信号採样等传感应用。
今天小编就要来实际使用PAR2822 内建ADC来测量单节AA电池,并透过PAR2822开发板自带的USB->UART 口打印电池状况,看看有没有符合预期。
1.准备工具设备
a.PAR2822开发板
b.Keil 编译环境,详细版本请参考之前的"PAR2822 开发板 GPIO 配置笔记"一文
c.三用电表,查线路及电压量测对照
d.杜邦线*2
e.AA电池一颗
f.电池盒(可有可无,最主要是拍照美观固定电池不要跑来跑去的啦)
来个工具设备的大合照
2.搭建环境
上一回"PAR2822 开发板 GPIO 配置笔记"用了P0,P1,P2,这次我们就用P3这个引脚试试看,顺便回味程式内IO配置的方法吧
测试1
分别把PAR2822开发板上的P3与3V3 GND 两个测试点用杜邦线接上分别测试看看UART打印出来的ADC值
测试2
把PAR2822开发板上的P3与AA电池的正极连接,AA电池负极与PAR2822开发板共地,观察UART打印出来的ADC值
3.程式设计
adc_st status为0代表ADC为目前没有ready 的值
adc_st status为1代表ADC取值未完成
adc_st status为2代表ADC已经有ready的值可被打印了
void adc_irq_callback(uint32_t int_st)
观察ADC取值状况
void timer_callback()
一段时间来看一下如果ADC 还没有ready的值就继续取值,有值就打印出来
main主函式
初始化引脚UART口与设定P3为 GPADC_CH
打开DMA存放ADC值与设定TIMER1/GPADC中断
4.实验结果
a.
3.3V ADC 打印值
GPADC value=ADC code*3.6/1024
忽略误差范围以0x3ab为例
939*3.6/1024=3.3V
b.
0V ADC打印值
一个bit的跳动可忽略,套入公式为0V
c.
0.9034V AA电池 ADC 打印值
GPADC value=ADC code*3.6/1024
忽略误差范围以0x102为例
258*3.6/1024=0.907V与电表相比的精度用在消费型应用算很不错的
具电压侦测的产品让产品不再是冷冰冰,终端使用者可以提早知道系统状态
如提早通知用户,电池快没电了,预先处理等等的报警……