立体式停车场控制系统
61009106
张益成
1、申请题目:
n 题目
立体式停车场控制系统
n 命题描述
设计功能齐全、操作简便、人机友好的立体式停车场控制系统,实现停车、取车等基本功能,自动和手动两种模式。
2、课题背景:
n 存在问题、应用背景
随着人口增加土地面积紧缺等问题,立体式停车场由于占地面积小,驾驶者停放方便的优势,正得到越来越大的重视和推广。
考虑设计能耗尽量少,等待时间尽量短的控制系统。并且尽量简化操作者的工作,实现自动化控制。
3、项目规划:
n 功能、指标、规模
该系统针对目前最流行的升降横移式的立体停车库,能够实现存车(包括输入车位坐标,移位,停车,复位)和取车(包括输入车位坐标,移位,开车,复位)的功能。
设置人工操控和自动控制两种操作模式,无人操作时,检测到有车辆驶入时自动安排最近车位。人工操作时,手动选择车位,系统自动运行最短路径移动车位。
对n层m列的车库实现兼容式的管理。即用同一套系统,只需在程序中改变相应参数,即可实现对不同车位的车库的管理。
n 面板(显示)、操作、规则
面板显示:
点阵显示停车场框架、车位、车辆
数码管显示输入坐标、停车数量、停车计时
操作规则:(键盘输入)
手动停车
等待模式下(开关在手动挡)按A键进入,键盘输入1~5键选择停车位层数,A~E键选择列数,F键确认
自动停车
等待模式下(开关在手动挡)按A键进入,自动选择最近车位停车
手动取车
等待模式下按B键进入,键盘输入1~5键选择取车位层数,A~E键选择列数,F键确认
n 输入、输出接口
时钟信号(clk_1k)
键盘行输出(row[3..0])
键盘列输入(col[3..0])
复位脉冲(reset)
自动模式电平(auto)
层坐标数码管(level[2..0])
列坐标数码管(rank[2..0])
车辆数数码管高位(totalnoh[1..0])
车辆数数码管低位(totalnol[3..0])
点阵列选(column[15..0])
点阵行选红(row_red[15..0])
点阵行选绿(row_green[15..0])
4、实现方案:
n 核心问题
移位算法、编号系统、时间系统
n 解决方案
移位算法中,需要实现对最短路径的计算,由于采用升降平移的方法,需先将对应下方的车位清空,留下空位,将待移车位向下移动至底层,停车后再上移至原位。另外考虑到展示效果,在移动过程中需要有短暂的停顿已看清整个过程。
解决方案是采用局部状态机,将每次移位设为一个小状态,控制状态机跳转的时间就控制了移位等待的时间。并且需要根据每次所选位置的不同,自动搜索下面层数的空位,将空位移至待移位正下方,并且由于每次下移和左右移动的距离都跟具体车位有关,因此在状态的跳转过程中,需要精确的计算和反复的调试。
编号系统和时间系统的共同问题都是算法庞大,设计逻辑单元非常多,导致芯片无法满足系统要求。虽然这部分代码都已经编写完成并且仿真符合要求,但是无法落实到实物。
5、系统结构:
n 系统框图
注:具体设计时,由于各模块所用时钟都是1kHz,因此时钟模块省去,另外将操作模块与数据模块合在一起实现
n 模块功能描述
状态机:接受数据/操作模块的信号控制整个系统的运行状态。
输入模块:包括键盘扫描和输入信息处理两部分,其中输入信息处理部分还包含内部状态机,以便按次序提取合理数据。
数据/操作模块:最核心算法部分,由状态机调用,由内部移位状态机控制,具体实现移位状态的跳转,移位的具体算法,(另外编号系统和时间系统也包含在其中),将各个车位的车架及车辆信息传递给显示模块处理显示。
显示模块:主要处理数据/操作模块的信息处理后,转化为点阵信息输出。
n 模块接口标注(参数、协议)
输入输出名称
|
芯片引脚号
|
实验箱标注
|
钉子线连接
|
clk_1k
|
PIN_73
|
P1
|
函数发生器
|
col[0]
|
PIN_72
|
P2
|
ROW4
|
col[1]
|
PIN_71
|
P3
|
ROW3
|
col[2]
|
PIN_70
|
P4
|
ROW2
|
col[3]
|
PIN_69
|
P5
|
ROW1
|
column[0]
|
PIN_68
|
P6
|
R1
|
column[1]
|
PIN_67
|
P7
|
R2
|
column[2]
|
PIN_62
|
P8
|
R3
|
column[3]
|
PIN_61
|
P9
|
R4
|
column[4]
|
PIN_60
|
P10
|
R5
|
column[5]
|
PIN_59
|
P11
|
R6
|
column[6]
|
PIN_58
|
P12
|
R7
|
column[7]
|
PIN_57
|
P13
|
R8
|
column[8]
|
PIN_56
|
P14
|
R9
|
column[9]
|
PIN_55
|
P15
|
R10
|
column[10]
|
PIN_54
|
P16
|
R11
|
column[11]
|
PIN_53
|
P17
|
R12
|
column[12]
|
PIN_52
|
P18
|
R13
|
column[13]
|
PIN_51
|
P19
|
R14
|
column[14]
|
PIN_50
|
P20
|
R15
|
column[15]
|
PIN_49
|
P21
|
R16
|
level[0]
|
PIN_48
|
P22
|
A1
|
level[1]
|
PIN_47
|
P23
|
B1
|
level[2]
|
PIN_42
|
P24
|
C1
|
rank[0]
|
PIN_41
|
P25
|
A2
|
rank[1]
|
PIN_40
|
P26
|
B2
|
rank[2]
|
PIN_39
|
P27
|
C2
|
reset
|
PIN_38
|
P28
|
PS1
|
row[0]
|
PIN_37
|
P29
|
COL4
|
row[1]
|
PIN_36
|
P30
|
COL3
|
row[2]
|
PIN_35
|
P31
|
COL2
|
row[3]
|
PIN_34
|
P32
|
COL1
|
row_green[0]
|
PIN_33
|
P33
|
GL1
|
row_green[1]
|
PIN_32
|
P34
|
GL2
|
row_green[2]
|
PIN_31
|
P35
|
GL3
|
row_green[3]
|
PIN_5
|
P36
|
GL4
|
row_green[4]
|
PIN_4
|
P37
|
GL5
|
row_green[5]
|
PIN_3
|
P38
|
GL6
|
row_green[6]
|
PIN_2
|
P39
|
GL7
|
row_green[7]
|
PIN_144
|
P40
|
GL8
|
row_green[8]
|
PIN_143
|
P41
|
GL9
|
row_green[9]
|
PIN_142
|
P42
|
GL10
|
row_green[10]
|
PIN_141
|
P43
|
GL11
|
row_green[11]
|
PIN_140
|
P44
|
GL12
|
row_green[12]
|
PIN_139
|
P45
|
GL13
|
row_green[13]
|
PIN_134
|
P46
|
GL14
|
row_green[14]
|
PIN_133
|
P47
|
GL15
|
row_green[15]
|
PIN_132
|
P48
|
GL16
|
auto
|
PIN_131
|
P49
|
K1
|
row_red[1]
|
PIN_130
|
P50
|
RL2
|
row_red[2]
|
PIN_129
|
P51
|
RL3
|
row_red[3]
|
PIN_128
|
P52
|
RL4
|
row_red[4]
|
PIN_127
|
P53
|
RL5
|
row_red[5]
|
PIN_126
|
P54
|
RL6
|
row_red[6]
|
PIN_125
|
P55
|
RL7
|
row_red[7]
|
PIN_124
|
P56
|
RL8
|
row_red[8]
|
PIN_123
|
P57
|
RL9
|
row_red[9]
|
PIN_122
|
P58
|
RL10
|
row_red[10]
|
PIN_121
|
P59
|
RL11
|
row_red[11]
|
PIN_120
|
P60
|
RL12
|
row_red[12]
|
PIN_119
|
P61
|
RL13
|
row_red[13]
|
PIN_114
|
P62
|
RL14
|
row_red[14]
|
PIN_113
|
P63
|
RL15
|
row_red[15]
|
PIN_82
|
IO/CLK1
|
RL16
|
totalnoh[0]
|
PIN_79
|
IO/CLK2
|
A3
|
totalnoh[1]
|
PIN_78
|
IO/CLK3
|
B3
|
totalnol[0]
|
PIN_77
|
IO/GSR1
|
A4
|
totalnol[1]
|
PIN_76
|
IO/GSR2
|
B4
|
totalnol[2]
|
PIN_75
|
IO/GTS1
|
C4
|
totalnol[3]
|
PIN_74
|
IO/GTS2
|
D4
|
6、状态流程图:
n 系统工作状态流程
主程序流程图:
移位、停取车、复位子程序流程:
7、各主要模块仿真结果波形
n
各模块的仿真波形,详细注释输入输出功能端口
复位、初始化信号
键盘输入信号
|
手动停车
|
自动停车
|
取车
|
时钟信号
Auto=0手动模式
Auto=1自动模式
车架及车辆信息
|
输入行列信息(数码管)
|
车辆总数信息(数码管)
|
8、课程设计总结
n 预期的目标与当前实现功能的差异详细注释
除去由于芯片的逻辑单元限制而导致编号系统未实现外,其余部分都与预期的一致。另外在具体设计的过程中考虑增加计时部分,记录车场中每辆车停放的时间,以用于在取车时结算收费。这部分的功能也已经编程实现,但是和编号系统一样,也是由于芯片限制,没有经过最后的实物部分的测试。
n 可以进一步发挥提高的部分
有待提高的部分也还有很多。其中比较具有实际意义的,比如将系统的兼容性更好的利用现有的点阵展示出来,可以在程序最初设置一个初始化的过程,输入行列然后生成具体的显示方式,由于程序本身已经考虑了对于不同行列停车场的算法的兼容,只需在状态切换和输出显示模块做一定调整修改即可实现。
此外,停车场移位算法也是可以继续优化的一部分。进一步考虑移位的时间和空间复杂度,尽可能的将能耗和时间消耗降到最小,可以增加系统的实用性。
当然,另外还可以考虑简化便利搜索逐个赋值等算法,减少整个系统占用的逻辑单元,以实现已经设计好的编号系统和计时系统的。
n 课程设计体会
首先说说程序设计中的具体体会。状态机,还是硬件电路中最核心的模块,在经过这样较大规模的程序设计之后,对这一点的体会更加深刻。状态机的把握直接体现了对整个程序流程的把握。这里的状态机已经不仅仅是指程序框架中的一个模块,而可能是对应某一个模块中的很小一部分,只要它的功能是控制其中的具体工作流程,它就是状态机。很多让人苦思不得其解的问题,引入逻辑清晰的状态机之后可以很快很流畅的得以解决。
越是简单的语句,所占用的资源越少,但是代价是其可读性、编程难度会随之上升。当然对于初学者,如果对某一门语言的比较高级复杂的语句还没有完全掌握,使用简单语句是很好的选择,但是必须在编写之前在纸上或者在脑中有对整个程序流程一个很好的框架把握。
再谈谈整个数字系统课程设计中的收获。在知识方面,当然最直接的是收获了一门语言,当然与此同时是对硬件电路和硬件语言的理解上的深入。
个人认为,更大的收获在于能力方面的培养。从对一个系统的构想,设计到最后的实现,其中包含了很多元素,而这些东西靠对书本知识的学习是永远无法掌握的。也就是所谓的在实践中学习。在构思选题上,必须考虑各种因素比如硬件限制,规模限制和个人能力限制,当然在这个过程中是不可能将之后的所有困难都设想到位的,因此就带来了后续编程实现过程中的调整,也就培养了针对非常具体的问题的细微调整。很多时候都是盯着程序很久毫无进展,这就需要我们跳出之前的思维模式进行新的思考。在设计过程中,考验和锻炼的使我们统筹全局,定性分析的能力。将某一个功能划分给某一个模块,将某一个功能划分成几个具体步骤等等。总之,这些能力的培养在以后的各个方面都会有很大的实用性。
在整个实验过程遇到的困难也是相当可观的。卡在一个问题上很久没有进展的时候锻炼的已经不仅仅是一个人的能力,更重要的是在困难面前的心态和素养。这个方面的锻炼更加抽象,当然也更可贵。
9、参考文献