光电编码器的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编辑过 ilan2003 小松工程 牛人~! 呵呵,好东西啊 楼主是工大的么? 是啊,楼上的怎么知道
不是哈工大 的
-----此内容被ilan2003于2005-05-14,18:49:15编辑过 这个电路里是不是还有个高频时钟clk? 是的,就是那个clk
最好是10mhz以上的,我用4mhz仿真的,如果频率太低,光电编码器转的快时就会丢脉冲 楼主
我也是工大的哦 CSU
嘿嘿
btw,那张图里面是7128么?怎么看起来这么大? CSU
嘿嘿
btw,那张图里面是7128么?怎么看起来这么大? 学习了!!!!~~~~ 曹卫华
(中南大学信息科学与工程学院 长沙 410083)
我说怎么听到这名字熟咯! 【11楼】 sflfw,你是工大的么?莫非是信息院的? 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 搂住是否能分享一下代码的项目文件?? 不需要项目文件的,我的原代码就在帖子上啊 http://www.smarteer.com/productmic.htm
这是国内一家做运动控制的公司,他们好像有这类产品,1~4路编码器处理逻辑。
但是相关的资料没找到。 光电编码器,应该说的是增量式旋转编码器,假如仅用于方向判断和加减计数,最简单的可以用D触发器判断方向,AB相异或为2倍频率,将此2倍频率信号移相后,再与该2倍频率信号相异或偏是4倍频率了,送给加减计数器就可以了,目的就是如此,很简单,2片74系列就可以了 楼主的电源火线端子外露,注意安全啊,最好用热融胶封一下 mark! 很好的东东,我也是在搞4倍频电路的 回复【楼主位】ilan2003 小松工程
-----------------------------------------------------------------------
请教楼主啊,我的采集是用信号原产生的正交脉冲,但是现在就是得不到正确的值,是不是硬件上的问题,硬件上要不要加隔离 什么东西了啊 回复【楼主位】ilan2003 小松工程
-----------------------------------------------------------------------
楼主你这个好像只能一个方向计数正确啊,反方向就不对了啊 ,是这样吗,请问,谢谢,我现在就在做这个东西,老实采集不对 看过 ilan2003 小松工程:
用EMPM7128S最大能实现多少路的计数,A/B/R算一路。 我试试行不行 我试了下,貌似不行嘛,换向很明显会丢脉冲嘛,不换向有时候都丢 与单片即的接口很简单,利用8位地址总线,+2个地址线 A0 A1.
应该是8位数据总线吧,是不是打错字了 记号MARK
页:
[1]