打印
[AT32F421]

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

[复制链接]
6366|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gregrgr|  楼主 | 2021-5-19 08:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 gregrgr 于 2021-5-19 08:38 编辑
  GPIO_InitType GPIO_InitStructure;
  ADC_InitType ADC_InitStructure;
  DMA_InitType DMA_InitStructure;

  RCC_AHBPeriphClockCmd(RCC_AHBPERIPH_DMA1, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_ADC1, ENABLE);
  RCC_AHBPeriphClockCmd(AT32_ADC_GPIO_RCC_CLK, ENABLE);

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

  /* DMA1 channel1 configuration ----------------------------------------------*/
  DMA_Reset(DMA1_Channel1);
  DMA_DefaultInitParaConfig(&DMA_InitStructure);
  DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->RDOR;
  DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)ADC_RegularConvertedValueTab;
  DMA_InitStructure.DMA_Direction = DMA_DIR_PERIPHERALSRC;
  DMA_InitStructure.DMA_BufferSize = 2;
  DMA_InitStructure.DMA_PeripheralInc = DMA_PERIPHERALINC_DISABLE;
  DMA_InitStructure.DMA_MemoryInc = DMA_MEMORYINC_ENABLE;
  DMA_InitStructure.DMA_PeripheralDataWidth = DMA_PERIPHERALDATAWIDTH_HALFWORD;
  DMA_InitStructure.DMA_MemoryDataWidth = DMA_MEMORYDATAWIDTH_HALFWORD;
  DMA_InitStructure.DMA_Mode = DMA_MODE_CIRCULAR;
  DMA_InitStructure.DMA_Priority = DMA_PRIORITY_HIGH;
  DMA_InitStructure.DMA_MTOM = DMA_MEMTOMEM_DISABLE;
  DMA_Init(DMA1_Channel1, &DMA_InitStructure);
  /* Enable DMA1 channel1 */
  DMA_ChannelEnable(DMA1_Channel1, ENABLE);

  /* ADC1 configuration ------------------------------------------------------*/
  ADC_StructInit(&ADC_InitStructure);
  ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
  ADC_InitStructure.ADC_ScanMode = ENABLE;
  ADC_InitStructure.ADC_ContinuousMode = ENABLE;
  ADC_InitStructure.ADC_ExternalTrig = ADC_ExternalTrig_None;
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  ADC_InitStructure.ADC_NumOfChannel = 2;
  ADC_Init(ADC1, &ADC_InitStructure);

  /* ADC1 regular channels configuration */
  ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 1, ADC_SampleTime_13_5);
  // ADC_RegularChannelConfig(ADC1, ADC_Channel_9, 2, ADC_SampleTime_13_5);
  ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 2, ADC_SampleTime_13_5);
  ADC_ExternalTrigConvCtrl(ADC1, ENABLE);
  /* Enable ADC1 DMA */
  ADC_DMACtrl(ADC1, ENABLE);

  /* Enable ADC1 */
  ADC_Ctrl(ADC1, ENABLE);


AT32F421 ADC DMA 多通道采集数据干扰,采集通道1 的时候,通道2的数据也跟着变

使用特权

评论回复
沙发
yachcs| | 2021-5-20 08:42 | 只看该作者
本帖最后由 yachcs 于 2021-5-20 09:29 编辑

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

使用特权

评论回复
评论
yachcs 2021-5-20 23:57 回复TA
@gregrgr :是 
gregrgr 2021-5-20 15:39 回复TA
是不是一个通道变化会影响其它通道的值 
板凳
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的

使用特权

评论回复
5
GlenX| | 2021-7-12 17:04 | 只看该作者
本帖最后由 GlenX 于 2021-7-12 17:06 编辑

板子电源负极引线过长或相对较细也会是这个问题。先加大电源电容试试。

使用特权

评论回复
6
fuqinyyy| | 2021-7-12 20:54 | 只看该作者
什么意思,你是多通道同步采样?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

34

帖子

0

粉丝