RT1052的ADC單通道採集

開發平臺

  • Board:野火RT1052-MINI
  • IDE:Keil 5.28

關於RT1052上的ADC

從官方手冊來看,
在這裏插入圖片描述
RT1052上的ADC性能並不小。

ADC的初始化代碼:

bool Adc_Init(void)
{
    gpio_pin_config_t Config;
    adc_config_t config;
    adc_channel_config_t ADC_CH_config;

    /*
     * GPIO 配置爲輸入模式
     * 不使用中斷
    */
    Config.direction = kGPIO_DigitalInput;
    Config.interruptMode = kGPIO_NoIntmode;
    GPIO_PinInit(ADC_GPIO, ADC_PIN, &Config);

    /*
     * GPIO 複用配置
     * PAD配置
    */
    IOMUXC_SetPinMux(ADC_MUX,0);
    IOMUXC_SetPinConfig(ADC_MUX,ADC_PAD_CONFIG_DATA);
    
    /*
     * 獲取ADC默認配置
     * 初始化ADC
     * 失能硬件觸發模式
     * 配置硬件平均
    */
    ADC_GetDefaultConfig(&config);
    config.enableContinuousConversion = true;
    ADC_Init(ADCx, &config);
    ADC_EnableHardwareTrigger(ADCx,false);
    ADC_SetHardwareAverageConfig(ADCx, kADC_HardwareAverageCount32);

    /*
     * ADC通道配置
     * 使能中斷完成轉化
     * 初始化通道配置
    */
    ADC_CH_config.channelNumber = ADC_Channel;
    ADC_CH_config.enableInterruptOnConversionCompleted = true;
    ADC_SetChannelConfig(ADCx,ADC_GROUP,&ADC_CH_config);

    if(ADC_DoAutoCalibration(ADCx)==kStatus_Success)
    {
        PRINTF("ADC校正完成\n");
    }
    else
    {
        PRINTF("ADC校正失敗\n");
    }

    return  true;
}

值得注意的是,如果將ADC_EnableHardwareTrigger(ADCx,false);
改爲開啓,那ADC的值會一直停留不變,反正我也很鬱悶,搞了半天才知道這個問題。因爲之前都是用中斷的方式採集的,但是我之前開了也能正常採集。

ADC獲取值:

uint32_t ADC_Get(void)
{
    adc_channel_config_t adcChannelConfigStruct;
    adcChannelConfigStruct.channelNumber = ADC_Channel;
    adcChannelConfigStruct.enableInterruptOnConversionCompleted = true;

    ADC_SetChannelConfig(ADCx, ADC_GROUP, &adcChannelConfigStruct);
    
    return ADC_GetChannelConversionValue(ADCx,ADC_Channel);
}

如果沒有開啓連續採樣模式,就必須每次都執行一遍ADC_SetChannelConfig()這個函數,開啓之後可以不執行直接獲取。

ADC的轉換公式:

X/3.3 = data/2^N

X是所要求的電壓值。
data是ADC得到的原始數據。
N是ADC的位數,8位、10位、12位。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章