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

2019-10-15 01:16发布

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

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

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

示波器是这样的

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

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

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

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

求用过的分享一下心得
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
lycreturn
1楼-- · 2019-10-15 05:09
回复【5楼】tao475824827:
---------------------------------
回复【6楼】霸王表急:
---------------------------------
 右键 go to definition    最后定位到 函数 static void TI1_Config(....)
对照参考手册, 看该函数的内容就明白了,其实那个滤波设置就是 TIMx->CCMRx 的 IC1F[3:0]
wangshujun
2楼-- · 2019-10-15 08:50
你这个波形明显是正交编码器输出,stm的定时器会直接对这个计数的,像这种干扰自动就会被忽略
lycreturn
3楼-- · 2019-10-15 12:37
就是输入捕获滤波,由TIMx->CCMRx(捕获/比较模式寄存器)控制
tao475824827
4楼-- · 2019-10-15 17:06
回复【2楼】wangshujun:
---------------------------------
可是之前TIM4_ICInitStructure.TIM_ICFilter设置成0的时候,误差就很大啊
tao475824827
5楼-- · 2019-10-15 20:22
 精彩回答 2  元偷偷看……
霸王表急
6楼-- · 2019-10-15 22:56
回复【3楼】lycreturn:
---------------------------------是IC1SPSC吗?

一周热门 更多>