单片机课程设计报告

上传人:新** 文档编号:432620193 上传时间:2023-01-27 格式:DOCX 页数:14 大小:270.71KB
返回 下载 相关 举报
单片机课程设计报告_第1页
第1页 / 共14页
单片机课程设计报告_第2页
第2页 / 共14页
单片机课程设计报告_第3页
第3页 / 共14页
单片机课程设计报告_第4页
第4页 / 共14页
单片机课程设计报告_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《单片机课程设计报告》由会员分享,可在线阅读,更多相关《单片机课程设计报告(14页珍藏版)》请在金锄头文库上搜索。

1、单片机课程设计报告智能机器小车设计说明书参赛队员:孙金林周扬龚彦中二零一五年一月目录、题目分析3二、硬件设计4三、控制算法7四、程序流程8五、程序代码9六、控制效果及结果分析13七、心得体会14一、题目分析任务涉及: 机器人小车巡航(跟踪条纹等); 无条纹区动作:触觉(利用胡须)避障,走转90度,停2秒,直行约15厘 米(或引导检测到条纹),再停2秒; 全程要设计信号灯指示工作状态。1.1. 小车巡航(跟踪条纹等) 小车巡航任务为本次课程设计的核心,即搭建的一个路径并编程使机器人沿 着该路径无差错运动。路径中每个条纹带是由三条1/4英寸宽的聚乙烯绝缘带边对边并行放置在白 色招贴板上组成的,绝缘

2、带条纹之间不能漏出白色板。图1-1为大致的实验任务 图。图1-1明确实验任务后,分析已有传感器我们选择使用红外探测发射与接收管作为 小车巡航任务的核心传感器。红外线二极管发射红外光,如果机器人前面有障碍 物,红外线从物体反射回来,相当于机器人眼睛的红外检测(接收)器,检测到 反射回的红外光线,并发出信号来表明检测到从物体反射回红外线。接收器的输 出接到单片机的IO口上,51单片机基于这个传感器的输入作出相应控制以实现小 车巡航。IR传感器在此应用用有着非常大的便利性,红外线(IR)接收/检测器有内 置的光滤波器,除了需要检测的980 nm波长的红外线外,它几乎不允许其它光通 过。红外检测器还有

3、一个电子滤波器,它只允许大约38.5 kHz 的电信号通过。 换句话说,检测器只寻找每秒闪烁38,500次的红外光。这就防止了普通光源象太 阳光和室内光对IR的干涉。太阳光是直流干涉(0Hz )源,而室内光依赖于所在 区域的主电源,闪烁频率接近100或120 Hz。由于120 Hz在电子滤波器的38.5 kHz 通带频率之外,它完全被IR探测器忽略。1.2无条纹区动作 无条纹区动作可以拆解为几个分动作,触觉(利用胡须)避障,左转90度, 停2秒,直行约15厘米(或引导检测到条纹),再停2秒。首先是触觉避障,也就是在机器人小车上安装有“胡须”,当小车前行过程中遇到障碍物时,会首先触及到小车前的胡

4、须,一旦触及小车的胡须,小车就会 启动后退并左右转弯之类的控制,实现避障功能。而在该任务里要求的也就是触及胡须之后的一系列逻辑行为,首先是左转90 度,即调用左转程序,调节延时时间已实现90度的控制;接着就是停2秒,也就 是调用延时函数,参数给2秒;然后是直行约15cm,即调用直行函数,具体行走 距离也是延时函数的参数问题,根据行走的实际情况,开环调节参数使得行走距 离大约15cm ;最后又是一段延时函数,使小车停2秒。1.3 设计信号灯指示工作状态 指示灯的主要作用就是一个人机交互的过程,让使用者能够从一些直观的器 件中了解机器目前的工作状态,这里我们使用信号指示灯来指示小车的工作状 态。即

5、使用左右两个LED来表明现阶段单片机根据检测得到的信号作出的逻辑判 断。当左边的IR检测器检测不到信号(即小车左边在黑线上)即让左边的小灯亮, 当右边的IR检测器检测不到信号(即小车右边在黑线上)即让右边的小灯亮。这 样便存在了4种情况,左边亮,右边亮,左右同时亮,左右同时灭,即指示小车 右偏,小车左偏,小车在黑线上,小车在黑线外。添加信号灯不仅仅能够使得观看者有一个直观感受,而且在调试的过程中有 非常大的用处,可以让开发者清楚得看出来逻辑上需要改进的地方。二、硬件设计硬件设计主要由IR发射器与接收器电路、触觉感应(“胡须”)电路、LED 信号指示灯电路组成。2.1. IR发射器与接收器电路I

6、R发射器与接收器在电路上是分立的,它们之间没有直接的电路连接关系, 它们的连接关系是建立在红外光信号的基础上的。图2-1是连接好后的实物物理 连接图,图2-2是电路连接图。从图2-2我们可以清晰得看到电路的连接关系,IR发射管正极经470R电阻连 接到VCC,负极接到9013三极管的c极,9013的三极管b级经470R电阻接到单片 机10口左边接到P1.3,右边接到P3.6, e极直接接地。而IR接收管1号管脚接VCC, 2号接GND, 3号接10口,左边的接收管接P1.2,右边接P3.5。这里我们要特别提及IR发射管与VCC之间的电阻阻值,这个阻值并不是定制 470R,需要我们根据硬件结构来

7、做一些调整,阻值越大,IR发射接收管的可视 范围就越小。为了调试的方便,我们最后选择使用可调电位器代替470R的定值 电阻,通过调节电位器的阻值调节可视范围。2.2触觉感应(“胡须”)电路每条胡须都是一个机械式的、接地常开的开关。胡须接地(GND)是因为 教学板外围的镀金孔都连接到GND。金属支架和螺丝钉提供电气连接给胡须。通过编程让单片机探测什么时候胡须被触动。图2-3 “胡须”物理连接简图由图2-4可知,由两组排针作为与胡须连接或断开的的端口,两组排针经220R 电阻连接到单片机10口上,左排针连接到P2.3,右排针连接到P1.4,并且排针口 都需要经10K上拉电阻接到VCC。这样的连接关

8、系使得I0 口默认是高电平,只有 当胡须接触到排针时,10 口变为低电平。连接到每个胡须电路的I/O引脚监视着10K上拉电阻上的电压变化。当胡须没 有被触动,连接胡须的I/O管脚的电压是5V,而当胡须被触动时,I/O短接到胡须 (GND),所以I/O管脚的电压是0V。根据I0口电平信号的变化单片机就能实 时作出反应,对本次智能小车而言,也就是根据胡须电路作出避障的功能模块。 2.3. LED信号指示灯电路LED信号指示灯主要起到显示单片机此时的逻辑判断状态的作用,它的显示 由单片机控制,电路图如图2-5所示。P2.1VCC1K左指示灯WV右指示灯P1.7图2-5 LED信号指示灯电路由图2-5

9、可以清晰地看到指示灯的正极经上拉接到VCC, 51的IO缺省为高电 平,只有当IO给低电平时指示灯亮,IO给高电平时指示灯灭。三、控制算法对于小车跟踪条纹巡航部分程序主要是逻辑算法以及一些滤波算法,控制算 法部分涉及不多。对于逻辑,就是一些条件判断。对于巡航部分,当左迦R接收器接收到信号 而右边没有接收到信号,说明小车在左偏,应该让小车右转;当左边IR没有接收 到信号而右边接收到信号,说明小车在右偏,应该让小车左转;当两个IR接收器 都没有收到信号,说明小车就在黑线上,小车应该直行;当两个IR接收器都能接 收到信号时说明小车已经不在黑线上了,这时代表小车已经走到了路线尽头,我 们让电机停止转动

10、。对于胡须避障部分,如果左边胡须触碰障碍,与左边相连的IO为低电平,小 车右转;如果右边胡须触碰障碍,与右边相连的IO为低电平,小车左转。在调试过程中我们发现,由于传感器自身存在一些缺陷或者是面包板搭建电 路存在的电路稳定性差的问题,我们的小车在测试过程中有时会出现反应过激之 类的不稳定控制情况。为了排除这些情况,我们在程序的逻辑判断部分加入软件 滤波,多次测试取概率最大情况为最种决策依据。后来经改进我们发现可以使用 类似单片机按键程序中的消抖算法来实现滤波,可以在判断之后加一小段延时后 再次判断,如果两次判断结果相同则执行,若不同则继续执行上一步的判断逻辑。 调试后小车系统行走过程平稳性明显

11、提高。四、程序流程Y左胡须遇障NY右胡须遇障NNY!NYNYNY同时检测到信号P1.2=0 且P3.5=0.同时检测到信号1.2=0 且P3.5=0.同时检测不到信号.P1.2=1 且 P3.5=1右边检测到,左边没有 -.P1.2=1 且 P3.5=0.-左边检测到,右边没有 -.P1.2=0 且P3.5=1.-直转左转停止右转左转直行初始化直行延时10msIR发射与接收五、程序代码程序片段1:封装好的主程序与宏定义#include #define LeftIRP1_2/左边红外接收连接到P1_2#defineRightIRP3_5/右边红外接收连接到P3_5#defineLeftLaunc

12、hP1_3/左边红外发射连接到P1_3#defineRightLaunchP3_6/右边红外发射连接到P3_6#defineLED_LP2_1#defineLED_RP1_7void main(void)int irDetectLeft,irDetectRight; uart_Init();printf(Program Running!n);Forward();while(1) if(P2_3state()=0) left_avoid();else if(P1_4state()=0) right_avoid();IRLaunch(R); /右边发射 irDe tect Right = Righ

13、 tl R;/右边接收IRLaunch(L); /左边发射irDe tec tLeft = Lef tl R;/左边接收 if(irDetectLeft=0)&(irDetectRight=0) delay_nms(10);if(irDetectLeft=0)&(irDetectRight=0) stop();LED_L=1;LED_R=1;else if(irDetectLeft=0)LED_L=1;LED_R=0;Right_Turn();else if(irDetectRight=0)LED_L=0;LED_R=1;Left_Turn();elseForward();LED_L=0;LE

14、D_R=0;程序片段2:子函数的封装int P1_4state(void)return (P1&0x10)?1:0;int P2_3state(void)return (P2&0x08)?1:0;void IRLaunch(unsigned char IR)int counter; if(IR=L) for(counter=0;counter38;counter+) LeftLaunch=1;nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();_nop_()LeftLaunch=0;_nop_(); _nop_();_nop_();_nop_();_nop_();_nop_()_nop_(); _nop_();_nop_();_nop_();_no

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 机械/制造/汽车 > 电气技术

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号