打印

有谁做过旋转编码器,帮我指点下。。

[复制链接]
4144|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
namefull|  楼主 | 2009-4-14 12:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我先画了下原理图,大家看看。指点下错误啊!!
程序很迷茫啊,没做过脉冲计数这种。。有谁做过给我发些资料吧
谢谢啦。我的邮箱:71914423@qq.com

相关帖子

沙发
hq_y| | 2009-4-14 12:24 | 只看该作者

旋转编码器有多种输出方式,一般是推挽的多。。。

他的供电跟你的供电可以共地也可以不共地;
一般是有一个比较大的范围的,比如8~32V;
具体要看资料。。。
你把光耦隔离的输出,接到外部中断是比较好的;
这样来一个脉冲,计数一次;
如果考虑到+ - 数
那可以使用74hc74硬件鉴相得到方向信号
因为A、B是正交的波形
别的没有什么了
都是软件算法的事情了
去找旋编厂家的资料吧。。。

使用特权

评论回复
板凳
mohanwei| | 2009-4-14 12:26 | 只看该作者

百度

使用特权

评论回复
地板
li_mu| | 2009-4-14 12:28 | 只看该作者

建议对编码器输出信号整形

以便输出比较纯正的信号(要把信号整形到0-5v或0-3.3V)

这样在单片机或其他方式(如8253)计数时候不至于误码影响速度精度

使用特权

评论回复
5
hq_y| | 2009-4-14 12:43 | 只看该作者

嗯嗯使用一片hc14是个不坏的注意。。。

使用特权

评论回复
6
namefull|  楼主 | 2009-4-14 13:15 | 只看该作者

感谢hq_y li_mu

hq_y 我也正在头痛鉴相的问题呢
74hc74硬件鉴相得到方向信号,这个怎么连呢 什么原理啊?

li_mu  对输出整形的话用什么芯片呢?  麻烦提供点方法 谢谢啊

使用特权

评论回复
7
hq_y| | 2009-4-14 14:19 | 只看该作者

如何鉴相:

d触发器,A接cp、B接d,Q输出就是方向信号。。。

使用特权

评论回复
8
yewuyi| | 2009-4-14 14:36 | 只看该作者

如果速度不快的话,也可以看看我前几天的讨论的软件方法

http://www.21icbbs.com/club/bbs/showEssence.asp?id=10599

使用特权

评论回复
9
lsqdesign| | 2009-4-14 14:47 | 只看该作者

建议先拿示波器看一下

用软件鉴相就行了。
A,B输出的是相差90度的两个方波,方向不同相差就不同。你拿示波器看一下输出波形应该就知道怎么处理了。
不过要注意A,B输出最好用个小电容滤一下毛刺。

使用特权

评论回复
10
namefull|  楼主 | 2009-4-14 19:52 | 只看该作者

问一下 hq_y

74hc74 输出Q接哪里呢?
是不是接个IO口,然后看它高低电平判断正反转就可以了?

使用特权

评论回复
11
hq_y| | 2009-4-14 19:58 | 只看该作者

74hc74 输出Q接哪里呢?

可以接到任何一个I/O口上。。。

使用特权

评论回复
12
dengm| | 2009-4-14 22:10 | 只看该作者

硬件没问题, 给你一个算法

P1.2    0  0  1  1  0  0  1  1 ....
P1.1    0  1  1  0  0  1  1  0 ....
        0  1  x  2  0  1  x  2 ....

        TICKS4DISPLAY EQU 8

        P_A      BIT   P1.1
        P_B      BIT   P1.2
        P_A_BAK  BIT  20H.1    
        P_B_BAK  BIT  20H.2
        P_CT    DATA  30H 
        TICK    DATA  31H
 ;---------------------------------
       ORG 000H
         NOP
         AJMP START
       ORG 000BH   ;;;INT T0
         JNB P_B, L_T0_0X 
         JNB P_A, L_T0_10
         AJMP L_T0_11

       ORG 050H
L_T0_0X:
        JB P_A, L_T0_01 
           ; L_T0_00  
           NOP
           NOP
           CLR P_A_BAK
           CLR P_A_BAK
           SJMP L_T0_EXIT

L_T0_01:
          SETB P_A_BAK
          JBC P_B_BAK, L_T0_01_10
;L_T0_01_00:  ; 00 到 01 OR 01到01
            NOP
            DJNZ TICK, INT_RET
            SJMP L_T0_EXIT


L_T0_01_10:  ; 10 到 01
            DEC  P_CT       
            DJNZ TICK, INT_RET
            SJMP L_T0_EXIT

L_T0_10:
           SETB P_B_BAK
           JBC P_A_BAK, L_T0_10_01 
             ; 00-->10 OR 10->10
              NOP
              DJNZ TICK, INT_RET
              SJMP L_T0_EXIT

L_T0_10_01:  ; 01 到 10
             INC P_CT
             DJNZ TICK, INT_RET
             SJMP L_T0_EXIT

L_T0_11:
       ;p_b=1 p_a=1 不处理
       NOP
       NOP
       DJNZ TICK, INT_RET
       SJMP L_T0_EXIT

INT_RET:
       RETI

L_T0_EXIT:
         ;  DJNZ TICK, INT_RET
         MOV TICK, #TICKS4DISPLAY 
         ACALL INT_RET
            ;------ DISPLAY 模块
            ;------ KEYS  模块
            ;....
         RET
     










         

使用特权

评论回复
13
dengm| | 2009-4-14 22:38 | 只看该作者

MAIN_LOOP

    MAIN_LOOP:
 ;SUB_RUN:
        CLR A
        XCH A, P_CT
        JZ  RUN_EXIT
          MOV B, #00 
          JNB ACC.7, L_RUN_INC  
            MOV B, #0FFH
L_RUN_INC:
            CLR ES
              ; 在UART中断要发送RUN_L 时, 
              ; 把RUN_H, RUN_M copy 到 run_h2, run_m2
              ; 后继发送run_m2及run_h2, 保证数据的完整性 
            ADD A, RUN_L
            MOV RUN_L, A
            MOV A, B
            ADDC A, RUN_M
            MOV RUN_M, A
            MOV A, B
            ADDC A, RUN_H
            MOV RUN_H, A
            SETB ES

            ACALL MODIFY_DISPLAY_BUF

RUN_EXIT:
            ;;;;;; 
            ; .......

            AJMP MAIN_LOOP   

使用特权

评论回复
14
walnutcy| | 2009-4-15 00:13 | 只看该作者

中断采样即可, 速度不快的话,

或者用AD采样,1个IO,要注意波形的最小时间

使用特权

评论回复
15
mcufan001| | 2009-4-15 09:23 | 只看该作者

呵呵,一个小小编码开关又光藕又中断,AD采样什么的

直接A,B上拉后接I/O就可以了

使用特权

评论回复
16
namefull|  楼主 | 2009-4-15 11:21 | 只看该作者

回复:dengm mcufan001

亲爱的dengm ~ 谢谢你啦!  汇编好久没用了 还没仔细看呢 先记下来!!
好好研究下!!
用IO 接收   用算法做 好麻烦啊
我也准备用外部中断做~就不清楚转向问题了  准备用硬件鉴相


mcufan001  大哥。。你算法用的好,编程猛 肯定硬件就简单了么!
对于初学者。宁愿硬件麻烦一些 也希望编程简单些啊! 调试很麻烦的

使用特权

评论回复
17
namefull|  楼主 | 2009-4-15 11:24 | 只看该作者

尴尬!

我上边说的话好像很矛盾啊  呵呵
一般硬件简单  编程也简单些!  呵呵

使用特权

评论回复
18
dengm| | 2009-4-15 12:42 | 只看该作者

12MHZ 51, 20周期定时, 可达 0.7百万步/分

使用特权

评论回复
19
懒人| | 2009-4-15 13:59 | 只看该作者

up

使用特权

评论回复
20
namefull|  楼主 | 2009-4-15 18:25 | 只看该作者

12MHZ 51, 20周期定时, 可达 0.7百万步/分 ?

12MHZ 51, 20周期定时, 可达 0.7百万步/分   ?

怎么讲?

使用特权

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

本版积分规则

6

主题

21

帖子

0

粉丝