ADC应用开发指南¶
1. 摘要¶
本篇应用指南主要介绍PAN262x在不确定的供电电压(如电池供电场景)时, ADC的开发使用方法。
本篇应用指南主要包括:
ADC 基本操作
ADC 获取电池电压
ADC 获取RSSI值
注意:
本应用指南为PAN262x的应用补充文档,不能代替用户手册,具体功能及寄存器的操作等相关事项请以用户手册为准。
2. ADC基本操作¶
2.1. ADC通道简介¶
通道 |
功能 |
说明 |
---|---|---|
ADC_Channel0 |
外道采样通道0 |
关联到GPIO P3_0 |
ADC_Channel1 |
外道采样通道1 |
关联到GPIO P3_1 |
ADC_Channel2 |
外道采样通道2 |
关联到GPIO P3_2 |
ADC_Channel3 |
外道采样通道3 |
关联到GPIO P3_3 |
ADC_Channel4 |
外道采样通道4 |
关联到GPIO P3_4 |
ADC_Channel5 |
外道采样通道5 |
关联到GPIO P3_5 |
ADC_Channel6 |
外道采样通道6 |
关联到GPIO P3_6 |
ADC_Channel7 |
外道采样通道7 |
关联到GPIO P3_7 |
ADC_Channel8 |
内部RSSI采样通道 |
内部通道 |
ADC_Channel9 |
内部VBG(1.2V)采样通道 |
内部通道 |
ADC_Channel10 |
内部Vdd/2采样通道 |
内部通道 |
ADC_Channel11 |
内部GND采样通道 |
内部通道 |
ADC_Channel12 |
内部温度采样通道 |
内部通道 |
2.2. ADC 初始化¶
通道GPIO初始化,ADC采样通道0~7分别对应P3_0~P3_7;通道8~12为内部采样通道,不并联外部GPIO。
下面以通道0 GPIO初始化为示例:
/** Config P3_0 to analog input Mode, P3_0 is associated to ADC channel 0 */
GPIO_Init(GPIO_P30, GPIO_P30_MUX_ADCH0, GPIO_MODE_ANALOG, GPIO_NOPULL);
ADC 初始化,选中采样通道0,软件触发方式:
/** Config ADC params */
ADC_Init(ADC_CH0, 0x0200, ENABLE);
/** Software trigger adc convert */
ADC_ConfigTriggerMode(ADC_SW_TRIGGER);
2.3. ADC 结果读取¶
在 ADC 初始化完成后,调用ADC_Convert()
接口触发ADC转换,ADC_STATUS1.BIT0置1后,表示ADC转换完成,此时调用ADC_Read
读取转换结果即可。
u16 AdcData;
ADC_Convert(); /**< SoftTrigger ADC convert */
while((ADC_STATUS1&0x01)==0); /**< Wait for ADC convert over */
ADC_Read(&AdcData); /**< Get ADC result to AdcData */
2.4. 完整代码示例¶
/** Config P3_0 to analog input Mode, P3_0 is associated to ADC channel 0 */
GPIO_Init(GPIO_P30, GPIO_P30_MUX_ADCH0, GPIO_MODE_ANALOG, GPIO_NOPULL);
/** Config ADC params */
ADC_Init(ADC_CH0, 0x0200, ENABLE);
/** Software trigger adc convert */
ADC_ConfigTriggerMode(ADC_SW_TRIGGER);
while(1)
{
u16 AdcData;
ADC_Convert(); /**< SoftTrigger ADC convert */
while((ADC_STATUS1&0x01)==0); /**< Wait for ADC convert over */
ADC_Read(&AdcData); /**< Get ADC result to AdcData */
printf("Adc data:%u\r\n", AdcData);
DelayMs(300);
}
3. ADC 获取电池电压¶
3.1. 硬件连接框图¶
3.2. 获取电池电压流程¶
pan2628内置一个VBG稳压源,电压为1.2V,VBG稳压源关联至ADC的第9通道。大致的思路是,将ADC切换至第9通道,采样VBG电压,获得采样结果ADC_Vbg。1.2V对应的ADC采样值为ADC_Vbg, 电池电压Vdd对应的满量程为4095。
以上4个参数对应的关系如下:
1.2 / Vdd = ADC_Vbg / 4095
得出:
Vdd= 1.2*4095/ADC_Vbg
详细流程如下 :
4. ADC 获取RSSI值¶
RF 的RSSI值通过ADC的第8通道获取,需要ADC开启转换中断,当RF收到一个数据包时,如果此时ADC正处于RSSI转换通道8,RF会触发一次ADC转换,转换完成后产生ADC中断,此时用户可以读取RSSI电压的转换值。
详细流程如下 :
注意:
在电池代码的情况下,Vdd会随时间变化,电压会慢慢发生变化,而计算Vrssi需要依赖电源电压Vdd,所以用户在编程时,需要定期获取Vdd电压值(参照第三章节 ADC获取电池电压),这样才能根据查表法推出准确的RSSI值。
5. 参考样例及驱动¶
通过上述介绍,我们对该系列PAN262x 的 ADC 功能及操作方法有了进一步的掌握.
pan262x-dk开发包同时提供了该模块的应用样例及驱动库,用户可通过打开样例的 工程进一步直观地熟悉该模块以及驱动库的应用,在实际开发中也可以直接参考样例和使用 驱动库来快速实现对该模块的操作。
样例参考:
01_SDK\example_basic\adc\adc_sw_trigger
01_SDK\example_basic\adc\adc_hw_trigger
01_SDK\example_basic\adc\adc_compare
驱动库参考
01_SDK\driver\inc\adc.h
01_SDK\driver\src\adc.c