关于QEI的Verilog程序其实比较简单的,但是opencores上没有现成的程序,FPGA4FUN上有一个4倍频计数程序[1],但是没有一个详细原理分析过程,[2]描述了一个编码器的VHDL代码,但是觉得很复杂,为此我分析了一下增量编码器的旋转过程和AB相的电平变化规律,在这个基础上开发了QEI的Verilog程序,首先是码盘的简化图,实际上码盘的花纹图案可以做如下简化:A,B相产生脉冲,
这里把圆形展开成为直线,这样更好理解,图中有4个位置,标志为1,2,3,4对应的是A和B的上升和下降沿,计数实际上发生在这四个边沿,根据1倍频,2倍频,4倍频的设置,计数可以在不同的边沿实现,假设旋转方向从左到右为正向,从右到左为反向,1倍频时,在1处如果是正向旋转,计数应该加1,如果是反向,计数应该减一,2倍频除了在1处应该有计数以外,还在3处也应该计数,计数和旋转方向关系也一样,而4倍频时在1,2,3,4都应该计数,就以1处进行分析,如果是正向旋转,则A相应该是上升沿,而B相此时为低电平,同理如果是反向旋转,A相应该是下降沿,同时B相电平为低,同理依次分析其他三个位置,可以得到如下计数和A,B的关系
1倍频 | A上升沿 | B 低电平 | 计数加1 |
A下降沿 | B 低电平 | 计数减1 | |
2倍频 | A上升沿 | B 低电平 | 计数加1 |
A下降沿 | B 低电平 | 计数减1 | |
A下降沿 | B 高电平 | 计数加1 | |
A上升沿 | B 高电平 | 计数减1 | |
4倍频 | A上升沿 | B 低电平 | 计数加1 |
A下降沿 | B 低电平 | 计数减1 | |
A下降沿 | B 高电平 | 计数加1 | |
A上升沿 | B 高电平 | 计数减1 | |
B上升沿 | A高电平 | 计数加1 | |
B下降沿 | A高电平 | 计数减1 | |
B下降沿 | A低电平 | 计数加1 | |
B上升沿 | A低电平 | 计数减1 |
[1] https://www.fpga4fun.com/QuadratureDecoder.html
[2]https://dewdotninja.wordpress.com/2018/03/19/vhdl-code-for-quadrature-encoder-receiver-module/
标签:编码器,高电平,QEI,低电平,计数,倍频,verilog From: https://www.cnblogs.com/embeddedengineer/p/18456731