打印
[STM32F1]

定时器输入捕获问题

[复制链接]
1326|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huhaomcu|  楼主 | 2015-5-11 15:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用STM32F1xxx内部定时器TIMER4对其两个通道进行输入脉冲脉宽测量,采用的是上升沿捕获中断,计算脉宽的思路为用后一次的捕获值减去前一次的捕获值,但现有如下问题不明:STM32F的捕捉方式为当启动TIMER4后,TIM4_CNT开始增加,当发生上升沿中断后TIM4_CNT中的值复制至TIM4_CCR3,TIM4_CNT中的值不会自动清0,问题来了!假如我第一个上升沿捕获值为TIM4_CNT = 0XFFFC,那么第二次上升沿的捕获值就有可能发生溢出,如TIM4_CNT = 0X000A,那么计算脉宽就不可能使用第二次的值去减去第一次的值了!请问这种情况要如何处理,前提是中断后不能人为清掉TIM4_CNT中的值,因为我是两路采集。
沙发
mmuuss586| | 2015-5-11 23:08 | 只看该作者
那就不要清呗;
测出来的值,发现第2次值,比第次值小,说明溢出了;
程序应该可以算出来;

使用特权

评论回复
板凳
wind~风| | 2015-5-11 23:16 | 只看该作者
如楼上所说,先检查比较两次值的大小,分别用不同的算法就可以了

使用特权

评论回复
地板
huhaomcu|  楼主 | 2015-5-12 09:14 | 只看该作者
mmuuss586 发表于 2015-5-11 23:08
那就不要清呗;
测出来的值,发现第2次值,比第次值小,说明溢出了;
程序应该可以算出来; ...

明白了!软件计算如下:
if(No_2_Value > No_1_Value)
{
    width = No_2_Value - No_1_Value;
}
else
{
   width = (0xFFFF-N0_1_Value)+No_2_Value)
}
但现在还有个小问题就是脉宽有时存在误差,我的PWM输入波形脉宽为2ms,可中间出现了几次3ms,一般是什么原因引起的咧?是不是我的软件计算存在问题??/

使用特权

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

本版积分规则

189

主题

508

帖子

3

粉丝