C/C++教程

STM32三个ADC同步规则采样

本文主要是介绍STM32三个ADC同步规则采样,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

同步采样一般应用于交流信号中,是指多个ADC的采集时刻完全同步。在电力测量领域,经常会遇到需要同步采样的情况,比如同步采样电压电流信号,计算其相位差。阻抗分析时,也需要对输入输出信号进行同步采集,分析其相位差和幅度,计算阻抗。

多通道的同步ADC一般价格比较高,STM32内部的ADC可以灵活配置,实现同步采样。部分型号的STM32有2个ADC,也有部分型号有3个ADC,今天将以STM32F407为例介绍3个ADC同步采样的实现方法。
————————————————
版权声明:本文为CSDN博主「天外飞仙CUG」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhang062061/article/details/113735874

 

图片

 

 

图片

1.Mode选择为三重同步规则模式。

2.使能DMA连续请求。

3.外部触发源选择TIM2触发事件。

配置完成后,打开ADC2和ADC3的配置,可以看到,Mode已经自动配置为三重同步规则模式,且外部触发源也已经隐藏无法选择,因为三重同步规则模式下,三个ADC必须使用同一个外部触发源。同时ADC2和ADC3的DMA也不需要配置,使用同一个DMA。ADC2配置如下:
ADC配置完成后,打开TIM2定时器,用于触发ADC采样。TIM2时钟选择内部时钟(84MHz),选择触发事件为Update Event,用于触发ADC。配置其分频系数和计数周期如下,则ADC的采样率为84MHz÷(83+1) ÷(199+1)=5000Hz。

 

图片

 

uint8_t DMA_Flag = 0;

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
       DMA_Flag = 1;
}
 HAL_ADC_Start(&hadc1);
  HAL_ADC_Start(&hadc2);
  HAL_ADC_Start(&hadc3);//启动ADC
  HAL_ADCEx_MultiModeStart_DMA(&hadc1,(uint32_t*)adcbuf1,300);//启动同步规则模式及DMA,3个ADC,每次采样100个点*3
  HAL_TIM_Base_Start(&htim2);//启动TIM2,用于触发ADC采样
  /* USER CODE END 2 */
 
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
      if(DMA_Flag == 1)//AD转换完成标准
      {
           DMA_Flag = 0;
           HAL_TIM_Base_Stop(&htim2);
           HAL_ADCEx_MultiModeStop_DMA(&hadc1);
           HAL_ADC_Stop(&hadc1);
           HAL_ADC_Stop(&hadc2);
           HAL_ADC_Stop(&hadc3);//停止采样
           for(uint8_t i=0;i<100;i++)< span="">
           {
                  sprintf(str,"$,%d,%d,%d",adcbuf1[i][0],adcbuf1[i][1],adcbuf1[i][2]);
                  HAL_UART_Transmit(&huart1,(uint8_t*)str,strlen(str),100);//串口发送到上位机
           }
           HAL_ADC_Start(&hadc1);
           HAL_ADC_Start(&hadc2);
           HAL_ADC_Start(&hadc3);
           HAL_ADCEx_MultiModeStart_DMA(&hadc1,(uint32_t*)adcbuf1,300);
           HAL_TIM_Base_Start(&htim2);//重新启动采样
        }
    /* USER CODE END WHILE */
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

 

这篇关于STM32三个ADC同步规则采样的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!