ilan2003 发表于 2005-5-14 12:56:48

光电编码器的4倍频率CPLD的实现(verilog-HDL程序+图)

用EPM7128可是实现对光电编码器的4倍频,实现的原理是利用状态机实现的,判断A B的电平的变化。

与单片即的接口很简单,利用8位地址总线,+2个地址线 A0 A1.



用51做的采集模块,通过串口发数据给上位机。



参考文献《光电编码器在电机检测中的应用》

刘阳吴敏曹卫华

(中南大学信息科学与工程学院   长沙   410083)

摘要:本文介绍了电机鉴向、四倍频的原理以及使用EMPM7128S进行鉴向、四倍频、计数的方法,并给出了相应的VHDL程序和仿真图。

关键词:EPM7128S鉴向四倍频VHDL



http://cache.amobbs.com/bbs_upload782111/files_2/armok0149230.jpg



仿真时的波形



http://cache.amobbs.com/bbs_upload782111/files_2/armok0149231.gif







当A0A1=00,缓冲器buf_l,buf_m,buf_h不停的被刷新。到A0A1!=00时,缓冲器buf_l,buf_m,buf_h记录A0A1变化是的数据,A0A1=10data=buf_l,

                  A0A1=11data=buf_m,

                  A0A1=01data=buf_h,





module AB4F(clk,a,b,cp,dire,data,a1,a0);

input clk,a,b,a1,a0;

output dire,cp;

reg        dire,cp;

reg cot;

reg        counter;

reg prestate,state;

reg buf_l,buf_m;

reg        buf_h;

output data;

reg data;

always @(posedge clk)

begin

        state<=a;

        state<=b;

        prestate<=state;

        if((prestate==2'b00)&&(state==2'b10))

        begin

                cp<=1;dire<=1;

        end

        else if((prestate==2'b10)&&(state==2'b11))

        begin

                cp<=1;dire<=1;

        end

        else if((prestate==2'b11)&&(state==2'b01))

        begin

                cp<=1;dire<=1;

        end

        else if((prestate==2'b01)&&(state==2'b00))

        begin

                cp<=1;dire<=1;

        end

        else if((prestate==2'b00)&&(state==2'b01))

        begin

                cp<=1;dire<=0;

        end

        else if((prestate==2'b01)&&(state==2'b11))

        begin

                cp<=1;dire<=0;

        end

        else if((prestate==2'b11)&&(state==2'b10))

        begin

                cp<=1;dire<=0;

        end

        else if((prestate==2'b10)&&(state==2'b00))

        begin

                cp<=1;dire<=0;

        end

        else

        begin

                if(cp)

                begin

                        cot<=cot+1;

                        if(cot==1)

                        begin

                                cot<=0;

                                cp<=0;

                        end

                end

        end       

end

always @(negedge cp)

begin

        if(dire)

                begin

                        counter<=counter+1;

                end

        else

                begin

                        counter<=counter-1;

                end

end



always @(posedge clk)

       begin

                case({a1,a0})

       3'b00:

                        begin

                        buf_h<=counter;

                        buf_m<=counter;

                        buf_l<=counter;

                              data<=8'hzz;

                        end

       3'b01:data=buf_l;

       3'b11:data=buf_m;

       3'b10:data=buf_h;

        /*default:

                        begin

                        end*/

                endcase

end   endmodule










-----此内容被ilan2003于2005-05-14,13:06:37编辑过

jackiezeng 发表于 2005-5-14 15:42:36

ilan2003 小松工程   牛人~!

HIGHWAY 发表于 2005-5-14 17:35:13

呵呵,好东西啊

zhaoxucsu 发表于 2005-5-14 18:10:35

楼主是工大的么?

ilan2003 发表于 2005-5-14 18:37:00

是啊,楼上的怎么知道

不是哈工大 的
-----此内容被ilan2003于2005-05-14,18:49:15编辑过

dfgeoff 发表于 2005-5-14 21:02:02

这个电路里是不是还有个高频时钟clk?

ilan2003 发表于 2005-5-14 21:57:32

是的,就是那个clk

最好是10mhz以上的,我用4mhz仿真的,如果频率太低,光电编码器转的快时就会丢脉冲

zhaoxucsu 发表于 2005-5-14 22:08:53

楼主

我也是工大的哦

zhaoxucsu 发表于 2005-5-14 22:14:47

CSU

嘿嘿



btw,那张图里面是7128么?怎么看起来这么大?

zhaoxucsu 发表于 2005-5-14 22:14:47

CSU

嘿嘿



btw,那张图里面是7128么?怎么看起来这么大?

violit 发表于 2007-2-10 15:36:42

学习了!!!!~~~~

sflfw 发表于 2007-2-10 21:10:05

曹卫华

(中南大学信息科学与工程学院   长沙   410083)





我说怎么听到这名字熟咯!

zhaoxucsu 发表于 2007-2-11 15:36:23

【11楼】 sflfw,你是工大的么?莫非是信息院的?

mirrorok 发表于 2007-2-12 08:30:26

http://www.avrw.com/article/art_100_2087.htm

http://www.isweek.com/tec_article/article_detail.asp?article_id=117



EPM7128S在电机检测中的应用



点击此处打开armok01144497.pdf

TMS320C240的正交编码脉冲电路及其应用



点击此处打开armok01144498.pdf

mirrorok 发表于 2007-2-12 08:31:39

搂住是否能分享一下代码的项目文件??

ilan2003 发表于 2007-2-13 08:58:20

不需要项目文件的,我的原代码就在帖子上啊

violit 发表于 2007-2-14 16:06:51

http://www.smarteer.com/productmic.htm

这是国内一家做运动控制的公司,他们好像有这类产品,1~4路编码器处理逻辑。

但是相关的资料没找到。

work_find 发表于 2007-6-22 10:10:51

光电编码器,应该说的是增量式旋转编码器,假如仅用于方向判断和加减计数,最简单的可以用D触发器判断方向,AB相异或为2倍频率,将此2倍频率信号移相后,再与该2倍频率信号相异或偏是4倍频率了,送给加减计数器就可以了,目的就是如此,很简单,2片74系列就可以了

ghost2 发表于 2007-6-22 11:14:14

楼主的电源火线端子外露,注意安全啊,最好用热融胶封一下

16ysa 发表于 2010-4-23 09:05:01

mark!

281229961 发表于 2010-5-6 16:19:02

很好的东东,我也是在搞4倍频电路的

fengzheng 发表于 2010-12-13 11:27:23

回复【楼主位】ilan2003 小松工程
-----------------------------------------------------------------------

请教楼主啊,我的采集是用信号原产生的正交脉冲,但是现在就是得不到正确的值,是不是硬件上的问题,硬件上要不要加隔离 什么东西了啊

fengzheng 发表于 2010-12-14 14:03:39

回复【楼主位】ilan2003 小松工程
-----------------------------------------------------------------------

楼主你这个好像只能一个方向计数正确啊,反方向就不对了啊 ,是这样吗,请问,谢谢,我现在就在做这个东西,老实采集不对

shdjdq 发表于 2010-12-16 13:42:10

看过

cexo 发表于 2011-10-23 14:25:48

ilan2003 小松工程:

用EMPM7128S最大能实现多少路的计数,A/B/R算一路。

89712568 发表于 2011-11-9 10:06:15

我试试行不行

breeze_one 发表于 2011-11-21 10:31:40

我试了下,貌似不行嘛,换向很明显会丢脉冲嘛,不换向有时候都丢

lhao2199 发表于 2012-5-5 20:01:21

与单片即的接口很简单,利用8位地址总线,+2个地址线 A0 A1.
应该是8位数据总线吧,是不是打错字了

kingreat 发表于 2012-8-8 10:43:58

记号MARK
页: [1]
查看完整版本: 光电编码器的4倍频率CPLD的实现(verilog-HDL程序+图)