突然觉得TIM4_ICInitStructure.TIM_ICFilter这个设置好有用,但是不懂为什么,想问下

2019-10-15 01:16发布

我这两天用stm32做电机控制,
中间有用到扭矩传感器。
就是需要测频率,根据换算关系得到扭矩。
我用的捕获方式,捕获每个周期的电平。

刚开始的时候,信号挺稳定的,读的数据也准确。

我把步进电机驱动器一打开,数据就各种异常,
逻辑分析仪测了一下,觉得不行
于是加了一些信号调理电路,之后再测,看起来波形是没有问题的了:(上下行对比)

示波器是这样的

看波形没什么问题了,但是捕获出来的值就是各种不正常。

正常是100us,实际会突然跳到50或者150这么大范围。

想了很多办法也不行了,就突然发现了TIM4_ICInitStructure.TIM_ICFilter这个设置把它从0x00改到了0x0f,之后数据就正常了。
网上查了一下,也没有查到是怎么工作的,
因为我一直用库函数,感觉不是很理解究竟是操作了哪个寄存器,是怎么实现的。

现在问题虽然已经解决了,但是还是想知道这个是设置了什么呀?

求用过的分享一下心得
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
9条回答
快乐柠檬
2019-10-15 23:56
这个TIM4_ICInitStructure.TIM_ICFilter是输入捕获用来滤波的,当pwm输入进来,会有一个频率对输入的高电平采样,这个频率是TIMx_CR1的 CKD[1:0]的设置来确定的,当TIMx_CCMR1的ICnF[3:0]为F,那么他就会以前面说的频率对高电平采样8次,来确定是不是正真的高电平,当这个高电平小于8次采样,那么就把它滤除

一周热门 更多>