课程设计报告电脑鼠走迷宫.docx
- 文档编号:9173764
- 上传时间:2023-05-17
- 格式:DOCX
- 页数:45
- 大小:321.70KB
课程设计报告电脑鼠走迷宫.docx
《课程设计报告电脑鼠走迷宫.docx》由会员分享,可在线阅读,更多相关《课程设计报告电脑鼠走迷宫.docx(45页珍藏版)》请在冰点文库上搜索。
课程设计报告电脑鼠走迷宫
课程设计报告--电脑鼠走迷宫
天津职业技术师范大学
TianjinUniversityofTechnologyandEducation
课程设计
专业班级:
应电0814
学生姓名:
乔伟09李月19华焱建43
指导教师:
刘新月
系别:
电子工程学院
1电脑鼠走迷宫
1.1电脑鼠技术指标
依据IEEE标准迷宫构建相应数据结构,结合数据结构进行迷宫搜索算法的设计;分析电脑鼠硬件需求进行产品选型,构建硬件平台;实现电脑鼠自动搜索迷宫,从中选出最佳路径进行冲刺的功能。
1.2电脑鼠方案论证及选择
1.2.1核心控制器
基于所需完成任务要求我们知道,电脑鼠核心控制器需要有很快的信息处理速度。
那么,普通的8位单片机不能满足快速处理的条件,不能胜任任务。
为了实现高速信息处理,采用由Liminary公司生产的LM3S615控制器,该控制器是以ARM-Cortex-M3为内核的32位SOC系统,拥有50-MHz工作频率,可以胜任任务所要求的高速信息处理能力。
1.2.2传感器
传感器是电脑鼠的感觉器官,在运行过程中电脑鼠需要实时的检测迷宫墙壁信息,依据迷宫场地情况,因此采用收、发一体的红外线传感器作为电脑鼠的感觉器官。
红外线传感器具有感知能力强、抗干扰能力强、价格低廉等优点,并且符合硬件需求。
1.2.3电动机
为了使电脑鼠在迷宫中稳定的运行,需要给其提供稳定的动力。
为了更好的控制电脑鼠的行走情况,选用步进电动机来给电脑鼠提供动力。
步进电动机能够迅速的启动和停止,具有良好的控制能力。
1.2.4电源
电脑鼠设计采取外接锂电池供电,系统设计需要三种不同的电压,分别用来驱动电机、给传感器供电和给微控制器供电。
1.3电脑鼠总体电路图
图1-1MicroMouse615原理图
1.4电脑鼠系统组成框图
电脑鼠在迷宫运行当中,依据红外传感器获取的迷宫墙壁信息,传达给处理器进行相应的处理,再进行电机控制,并在显示模块显示电脑鼠所在迷宫的坐标信息。
总体框体如图1-2所示。
图1-2电脑鼠系统框图
1.5电脑鼠单元电路设计
1.5.1传感器单元
红外线传感器的工作电压为5V,在一般情况下可以把电池的输出电压经过稳压得到5V供电。
但若电池电压较低或瞬间被拉低时,系统就不能为传感器提供稳定的电源,这将严重影响传感器的灵敏度。
所以,我们将系统中已经较稳定的3.3V电压升到5V。
升压芯片采用Exar公司的低静态电流、高效率的升压芯片SP6641A,升压电路如图1-4所示。
图1-3红外检测电路
图1-45V升压电路
1.5.2步进电机驱动单元
电动机驱动电路如图1-5所示,其中BA6845FS是步进电机驱动芯片,该芯片包含两个H桥,它的最大驱动电流为1A,且在输入逻辑的控制下输出有三种模式:
正向、反向和停止。
BA6845FS输入控制与输出信号的关系见表1-1。
图1-5电动机驱动电路
表1-1BA6845FS真值表
IN11/21
IN12/22
OUT11/21
OUT12/22
模式
L
H
H
K
正向
H
H
K
H
反向
L
L
开路
开路
停止
H
L
开路
开路
停止
(2)两相四线制步进电机驱动时序
驱动步进电机的时序主要有单步驱动、整步驱动、半步驱动和微步驱动。
我们步进电机采用的是半步驱动。
电机以一个恒定的加速度加速到指定的转速,之后匀速运行。
加减速度实时算法的核心是使用定时器中断,当定时器发生溢出中断时,中断服务子函数推动电机走下一步。
1.5.3电源单元
电脑鼠设计采取外接锂电池供电,系统设计需要三种不同的电压,分别用来驱动电机、给传感器供电和给微控制器供电。
LM3S615控制器需要3.3V供电,电路如图1-6所示,外接电源经过C36、C2滤波,然后通过SPX1117M-3.3将电源稳压至3.3V。
SPX1117M-3.3是Exar公司生产的LDO芯片,其特点是输出电流大,输出电压精度高,稳定性高。
其输入电压范围为4.7V到12V,输出电流可达800mA。
在其输出端的C3、C4用来改善瞬态响应和稳定性。
图1-63.3V电源电路
1.6运动算法设计
(1)直线运动
经过我们实际测试,走迷宫中的一格步进电机需要向前走125步,在每次进行迷宫搜索时电脑鼠直线前进,直到遇到支路口。
在直线运动过程中,步进电机先匀加速到所给的最大速度值,之后以该速度匀速运行。
(2)转弯处理
①90度转弯
向左转90度和向右转90度实质是一样的,转弯有两种方式:
一种是在前进中转弯,即连续转弯;一种是原地转弯,即一个轮正转,一个轮反转。
基于实际测试情况,我们选择了连续转弯的方法实现90度转弯。
②180度转弯
要实现180度转弯,只需使一个轮正转一个轮反转就能够完成转弯。
1.7迷宫坐标信息采集算法
(1)迷宫坐标和绝对方向的建立
依据IEEE标准迷宫结构,由16×16个格数组成,采用x、y坐标轴来存贮坐标值。
迷宫坐标由绝对方向控制。
根据坐标的定义和比赛规则可以知道,电脑鼠的起点可能在(0,0)点,也可能在(F,0)点。
当电脑鼠第一次拐弯口是在它的右方,起点为(0,0);如果第一个检测的拐弯口在它的左方,则说明起点为(F,0)。
(2)相对方向与绝对方向的转换
相对方向:
以电脑鼠当前行走方向为参照方向
绝对方向:
以迷宫绝对坐标平面为参照方向
电脑鼠在运行中,经常会遇到相对方向与绝对方向的互换,本文
以变量Dir记录电脑鼠前进方向上的绝对方向值,相对方向转换为绝对方向如表1-2所示。
表1-2相对方向转换为绝对方向
相对方向
绝对方向
电脑鼠前方
Dir
电脑鼠右方
(Dir+1)%4
电脑鼠后方
(Dir+2)%4
电脑鼠左方
(Dir+3)%4
有时电脑鼠还需根据绝对方向求出相对方向,比如控制电脑鼠转向某一个绝对方向。
首先根据目标的绝对方向(Dir_dst)和当前的绝对方向(Dir)求出方向偏差(△Dir),计算公式为:
△Dir=(Dir_dst+4–Dir)%4,这时就可以根据方向偏差求出电脑鼠的相对方向,如表1-3所示。
表1-3绝对方向转换为相对方向
绝对方向差值(△Dir)
相对方向
0
电脑鼠前方
1
电脑鼠右方
2
电脑鼠后方
3
电脑鼠左方
(3)坐标转换
假设电脑鼠当前坐标为(x,y),那么就可以求出某绝对方向的相邻坐标值,如表1-4所示,该表是可逆的,既可以根据坐标值的变化求出绝对方向。
表1-4坐标转换
绝对方向
坐标
当前位置
(X,Y)
上方(0)
(X,Y+1)
右方
(1)
(X+1,Y)
下方
(2)
(X,Y-1)
左方(3)
(X-1,Y)
(4)墙壁资料储存
要想使电脑鼠具备智能选路的本领,必须使其具备记忆迷宫信息的能力,除此之外电脑鼠还需记忆当前所在迷宫格和前进方向的信息,这些信息将随着电脑鼠在迷宫格中行走而不断被刷新。
坐标墙壁存储的值有16×16的二位数组变量来保存。
迷宫墙壁资料全部初始为0,凡是走过的迷宫至少有一方没有墙壁,即墙壁资料不为0,这样就可以根据墙壁资料是否为0来确定该单元格是否走过。
墙壁资料有数组变量的低四位来表示,如表1-5所示。
1.8迷宫算法
(1)迷宫搜索算法
常见的迷宫搜索算法如下:
①右手法则:
以右边为优先的前进方向,然后是直线方向、左边方向。
表1-5墙壁资料存储方式
变量名
代表的绝对方向
备注
bit0
上方(0)
1:
有路,0:
有墙壁
bit1
右方
(1)
1:
有路,0:
有墙壁
bit2
下方
(2)
1:
有路,0:
有墙壁
bit3
左方(3)
1:
有路,0:
有墙壁
bit7~bit4
保留位
②左手法则:
以左边为优先的前进方向,然后是直线方向、右边方向。
③中左法则:
以直线为优先的前进方向,然后是左边方向、右边方向
④中右法则:
以直线为优先的前进方向,然后是右边方向、左边方向
⑤求心法则:
遇有交叉时,以指向迷宫中心的方向为优先的前进方向。
⑥向点法则:
以坐标起点为方向,向着起点行进
软件设计中采用两种混合搜索策略,即启动电脑鼠搜索到终点采用向心法则,从终点搜索回起点采用向点法则。
两种策略的结合使用,极大的缩短了迷宫搜索时间
(2)寻找最优路径的方法
电脑已经搜索完成整个迷宫或者只搜索了包含起点和终点的部分迷宫,且记录了已走过的每个迷宫的墙壁资料,那么它会根据等高图寻找出一条最优的路劲冲刺。
等高图运用在迷宫地图上,可以使电脑鼠更灵敏,少走很多弯路。
等高图制作的原理:
首先开辟一块16×16的二维数组空间,其中每一个元素代表迷宫中的一个方格,用以计算后储存各方格至起点的最短路径步数。
当起点坐标处标识为1时,可以直接到达的相邻方格均为2,再远的方格的等高值依次递增。
这样距离越远的地方等高值越大。
1.9测试结果分析及改进
(1)电脑鼠迷宫运行
把修改完的代码烧写进入电脑鼠,放入迷宫中运行。
电脑鼠直线搜索比较稳定,转弯基本正常,但有时却出现少转了一些步数的情况。
电脑鼠冲刺比较稳定,极少出现转弯不正的境况。
在遇到一、两个格数坐标返回时,采用的档位控制功能能较好的处理转弯不正的问题。
(2)改进措施
电脑鼠转弯不正很有可能跟传感器有关系,经过多次调试,修改红外传感器灵敏度,使传感器达到一个最佳点。
在软件上也进行一些修改,电脑鼠转弯的步数增加几步,也可纠正转弯不正的情况。
1.10总结
根据所改函数功能,电脑鼠搜索到终点附近时,直接进入4个中的一个终点的坐标,并且坐标显示正常。
电脑鼠在返回搜索所走的路线虽不是最佳的路径,但却能根据起点判断函数快速回到起点,为冲刺寻找出一条路线。
电脑鼠正前方传感器检测到有效的墙壁信息时,电脑鼠没有及时的停下来,为解决这问题,在电脑鼠的地盘白色托盘上粘贴胶布,增大电脑鼠与地面的摩擦力。
2智能电梯控制系统
本文采用单片AT89S52芯片进行电梯控制系统的设计方法,利用单片机编程实现功能,简洁而又多变的设计方法,缩短了研发周期,同时使电梯控制系统体积更小功能更强大。
本设计实现了电梯控制系统所需的一些基本功能,能通过方向按键选择方向,能通过数字按键选择楼层,数码管显示实时楼层数,点阵显示实时方向,电机控制使电梯箱能上下运动。
2.1主要技术指标
液晶采用1602能够直观明了显示电梯相关信息。
电机采用定时器中断控制,两相四线制步进电机驱动。
电机正转代表电梯上升,电机反转代表电梯下降,并实时通过液晶显示当前电梯状态以及按键响应。
当电梯到达相应楼层时,相应楼层的LED灯会被点亮,离开当前楼层时,LED则会被熄灭。
开门或者关门状态时,蜂鸣器蜂鸣和红灯闪烁以起到警示作用。
按键实用IO口直接驱动。
电梯总共有4个状态:
停止、等待、上和下。
2.2方案论证及选择
方案一:
采用可编程控制器(PLC)作为主要器件来控制电机的运动、内外按键的响应、按键后的电路显示等等。
用PLC编程比较简单,电路也不复杂,但此方案的各个模块的费用都比较高,硬件设计也不灵活,故不采用此方案。
方案二:
MCU采用一个单片机控制所有的按键、数码管显示、电动机的转动、传感器的输出信号等等,并对以上所有信号进行处理。
单片机技术目前较为成熟,自身资源丰富,硬件设计简单,成本低,可靠性高,结合软件完全可以实现电梯运行状况的简单模拟。
故采用本方案。
2.3系统组成框图
根据层次化设计理论,该设计问题自顶向下可分为单片机最小系统模块、开关控制模块、电机驱动模块、报警模块,显示模块等。
本次设计是采用开关控制实现上下到指定楼层,通过电机转动带动电梯箱上下运动,到达指定楼层。
显示模块是显示电梯箱此时运动的楼层和所有呼叫的楼层,报警模块具有楼层到达的提示功能。
框图如图2-1所示:
单片机AT89S52
开
关
控制
电机驱动
显示模块
报警模块
图2-1智能电梯控制系统框图
2.4单元电路设计
2.4.1单片机最小系统模块
单片机最小系统包括主芯片,复位电路和晶振脉冲产生电路。
使用12MHz外部晶振,与30Pf电容并联,产生1/12us的脉冲信号作为单片机的“心脏”部分。
复位电路是开关与10uf电容并联组成的上电自动复位电路,在RST端为高电平时单片机清零,也即开关按下会产生清零信号。
最小系统模块如图2-2
图2-2最小系统框图
2.4.2开关控制模块
开关控制模块,按键与I/O连接电梯,写键盘代码时运用按键扫描,确定任务,呼叫和所要到达的楼层及系统的控制。
图2-3按键模块
2.4.3电机驱动模块
电机驱动采用ULN2003A环形计数分配器驱动完成。
本次设计采用步进电机,目的是方便智能控制,可实现调速功能。
电机使用的是二相步进电机,由于仅用来实验,所以电机采用5V电源供电即可,实际中必须使用大电压来供电方能带动重物(人等)。
图2-4步进电机驱动模块
2.4.4液晶显示模块
由于点阵和双位数码管耗电流较大,不能直接连接单片机IO口驱动其正常工作,所以采用1602液晶显示。
直接用IO口驱动液晶显示。
其中使用P0口来驱动液晶显示输入输出。
图2-5液晶显示模块
表2-11602液晶管脚说明
管脚
说明
1
VSS地电源
2
VDD5V正电源
3
显示器对比度调整端
4
RS为寄存器选择
5
RW为读写信号线
6
E端使能端
7~14
D0~D7为8位双向数据线
15~16
空脚(可接背光)
2.4.5报警模块
本设计采用9012三极管驱动蜂鸣器。
因为三极管是PNP,当PO口送高电平时,三极管处于截止状态,三极管Vce电压约为VCC,蜂鸣器只有很少电流流过,没法驱动其发声。
当PO口送低电平时,三极管处于饱和导通状态,三极管Vce约为0.3V,蜂鸣器有较大电流流过,能驱动其报警发声。
图2-6蜂鸣器报警模块
2.4.6电路总图
图2-7电路总图
2.5软件流程图以及任务描述
电梯总共有4个状态:
停止、等待、上和下。
电梯初始状态为停止状态。
当停止/启动按键长按,电梯转为等待状态,响应相应电梯楼层数按键。
若开门键先按,电梯开门,等待选择楼层数,不响应当前楼层数。
电梯等待一定时间,自动关门。
若长时间不选择楼层数,电梯将自动运行到1层。
当电梯处于1层时,若停止/启动按键按下,电梯先开门,等待一定时间,再关门,电梯转为停止状态。
电梯上下行任务处理,电梯处于等待或运行状态
1、电梯处于等待状态。
只有一个楼层数响应,不响应当前楼层按键。
当电梯当前楼层数小于按键值,电梯转为上运行状态,否则转为下运行状态。
运行当中,响应相应的电梯楼层按键,并锁存。
电梯每运行一层,锁存值清零,更行电梯楼层数。
2、电梯处于等待状态,电梯当前楼层上下层都有按键响应时,优先执行电梯当前状态任务,直到当前状态无响应按键,转为另一状态,并到达相应楼层。
开始
初始化
电梯等待
有无键按
按键处理
任务响应
控制电机
并显示
楼层到达
蜂鸣器动作
显示
Y
N
Y
N
图2-8软件流程图
2.6元件清单
表2-2元件清单
元件名称
元件属性
数量
89S52
微控制器
1
晶振
12MHz
1
液晶
1602
1
瓷片电容
30pF
1
电解电容
10uF
1
电阻
10K
16
200
1
1K
7
二极管LED
1
按键
7
蜂鸣器
1
三极管
9012
1
2.7调试过程
在编程方面,主要面临的问题是电梯的逻辑,通过软件仿真能够快速方便地解决硬件调试问题。
比如,智能电梯使用步进电机带动楼层运动,并通过LCD1602液晶显示电梯相应信息,所以电梯控制编程要与电机控制和电梯逻辑相符合。
在进行电梯逻辑控制时,使用软件仿真,极大的简化了软件编程调试。
在硬件方面,液晶和蜂鸣器供电没有接上拉电阻容易导致液晶显示紊乱。
最主要的问题出现在电梯运行的逻辑方面。
比如,电梯运行到三楼,同时一楼和四楼有人按下,电梯该往上还是往下运行。
通过逐个击破,找出电梯逻辑运行问题。
在步进电机的控制方面,刚开始使用四拍,我们发现步进电机转动非常慢,进而我们用八拍的做了改善,且使用定时器中断,让步进脉冲间隔减短,步进电机的速度才最终得到了提升。
2.8总结
软件仿真是完全理想的状态,在进行硬件调试中,发现电机转动慢以及蜂鸣器蜂鸣导致液晶显示乱码问题。
针对问题,经过查询步进电机相关资料,采用半步八拍驱动时序,定时器中断时间减为毫秒级,增加步进脉冲,问题得以解决。
对于液晶显示乱码,在软件调试过程中,发现只要蜂鸣器蜂鸣,液晶便开始乱码。
蜂鸣器驱动电路采用三极管放大驱动蜂鸣,在进行蜂鸣的瞬间,电流激增,导致液晶控制端信号异常,从而显示乱码。
商量之后,我们决定增加限流电阻。
蜂鸣器蜂鸣声音稍微降低,液晶显示正常,问题得以解决。
参考文献
[1]周立功.《IEEE电脑鼠开发指南》.广州致远电子有限公司.
[2]LM3S615Datasheet.
[3]ARM-Cortex-M3Datasheet.
[4]BA6845FSDatasheet.
[5]IRM8601SDatasheet.
[6]ZLG7289BDatasheet.
[7]《IAR使用指南》.广州周立功单片机发展有限公司.
[8]张齐,杜群贵著.单片机应用系统设计技术.电力工业出版社,2007.
[9]王蔚林.电梯智能控制系统的研究.上海交通大学,2005.
[10]梁延东.电梯控制技术.中国建筑出版社,2007.
[11]史敬.步进电动机伺服控制技术.科学出版社,2007.
[12]肖红兵.跟我学用单片机.北京航空航天大学出版社,2002.
[13]何立民.单片机高级教程.北京航空航天大学出版社,2001.
[14]赵晓安.MCS-51单片机原理及应用.天津大学出版社,2001.
附录1电梯代码
uint8CurrentFloor=FLOOR1;
uint16SecCt=0;
uint8RunTask=1;
uint8CallFloor=0;
uint16ucPul=0;
uint16ucPulC=0;
uint8Check2=1;
uint8Check3=1;
uint8*liftstate[]={"STOP","UP","DOWN","WAIT"};
uint8*liftfloor[]={"E","1","2","3","4"};
uint8*DoorStat[]={"C","O"};
uint8dataLine1[]={"State:
STOP"};
uint8dataLine2[]={"Floor:
1DOOR:
C"};
uint8LiftDir=LIFTUP;
uint8LiftS=LIFTSTOP;
uint8LiftF=FLOOR1;
uint8MotoS=MOTOSTOP;
uint8DoorFlag=0;
uint8codepic[8][8]={
{0x04,0x0e,0x15,0x04,0x04,0x04,0x04,0x00},
{0x00,0x04,0x04,0x04,0x04,0x15,0x0e,0x04},
};
voiddelay(uint8k){
uint8i,j;
for(i=0;i for(j=0;j<80;j++); } voidwait_unit_ready() { LCD_RS=0; LCD_RW=1; LCD_data=0xff; LCD_EN=1; delay(20); while(LCD_data&0x80==0); LCD_EN=0; } voidLCD_write_cmd(uint8cmd) { wait_unit_ready(); LCD_RS=0; LCD_RW=0; LCD_data=cmd; LCD_EN=1; delay (1); LCD_EN=0; } voidLCD_write_data(uint8S_L_data) { wait_unit_ready(); LCD_RS=1; LCD_RW=0; LCD_data=S_L_data; LCD_EN=1; delay (1); LCD_EN=0; } voidLCD_string(int8*s,uint8x) { LCD_write_cmd(x); for(;*s! ='\0';s++) LCD_write_data(*s); } voidLCD_write_pic(uint8CGadd,uint8*pic_num) { uint8i; CGadd=CGadd<<3; for(i=0;i<8;i++) { LCD_write_cmd(0x40|CGadd+i); LCD_write_data(*pic_num++); } } voidLCD_init() { LCD_write_cmd(0x38);//8位数据,2行显示 LCD_write_cmd(0x08);//显示关闭 LCD_write_cmd(0x01);//清屏 LCD_write_cmd(0x06);//写入数据后光标右移 LCD_write_cmd(0x0c);//显示打开,不显示光标 LCD_write_pic(0,pic[0]);//↑ //LCD_write_cmd(0x80); //LCD_write_data('T'); LCD_write_pic(1,pic[1]);//↓ } voidU_D_MotorContr(void) { staticunsignedcharcStep=0; switch(LiftDir) { caseLIFTUP: cStep=(cStep+1)%8; break; caseLIFTDOWN: cStep=(cStep+7)%8; break; default: break; } switch(cStep) { case0: { Motor_U_D_A=0; Motor_U_D_B=0; Motor_U_D_C=1; Motor_U_D_D=1; }break; case1: { Motor_U_D_A=1; Motor_U_D_B=0; Motor_U_D_C=1; Motor_U_D_D=1; }break; case2: { Motor_U_D_A=1; Motor_U_D_B=0; Motor_U_D_C=0; Motor_U_D_D=1; }break; case3: { Motor_U_D_A=1; Motor_
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 报告 电脑 迷宫