[AT32F421] AT32F421 ADC DMA 多通道采集数据干扰

[复制链接]
6912|7
 楼主| gregrgr 发表于 2021-5-19 08:30 | 显示全部楼层 |阅读模式
本帖最后由 gregrgr 于 2021-5-19 08:38 编辑
  1.   GPIO_InitType GPIO_InitStructure;
  2.   ADC_InitType ADC_InitStructure;
  3.   DMA_InitType DMA_InitStructure;

  4.   RCC_AHBPeriphClockCmd(RCC_AHBPERIPH_DMA1, ENABLE);
  5.   RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_ADC1, ENABLE);
  6.   RCC_AHBPeriphClockCmd(AT32_ADC_GPIO_RCC_CLK, ENABLE);

  7.   GPIO_StructInit(&GPIO_InitStructure);
  8.   GPIO_InitStructure.GPIO_Pins = AT32_ADC_LDR_PIN | AT32_ADC_VBUS_PIN | AT32_ADC_ACC_PIN;
  9.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
  10.   GPIO_Init(AT32_ADC_GPIO, &GPIO_InitStructure);

  11.   /* DMA1 channel1 configuration ----------------------------------------------*/
  12.   DMA_Reset(DMA1_Channel1);
  13.   DMA_DefaultInitParaConfig(&DMA_InitStructure);
  14.   DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->RDOR;
  15.   DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)ADC_RegularConvertedValueTab;
  16.   DMA_InitStructure.DMA_Direction = DMA_DIR_PERIPHERALSRC;
  17.   DMA_InitStructure.DMA_BufferSize = 2;
  18.   DMA_InitStructure.DMA_PeripheralInc = DMA_PERIPHERALINC_DISABLE;
  19.   DMA_InitStructure.DMA_MemoryInc = DMA_MEMORYINC_ENABLE;
  20.   DMA_InitStructure.DMA_PeripheralDataWidth = DMA_PERIPHERALDATAWIDTH_HALFWORD;
  21.   DMA_InitStructure.DMA_MemoryDataWidth = DMA_MEMORYDATAWIDTH_HALFWORD;
  22.   DMA_InitStructure.DMA_Mode = DMA_MODE_CIRCULAR;
  23.   DMA_InitStructure.DMA_Priority = DMA_PRIORITY_HIGH;
  24.   DMA_InitStructure.DMA_MTOM = DMA_MEMTOMEM_DISABLE;
  25.   DMA_Init(DMA1_Channel1, &DMA_InitStructure);
  26.   /* Enable DMA1 channel1 */
  27.   DMA_ChannelEnable(DMA1_Channel1, ENABLE);

  28.   /* ADC1 configuration ------------------------------------------------------*/
  29.   ADC_StructInit(&ADC_InitStructure);
  30.   ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
  31.   ADC_InitStructure.ADC_ScanMode = ENABLE;
  32.   ADC_InitStructure.ADC_ContinuousMode = ENABLE;
  33.   ADC_InitStructure.ADC_ExternalTrig = ADC_ExternalTrig_None;
  34.   ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  35.   ADC_InitStructure.ADC_NumOfChannel = 2;
  36.   ADC_Init(ADC1, &ADC_InitStructure);

  37.   /* ADC1 regular channels configuration */
  38.   ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 1, ADC_SampleTime_13_5);
  39.   // ADC_RegularChannelConfig(ADC1, ADC_Channel_9, 2, ADC_SampleTime_13_5);
  40.   ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 2, ADC_SampleTime_13_5);
  41.   ADC_ExternalTrigConvCtrl(ADC1, ENABLE);
  42.   /* Enable ADC1 DMA */
  43.   ADC_DMACtrl(ADC1, ENABLE);

  44.   /* Enable ADC1 */
  45.   ADC_Ctrl(ADC1, ENABLE);


AT32F421 ADC DMA 多通道采集数据干扰,采集通道1 的时候,通道2的数据也跟着变
yachcs 发表于 2021-5-20 08:42 | 显示全部楼层
本帖最后由 yachcs 于 2021-5-20 09:29 编辑

实际测试,核心板上,悬空引脚的通道容易受别的通道干扰,未悬空的引脚不受别的通道影响。

评论

@gregrgr :是  发表于 2021-5-20 23:57
是不是一个通道变化会影响其它通道的值  发表于 2021-5-20 15:39
hoop 发表于 2021-5-21 17:52 | 显示全部楼层
AT32F421 ADC DMA 多通道采集数据干扰,采集通道1 的时候,通道2的数据也跟着变——不是很理解。是不是串通道,即通道1的电压小幅度串到通道2?
可以排查如下几点:
1)ADC使能后校准一下
2)ADC_SampleTime_13_5适当加大看是否会有改善
3)没看到你ADC有做分频,如果没有配置分频,以PCLK是120M来算,ADCCLK=60M,明显超过规格的28M了。
 楼主| gregrgr 发表于 2021-5-24 15:47 | 显示全部楼层
hoop 发表于 2021-5-21 17:52
AT32F421 ADC DMA 多通道采集数据干扰,采集通道1 的时候,通道2的数据也跟着变——不是很理解。是不是串通 ...

分频了,ADC时钟是10M的
GlenX 发表于 2021-7-12 17:04 | 显示全部楼层
本帖最后由 GlenX 于 2021-7-12 17:06 编辑

板子电源负极引线过长或相对较细也会是这个问题。先加大电源电容试试。
fuqinyyy 发表于 2021-7-12 20:54 来自手机 | 显示全部楼层
什么意思,你是多通道同步采样?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

39

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部