找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4510|回复: 0
打印 上一主题 下一主题
收起左侧

FPGA健身自行车控制器 可编程数字系统设计实验报告

[复制链接]
跳转到指定楼层
楼主


论文和源码等所有完整资料下载:
健身自行车.rar (1.35 MB, 下载次数: 41)

下面是部分内容预览:
------------------------------------------------------------------------------------------------------------------
东南大学电工电子实验中心
课程名称:数字逻辑设计实践
次实验
实验名称:可编程数字系统设计
院 (系):电工电子实验中心              专    业:吴健雄学院
姓    名:凌 昕 彤学    号:61009323
实 验 室: 103实验组别:
同组人员:实验时间:201011
评定成绩:审阅教师:
1、申请题目:





    • 题目:健身自行车控制器

2状态机设计思路




    • 功能指标规模
  • 启动控制器 :在初始状态下,按下“F”键即能启动
  • 选择手动或者计时模式通过按“1”或者“2”选择手动或者计时模式
  • 改变训练强度在手动或者计时模式下,通过数字键输入选择相应的模式
  • 动态调整训练强度在训练中,通过按下“A”或者“B”来增加或者减小阻力值
  • 设置训练时间在计时模式下,逐位输入数字,能够设置训练时间
  • 训练时间有误可清零修改如果使用者输错了时间,可以按“C”清除,显示恢复00的状态。
  • 计数器的倒计时功能能从给定的数字开始倒计时至0000,并且从0003开始使蜂鸣器响半秒,停半秒。
  • 正确按键LED灯发光每次按下正确的按键,LED亮一下,这可以提示使用者按钮是否成功按下。
  • 训练时间有误自动报错时间有误自动报错,显示“EE”一秒,并退回到上一个状态。
  • 选择自定义模式通过按“A”或者“B”选择或者设置训练强度和时间
  • 预设模式可以设置或者存储训练模式





    • 面板(显示)、操作、规则
1. 当使用者刚骑上自行车时,控制器处于初始状态。按“F”键启动控制器。
2. 使用者从键盘输入 1或2 以选择“手动”、“计时”模式,按“E”键确认。
3. 如果使用者输入“1”(手动模式),显示器显示“9”,用户可以输入从0到9中的任意数字,以改变训练强度,按“E”键确认。训练强度选择完成之后, 按下“F”按钮开始训练。 此时显示器在高2位显示阻力值。
4. 如果使用者输入“2”(计时模式),控制器将提示用户输入从0到9中的任意数字,以选择需要的训练强度,按“E”键确认。训练强度选择完成之后,显示器显示“00:00”。通过数字键盘输入数字, 以决定训练的时间,输入时数字顺序是从左到右。例如,输入1、0、2、3应该在显示器上上显示“10:23”,表示训练时间被设定为10分23秒,如果输入正确,按下“E”键确认。如果使用者输错了时间,可以按“C”清除,显示恢复00的状态。训练时间输入完成后,按下“开始”开始训练。此时6位数码管的高2位显示阻力值,低四位倒计时显示时间一直到“00:00”。在最后3秒时,蜂鸣器响3下,规律为响半秒停半秒。 当计时到00:00时,控制器恢复到初始状态,此时定时器是“00:00”,阻力为前面设定的值。
5. 每次按下正确的按键,LED亮一下,这可以提示使用者按钮是否成功按下。
6. 在计时模式下,如果输入的时间大于“60:00”或小于“01:00”,在按下“E”键确认后,显示器显示 EE,同时LED亮1秒,然后显示返回00的状态。
7. 增加动态调整训练强度功能,在训练过程中按“上”或“下”按钮,实时增加或减少训练强度。
8. 计时模式提供预设模式功能,可存储10种训练模式(训练强度和时间预先设定好),设定过程如下:
1) 在基本功能2中,输入A,选择“自定义”模式,显示“0”,直接按下“E”键,表示选择“0”号预置训练模式,此时显示该模式的训练强度和训练时间。也可用键盘输入“0”到“9”中的任何数字选择相应预置训练模式,按“E”确认,此时显示该模式的训练强度和训练时间。选择完成后按“开始”按钮开始训练。
2) 在基本功能2中,输入B,选择“自定义”模式,显示“0”,用键盘输入“0”到“9”中的任何数字选择要设置的预置训练模式,按下“预设”按钮,显示该模式原来预置的训练强度值,参考基本功能3,重设预置训练强度,按“E”确认,显示器显示该模式原来预置的训练时间值,参考基本功能3,重设训练时间,按下“E”键确认,再按下“预设”按钮存储预设值,回到基本功能初始状态。





    • 输入、输出接口
输入:键盘
输出:6位数码管、代表蜂鸣器的LED灯和表示正确按键的LED灯


3实现方案





    • 核心问题
问题1大量状态的转换问题。由于该数字系统状态复杂,如果算入各类大小状态,共有28个,之间的转换难以处理。
问题2模60计数器难以同时实现模的设置和置数功能
问题3键盘如何给出区别两次相同按键而不是一次按键
问题4实现训练模式的寄存和调用
问题5当输入时间有误,在按下“E”键确认后,显示器显示 EE,同时LED亮1秒,然后显示返回00的状态。






    • 解决方案
问题1解决方案A考虑到28个状态,可以将部分子状态归结给一个大状态,比如输入四位时间的四个子状态可以归一为状态机的一个状态。通过这种方法,状态机一共需要产生的状态只剩15种,而且当中大部分都是顺序状态转移的,只有四处需要非顺序状态转移。所以决定使用一个模16计数器74161来实现功能。配合一个16选1数据选择器控制使能端,和若干与非门和数据选择器通过同步置数方式来实现非顺序状态转移。通过控制置零端实现状态清零,比如倒计时到0.该方案并不难想到,但是实现还是有一定难度,主要是因为当中复杂的逻辑关系造成的。其思路并不是非常清晰,而且修改一部分可能会影响整体。但是实际电路设计中就使用了这方案。
问题1解决方案B使用Rom。这个思路非常清晰,便于修改,实现方便。只需要将当前状态和当前键盘输入一起输入到Rom的输入端,即可以得到相应的状态。对状态数量、转移方式均没有要求,但是由于规定,没有选择这套方案。
问题2解决方案A通过两片74168模十加减计数器级联。低位片的置数端特殊处理,使用74257八选四数据选择器。当置数端信号有效时,将置数的起点选择到置数端。而当置数信号无效时,到0101输入到置数端。从而解决上述问题。
问题2解决方案B直接使用Quartus内部产生的函数器件,使其分别产生模为六和十的计数器,通过同步置数法解决问题。显然,此法更加方便,优于上述方案。
问题3解决方案A将键盘的四位Col输入通过一个与门和7474消抖电路输出。使其能够在按下一个键后,产生一个上升沿。而这个上升沿可以作为之后电路的时钟信号。但是这个理论上可行的方案,在实际操作中产生了严重的问题。由于电路中的延迟情况未知,出现了大量上次按下的信号在本次按键中生效的现象。通过多种途径分析电路,最终将键盘输出的上升沿通过触发器延迟一定时间后输出效果明显提高。但是这种方法直到最后来存在着一定的小问题没有很好解决。
问题3解决方案B和方案A相似地,通过触发器使按下一个按键后产生一个单脉冲,宽度为一个正常的时钟周期。而这个输出作为使能端输入到之后的电路模块中,而之后的电路模块的时钟信号还是连接正常时钟信号。这样可以确保在按下一次按键,在模块使能的时间里有且仅有一个上升沿。理论上说,本方案会优于A方案,但是依然是延迟的问题。如上方案输出的单脉冲依然落后与按键的信号,同时还产生了众多竞争和毛刺,使电路变得十分不稳定。所以最后方案B还是被放弃了。
问题4解决方案:最先由于不知道有器件Ram,导致设想的方案需要使用几十片计数器当寄存器使用。但是知道了Ram之后,Ram显然是不二选择。当设置状态时,即将置数的信号输入到显示端的同时,输入到Ram。而在调用状态时,从键盘输入的信号改为从Ram输入。
问题5解决方案:通过Quartus内部产生的函数器件判断当前的输出,当符合条件时,Error输出为1。通过一个信号控制数据选择器使显示端输出的值为EE,并且使状态机状态转移。这从理论上来说,是可以实现的。但是在实际过程中还是会出现各种问题需要解决。


4系统结构:






    • 系统框图





    • 模块功能描述

键盘:输出列扫描信号,接收行信号,并通过寄存器记下四位行信号和四位列信号。将上述八位信号输入至一个预先写好的Rom,将其转换为四位二进制码。其对应关系为0000-1,0001-2,……,1001-0,1010-A,1011-B,……并且根据键盘是否被按下,输出一个上升沿信号。相似地,能够输出一个提示正确按键的信号。电路图如下:

控制器:接受来自键盘的按键信号和上升沿信号。以上升沿为时钟,通过触发器和组合电路实现状态的转移。最后给出当前的状态值。同时能够接受时间显示器的进位反馈信号,当计时至0时,异步将状态清零。电路图如下;

力度显示器:接受来自控制器的当前状态值,键盘产生的上升沿信号以及通过滤过器后有键盘产生的信号(该信号只为数字,即0~9)。力度最终所有的输出都显示在前两位数码管上。在合适的状态下,将数字信号输入到Rom并使其通过最后两片74169的置数使其显示。同时通过“A”“B”键能动态地控制显示结果,即当前阻力值。电路图如下:

时间显示器:时间显示器相对复杂。在输入时间的大状态下,需要有四个子状态来控制具体是哪位时间值在被设置。需要使用一个74194作为次状态机,来控制四位数码管信号的置数信号。并且需要计数到00:00时,能给出一个借位信号,使状态机状态清零。同时由于预设功能和倒计时功能的存在,需要多处使用数据选择器。同时由于清零功能、报错功能、末三秒提示功能等需要实现结构异常复杂。在此,为了简化其复杂性,将当前状态值输入至一个Rom。而将Rom的输出给至各位控制端、选择端以及使能端,控制时间显示器的工作。但是不管怎么样,仅从电路的结构和规模看出,时间显示器是最复杂的一个模块。电路图如下:








    • 模块接口标注(参数、协议)
键盘:输入:列扫描信号;
输出:行扫描信号、上升沿信号、键盘码四位信号
控制器:输入:上升沿信号、键盘码四位信号、计数借位信号
输出:四位当前状态
力度显示器:输入:四位当前状态、上升沿信号、键盘码四位信号(判断是否为“A”“B”)
输出:力度显示的两位数码管
时间显示器:输入:四位当前状态、上升沿信号、键盘码四位信号(判断是否为“A”“B”)
输出:时间显示的四位数码管以及四位数码管的使能信号、借位信号




5状态流程图:






    • 系统工作状态流程
0000:初始状态
0001:手动/计时模式选择状态
0010:输入力度
0011:确认
0100:开始训练
0101:输入力度
0110:输入时间
0111:确认
1000:开始训练
1001:选择预设的训练模式
1010:确认
1011:开始训练
1100:选择需要设置的训练模式号
1101:输入时间
1110:输入力度

(框中的编号即是对应着一个状态,同时也是状态机产生的具体状态编码。)

6、各主要模块图与仿真波形






    • 各模块的仿真波形,详细注释输入输出功能端口,波形意义
键盘波形图:
CLKF:快速时钟信号,频率较高
CLK:正常时钟信号,有CLKF通过分频器产生,频率大约为前者的1/16
Ip_Row:行输出扫描信号
Ip_Col:列输入信号
OEN:键盘给出的上升沿信号
q:键盘的四位二进制编码

控制器波形图:
A:当前状态值
CLR:清零信号
RCO:借位信号
ERROR:错误信号
KEY_EN:键盘上升沿信号
KEY:键盘按键信号

力度显示器波形图:
CLKF:快速时钟信号
Q:键盘给出的四位二进制编码
STATE_CODE:状态编码信号
KEY_EN:键盘上升沿信号
FH:力度数码管的高位
FL:力度数码管的低位

时间显示器波形图:
CLKF:快速时钟信号
CLK_1Hz:用于计时的1Hz方波信号
S:当前状态码
Q:键盘输入的四位二进制编码
QHH,QHL,QLH,QLL:依次为时间数码管显示的数字,顺序是由高位到低位
RCO:借位信号
ERROR:错误信号
SOUND_EN:蜂鸣器使能信号


7设计总结






    • 预期的目标与当前实现功能的差异
从上述设计过程中,可以看出原先是打算一次性将提高和基础部分做完的,但是毕竟通过电脑编程,画线路图对我们而言来说陌生的。当中经历了多次挫折,花了很多时间,也正是由于时间关系,最终做出了艰难的选择:放弃了预设部分。但是在整个设计过程中,预设等内容,包括状态和器件,都已经基本完成了设计。但是由于时间原因,最后没有将已经完成的预设部分调试成功。这也是本次实验遗憾的地方。或许,当初在构思的时候,就可以选择先完成基础部分,然后再通过部分修改的形式增加提高部分。这种思路应该更加符合可编程数字系统设计的,而不是像我这样企图一口气吃成胖子。





    • 调试过程中出现的问题分析及其解决措施
调试过程中,出现的一个最明显的问题就是键盘给的上升沿信号的位置一直有问题,导致置数一直不正确。出现本次按键置上一次按键的数的情况。但是在之后,通过多种方式增加了该上升沿的延迟,使其出现时,键盘信号已经明显稳定后才输出。最终基本上解决了这个问题。





    • 可以进一步发挥提高的部分
由于我们制作的系统是一个和我们生活很近的操作系统。因而提高方向应该更加人性化、更加便于操作、更加接近我们使用的电子控制系统。在此,我主要有几个设想:
  • 在具体输入某一位时间时,该位时间处于闪烁状态。
  • 每次按键有蜂鸣器发音提示
  • 可以选择具体数位修改时间
事实上,设想1已经努力使用电路去实现(但最后还是未能实现)。而设想2则通过正确按键提示灯改造即可实现。






    • 设计体会

虽然不用亲自动手搭电路,省去了许多搭线之苦,但是必须掌握对quartus软件的熟练使用方法。在设计电路时,尤其是所需的器件较多,各部分联系比较复杂时,必须采用模块化设计。在调试过程中,必须先分模块调试,最后进行总的调试编译。在调试过程中,警告一般可以忽略
由于没有使用器件的限制,因此可以最大程度的利用好quartus内部提供的器件,以此来简化电路设计。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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