计算机系统分析与设计大作业
研 究 生 试 卷
2013 年-2014 年度第1 学期
课程名称: 计算机系统分析与设计 评分:
专 业: 交通信息工程及控制 年级: 研一
研究生姓名: 朱英龙 学号: 2013124074
任课教师姓名: 马荣贵
一、光电编码器计数的设计与仿真实验
1、实验目的
1)用VHDL 语言实现光电编码器计数,然后在数码管上显示。
2 )熟悉VHDL 语言与EH2000 FPGA 实验箱。
3 )掌握光电编码器的工作原理和使用方法。
2、实验环境
Quartus II 软件、PC 、EH2000 FPGA 实验箱。
3、实验原理
光电编码器是一种通过光电转换将输出轴上的机械几何位移量转换成脉冲或者数字量
的传感器。光电编码器是由光栅盘和光电检测装置组成。光栅盘是在一定直径的圆板上等分
地开通若干个长方形孔。比方说检测电动机的转速时,由于光电码盘与电动机同轴,电动机
旋转时,光栅盘与电动机同速旋转,经发光二极管等电子元件组成的检测装置检测输出若干
脉冲信号,通过计算每秒光电编码器输出脉冲的个数就能反映当前电动机的转速。此外,为
判断旋转方向,码盘还可提供相位相差90º的两路脉冲信号。当光电编码器随控制对象发生
角位移变化时,光电编码器就会发出A 、B 两路相位差为90°的数字方波信号发生器。正转
时A 超前B 为90° (如图1 (a )所示),反转时B 超前A 为90° (如图1 (b )所示)。本实
验就是利用此原理进行计数。
4、实验步骤
4.1 VHDL 编程
根据实验要求,将程序划分为以下2 个VHDL 功能模块:
1)计数模块(counter )
此模块用于对编码器输出波形进行计数和复位,输出计数结果。代码见附录。
2
2 )显示模块(display )
此模块用于对计数值进行数码管的显示和复位,输出段选和位选。代码见附录。
首先,将从光电编码器输出的A 、B 路信号分别接在计数模块的a,b 端,此模块中
的a 端也同时用作时钟信号,计数值由count 端输出。然后将计数结果接入显示模块的count
端,显示时钟信号输入clk 端,输出计数值的段选和位选。设计采用六位数码管进行对计
数结果的显示,最高位为符号位,其余五位为数据位。当光电编码器顺时针转动时进行增
计数,逆时针转动时进行减计数。两个模块的连接及管脚配置图如图2 所示。
图2 计数模块和显示模块的连接及管脚配置图
4.2 Quartus II 仿真
在 Quartus II 建立一个波形仿真文件,为了便于观察结果,仿真只用了计数模块的结
果,可方便的看出计数值的变化。仿真结果如图3 所示。
图3 仿真结果
4.3 实验箱运行
将光电编码器连接到实验箱,连接好电路后,在 Quartus II 中设置好硬件类型并配置
好管脚,将程序下载到实验箱内运行,验证输出结果。
5、分析和总结
5.1 仿真结果和分析
由图3 中可以看出,开始时让a 的相位超前于b (正转),count 计数从初始值0 逐个
增加;计数到19 的时候让a 的相位落后于b 的相位(反转),count 计数值逐个减少;计数
到-4 的时候,reset 置0,计数变为初始值0,由于a 的相位仍落后于b 的相位,所以计数
值继续减少。可以看出不管是光电编码器逆时针合适顺时针旋转本设计都可以正确的进行
计数,仿真结果完全正确。
5.2 总结
本实验的仿真还是相对来讲比较容易的,在硬件实现的时候,仿真可以准确计数的程
序,在硬件上就不那么好用,计数结果都不是很准确。经过几个计数方案的挑选,最终选
用了让光电编码器的输出信号A 作为时钟信号进行对波形的计数,结果表明此方案的计数
结果较位准确的,2000Hz 的光电编码器计数结果平均在1940Hz。
3
通过本次实验,了解了VHDL 语言、EH2000