差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
上一修订版 两侧同时换到之后的修订记录
旋转调节系统设计 [2018/10/22 13:56]
anran [实验原理]
旋转调节系统设计 [2018/10/22 13:59]
anran [实验原理]
行 51: 行 51:
   * 逆时针旋转时,B触点超前于A触点接触和错开圆形齿轮,B信号脉冲相位超前   * 逆时针旋转时,B触点超前于A触点接触和错开圆形齿轮,B信号脉冲相位超前
  
-{{:​4-编码器顺时针旋转时序.jpg?​600|编码器顺时针旋转时序}}+{{:​4-编码器顺时针旋转时序.png?​600|编码器顺时针旋转时序}}
  
-{{:​4-编码器逆时针旋转时序.jpg?​600|编码器逆时针旋转时序}}+{{:​4-编码器逆时针旋转时序.png?​600|编码器逆时针旋转时序}}
  
 根据时序图可以看出旋转编码器顺时针或逆时针旋转时,A相信号超前或滞后B相信号,FPGA接收到旋转编码器的A、B信号时,可以根据A、B的状态组合判定编码器的旋转方向。 程序设计中我们可以对A、B信号检测,检测A信号的边沿及B信号的状态, 根据时序图可以看出旋转编码器顺时针或逆时针旋转时,A相信号超前或滞后B相信号,FPGA接收到旋转编码器的A、B信号时,可以根据A、B的状态组合判定编码器的旋转方向。 程序设计中我们可以对A、B信号检测,检测A信号的边沿及B信号的状态,
行 121: 行 121:
  
 ===系统总体实现=== ===系统总体实现===
 +
 +回顾旋转调节系统设计框架,刚刚我们已经学习完成了旋转编码器的驱动设计,在基础数字电路实验部分我们已经掌握了FPGA驱动独立显示数码管的原理及方法, 模块通过一个4位的输入传递要显示的数值,通过9位的输出控制数码管显示该数值,这里我们不再重复,还需要设计一个模块,通过旋转编码器模块脉冲输出控制变量在0~99范围内加减变化。
 + 关于BCD码在基础数字电路实验部分已经接触过,BCD码(Binarycoded Decimal),是用4位二进制码的组合代表十进制数的码制方法,这样显示更符合人的阅读习惯,所以BCD数值变化要求满9进1。
 +
 +脉冲控制变量在0~99范围变化,左旋减,右旋加,程序实现如下
 +<code verilog>
 +//key_pulse transfer to seg_data
 +always@(posedge clk or negedge rst_n) begin
 + if(!rst_n) begin
 + seg_data <= 8'h50;
 + end else begin
 + if(L_pulse) begin
 + if(seg_data[3:​0]==4'​d0) begin
 + seg_data[3:​0] <= 4'd9;
 + if(seg_data[7:​4]==4'​d0) seg_data[7:​4] <= 4'd9;
 + else seg_data[7:​4] <= seg_data[7:​4] - 1'b1;
 + end else seg_data[3:​0] <= seg_data[3:​0] - 1'b1;
 + end else if(R_pulse) begin
 + if(seg_data[3:​0]==4'​d9) begin
 + seg_data[3:​0] <= 4'd0;
 + if(seg_data[7:​4]==4'​d9) seg_data[7:​4] <= 4'd0;
 + else seg_data[7:​4] <= seg_data[7:​4] + 1'b1;
 + end else seg_data[3:​0] <= seg_data[3:​0] + 1'b1;
 + end else begin
 + seg_data <= seg_data;
 + end
 + end
 +end
 +</​code>​
 +
 +综合后的设计框图如下:
 +
 +{{:​4-rtl设计框图.png?​800|rtl设计框图}}