搜索
bottom↓
回复: 28

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

[复制链接]

出0入4汤圆

发表于 2005-5-14 12:56:48 | 显示全部楼层 |阅读模式
用EPM7128可是实现对光电编码器的4倍频,实现的原理是利用状态机实现的,判断A B的电平的变化。

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



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



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

刘阳  吴敏  曹卫华

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

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

关键词:EPM7128S  鉴向  四倍频  VHDL







仿真时的波形











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

                  A0A1=11  data=buf_m,

                  A0A1=01  data=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 [1:0]cot;

reg        [23:0] counter;

reg [1:0]prestate,state;

reg [7:0] buf_l,buf_m;

reg        [7:0] buf_h;

output [7:0]data;

reg [7:0]data;

always @(posedge clk)

begin

        state[1]<=a;

        state[0]<=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[23:16];

                        buf_m<=counter[15:8];

                        buf_l<=counter[7:0];

                                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编辑过

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

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

出0入0汤圆

发表于 2005-5-14 15:42:36 | 显示全部楼层
ilan2003 小松工程     牛人~!

出0入0汤圆

发表于 2005-5-14 17:35:13 | 显示全部楼层
呵呵,好东西啊

出0入0汤圆

发表于 2005-5-14 18:10:35 | 显示全部楼层
楼主是工大的么?

出0入4汤圆

 楼主| 发表于 2005-5-14 18:37:00 | 显示全部楼层
是啊,楼上的怎么知道

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

出0入0汤圆

发表于 2005-5-14 21:02:02 | 显示全部楼层
这个电路里是不是还有个高频时钟clk?

出0入4汤圆

 楼主| 发表于 2005-5-14 21:57:32 | 显示全部楼层
是的,就是那个clk

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

出0入0汤圆

发表于 2005-5-14 22:08:53 | 显示全部楼层
楼主

我也是工大的哦

出0入0汤圆

发表于 2005-5-14 22:14:47 | 显示全部楼层
CSU

嘿嘿



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

出0入0汤圆

发表于 2005-5-14 22:14:47 | 显示全部楼层
CSU

嘿嘿



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

出0入0汤圆

发表于 2007-2-10 15:36:42 | 显示全部楼层
学习了!!!!~~~~

出0入0汤圆

发表于 2007-2-10 21:10:05 | 显示全部楼层
曹卫华

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





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

出0入0汤圆

发表于 2007-2-11 15:36:23 | 显示全部楼层
【11楼】 sflfw,你是工大的么?莫非是信息院的?

出0入0汤圆

发表于 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

出0入0汤圆

发表于 2007-2-12 08:31:39 | 显示全部楼层
搂住是否能分享一下代码的项目文件??

出0入4汤圆

 楼主| 发表于 2007-2-13 08:58:20 | 显示全部楼层
不需要项目文件的,我的原代码就在帖子上啊

出0入0汤圆

发表于 2007-2-14 16:06:51 | 显示全部楼层
http://www.smarteer.com/productmic.htm

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

但是相关的资料没找到。

出0入0汤圆

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

出0入0汤圆

发表于 2007-6-22 11:14:14 | 显示全部楼层
楼主的电源火线端子外露,注意安全啊,最好用热融胶封一下

出0入0汤圆

发表于 2010-4-23 09:05:01 | 显示全部楼层
mark!

出0入0汤圆

发表于 2010-5-6 16:19:02 | 显示全部楼层
很好的东东,我也是在搞4倍频电路的

出0入0汤圆

发表于 2010-12-13 11:27:23 | 显示全部楼层
回复【楼主位】ilan2003 小松工程
-----------------------------------------------------------------------

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

出0入0汤圆

发表于 2010-12-14 14:03:39 | 显示全部楼层
回复【楼主位】ilan2003 小松工程
-----------------------------------------------------------------------

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

出0入0汤圆

发表于 2010-12-16 13:42:10 | 显示全部楼层
看过

出0入0汤圆

发表于 2011-10-23 14:25:48 | 显示全部楼层
ilan2003 小松工程:

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

出0入0汤圆

发表于 2011-11-9 10:06:15 | 显示全部楼层
我试试行不行

出0入0汤圆

发表于 2011-11-21 10:31:40 | 显示全部楼层
我试了下,貌似不行嘛,换向很明显会丢脉冲嘛,不换向有时候都丢

出0入0汤圆

发表于 2012-5-5 20:01:21 | 显示全部楼层
与单片即的接口很简单,利用8位地址总线,+2个地址线 A0 A1.
应该是8位数据总线吧,是不是打错字了

出0入0汤圆

发表于 2012-8-8 10:43:58 | 显示全部楼层
记号MARK
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

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

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