硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3268|回复: 4
收起左侧

[有问必答] ADC采样与定时器触发频率的关系?

[复制链接]

6

主题

11

回帖

6

积分

新手上路

积分
6
发表于 2017-3-31 18:46:00 | 显示全部楼层 |阅读模式
ADC采用定时器1 ADC_ExternalTrigConv_T1_CC3触发,现在迷糊的是ADC预分频依然是有影响,T1设置的频率对ADC的影响不是一定的,它的频率和ADC采用率有啥关系?
只是单纯触发吗?我设定的有些值会对采样率有影响,比如如下代码:

static void TIM1_Config(void)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    TIM_OCInitTypeDef  TIM_OCInitStructure;
   
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);                           
   
    TIM_Cmd(TIM1, DISABLE);   

    TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);                  
    TIM_TimeBaseStructure.TIM_Period = 144000000/3600000 - 1;        //
    TIM_TimeBaseStructure.TIM_Prescaler =1;                             
    TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;                       
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;         
    TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);

    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;                 
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;      //CCER êä3öê1Äü         
    TIM_OCInitStructure.TIM_Pulse = TIM_TimeBaseStructure.TIM_Period / 2;
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;         
    TIM_OC3Init(TIM1, &TIM_OCInitStructure);
    TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);                    
    TIM_ARRPreloadConfig(TIM1, ENABLE);                                    
    TIM_Cmd(TIM1, ENABLE);                                               
    TIM_CtrlPWMOutputs(TIM1, ENABLE);                                 
}
  TIM_TimeBaseStructure.TIM_Period = 144000000/3600000 - 1;        这段代码改36000000和3600000效果一样,当改为360000就不一样了,ADC改预分频系数也会变。
真心请教这个要咋理解,设定触发后ADC采样率受谁影响?咋算?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2017-3-31 19:21:32 | 显示全部楼层
触发频率不要超过ADC的采样率。

你初始化了ADC后,最大采样率就已经确定,即不能超过这个最大采样率。
回复

使用道具 举报

6

主题

11

回帖

6

积分

新手上路

积分
6
 楼主| 发表于 2017-3-31 19:38:14 | 显示全部楼层

回 eric2013 的帖子

eric2013:触发频率不要超过ADC的采样率。

你初始化了ADC后,最大采样率就已经确定,即不能超过这个最大采样率。 (2017-03-31 19:21) 
我测试了一下, TIM_TimeBaseStructure.TIM_Period = 144000000/2000000 - 1;  
    TIM_TimeBaseStructure.TIM_Prescaler =1;   
上面分别取2000000和1000000,对应的采样频率为1M和500K,ADC预分频是2: ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2;是不是定时器触发频率/2就是ADC采样频率?
超过最大ADC采样率,就是自动切换为最大时钟?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2017-3-31 19:43:07 | 显示全部楼层

回 霖之宇 的帖子

霖之宇:我测试了一下, TIM_TimeBaseStructure.TIM_Period = 144000000/2000000 - 1;  
    TIM_TimeBaseStructure.TIM_Prescaler =1;    
上面分别取2000000和1000000,对应的采样频率为1M和500K,ADC预分频是2: ADC_CommonInitStr .. (2017-03-31 19:38) 
采样率由触发频率决定。超过不切换,而是处理不过来了。
回复

使用道具 举报

6

主题

11

回帖

6

积分

新手上路

积分
6
 楼主| 发表于 2017-3-31 19:45:05 | 显示全部楼层

回 eric2013 的帖子

eric2013:采样率由触发频率决定。超过不切换,而是处理不过来了。 (2017-03-31 19:43) 
非常感谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-16 16:23 , Processed in 0.039515 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表