智能循迹小车实训报告

上传人:shi****01 文档编号:137954784 上传时间:2022-08-19 格式:DOC 页数:22 大小:505KB
返回 下载 相关 举报
智能循迹小车实训报告_第1页
第1页 / 共22页
智能循迹小车实训报告_第2页
第2页 / 共22页
智能循迹小车实训报告_第3页
第3页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
实训报课程名称:单片机实训完成日期:2014 年7 月10 0任务书实训(习)题目 :智能小车的功能设计与实现实训(习)目的:(1)、巩固、 加深和扩大单片机应用的知识面, 提高综合及灵活运用所学知识解 决工业控制的能力;( 2)培养针对课程需要。 锻炼学生查阅有关手册、 图标及文献资料的自学能力, 提高组成系统、编程、调试的动手能力;(3)对课程的方案分析、选择、比较、熟悉单片机系统开发、研制的过程,软 硬件设计的方法、容及步骤。实训(习)容:安装智能小车及相关功能设计、调试实训(习)要求 :1. 本实训要求由一个团队完成,团队人员不超过 8 个人。2. 通过所学知识并利用智能小车、计算机、 keil 软件、烧写软件等完成实训 项目,并拟定实训报告。3. 能正确组装和调试智能小车。4. 实训完成后,根据实训容撰写实训报告书一份。实训报告应包括的主要容(参考)1 系统硬件组成与工作原理1.1 控制器与最小系统1.2 显示模块与按键模块1.3 报警模块1.4 电机与驱动模块的工作原理与接口1.5 循迹模块的工作原理与接口1.6 避障模块的工作原理与接口2 功能方案及软件设计2.1 功能设计2.2 软件设计 (结合某一赛道、障碍设置说明程序设计思路,给出流程图、程序代码) 3功能调试与总结3.1 功能调试排版要求: 正文小 4宋体;段首缩进 2 字,行间距固定值 18磅。容展开可以按3级标题形式,如:按1、1.1、1.1.1形式(如果需要)。每个1级 标题另起一页, 1 级标题三号黑体居中, 题序和标题之间空两个空格, 不加标点, 段前、段后均为 1 行,固定值 22 磅。 2 级标题:四号黑体左起,四号黑体,段 前、段后均为 12磅。三级标题:小四号黑体左起,段前、段后均为 6磅。 图名、表名五号黑体,英文、数字字体为 Times New Roman 页边距:上、下、左 3 厘米,右 2 厘米, A4 纸打印。1 系统硬件组成与工作原理1.1.1 控制器与最小系统 最小系统:要使一块单片机芯片工作起来最简陋的接线方式就是单片机的最小系统。下面STC89C52单片机的最小系统(注意:不同圭寸装的单片机引脚位 置不同,下图是DIP40封装)。itCl1011FR110K30PFHI _30PF 12MHZ =C3123411121314n1617181920P1.0VCCP1.1P0.0P1.2P0.1P1.3P0.2P1.4P0.3P1.5P0.4P1.6P0.5P1.7P0.6RSTP0.7RXD/P3.0EAVPPTXD/P3.1PLE/PINT0/PA2PSENINT1/P3.3P27T0/T3.4P2.6T1/P3.5P2.5WR/P3.6P24RD/P3.7P2.3XTAL2P2.2XTAL1P2.1VSSP2.0STC89C51U13938373635343332313029282726252423222140将一块单片机芯片接成这样就能工作了。下面分析一下电路中各个部分的作用:1. 供电电路:40脚接电源+5V, 20脚接地,这样便完成了单片机的供电。2. 选择使用部ROM我们下载程序的时候是将程序下载的单片机部的ROM里面存放的,将EA/VPP端接到高电平(+5,就告诉单片机系统我们选择的是部的ROM这样单片机工作的时候就会执行部 ROM!面的代码了。如果将EA/VPP 接地,单片机就会执行扩展的外部 ROM我们没有扩展ROM呀,以后在没有 扩展ROM勺时候我们都将它接高电平就OK3. 复位电路:复位电路由电阻 R1和电容C1组成。复位电路是用以完成单片机 的复位初始化操作的(复位单片机RAh和各个寄存器的值的)。也就是说,在 单片机还没工作之前,我们先把寄存器的值全部复位成初始的默认值然后再开始工作,避免执行程序的时候发生错乱。那复位电路的工作原理是怎样的 呢?在单片机没上电的时候,电容C1两个极板没有电荷,在单片机上电的瞬 间,电容C1两端获得电压开始充电,既然 C1要充电那么就必定有电流通过 R1,所以在R1两端产生了瞬时电压,这个电压被加到了单片机的 RST端,单 片机的RST端得到了一个高电平便复位了。随着时间的推移,C1充满电了,再也没电流通过R1 了,R1两端便没有了电压,单片机的 RST引脚又由高电 平变成了低电平,这时,单片机便开始工作了。值得注意的是,要引起单片vczHeGEDDP共阴BDPDP3, a机的复位,加在RST端的高电平必须保持在一定的时间以上(连续 2个机器 周期以上高电平)。4.时钟电路:时钟电路由C2、C3和晶振丫1组成。时钟电路的作用是给单片机 提供时钟脉冲,只有给单片机提供时钟脉冲单片机才会执行程序。数码管分共阴和共| 阳,连接电路图如下:HJ-1G点亮第一个数码管,认识一个新的芯片 HJ5731.2显示模块与按键模块 1.2.1显示模块学习目标 认识数码管是什么东西?用 集成电路的应用。1.2.4单个数码管原理图如果需要显示“ 3”字符,则“ E” “ F”“ DP段都不显示,其他段点亮可以根据上图算出需要的8位段码值:共阴16进制:0x4F5M + 10561:話:共阳SM *20561口品纽巩M单片矶晶伍=TC. HtiE斗Lvec們2 PL1PU 3f3 PU4HJrS真4SPtj叫出J31肌盘FL51PL7MS 32LDETD立31LI gAU13 iSnTr:-231* ?Cir19 TlPJ5羞JXL12=LPL31117 心K2口PLl23MOWPU 11刃单片机最小糸统Ml匚J/一|qirhKxTqi共阳16进制:OxBODP本开发板使用共阴数码管DP共阴共阳f 二1cf一Q9Q9125开发板数码管模块原理图 1.3源码编写开始写程序之前认识一下锁存器(74HC573 :顾名思义,就是把输入端的 数据锁存(或送)到输出端,请看下图中的U3元件,第11角(锁存端)为高电 平的时候,右边D0-D7的输入与左边Q0-Q7的输出是直通的,就是说,输入端是 什么电平,输出端就是什么电平,可以把它当作不存在。当第11角为低电平的时候,左右两端就被断开了,无论输入端怎么变化,输出端都不会变化,当第11角由低电平变为高电平的一瞬间,输入端的数据立刻被传送到输出端,并且在11 角保持为高电平期间,输出端数据始终与输入端数据相同,如果此时我们再次把 第11角设置为低电平,那么以后当输入端无论再怎么变化,输出端都不会变化 而是保持刚才第11角在下降沿(由高电平到低电平跳变)之间时输入端的值, 这样就达到了锁存数据的目的,这也就是所谓的总线设计思路,一个8位的数据 线加一个锁存器后就可以扩接多个元件,当选通哪个元件的片选信号,就送数据给那个元件。先说这个元件,以后用到别的元件我们再解释。74HC573 11脚接高电平,锁存不起作用,相当于直通。相应的段赋值“1”有效。74HC138 A B、C赋值07,则输出端分别是Y0Y7置“0”,如P2=0, 则Y0=0 P2=6;则Y6=0即选通第七个数码管。程序如下/*容:数码管使用动态扫描显示,所以可以同时看到数码管同时显示数字或者 字符,扫描原理可以参#in clude#defi ne uint un sig ned int#defi ne uchar un sig ned charsbit dula=P2A6;sbit wela=P2A7;void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void main(void) / 每一个 C 语言程序有且只有一个主函数,while(1) / 循环条件永远为真,以下程序一直执行下去。dula=1;P0=0x5b; / 显示一个 2dula=0;wela=1;P0=0xfe; / 显示一位数码管?可以自己修改显示位数wela=0;delay(1); 多个数码管同时显示上一节单个数码管显示, 实际使用中单个数码管往往不能满足要求, 这就需 要多个数码管组合使用,单个数码管一般用静态显示,占用 IO 口线较多,如果 使用普通的静态显示,单片机的 IO 口是不够用的。所以就需要使用动态扫描。通过程序让任意一位数码管显示任意一种字符,这样我们可以以时间为轴, 循环显示每个数码管需要的数值, 当循环显示的时间比较小时, 眼睛就不能分辨 出闪烁,而是看到一个静态的数值显示, 可以通过下载“数码管动态扫描” 和“数 码管动态扫描演示” ,就可以深入了解这个原理, 以后使用的数码管显示的部分 都是基于这个原理的。1.4 总结 数码管是最常用的显示输出模块,可以显示温度,时间,步进电机转速等, 数码管里面简单一点说是集成了 8 个发光管,由点变成线, 由7 条线1 个点组成 1 个数码管, 发光管我们会写程序控制它了, 这个数码管一定难不到我们, 原理 方法是一样的,这次不是单片机 IO 口直接驱动的,是加了 573 还有 138 共同来 控制数码管的点亮,主要是为了节省单片机10 口,一口多用,一个8位10 口实 现多功能控制。1.5.1 学习目标 独立按键是区别于矩阵键盘的一种按键方式, 主要是按键直接连接到 I0 口,另外一端连接VCC或者GND 一般情况连接到GND地),也就是按键按下的时候, I0 口的电平被强制拉低,即 0,而通过 I0 输入检测该端口电平就可以判断按键 是否按下。1.5.2 硬件电路1.6原理图1.6.1触点存在抖动现象说明由于按键本身都存在不同的机械抖动, 单片机属于高速检测器件,可以很容易检 测出抖动,但抖动并不是我们需要的,容易造成误操作,所以正常使用过程中需 要添加去抖动程序,主要用于跳过抖动,避免造成干扰。1.6.2开发板独立按键模块原理图wr-O OS5K1 r-cS7ssRSP3 1S11厂旌抚产厂gESE牛厂狂匹門厂旌匹于iS13邑S14S15S16.INTILCDENRD1.7源码编写独立按键软件操作简单,主要检测按键连接的10 口是否为“ 0”,为“ 0”表 示按键按下。用以下语句:Sbit KEY1 = P3A0;If (! KEY1 /添加按键按下时需要执行的操作实际使用中按键有固定的机械抖动,根据不同按键抖动时间不同,一般 4-15mS 根据这个特点,需要延时躲避抖动,由于按下和释放都会存着抖动,实际使用程 序需要进行2次去抖。具体程序如下:#in elude sbit BY仁卩3八4; / 定义按键的输入端S2键unsigned char count; /按键计数,每按一下,eount 力卩 1un sig ned char temp;unsigned char a,b;void delay10ms(void) / 延时程序 unsigned char i,j;for(i=20;i0;i-)for(j=248;j0;j-);key() / 按键判断程序if(BY1=0) / 判断是否按下键盘delay10ms(); /延时, 软件去干扰if(BY1=0) / 确认按键按下count+; / 按键计数加 1if(count=8) /计8次重新计数cou nt=O; / 将 cou nt 清零while(BY1=0); 按键锁定,每按一次count只加1.move() / 广告灯向左移动移动函数a=temp(8-count);P1=a|b;main()count=0; / 初始华参数设置temp=0xfe;P1=0xff;P1=temp;while(1) / 永远循环 , 扫描判断按键是否按下key(); / 调用按键识别函数move(); / 调用广告灯移动函数/ 如果有干扰请加去抖程序/ 红外接收头部分用黑色物质遮光, 防止干扰按键, 因为红外接收和按键使用同 一个端口1.3报警模块一、蜂鸣器介绍蜂鸣器有两种:一种是有源蜂鸣器,只要给它加上恒定的电压,就能发声,另一 种是无源蜂鸣器,必须给它加上一定频率的方波或正弦波才能发声,一般实验板配的是无源蜂鸣器,HJ-1G开发板也不例外,由于驱动蜂鸣器电流要求比较大, 所以我们使用8550三极管来放大驱动,电路如下:FM 10 口为P2.3图2蜂鸣器外形图注意:喇叭和蜂鸣器不同,如果蜂鸣器直接加 5V电源则发出固定频率的 声音。掉电后会消失。喇叭不同,加5V电压后是不发声的,但是器件处于最大功耗状态,会有非常大的热功耗。长时间会烧毁喇叭。所以使 用的时候要注意,如果不是专门针对它操作,请断开它的输入信号端 子,防止误操作导致意外损坏。二、蜂鸣器编程实例具体编程时我们间隔一段时间将BZ线置反,就能输出一个固定频率的方波,让 蜂鸣器响起来。大家可能会问,给蜂鸣器多少频率的方波呢?首先这个频率必须在音频围,也就是20Hz到20KHZ之间,但是20Hz到20KHZ的频率送给蜂鸣器后,只有某一 点的频率是最响的,这个频率称为蜂鸣器的谐振频率, 离它越远,蜂鸣器发出的 声音越轻。1G/3G开发板配的蜂鸣器的谐振频率是2KHZ其半周期是250us,这样我们就确 定了 BZ 口线每延时250us就要变反。下面是一个蜂鸣器发声的实例程序:/*以下程序为FM程序,晶振频率为11.0592MHz*/#in cludesbit SPK=P2A3;/定义蜂鸣器端口void delay (un sig ned in tt)/延时while(-c nt);mai n()un sig ned int i;while(1)for(i=0;i200;i+)喇叭发声的时间循环,改变大小可以改变发声时间长短delay(80);参数决定发声的频率,估算值SPK=!SPK;SPK=1; 喇叭停止工作,间歇的时间,可更改delay(20000);1.4电机与驱动模块的工作原理与接口电机驱动原理图MB二士 EL *-E_c5 6 7P14cmnpi77VEN1VCCDJIraOIT1CLTTlGNDGNDGNDGND0VT2XJT3JN:DGVCC2EK2-I67CC15TL-13PL11OR*ID9P1.7IKLLcrm电机驱动接口图1.4.1电机驱动模块采用功率三极管作为功率放大器的输出控制直流电机。 线性型驱动的电路结 构和原理简单,加速能力强,采用由达林顿管组成的 H 型桥式电路。用单片机 控制达林顿管使之工作在占空比可调的开关状态下, 精确调整电动机转速。 这种 电路由于工作在管子的饱和截止模式下,效率非常高, H 型桥式电路保证了简单 的实现转速和方向的控制, 电子管的开关速度很快, 稳定性也极强, 是一种广泛 采用的PWM调速技术。这种调速方式有调速特性优良、调整平滑、调速围广、过载能力大,能承受 频繁的负载冲击, 还可以实现频繁的无级快速启动、 制动和反转等优点。 因此决 定采用使用功率三极管作为功率放大器的输出控制直流电机。1.5 循迹模块的工作原理与接口1.6 避障模块的工作原理与接口2 功能方案及软件设计2.1 功能设计本次功能设计为智能小车循迹加避障, 循迹指寻黑线走, 避障指遇到障碍物小车 会自动避开, 寻找无障碍路线走下去; 以及小车快速前进走直线后慢速后退走直 线功能。2.2 软件设计2.2.1 程序设计要求 赛道一:小车循迹黑线, 在桌子上用黑线画出一个椭圆赛道, 小车将沿着黑线做 循迹运动;中间会设置障碍物,看小车能否自动避障。2.2.4 程序代码/ 包含 51 单片机头文件, 部有各种寄存器定/包含HL-1蓝牙智能小车驱动10 口定义等函#include义#include 数#ifndef _LED_H_#define _LED_H_/ 定义小车驱动模块输入 IO 口sbit IN仁 P1A2;sbit IN2=PM3;sbit IN3=P1A6;sbit IN4=P1A7;sbit EN1=P1A4;sbit EN2=P1A5;/* 蜂鸣器接线定义 */sbit BUZZ=P2A3;#define Left_moto_pwmP1_5 /PWM 信号端#define Left_1_ledP3_3/ 左传感器(循迹)#define Right_1_ledP3_2/ 右传感器(循迹)#define Left_2_ledP3_5 /左传感器(避障)#define Right_2_ledP3_4 /右传感器(避障)#define Right_moto_pwmP1_4 /PWM 信号端#define Left_moto_go#define Left_moto_back#define Left_moto_Stop#define Right_moto_goP1_2=0,P1_3=1; /P1_2=1,P1_3=0; P1_5=0; / P1_6=1,P1_7=0;左电机向前走 / 左边电机向后转 左边电机停转/ 右边电机向前走#define Right_moto_back#define Right_moto_StopP1_6=0,P1_7=1;P1_4=0; / 右边电机向后走 右边电机停转变量定义左电机占空比 N/20右电机占空比 N/20unsigned char pwm_val_left =0;/ unsigned char push_val_left =0;/ unsigned char pwm_val_right =0; unsigned char push_val_right=0;/ bit Right_moto_stop=1;bit Left_moto_stop =1; unsigned int time=0;/* */ 延时函数void delay(unsigned int k)unsigned int x,y; for(x=0;xk;x+) for(y=0;y2000;y+);I*/ 前速前进void run(void)push_val_left=6;push_val_right=6;/ 速度调节变量 0-20 。0 最小, 20 最大Left_moto_go/Right_moto_go ; /左电机往前走右电机往前走/ 后退函数 如果看不明白,请看慧净电子 51 智能小车视频教程void backrun(void)push_val_left=6;push_val_right=6;Left_moto_back; /Right_moto_back; / 速度调节变量 0-20 。0 最小, 20 最大左电机往后走右电机往后走/ 左转void leftrun(void)push_val_left=5;push_val_right=5;Right_moto_go ; / 右电机往前走Left_moto_back; / 左电机往后走 / 右转void rightrun(void)push_val_left=5;push_val_right=5;Left_moto_go ; / 左电机往前走 Right_moto_back ; / 右电机往后走 /*/* PWM 调 制 电 机 转 速 */*/* 左 电 机 调 速 */* 调节 push_val_left 的值改变电机转速 , 占空比 */void pwm_out_left_moto(void)if(Left_moto_stop)if(pwm_val_left=20)pwm_val_left=0;else Left_moto_pwm=0;/ Left_moto_pwm1=0;/*/* 右电机调速 */ void pwm_out_right_moto(void)if(Right_moto_stop) if(pwm_val_right=20) pwm_val_right=0;else Right_moto_pwm=0;/ Right_moto_pwm1=0;/*/*TIMERO中断服务子函数产生PWM信号*/ void timer0()interrupt 1 using 2THO=OXFc; /1Ms 定时 TLO=OX18;time+; pwm_val_left+; pwm_val_right+;pwm_out_left_moto();pwm_out_right_moto();/* */#endif / 主函数void main(void)unsigned char i;P1=0X00; / 关电车电机/ 本实验学习的按键启动知识B: for(i=0;i50;i+) /判断 K4 是否按下delay(1); /1ms 判断 50 次,如果其中有一次被判断到 K4 没按下, 便重新检测if(P3_7!=0)/ 当 K4 按下时,启动小车前进,如有不明,请看慧净 51 单片机视频教程goto B; / 跳转到标号B,重新检测 /本实验学习的知识蜂鸣器,注意要在 HJ-4WD头文件里定义10 口BUZZ=0;1150次检测K4确认是按下之后,蜂鸣器发出“滴”声响,然后启动小车。delay(50);BUZZ=1; 响50ms后关闭蜂鸣器TM0D=0X01;TH0= 0XFc; /1ms 定时TL0= 0X18;TR0= 1;ET0= 1;EA = 1; / 开总中断 while(1) / 无限循环/ 有信号为 0 没有信号为 1if(Left_1_led=0&Right_1_led=0&Left_2_led=1&Right_2_led=1|Leftrun();/ 调用前进函数elseif(Left_2_led=1&Right_2_led=0)/测到红外信口.号leftrun(); / 调用小车左转函数if(Right_2_led=1&Left_2_led=0)/测到红外信口.号rightrun(); / 调用小车右转函数1_led=1&Right_1_led=1&Left_2_led=1&Right_2_led=1)右边检左边检/if(Right_2_led=0&Left_2_led=0) 两边传感器同时检测到红外backrun();/ 调用电机后退函数delay(50); / 后退 50 毫秒 rightrun();/ 调用电机右转函数delay(30);if(Left_1_led=1&Right_1_led=0&Left_2_led=1&Right_2_led=1)/ 左边检测到黑线leftrun();/ 调用小车左转 函数if(Right_1_led=1&Left_1_led=0&Left_2_led=1&Right_2_led=1)/ 右边检测到黑线rightrun();/ 调用小车右转 函数3功能调试与总结3.1 功能调试3.1.1 调试容 在前进和后退实训中, 调试的容相对较少, 主要的原因是不需要调试传感器 了,也不用检测黑线运动需要调试的只有左右电机的转速, 相对而言还是比较轻 松的。调试时应小心谨慎, 电路安装完毕后, 首先应检查电路各部分的接线是否正确, 检查电源、地线、信号线、元器件的引脚之间有无短路,器件有无接错。3.1.2 测试方法 关于循迹和避障实训, 测试的方法主要是走路线, 实验板上的线路, 能够顺 利正反走完,基本上就可以判定已经实现了功能。3.2 主要工作与总结
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业管理 > 商业计划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!