差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
旋转调节系统设计 [2018/10/22 13:56] anran [实验原理] |
旋转调节系统设计 [2020/01/18 21:55] (当前版本) gongyu |
||
---|---|---|---|
行 1: | 行 1: | ||
- | =====旋转调节系统设计===== | + | ### 基于旋转编码器的调节系统设计 |
- | ----- | + | |
- | ====实验任务==== | + | --- |
+ | |||
+ | #### 实验任务 | ||
* 任务:基于 STEP-MAX10M08核心板 和 STEP BaseBoard V3.0底板 完成旋转调节系统设计并观察调试结果 | * 任务:基于 STEP-MAX10M08核心板 和 STEP BaseBoard V3.0底板 完成旋转调节系统设计并观察调试结果 | ||
行 7: | 行 9: | ||
* 解析:通过FPGA编程驱动旋转编码器获取操作信息,根据操作信息控制变量增加或减小,最后驱动独立式数码管将变量显示出来。 | * 解析:通过FPGA编程驱动旋转编码器获取操作信息,根据操作信息控制变量增加或减小,最后驱动独立式数码管将变量显示出来。 | ||
- | ====实验目的==== | + | ####实验目的 |
在基础数字电路实验部分我们已经掌握了FPGA驱动独立显示数码管的原理及方法,本实验主要学习旋转编码器的驱动原理,最后完成旋转调节系统总体设计。 | 在基础数字电路实验部分我们已经掌握了FPGA驱动独立显示数码管的原理及方法,本实验主要学习旋转编码器的驱动原理,最后完成旋转调节系统总体设计。 | ||
* 熟悉独立显示数码管驱动模块的应用 | * 熟悉独立显示数码管驱动模块的应用 | ||
行 14: | 行 17: | ||
- | ====设计框图==== | + | ####设计框图 |
根据前面的实验解析我们可以得知,该设计可以拆分成三个功能模块实现, | 根据前面的实验解析我们可以得知,该设计可以拆分成三个功能模块实现, | ||
* Encoder:通过驱动旋转编码器获取操作信息数据。 | * Encoder:通过驱动旋转编码器获取操作信息数据。 | ||
行 24: | 行 27: | ||
{{:4-Top-Down层次设计.png?500|Top-Down层次设计}}{{:4-模块结构设计.png?500|模块结构设计}} | {{:4-Top-Down层次设计.png?500|Top-Down层次设计}}{{:4-模块结构设计.png?500|模块结构设计}} | ||
- | ====实验原理==== | + | ####实验原理 |
- | ===旋转编码器介绍=== | + | |
+ | #####旋转编码器介绍 | ||
旋转编码器(rotary encoder)也称为轴编码器,是将旋转位置或旋转量转换成模拟或数字信号的机电设备。旋转编码器用在许多需要精确旋转位置及速度的场合,如工业控制、机器人技术、专用镜头、电脑输入设备(如鼠标及轨迹球)等。 | 旋转编码器(rotary encoder)也称为轴编码器,是将旋转位置或旋转量转换成模拟或数字信号的机电设备。旋转编码器用在许多需要精确旋转位置及速度的场合,如工业控制、机器人技术、专用镜头、电脑输入设备(如鼠标及轨迹球)等。 | ||
行 33: | 行 37: | ||
STEP BaseBoard V3.0底板上集成的旋转编码器就是机械增量式的。 | STEP BaseBoard V3.0底板上集成的旋转编码器就是机械增量式的。 | ||
- | ===旋转编码器连接=== | + | #####旋转编码器连接 |
STEP BaseBoard V3.0底板上旋转编码器的电路图如下: | STEP BaseBoard V3.0底板上旋转编码器的电路图如下: | ||
行 43: | 行 47: | ||
* 3、4、5管脚支持旋转编码,4脚为公共端,3、5管脚分别为旋转编码器的A、B相输出,如上图所示,我们给4脚接地,3、5管脚则需要接上拉电阻,同时为了降低输出脉冲信号的抖动干扰,我们有增加了电容到地做硬件去抖。 | * 3、4、5管脚支持旋转编码,4脚为公共端,3、5管脚分别为旋转编码器的A、B相输出,如上图所示,我们给4脚接地,3、5管脚则需要接上拉电阻,同时为了降低输出脉冲信号的抖动干扰,我们有增加了电容到地做硬件去抖。 | ||
- | ===旋转编码器驱动设计=== | + | #####旋转编码器驱动设计 |
{{:4-编码器原理示意.jpg?500|编码器原理示意}} | {{:4-编码器原理示意.jpg?500|编码器原理示意}} | ||
行 51: | 行 55: | ||
* 逆时针旋转时,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信号的状态, | ||
行 120: | 行 124: | ||
所以通过上面程序最终实现了左旋右旋的脉冲输出,脉冲的脉宽等于系统时钟的周期。 | 所以通过上面程序最终实现了左旋右旋的脉冲输出,脉冲的脉宽等于系统时钟的周期。 | ||
- | ===系统总体实现=== | + | #####系统总体实现 |
+ | |||
+ | 回顾旋转调节系统设计框架,刚刚我们已经学习完成了旋转编码器的驱动设计,在基础数字电路实验部分我们已经掌握了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设计框图}} | ||
- | ====实验步骤==== | + | ####实验步骤 |
- 双击打开Quartus Prime工具软件; | - 双击打开Quartus Prime工具软件; | ||
- 新建工程:File → New Project Wizard(工程命名,工程目录选择,设备型号选择,EDA工具选择); | - 新建工程:File → New Project Wizard(工程命名,工程目录选择,设备型号选择,EDA工具选择); | ||
行 135: | 行 172: | ||
- | ====实验现象==== | + | ####实验现象 |
+ | |||
+ | 将程序下载到实验平台,核心板数码管显示50,旋转编码器左旋(逆时针)数值减小,旋转编码器右旋(顺时针)数值增加,旋转编码器旋转时有顿挫感,每次顿挫数值变化1。 |