打印
[AT32F403/403A]

使用403A的ADC怎么会影响被采信号?

[复制链接]
1302|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
baonng|  楼主 | 2022-6-15 17:08 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
AD, dc
最近在学习403A的单片机,在使用403A的ADC采样时,发现一个奇怪的问题,就是启动ADC后,似乎ADC对被采信号有影响。
用示波器看,未启动ADC时,被测信号是一个1.3V的直流信号,当ADC启动后,电压变为1.6v了,关键还出现了毛刺。
实在不知道怎么回事,还请知道的能告知。直流信号是通过电位器分压得到的。

403A初始化,系统时钟为192MHz
static void adc_config(void)
{
  adc_base_config_type adc_base_struct;
        dma_init_type dma_init_struct;
  crm_periph_clock_enable(CRM_DMA1_PERIPH_CLOCK, TRUE);
  crm_periph_clock_enable(CRM_ADC1_PERIPH_CLOCK, TRUE);
  crm_adc_clock_div_set(CRM_ADC_DIV_8);
       
        dma_reset(DMA1_CHANNEL1);
  dma_default_para_init(&dma_init_struct);
  dma_init_struct.buffer_size = 1;
  dma_init_struct.direction = DMA_DIR_PERIPHERAL_TO_MEMORY;
  dma_init_struct.memory_base_addr = (uint32_t)&ADC1_Value;
  dma_init_struct.memory_data_width = DMA_MEMORY_DATA_WIDTH_BYTE;
  dma_init_struct.memory_inc_enable = FALSE;
  dma_init_struct.peripheral_base_addr = (uint32_t)&(ADC1->odt)+1;        // 利用DMA实现8位精度时+1
  dma_init_struct.peripheral_data_width = DMA_PERIPHERAL_DATA_WIDTH_BYTE;
  dma_init_struct.peripheral_inc_enable = FALSE;
  dma_init_struct.priority = DMA_PRIORITY_HIGH;
  dma_init_struct.loop_mode_enable = TRUE;
  dma_init(DMA1_CHANNEL1, &dma_init_struct);

  dma_channel_enable(DMA1_CHANNEL1, TRUE);
  //dma_interrupt_enable(DMA1_CHANNEL1, DMA_FDT_INT, TRUE);

  /* select combine mode */
  adc_combine_mode_select(ADC_INDEPENDENT_MODE);
  adc_base_default_para_init(&adc_base_struct);
  adc_base_struct.sequence_mode = FALSE;
  adc_base_struct.repeat_mode = TRUE;
  adc_base_struct.data_align = ADC_LEFT_ALIGNMENT;//ADC_RIGHT_ALIGNMENT;        // 利用DMA实现8位精度时左对齐
  adc_base_struct.ordinary_channel_length = 1;
  adc_base_config(ADC1, &adc_base_struct);
  adc_ordinary_channel_set(ADC1, ADC_CHANNEL_1, 1, ADC_SAMPLETIME_239_5);
  adc_ordinary_conversion_trigger_set(ADC1, ADC12_ORDINARY_TRIG_SOFTWARE, TRUE);
  adc_dma_mode_enable(ADC1, TRUE);

  adc_enable(ADC1, TRUE);
  adc_calibration_init(ADC1);
  while(adc_calibration_init_status_get(ADC1));
  adc_calibration_start(ADC1);
  while(adc_calibration_status_get(ADC1));
        adc_ordinary_software_trigger_enable(ADC1, TRUE);
}



使用特权

评论回复
沙发
baonng|  楼主 | 2022-6-15 17:09 | 只看该作者
我感觉这个貌似似乎与ADC的启动采样时间有关系。

使用特权

评论回复
板凳
gouguoccc| | 2022-6-15 18:17 | 只看该作者
这个是开启ADC时,内部采样保持电容充电导致的。

使用特权

评论回复
地板
xch| | 2022-6-16 09:37 | 只看该作者
说明MCU 在采集,你应该开心才对。但是采集周期不够长。

使用特权

评论回复
5
baonng|  楼主 | 2022-6-16 10:14 | 只看该作者
xch 发表于 2022-6-16 09:37
说明MCU 在采集,你应该开心才对。但是采集周期不够长。

ADC_SAMPLETIME_239_5,这个已经是最大值了啊

使用特权

评论回复
6
baonng|  楼主 | 2022-6-16 10:15 | 只看该作者
gouguoccc 发表于 2022-6-15 18:17
这个是开启ADC时,内部采样保持电容充电导致的。

有何办法消除吗?

使用特权

评论回复
7
xch| | 2022-6-16 11:12 | 只看该作者
baonng 发表于 2022-6-16 10:14
ADC_SAMPLETIME_239_5,这个已经是最大值了啊


没看出来。 理论上采样时间差不多是10uS。 似乎仅1us。

使用特权

评论回复
8
xch| | 2022-6-16 11:17 | 只看该作者
如果采样周期足够,跌落波形应该是瞬间跌落,然后缓慢恢复到信号电平。

而出示的波形是瞬间跌落,还未对采样电容充满电就立即切断采样电子开关,比下跌更快速度跳回输入信号电平。

使用特权

评论回复
9
xch| | 2022-6-16 11:22 | 只看该作者
雅特利的ADC 可以先设置好需要转换通道,然后才校准吗?

一般ADC 是先校准,然后才设置需要转换的通道。

使用特权

评论回复
10
baonng|  楼主 | 2022-6-16 11:26 | 只看该作者
xch 发表于 2022-6-16 11:12
没看出来。 理论上采样时间差不多是10uS。 似乎仅1us。

APB2的时钟为96MHz,8分频的话,ADC的时钟就是12MHz,采样周期239.5的话,一个周期就是20us了,从示波器看,两个毛刺间的时间为21us,差不多。

使用特权

评论回复
11
xch| | 2022-6-16 11:41 | 只看该作者
baonng 发表于 2022-6-16 11:26
APB2的时钟为96MHz,8分频的话,ADC的时钟就是12MHz,采样周期239.5的话,一个周期就是20us了,从示波器 ...

ADC 时钟不是APB2时钟。APB2 是ADC 寄存器访问接口总线时钟。
adc使用 PCLK2 作为它转换操作时钟。

使用特权

评论回复
12
baonng|  楼主 | 2022-6-16 13:17 | 只看该作者
xch 发表于 2022-6-16 11:41
ADC 时钟不是APB2时钟。APB2 是ADC 寄存器访问接口总线时钟。
adc使用 PCLK2 作为它转换操作时钟。
...

是啊,我意思ADC时钟来自APB2。

使用特权

评论回复
13
林堪堪| | 2022-6-16 19:21 | 只看该作者
你电位器用的多大阻值的啊?太大的话可能会有影响。

使用特权

评论回复
14
baonng|  楼主 | 2022-6-17 09:54 | 只看该作者
本帖最后由 baonng 于 2022-6-17 09:57 编辑
林堪堪 发表于 2022-6-16 19:21
你电位器用的多大阻值的啊?太大的话可能会有影响。

当时手中只有个20K的电位器,所以就用的20K电位器进行分压。看你发的表,我的AD时钟应该是12MHz,所以TS 239.5应该足够了。难道需要给AD引脚增加一个电容?

使用特权

评论回复
15
ArterySW| | 2022-6-17 11:22 | 只看该作者
这个是ADC采样时对内部电容充放电引起的,其原理示意图如下

通常ADC部分设计时,为保障数据的准确性,主要要考虑阻抗匹配等内容,建议可以去这篇文档看看,https://www.arterytek.com/downlo ... prove_ZH_V2.0.0.pdf

使用特权

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

本版积分规则

3

主题

23

帖子

0

粉丝