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

使用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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版