发新帖我要提问
12
返回列表
打印
[STM32F7]

stm32的编码器模式的正反转到底怎么判断的?

[复制链接]
楼主: chd121487941
手机看帖
扫描二维码
随时随地手机跟帖
21
chd121487941|  楼主 | 2015-8-4 09:12 | 只看该作者 回帖奖励 |倒序浏览
s_f_tan 发表于 2015-8-4 08:33
用dir来判断的话,在0位置编码器抖动话,很容易出错的,硬件不一定响应过来的 ...

是的  请问你是怎么判断的呢?

使用特权

评论回复
22
s_f_tan| | 2015-8-4 13:44 | 只看该作者
软件查询定时器的值,在一定时间的差值大于某个数,即可认定为上溢或下溢。再来处理高16位的计数。
上面有个链接,https://bbs.21ic.com/icview-1031056-1-1.html。自己看下。

使用特权

评论回复
23
s_f_tan| | 2015-8-4 13:46 | 只看该作者
chd121487941 发表于 2015-8-3 10:24
我还没想好解决办法,我之前都是用DIR来判断 后来发现有小概率误判现象,在获取CNT值后DIR发生变化,造成 ...

编码器物理上面有个脉冲极限的,在查询的时间内最大也只可能计到某个数,只要你的判断值大于这个,就不会误判断了。

使用特权

评论回复
24
huzi2099| | 2015-8-4 16:17 | 只看该作者
chd121487941 发表于 2015-8-3 15:34
用DIR在极端情况下会出现误判,比如一直处于正反转。

什么叫一直正反???

使用特权

评论回复
25
huzi2099| | 2015-8-4 16:19 | 只看该作者
chd121487941 发表于 2015-8-3 15:37
今天请教以为高人他告诉我答案。和我上面说的比较大小方法差不多,都是牺牲数据范围来读取,不过写法上明显 ...

你这个是位置不是方向

使用特权

评论回复
26
huzi2099| | 2015-8-4 16:20 | 只看该作者
s_f_tan 发表于 2015-8-4 08:33
用dir来判断的话,在0位置编码器抖动话,很容易出错的,硬件不一定响应过来的 ...

抖动自然无解了,得用软件处理

使用特权

评论回复
27
chd121487941|  楼主 | 2015-8-5 16:25 | 只看该作者
huzi2099 发表于 2015-8-4 16:19
你这个是位置不是方向

这个是方向啊,位置是通过差值判断的吧?,返回值直接就带上正负极了

使用特权

评论回复
28
chd121487941|  楼主 | 2015-8-5 16:26 | 只看该作者
huzi2099 发表于 2015-8-4 16:17
什么叫一直正反???

就是用手来正转和反转编码器啊

使用特权

评论回复
29
huzi2099| | 2015-8-5 23:30 | 只看该作者
chd121487941 发表于 2015-8-5 16:25
这个是方向啊,位置是通过差值判断的吧?,返回值直接就带上正负极了

:L,我们说的是一个东西吧,stm32的定时器编码器模式.
CNT就是位置计数,这个是由硬件完成的,不需要软件参与,正传+计数,反转-计数,是不?

使用特权

评论回复
30
huzi2099| | 2015-8-5 23:35 | 只看该作者
本帖最后由 huzi2099 于 2015-8-5 23:38 编辑

CNT初始化时给一初值,这个值就是你码盘整圈计数值然后就不用管了.
比如你1000线码盘上下都计数则一圈4000个计数,加溢出回0,减溢出修正为4000,你的65532是啥东东?
大概这个编码器模式你用法有些问题.

使用特权

评论回复
31
chd121487941|  楼主 | 2015-8-8 13:26 | 只看该作者
问题得到解决 我结贴咯

使用特权

评论回复
32
FireRiver9| | 2015-8-8 16:21 | 只看该作者
好像是通过DIR位来判断方向

使用特权

评论回复
33
尤彼卡| | 2015-8-8 17:08 | 只看该作者
retuen (int)((int16_t)(TIM8->CNT)); 哦,能不能详细解释一下

使用特权

评论回复
34
lwsn| | 2015-8-8 22:06 | 只看该作者
retuen (int)((int16_t)(TIM8->CNT));   一行代码直接读取  不用判断DIR就可以得到极性

使用特权

评论回复
35
zhangxuzhaodan| | 2016-9-6 15:44 | 只看该作者
chd121487941 发表于 2015-8-8 13:26
问题得到解决 我结贴咯

大哥,我想问问你编码器的问题,谢谢了。能加我QQ吗?624323244,谢谢了

使用特权

评论回复
36
zhangxuzhaodan| | 2016-9-6 15:45 | 只看该作者
lwsn 发表于 2015-8-8 22:06
retuen (int)((int16_t)(TIM8->CNT));   一行代码直接读取  不用判断DIR就可以得到极性 ...

怎么判断啊,大神

使用特权

评论回复
37
quray1985| | 2017-10-17 11:53 | 只看该作者
大神,是怎么判断正负方向的啊?

使用特权

评论回复
38
cbuestc| | 2020-1-28 21:26 | 只看该作者
楼主具体咋解决的,问完就跑了了

使用特权

评论回复
39
cbuestc| | 2020-1-28 21:42 | 只看该作者
我也遇到了这个问题

使用特权

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

本版积分规则