带液晶显示驱动的智能电梯控制器
2007-2008学年度第二学期
电子技术基础课程设计
--智能电梯控制器
目 录
0 序 ................................................................................................................................................. - 2 -
1
带液晶显示驱动的智能电梯控制器
1 原理与系统设计 ......................................................................................................................... - 3 -
1.1 思想来源: ......................................................................................................... - 3 - 1.2 付诸实施: ......................................................................................................... - 4 -
2 模块设计 ................................................................................................................................. - 5 -
2.1 模块示意图和输入输出描述 ............................................................................... - 5 - 2.2 模块设计过程 ....................................................................................................... - 7 - 2.3 波形仿真............................................................................................................... - 8 -
3.智能电梯综合后的整体电路图 .............................................................................................. - 14 -
4 基于SD卡的数码音乐播放器程序设计与注释 ..................................................................... - 14 - 5 带有LCD驱动的智能电梯控制器源码与注释 ...................................................................... - 19 -
5.1 分频模块............................................................................................................. - 19 - 5.2 智能电梯主控制器模块 ..................................................................................... - 20 - 5.3 数码管译码模块 ................................................................................................. - 28 - 5.4 数码管时间译码模块 ......................................................................................... - 29 - 5.5 LCD仲裁器......................................................................................................... - 30 - 5.6 LCD驱动模块 ..................................................................................................... - 30 - 5.7 LCD控制模块 ..................................................................................................... - 32 - 5.8 LCD显示模块 ..................................................................................................... - 34 -
6 智能电梯控制器管脚分配........................................................................................................ - 40 -
7 心得体会与建议^_^ .................................................................................................................. - 41 -
0 序
本学期初我们有为期一个月的电子技术课程设计,由电信系的曾喻江老师辅导。到第二周时,我选了基于SD卡的数码音乐播放器和智能电梯控制器两个课设题目,当时是满怀信心的,
2
带液晶显示驱动的智能电梯控制器
不过实际是,我没有更多的时间去同时做好两个任务。 首先说一下基于SD卡的数码音乐播放器,我主要做了一个工作,就是了解并且熟悉的NIOS软核处理器的设计的基本流程,其实我在大二的时候一直想找一段时间去学习一下NIOS嵌入式系统的开发方面的知识,只不过由于其他的诸多原因一直没有着手。而这次曾老师提供DE的板子为我学习NIOS提供的基础平台。
除了看了许多有关SOPC和NIOS软核处理器设计方面的书外,我也编写了一些SD卡数码音乐播放方面的C语言程序(见“基于SD卡的数码音乐播放器程序设计与注释”),可以完成播放一首英文歌曲并且可以在LCD上基本同步显示歌词。不过方法可能有些不好。 然后我讲一下智能电梯的编写。智能电梯的编写的过程也不是一帆风顺的。而且我试过好多种方法去实现电梯的状态的转移。起初我想到的肯定是有限状态机。不过由于开始我想到只有六个请求(分别为1~6楼),后来在老师的启发下和东十二楼的电梯实际运行情况我发现,6个按钮肯定是不够的,所以我又加了5个向上的请求按钮和5个向下的请求按钮,这样总共就有16个按钮了,由于当时我没有想到用信号并置的方法,所以需要分析的情况实在是太多了,我也没有信心了。不过问题始终都是要得到解决的,后来我在我们寝室的一个同学的参考书上看到了一个用VHDL语言编写的智能电梯控制器的程序,不过很不完整,它给我的最大的启发就是“信号并置的算法”,我才发现这样一来的话,我的工作量就大大减少了。
当时我不仅采用“信号并置的算法”外,还采纳了它的“以楼层为电梯的状态转移的依据”的思想,这确实是一个不错的方法,不过当时我一直没有任何进展,一是它是用VHDL语言编写的,而且我对这个语言不是很熟悉所以不是特别理解。后来竟然干起了把VHDL语言翻译成verilog语言的工作,这样没有任何含金量的工作让我浪费了不少时间。现在想起来,我才发现我竟然迷失了自己,我原先自己的算法已经被丢失了,留下了的仅仅是一些他人的程序。“以楼层为电梯的状态转移的依据”的编程方法让我没有得到任何进展,我放弃的这种处理多种状态的方法,继而转向了我原先的“有限状态机”的方法。使用三段式的有限状态机的方法也花了很多时间去修正和改善。实现了基本的功能,当时一遇到比较复杂的情况时(比喻同时有几个人在请求或者是同时有两个在不同楼层的请求时电梯该如何运行呢,这些特殊情况我在当时一直没有找到合适和有效的方法去解决。。。。)。
在这里我想感谢EI HUST bripengandre ,这位编程高手给我们展示了应该怎样用有限状态机去处理比较复杂的输入和状态转移的情况。我的程序中难免会有一些他的原创,这一点请读者原谅,由他的启发,我才发现我们应该学会利用强大的逻辑处理技巧去分析问题和解决问题。不同的状态归根结底是不同的二进制数的变化。而且一系列的惯性思维让我们有时候是作茧自缚,比如一说到楼层的变化,我们首先会想到加1或减1这样的算术运算,但是有时一个简单的右移和左移也能轻松的达到目的。现在再想起来我觉得用“有限状态机(finite state machine)”去实现多状态的电梯是一个不可超越的方法了。希望以后还有这样的机会去做一个硬件课程设计,锻炼编程能力。
1 原理与系统设计 1.1 思想来源:
平时我们上课或者是上自习都去过东十二楼或者去过科技楼、南一楼,免不了坐坐电梯,对它的基本工作原理我们有知道多少了,这次我们要制作一个智能电梯控制器,必须对它的工作原理有十分清晰的了解。
- 3 -
带液晶显示驱动的智能电梯控制器
我们设计的智能电梯控制器应该可以实时接受各楼层的上下请求信号及电梯内部的停靠请求,然后根据这些请求实现对电梯正确的控制:
1、除了顶层和底层外,各楼层均设有上下请求开关,顶层和底层分别设有下降和上升请求开关,这一点应该不难理解;电梯内设有乘客到达层次的请求开关。 2、电梯每1s上升或下降一层
3、电梯到达有停站请求的楼层后,经过1s后电梯门打开,开门指示灯亮,开门5s后电梯指示灯灭,电梯继续运行,直至运行完最后一个请求后停靠在当前层。 以上是我们所应实现的基本功能。我在序言中也讲到了,“应用有限状态机”实现电梯的实时控制是最好不过的方法了,通过我的分析以及参考图书馆的有关书籍,也少不了参照一些网上的程序,最后总结出了电梯正常运行的七个状态: 上升、下降、上升的过程中途停止、下降的过程中途停止、开门、关门、等待状态。
电梯在上述七个状态间的转移是通过三段式状态机来实现的,各状态间的转移大体与生活中的电梯运转一致,有如下的基本原则:
1、方向为第一优先准则,这就是曾老师给我们的技术指标。电梯在运转时先响应同方向上的请求,只有当同方向上的请求响应完后,才能转而响应不同方向上的请求。
2、初始化状态为1楼等待门是关闭的。这个就不用多解释了。 除了我对电梯的运行规律做出如上的分析外,我的另一个选择开发智能电梯控制器的原因是我想锻炼一下自己的逻辑思维和分析复杂问题的能力。
1.2 付诸实施:
题目既然选定了,我就要开始收集资料了。最开始我根据DE2板子所能提供的资源,把楼层数设为6层。
从我查阅的书籍中我总结了两点是我可以借鉴的。首先,是怎样处理数量繁多的电梯输入信号,如果采用分情况讨论的话,程序一路写完,复杂度肯定是不堪设想,而且我还不敢保证是否分析到所有的情况了。
always @(call_up_1 or call_up_2 or call_up_3 or call_up_4 or call_up_5)
up_all={1'b0, call_up_5, call_up_4, call_up_3, call_up_2, call_up_1}; //将各下降请求信号实时地合并(1楼为底层,无下降请求,考虑到通用性,将第1位填零) always @(call_down_2 or call_down_3 or call_down_4 or call_down_5 or call_down_6) down_all={call_down_6, call_down_5, call_down_4, call_down_3, call_down_2, 1'b0}; //将各停靠请求信号实时地合并
always @(request_1 or request_2 or request_3 or request_4 or request_5 or request_6) request_all={request_6, request_5, request_4, request_3, request_2, request_1}; 以上这一段程序就是我采用的信号并置处理很多输入信号的一种行之有效的方法。 其次,我从资料中学习到的方法就是如何把信号并置的方法和有限状态机联系起来。这一点从下面的参数定义中可以窥见一二。
parameter WAIT=7'b0000001, UP=7'b0000010, DOWN=7'b0000100, UPSTOP=7'b0001000 , DOWNSTOP=7'b0010000, OPENDOOR=7'b0100000, CLOSEDOOR=7'b1000000; //定义楼层的符号常量
parameterFLOOR1=6'b000001,FLOOR2=6'b000010,FLOOR3=6'b000100,
FLOOR4=6'b001000, FLOOR5=6'b010000, FLOOR6=6'b100000;
- 4 -
带液晶显示驱动的智能电梯控制器
parameter TRUE=1'b1, FALSE=1'b0;//定义门打开和门关闭的符号常量
parameter OPEN=1'b1, CLOSED=1'b0;//定义电梯上升,下降和静止的符号常量 parameter UPFLAG=2'b01,DNFLAG=2'b10,STATIC=2'b00; 这里采用了七个状态实现了有限状态机。
WAIT UP DOWN UPSTOP DOWNSTOP OPENDOOR CLOSEDOOR
以上是我分析的两种基本的电梯状态转换图:
黑线:WAIT TO UP TO UPSTOP TO OPENDOOR TO CLOSEDOOR TO WAIT
粉红线:WAIT TO DOWN TO DOWNSTOP TO OPENDOOR TO CLOSEDOOR TO WAIT
由于状态转换的输入条件实在太多,在此我不画出,读者可以自行在程序(附有详细注释)中领会。我的程序中采用的是标准的MEALY型状态状态机。而且是老师建议的三段式的结构来写的。不过我有一点不明白的就是为什么在我的QUARTUS7.1中运用RTL VIEW不能显示出这个三段式的有限状态机。不过我会继续努力一下的,目前我智能用图形框来表示这个状态的流程了。
2 模块设计
2.1 模块示意图和输入输出描述
(1) 电梯主控制器模块elevator_controller:
- 5 -