最专业的FPGA ZYNQ论坛--黑金动力社区

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 56|回复: 1

PL部分实现旋转编码器测速遇到问题,求解

[复制链接]

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
想拿ZYNQ做一个电机控制系统,PID和测速部分在PL部分实现,PS部分做可视化等。写了个旋转编码器测速的Verilog代码可是有部分总是被优化掉,求各路人士解答啊!
先介绍一下我用的编码器,A B相的,正转A超前B相90度,反转B超前A相90度。通过AB相的关系,来判断正反转。编码器转一圈A和B各有500个脉冲。
我现在想实现的功能是:PL部分对100Mhz进行计数,定时5ms对A相计数,通过在5ms内A相的脉冲数来计算转速,转速折合r/min的单位上。
现在的问题是,对于转速计算这部分的Verilog代码总是被优化掉。。。
下面是代码

module encoder(
input clk_i,
input rst_n,
input EncoderA_i,//编码器为500线
input EncoderB_i,
output Speed_o,
output Dir_o
    );
    reg [18:0] clk_cnt;//Fpga频率计数
    reg [18:0] Dir_A;//A相上升沿到来的计数
    reg [18:0] Dir_B;//B相上升沿到来的计数
    reg [31:0] speed=0;
    reg dir=0;//0 正方向 1反方向
    always@(posedge clk_i) begin
        if(rst_n==0) begin
            clk_cnt<=0;
            //speed<=0;
           // dir<=0;
         end
         else begin
            if(clk_cnt>=19'd50_0000) begin //100Mhz时钟计时5ms
                 clk_cnt<=0;
             end
            else clk_cnt<=clk_cnt+1'd1;           
         end
     end

     reg[18:0] A_cnt;
     always@(posedge EncoderA_i or negedge rst_n)begin
        if(rst_n==0) begin
            Dir_A<=0;
            A_cnt<=0;
        end
        else begin
            Dir_A<=clk_cnt;
            if(clk_cnt>=19'd50_0000)
                A_cnt<=0;
            else A_cnt<=A_cnt+1'd1;
        end
     end

     reg[18:0] B_cnt;
     always@(posedge EncoderB_i or negedge rst_n)begin
        if(rst_n==0) begin
            Dir_B<=0;
            B_cnt<=0;
        end
        else begin
            Dir_B<=clk_cnt;
            if(clk_cnt>=19'd50_0000)
                B_cnt<=0;
                else B_cnt<=B_cnt+1'd1;

        end
     end

     always@(*) begin
        if(Dir_A<Dir_B)
            dir<=1;
        else
            dir<=0;
        if(clk_cnt==19'd49_9999)begin
            speed<=24*A_cnt;//Speed 单位为 r/min 24是5ms测速周期的单位换算系数
         end
     end



     assign Speed_o = speed;
     assign Dir_o = dir;


endmodule
LeviD536 发表于 前天 20:20 | 显示全部楼层
http://www.fpga4fun.com/QuadratureDecoder.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|@2009-2016 芯驿电子科技(上海)有限公司|小黑屋|手机版|Archiver|黑金动力社区 ( 沪ICP备11013590沪公网安备 31011702000003号

GMT+8, 2017-6-23 06:09 , Processed in 0.089578 second(s), 19 queries , Gzip On.

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

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