查看: 755|回复: 0
打印 上一主题 下一主题

CPLD应用:光栅旋转编码器的4倍频解码

[复制链接]
跳转到指定楼层
沙发
发表于 2016-5-30 17:24:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
CPLD应用:增量式光栅旋转编码器的4倍频解码

刚学了几天的CPLD,上传我的第一个应用,不知道实际工作情况如何,希望高手指点指点,谢谢

如果CLK时钟频率为25Mhz,则至少可以对输出频率2.5Mhz以下增量式光栅旋转编码器的进行4倍频解码

概念如下:

增量式光栅旋转编码器分辨率:2500p/r (常用伺服系统的编码器)
按工作时最大的输出频率为2.5Mhz计算,编码器可以工作到60000r/m,当然这样的旋转速度实际上是很难达到的,实际上的常用的伺服电机最大工作到5000r/m

CLK:倍频用时钟频率
A:编码器A相
B:编码器B相

CP:解码后的脉冲
DIR:旋转方向

仿真图片如下:



Verilog hdl代码:

module decoder(CLK, A, B, CP, DIR);
        input CLK;
        input A;
        input B;
        output CP;
        output DIR;
        
        reg CP;
        reg DIR;
        
        wire a_xor_b;
        reg a_xor_b_temp;
        reg[3:0] a_xor_b_counter;
        

        xor (a_xor_b, A, B);        
        
        always @(posedge CLK)
                begin               
                if(a_xor_b_temp != a_xor_b)
                        begin
                        CP = 1'b1;
                        a_xor_b_temp = a_xor_b;                        
                        a_xor_b_counter = 4'b0000;
                        end
                else
                        begin
                        a_xor_b_counter = a_xor_b_counter + 4'b0001;
                        if(a_xor_b_counter >= 4'b0010)                 // 根据实际应用,可以改变a_xor_b_counter上限值来改变输出脉宽
                                begin
                                CP = 1'b0;
                                end                                
                        end
                end
        
        always @(posedge A) begin
                DIR = ~B;
        end

endmodule







回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

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