yujie 发表于 2010-11-18 10:30:31

用CPLD实现的1x,2x,4x通用正交编码器解码模块。

近日学习CPLD,用到光电式正交编码器,看了些网上资料,消化一下。写了这个1x/2x/4x通用模块。模块占用5个宏单元,跟网上提供的基本一样,程序还算清晰。欢迎各位指点:

//==============================================================
// ENCODER
//==============================================================
module Encoder (clk, A, B, pulse, dir, x2, x4);

input   clk, A, B, x2, x4;
output    pulse, dir;

reg      A1, B1, reg_cp, tim_cp, dir, pulse;
wire    change = ({A1, B1} != {A, B});      // 发生状态变化时保持一个时钟周期'1'状态

always @ (posedge clk) begin
    {A1, B1} <= {A, B};      // 一个时钟后保存端口状态
   
    if (change)                // 改变状态时检测方向
      case ({A, B})
            2'b00: begin
                dir <= ({A1, B1} == 2'b01);
                reg_cp = x2 | x4;
            end
            2'b01: begin
                dir <= ({A1, B1} == 2'b11);
                reg_cp = x4;
            end
            2'b11: begin
                dir <= ({A1, B1} == 2'b10);
                reg_cp = 1'b1;
            end
            2'b10: begin
                dir <= ({A1, B1} == 2'b00);
                reg_cp = x4;
            end
      endcase
   
    tim_cp <= change & reg_cp;      // 使脉冲滞后方向一个时钟
    pulse<= tim_cp;
end

endmodule

yujie 发表于 2010-11-18 10:41:54

http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_598790YDYDB3.jpg
1倍频 (原文件名:1x.jpg)

http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_598791F6506H.jpg
2倍频 (原文件名:2x.jpg)

http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_598792NR0TCJ.jpg
4倍频 (原文件名:4x.jpg)

281229961 发表于 2010-11-18 10:48:47

写的很不错啊
编码器有抖动干扰的   也要做处理

yujie 发表于 2010-11-18 11:00:53

在板子上测试过,没问题。板子用光耦隔离,也起到抗干扰作用。同时建议如EPM240等支持PIN施密特输入,设置为施密特输入,效果会好很多。这样程序上基本不用再做抗干扰处理了。

chenerbox 发表于 2010-11-18 11:11:26

标记一下

ndt2000 发表于 2010-11-18 16:12:19

mark

oldtom 发表于 2010-11-18 16:28:33

请教下 1x,2x,4x 是什么意思呢?

yujie 发表于 2010-11-18 17:03:10

1x,2x,4x 指倍频系数。如正常600线的编码器。1x时一圈接收600个脉冲,2x则为1200脉冲,4x为2400脉冲。

wso75839840 发表于 2010-11-18 19:42:43

mark

sxndwg 发表于 2011-10-10 09:09:34

正交编码解码

lyl0719 发表于 2011-10-10 13:10:10

楼主你好,我用EP2C8Q208C8芯片,不知道如何设置为施密特输入,请求你的帮助,谢谢!

health 发表于 2011-10-10 14:28:48

前面加数字滤波就更好了。

89712568 发表于 2011-11-9 10:11:50

辛苦了。。比较有用的资料

Tomas_Yung 发表于 2011-11-10 21:52:15

http://cache.amobbs.com/bbs_upload782111/files_47/ourdev_693942S15NYJ.jpg
(原文件名:Unnamed.jpg)

效果还不错

liurangzhou 发表于 2011-11-11 08:49:39

mark

bin8 发表于 2011-11-11 09:16:16

mak

trent5145 发表于 2011-11-11 09:21:30

mark

xiaomifeng 发表于 2011-11-16 18:13:41

这个很早就做过了,两路信号正交,可以按编码信号得到4倍频,现在是想做到8X和16X

nietao 发表于 2011-11-17 13:53:42

写的很好,值得借鉴,但是貌似没有做误码处理!

yujie 发表于 2011-11-22 20:00:20

4x倍频是在硬件机制上实现的,是完全可靠的。如果做8x或16x只能利用软件倍频,不知道是否可行。

slnet 发表于 2011-11-23 06:14:48

非常实用的资料,期待更高的倍频啊。

vermon 发表于 2011-11-28 11:52:15

非常好啊!!!

igoal 发表于 2011-12-19 14:10:54

是不是可以增加个wire error = ({A1, B1} ^ {A, B});来检测下AB出错,如果从AB=00直接跳到AB=11或者AB=01跳到AB=10都报个错,这样在方向判断前再加上if ((change)&&(error!=2'b11)) 是不是更好呢?

zhangbl 发表于 2012-2-7 19:14:37

楼主,能将2个输入按原来的样子4倍频吗?谢谢

lilolog 发表于 2012-2-12 15:00:49

mark

jzczzcy 发表于 2012-2-12 15:32:51

mark 学习

mailtoyj518168 发表于 2012-2-13 14:05:34

mark 学习

odazhou 发表于 2012-4-12 14:25:08

学习了,谢谢

cdlxzlp 发表于 2012-10-5 22:23:25

好 东西 今天才看到

wzhansen 发表于 2012-10-8 17:29:29

谢谢
参考一下

Yoran 发表于 2013-1-2 22:32:22

记号,以后再看

steven_ye 发表于 2013-1-22 19:08:11

好东西 标记一下

szmachine 发表于 2013-1-22 19:45:56

这个好,正在开发的东西可以参照一下!

samcen 发表于 2014-2-13 16:47:46

你好,我正想要你这个编码器接口模块,QQ292747058

清新怡人 发表于 2018-8-6 00:43:41

好贴,写得很好,谢谢分享。

老徐 发表于 2018-8-6 10:50:45

清新怡人 发表于 2018-8-6 00:43
好贴,写得很好,谢谢分享。

最喜欢看挖坟贴

unnormal 发表于 2018-8-8 14:33:03

不错   谢谢分享
页: [1]
查看完整版本: 用CPLD实现的1x,2x,4x通用正交编码器解码模块。