简要介绍
DA14585有4路10bit ADC,分别对应P0_0、P0_1、P0_2、P0_3且不能映射到其他IO(电量检测IO固定),65ns的转换时间,支持最大3.3Msample/s的采样率,支持单端或者差分输入采集,同时也可用于电量检测。其参考电压为1.2V,内部有一个GP_ADC_ATTN3X衰减寄存器,支持最大3.6V电压测量。
代码分析
下面以一个简单的ADC电量采集demo例程分析代码,以及如何使用
调用adc_enable_channel();并选择合适的通道,用于ADC通道使能
adc_get_vbat_sample函数用于针对不同电池类型进行采样分析,在采样前需要对ADC进行初始配置:
adc_init()中
- mode:选择差分或者单端模式;
- sign:0为默认,设置GP_ADC_SIGN以消除ADC和低频的内部偏移;
- attn:选择是否三倍衰减
本例程采用单端和三倍衰减模式。
代码步骤:
对ADC进行校准:
为了尽量减小一个非常小的抖动偏移通常采用以下方式校准。
adc_get_sample为最终读取GP_ADC_RESULT_REG中的值,低10位即为ADC值
算法选择:
DA14585可以适配多种类型的电池采集,因此需要的算法也有所差别,这里支持纽扣电池(CR2032 CR1225)、碱性电池;在测量碱性电池代码如下
这里得到的数字是纯粹的ADC值,还未经过换算百分比,batt_cal_cr2032/batt_cal_cr1225/batt_cal_aaa将电量换算成百分比值并返回。