打印
[STM32F7]

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

[复制链接]
18127|38
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我 现在是通过读取DIR位来判断,搜索论坛的回答,有人说硬件会直接判断 符号位,于是我直接读取TIMX-->CR1的值发现正转的时候为一个向上计数的正值 。
反转的时候是向下计数的正值,我定时器重装载值65535,如果记了10个脉冲就是65525 直接读取不会出现符号位。到底能不能硬件直接判断呢?
沙发
mmuuss586| | 2015-8-2 19:04 | 只看该作者
那你就判断是向上还是向下计数呗;

使用特权

评论回复
板凳
chd121487941|  楼主 | 2015-8-2 19:10 | 只看该作者
mmuuss586 发表于 2015-8-2 19:04
那你就判断是向上还是向下计数呗;

我有超过两种的方法可以判断极性,我就是想知道是否可以直接读取。因为其他方法都存在缺点

使用特权

评论回复
地板
zhou00| | 2015-8-2 20:40 | 只看该作者
chd121487941 发表于 2015-8-2 19:10
我有超过两种的方法可以判断极性,我就是想知道是否可以直接读取。因为其他方法都存在缺点 ...

其他还有什么方法呀,望指教:):)

使用特权

评论回复
5
zhou00| | 2015-8-2 20:40 | 只看该作者
chd121487941 发表于 2015-8-2 19:10
我有超过两种的方法可以判断极性,我就是想知道是否可以直接读取。因为其他方法都存在缺点 ...

其他还有什么方法呀,望指教:):)

使用特权

评论回复
6
chd121487941|  楼主 | 2015-8-2 20:56 | 只看该作者
还可以和上次的值做差,这些都是步态推介的方法,如果可以直接读取是最好的
http://yfrobot.com/thread-2411-1-1.html  这个帖子上就是直接读取的 不知道我读出来的怎么没有符号

使用特权

评论回复
7
forget121| | 2015-8-3 08:42 | 只看该作者
编码器一直用两个IO用.

使用特权

评论回复
8
chd121487941|  楼主 | 2015-8-3 09:16 | 只看该作者
有没有大神能回答到点子

使用特权

评论回复
9
songchenping| | 2015-8-3 09:51 | 只看该作者
chd121487941 发表于 2015-8-2 20:56
还可以和上次的值做差,这些都是步态推介的方法,如果可以直接读取是最好的
http://yfrobot.com/thread-241 ...

如果做差,临界溢出怎么办啊。

使用特权

评论回复
10
chd121487941|  楼主 | 2015-8-3 10:24 | 只看该作者
songchenping 发表于 2015-8-3 09:51
如果做差,临界溢出怎么办啊。

我还没想好解决办法,我之前都是用DIR来判断 后来发现有小概率误判现象,在获取CNT值后DIR发生变化,造成错误判断,感觉十分致命。  我现在用的是比较大小的方法,大于30000一个方向,小于30000另一个方向。如果CNT超过30000个计数,又会误判,好在我现在做的东西不可能在5ms内产生30000个脉冲,算是不太好的解决方法把。这就是我来论坛的求助的原因。

使用特权

评论回复
11
songchenping| | 2015-8-3 10:58 | 只看该作者
可以利用2个或者2个以上的Timer来采集,用其中一个作为参考,利用另外的就可以判断出是正转还是反转。

使用特权

评论回复
12
香水城| | 2015-8-3 11:22 | 只看该作者
可以通过DIR位来判断方向,参考手册上有说明。

使用特权

评论回复
13
qinweixing| | 2015-8-3 11:48 | 只看该作者
给点分我告诉你,因为我做过

使用特权

评论回复
14
huzi2099| | 2015-8-3 14:35 | 只看该作者
很简单,就是DIR位

使用特权

评论回复
15
chd121487941|  楼主 | 2015-8-3 15:32 | 只看该作者
香水城 发表于 2015-8-3 11:22
可以通过DIR位来判断方向,参考手册上有说明。

如果用手波动编码器让它一直正反转就会有几率出现误判,不过还是感谢回答

使用特权

评论回复
16
chd121487941|  楼主 | 2015-8-3 15:33 | 只看该作者
qinweixing 发表于 2015-8-3 11:48
给点分我告诉你,因为我做过

你告诉我,如果答案让我满意的话 一定给高分

使用特权

评论回复
17
chd121487941|  楼主 | 2015-8-3 15:34 | 只看该作者
huzi2099 发表于 2015-8-3 14:35
很简单,就是DIR位

用DIR在极端情况下会出现误判,比如一直处于正反转。

使用特权

评论回复
18
chd121487941|  楼主 | 2015-8-3 15:37 | 只看该作者
本帖最后由 chd121487941 于 2015-8-3 15:40 编辑

今天请教以为高人他告诉我答案。和我上面说的比较大小方法差不多,都是牺牲数据范围来读取,不过写法上明显更高级,又学到新姿势了
retuen (int)((int16_t)(TIM8->CNT));   一行代码直接读取  不用判断DIR就可以得到极性

使用特权

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

使用特权

评论回复
20
冰河w| | 2015-8-4 09:09 | 只看该作者
可以通过DIR位来判断方向

使用特权

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

本版积分规则

11

主题

85

帖子

2

粉丝