你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

使用STM32的TIMER捕获功能,求取输入PWM信号的周期,误差很...

[复制链接]
studentzf972-93 提问时间:2009-6-9 10:44 /
使用的是TIMER2的CH1通道,PWM信号接在PA0脚。输入PWM的周期信号为100Hz,根据捕获值计算出来却是105Hz,这误差也太大了吧!!哪位高手知道是什么原因呀,指点一下呀,万分感谢呀!!
下面是我的相关部分程序:
1、时钟部分,TIMER2的时钟频率,我是初始化为36M.
      RCC_PCLK1Config(RCC_HCLK_Div2);           //设置低速AHB时钟=系统时钟/2
      RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);    // 倍频系数为9  PLLCLK=8*9=72
2、TIMER初始化
   TIM_DeInit(TIM2);
   TIM_TimeBaseStructure.TIM_Period = 65535;         
   TIM_TimeBaseStructure.TIM_Prescaler = 18;      
   TIM_TimeBaseStructure.TIM_ClockDivision = 0;   
   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
   TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
   TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;
   TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
   TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
   TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV4;
   TIM_ICInitStructure.TIM_ICFilter = 0x0;
   TIM_PWMIConfig(TIM2, &TIM_ICInitStructure);
   
   TIM_SelectInputTrigger(TIM2, TIM_TS_TI1FP1);
   TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Reset);                       //复位模式为从模式
   TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable);          //使能主从模式
  
   TIM_Cmd(TIM2, ENABLE);                           //使能TIM2计数器
   TIM_ITConfig(TIM2, TIM_IT_CC2, ENABLE);          //使能CC2中断请求
3、TIMER中断处理
void TIM2_IRQHandler(void)
{
  /* Clear TIM2 Capture compare interrupt pending bit */
  TIM_ClearITPendingBit(TIM2, TIM_IT_CC2);
  
  /* Get the Input Capture value */
  IC2_Value = TIM_GetCapture2(TIM2);
  
}
收藏 评论8 发布时间:2009-6-9 10:44

举报

8个回答
studentzf972-93 回答时间:2009-6-9 17:31:02

回复:使用STM32的TIMER捕获功能,求取输入PWM信号的周期,误差很大,请求解决!

顶起,大侠们帮忙呀
studentzf972-93 回答时间:2009-6-10 11:44:37

RE:使用STM32的TIMER捕获功能,求取输入PWM信号的周期,误差很大,请求解决!

搞定了,结贴了!!
说搞定也没搞定,只是搞清楚原因了。原来STM32的TIMER的时钟经过预分频后,TIMER的时钟误差也相应变大了不少(有点太离谱了)。不分频测量1KHz的脉冲误差0.5us.分18频后的误差就像我上面讲的了。
各位朋友用到这一块,要小心了。
detone 回答时间:2009-7-21 13:14:30

RE:使用STM32的TIMER捕获功能,求取输入PWM信号的周期,误差很大,请求解决!

专业特约经销STM32F系列产品,提供一站式技术支持服务,有意者联系:
STM32F101C4T6.STM32F101C6T6.STM32F101R4T6.STM32F101R6T6.STM32F101T4U6.STM32F101T6U6.STM32F101T8U6
STM32F101C8T6.STM32F101CBT6 STM32F101R8T6 STM32F101RBT6 STM32F101V8T6 STM32F101VBT6 STM32F101RCT6     
STM32F101RDT6 STM32F101RET6 STM32F101VCT6 STM32F101VDT6 STM32F101VET6 STM32F101ZCT6 STM32F101ZDT6      
STM32F101ZET6      
STM32F103C4T6.STM32F103C6T6.STM32F103R4T6.STM32F103R6T6.STM32F103T4U6.STM32F103T6U6.STM32F103T8U6
STM32F103C8T6.STM32F103CBT6 STM32F103R8T6 STM32F103RBT6 STM32F103V8T6 STM32F103VBT6 STM32F103RCT6     
STM32F103RDT6 STM32F103RET6 STM32F103VCT6 STM32F103VDT6 STM32F103VET6 STM32F103ZCT6 STM32F103ZDT6      
STM32F103ZET6      
深圳市迪通科技有限公司                                                                                                                                                       
联系人:吴丽群                                                                                                                                                       
联系地址:深圳市福田区上梅林105号多丽工业区2607                                                                                                                                                       
电话:0755-83312947                                                                                                                                                       
移动电话:13480904394                                                                                                                                                       
传真:0755-83311568                                                                                                                                                       
EMAIL:WUDETONE@QQ.COM QQ:648278784
mouxiang-144745 回答时间:2009-8-9 14:50:30

RE:使用STM32的TIMER捕获功能,求取输入PWM信号的周期,误差很大,请求解决!

LZ说要18分频,但是
2、TIMER初始化
   TIM_DeInit(TIM2);
   TIM_TimeBaseStructure.TIM_Period = 65535;         
   TIM_TimeBaseStructure.TIM_Prescaler = 18;      
这里的18应该改为17才行哟,我觉得。
PPWD 回答时间:2009-8-22 21:29:31

RE:使用STM32的TIMER捕获功能,求取输入PWM信号的周期,误差很大,请求解决!

恩 。。。。。。
ufo2na 回答时间:2009-8-25 10:33:54

回复:使用STM32的TIMER捕获功能,求取输入PWM信号的周期,误差很大,请求解决!

深圳市迪通科技有限公司专业经销ST公司32位MCU—STM32系列芯片、单片机,货源充足、价格优势!有意电联:15889724464    祁生
longtiger2008-1 回答时间:2009-8-30 15:19:49

回复:使用STM32的TIMER捕获功能,求取输入PWM信号的周期,误差很大,请求解决!

引用第 5 楼 mouxiang于2009-08-09 06:50:30发表:
LZ说要18分频,但是
2、TIMER初始化
TIM_DeInit(TIM2);
TIM_TimeBaseStructure.TIM_Period = 65535;
TIM_TimeBaseStructure.TIM_Prescaler = 18;
这里的18应该改为17才行哟,我觉得。 

5楼正解。。楼主应该看看。
xieyuanfu 回答时间:2012-11-12 14:10:09

RE:使用STM32的TIMER捕获功能,求取输入PWM信号的周期,误差很大,请求解决!

时钟分频后 肯定是有误差的  这个要靠经验来补偿了
多采集几次 取平均 得经验值来校准
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版