微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 片上ADC的应用测试

片上ADC的应用测试

时间:10-02 整理:3721RD 点击:

在我们的应用项目中需要采集一些模拟量,这些量使用MCU自带的ADC就可以满足要求。在NUCLEO-F412ZG实验板上的STM32F412ZG有一个16通道的ADC,我们试验用它采集几个数据。


在NUCLEO-F412ZG实验板上,ADC1的第10通道(PC0)和第13通道(PC3)分别引到了CN9-3和CN9-5上。如下图红框所示:




我们利用这两个通道采集信号,一个定义为24VDC电源的检测,一个定义为5VDC电源的检测。同时采集MCU集成的内部温度传感器采集和内部参考电压采集。具体通道选择如下:




为了方便操作,我们在STM32CubeMX中进行ADC1的配置,打开“ADC1Configuration”界面,选择“GPIO Settings”标签,配置对应的GPIO如下:




由于我们使用DMA来进行ADC1的采集,所以我们打开DMA标签进行DMA配置:




配置完成后,我们生成项目源码,发现配置文件如下:


/* ADC1 init function */


static void MX_ADC1_Init(void)


{



ADC_ChannelConfTypeDef sConfig;



   /**Configure the global features of the ADC (Clock, Resolution, DataAlignment and number of conversion)


    */


hadc1.Instance = ADC1;


hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_div4;


hadc1.Init.Resolution = ADC_RESOLUTION_12B;


hadc1.Init.ScanConvMode = DISABLE;


hadc1.Init.ContinuousConvMode = DISABLE;


hadc1.Init.DiscontinuousConvMode = DISABLE;


hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;


hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;


hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;


hadc1.Init.NbrOfConversion = 1;


hadc1.Init.DMAContinuousRequests = DISABLE;


hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;


  if(HAL_ADC_Init(&hadc1) != HAL_OK)


  {


   Error_Handler();


  }



   /**Configure for the selected ADC regular channel its corresponding rankin the sequencer and its sample time.


    */


sConfig.Channel = ADC_CHANNEL_10;


sConfig.Rank = 1;


sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;


  if(HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)


  {


   Error_Handler();


  }


}


在这段初始化代码中,通过HAL_ADC_Init函数来初始化,在HAL_ADC_Init函数中有调用了HAL_ADC_MspInit函数。这个函数需要我们自己编写,然后共系统回调。其内容主要是对通道10和通道13的GPIO引脚进行初始化配置。


配置完成后我们便写数据处理相关的函数,比如数据平滑处理、量程转化等。其实我们2个通道的采集信号是一样的,都是采用5V的信号分要产生。由于在NUCLEO-F412ZG实验板上ADC的参考电压接到电源,也就是3.3VDC所以输入信号不能超多3.3VDC。我们使用电阻分压将信号转为2.5VDC然后采集。完成后运行调试:




最后来看一看采集到的结果,我们将通道10的物理量程设为24,通道13的物理量程设为5,加上MCU内核温度和内核参考电压,共4个信号:



由上图我们可以看到STM32F412ZG自带的ADC采集精度还是非常高的,在大多数情况下已经足够了。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top