打印

版主 各位大侠,定时器捕获外部频率不准 请教

[复制链接]
2009|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ql1007|  楼主 | 2011-10-11 15:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我是把外部信号直接加在了 PA0,就是TIM2_CH1_ETR上,
信号示波器看频率在80K,但实测 观察捕获值才60K,不知道哪里问题,大家给看看
配置有没有问题

   TIM_TimeBaseStructure.TIM_Period = 0xffff;  //自动重装值
  TIM_TimeBaseStructure.TIM_Prescaler = 1; //预分频值, 使TIMx_CLK=72MHz   时钟频率=72/(时钟预分频+1)
  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_DIV1;
   TIM_ICInitStructure.TIM_ICFilter = 0x0;
   TIM_PWMIConfig(TIM2, &TIM_ICInitStructure);
   TIM_SelectInputTrigger(TIM2, TIM_TS_TIM_TS_ETRF);
   TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Reset);
   TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable);
   TIM_Cmd(TIM2, ENABLE);
   TIM_ITConfig(TIM2, TIM_IT_CC1, ENABLE);
沙发
香水城| | 2011-10-11 16:59 | 只看该作者
请说说你的操作方法和原理,配置中看不出你的操作步骤。

使用特权

评论回复
板凳
sinadz| | 2011-10-11 18:24 | 只看该作者
信息太少,介绍一些操作步骤吧

使用特权

评论回复
地板
ql1007|  楼主 | 2011-10-12 09:11 | 只看该作者
恩 是这样的,我要测量一个开关信号的频率,现在我做了个方波信号给STM32,示波器观察是80K,我是把外部信号直接加在了 PA0,就是TIM2_CH1_ETR上,然后在仿真里一直运行,观察中断处理里的变量
Frequency ,始终是60K,我不知道是不是我配置不对呢?香版主和各位大侠给看看我的配置对吗?
万分感谢
void TIM2_IRQHandler(void)
{
        u16 IC3Value;
    TIM_ClearITPendingBit(TIM2, TIM_IT_CC1);
    IC3Value = TIM_GetCounter(TIM2);
        Frequency=72000000/IC3Value;//捕获时从输入波形的上升沿开始,对主时钟沿进行计数,得到的是主时钟的个数,即为输入脉冲的周期
}

使用特权

评论回复
5
香水城| | 2011-10-12 11:21 | 只看该作者
请说明你的操作原理,中断的条件是什么。

另外,要注意变量的表示范围:Frequency=72000000/IC3Value;

使用特权

评论回复
6
xukong| | 2011-10-12 12:23 | 只看该作者
你的采样频率很高,计数器溢出的时间为:65536/72000000 = 910us,而80K的信号周期是:125us,实际上溢出所产生的周期个个数只有不到8个,当数值较小的时候频偏肯定会大的。建议计数器和定时器配合使用,计有限脉冲个数,看所花费的时间,这样在这种应用中应该是比较准的。

使用特权

评论回复
7
xukong| | 2011-10-12 12:31 | 只看该作者
或者是降低你的采样频率,采集到的脉冲个数较多的时候也能够比较准确。因为从启动定时器到采集到第一个脉冲以及采集到最后一个脉冲到计数器溢出,你并没有进行处理,这个就造成了时间差。

使用特权

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

本版积分规则

35

主题

122

帖子

0

粉丝