当前文档版本为 v0.5.0,您可以访问当前页面的 开发中 版本以获取最近可能的更新。

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. 硬件连接框图

image-20230105182459575

硬件连接框图

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

详细流程如下 :

image-20230106090726619

电池电压获取流程图

4. ADC 获取RSSI值

RF 的RSSI值通过ADC的第8通道获取,需要ADC开启转换中断,当RF收到一个数据包时,如果此时ADC正处于RSSI转换通道8,RF会触发一次ADC转换,转换完成后产生ADC中断,此时用户可以读取RSSI电压的转换值。

详细流程如下 :

image-20230106133629338

RF 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