搜索
bottom↓
回复: 13

那种音响上用的小型旋转编码器怎么驱动?只要编程思路,和原理,不要原码。

[复制链接]

出0入8汤圆

发表于 2010-11-23 08:50:20 | 显示全部楼层 |阅读模式
我昨天鼓捣一晚上怎么就是往左转有加也有减呀?按说该都是加呢。我用手机发的贴子所以程序就不发了。

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2010-11-23 08:59:17 | 显示全部楼层
把你的编码器图发上来,有一种的数字的,有一种是可高低电平左右转不同的。

出0入0汤圆

发表于 2010-11-23 11:17:43 | 显示全部楼层
设编码器有ab两根线,当a电平改变一次,则编码器改变数量1;每次a为高时检测b,如果b为高则编码器正转,为低则反转。以上ab和正反都是相对的。

出0入0汤圆

发表于 2010-11-23 11:23:29 | 显示全部楼层
我用过一种数字的(可以360°旋转),它有两个输出信号,拿一个输出信号做“时钟”,在“时钟”的下降沿检测另一个信号的电平,这样来区分左转还是右转
如果你的音响使用这种,出现这种情况的原因可能是编码器使用太久,导致“时钟”和信号有抖动或不同步

出0入0汤圆

发表于 2010-11-23 11:34:44 | 显示全部楼层
基本思路:旋转编码器一般是两组触点,在旋转过程依次 A闭合 AB闭合 B闭合 AB断开,反方向旋转则为 B闭合 AB闭合 A闭合 AB断开,按这个过程来处理即可,注意机械触点要做去抖动处理。
另外一点小经验,不要直接用手捏着转轴来旋转,要套上旋钮的外壳,没有外壳的话,随便找个东西夹住来旋转,比如衣夹。不要问我为什么,我也不知道,只是我第一次写这种程序时,调了好多天都没调通,后来发现用镊子夹住转轴来旋转就OK了。

出0入0汤圆

发表于 2010-11-23 13:26:15 | 显示全部楼层
你的肯定是没消抖
我第一次用也是这样
后来并联的102电容消抖

出0入8汤圆

 楼主| 发表于 2010-11-23 19:22:05 | 显示全部楼层
下学我回去试试

出0入0汤圆

发表于 2010-11-24 08:24:15 | 显示全部楼层
用个示波器fuck一下,一清二楚。

出0入0汤圆

发表于 2010-11-25 12:20:58 | 显示全部楼层
你可以参考一下这个帖子中我在21楼的回复
http://www.ourdev.cn/bbs/bbs_content_all.jsp?bbs_sn=857853

这种编码器的A、B两条线的其中一条线的状态是不稳定的。建议你把A、B两条线互换一下试试。

出0入0汤圆

发表于 2010-11-25 22:41:34 | 显示全部楼层
those switches have two pins out: A and B. and their states change depending on the rotation.

so you can look up a table, based on the previous states of A+B and the current states of A+B -> state machine.

when you rotate the switch, A goes 0, 1, 1, 0; and B goes 0, 0, 1, 1;

so if AB is 10 (the 2nd position), and AB was 11 (the 3rd position), you know the switch has moved counterclockwise.

here is the code.

===========code==================
//determine increment / decrement of the encoder
unsigned char encoder_read(PORT_TYPE port, PORT_TYPE pin_a, PORT_TYPE pin_b) {
        const signed char ABs_states[]={0, -1, 1, 0, 1, 0, 0, -1, -1, 0, 0, 1, 0, 1, -1, 0};
        static unsigned char encoder_output=0x00;
        static unsigned char ABs=0x00;                                //AB key read out, Previous in the high 2 bits and current in the low two bits;
        unsigned char tmp;

        ABs <<=2;                                                //left 2 bits now contain the previous AB key read-out;
        tmp=IO_GET(port, pin_a | pin_b);                        //read ab pins
        if (tmp & pin_a) ABs |= 0x02;                        //set the 1st bit if A is high now;
        if (tmp & pin_b) ABs |= 0x01;                        //set the 0th bit if B is high;
        ABs &= 0x0f;                                        //only retain ABs' last 4 bits (A_previous, B_previous, A_current, B_current)
        encoder_output += ABs_states[ABs];
        return encoder_output;                        //return the absolute value
        //return ABs_states[ABs];                        //return the relative value (+1 = clockwise, 0, -1 = counterclockwise)
}

========end code============

depending on which "return" statement you use, you can either get the absolute value or the relative value of the switches.

出0入0汤圆

发表于 2010-11-25 23:55:31 | 显示全部楼层
我加104消抖就可以了,软件上没加,非常好用。。。

出0入0汤圆

发表于 2010-12-2 01:58:54 | 显示全部楼层
上图 看看啊~~~~~~~~~~~~~~~~~~~~~~~

出0入0汤圆

发表于 2010-12-2 08:25:41 | 显示全部楼层
回复【4楼】wuyya
基本思路:旋转编码器一般是两组触点,在旋转过程依次 a闭合 ab闭合 b闭合 ab断开,反方向旋转则为 b闭合 ab闭合 a闭合 ab断开,按这个过程来处理即可,注意机械触点要做去抖动处理。
另外一点小经验,不要直接用手捏着转轴来旋转,要套上旋钮的外壳,没有外壳的话,随便找个东西夹住来旋转,比如衣夹。不要问我为什么,我也不知道,只是我第一次写这种程序时,调了好多天都没调通,后来发现用镊子夹住转轴来旋转就ok了。
-----------------------------------------------------------------------

人体干扰?

出0入0汤圆

发表于 2012-5-29 13:52:37 | 显示全部楼层
wandy2010 发表于 2010-12-2 08:25
回复【4楼】wuyya
基本思路:旋转编码器一般是两组触点,在旋转过程依次 a闭合 ab闭合 b闭合 ab断开,反方 ...

我怀疑是那个松手检测的问题,因为实际应用时会出现,没有松手的情况,就是最后可能没有拉高,或者拉低
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 00:30

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表