ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:693.94KB ,
资源ID:5111214      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5111214.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(智能循迹小车实训报告.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

智能循迹小车实训报告.docx

1、智能循迹小车实训报告实 训 报 告课程名称: 单片机实训 完成日期: 2014 年 7 月 10 日任 务 书实训(习)题目:智能小车的功能设计与实现实训(习)目的:(1)、巩固、加深和扩大单片机应用的知识面,提高综合及灵活运用所学知识解决工业控制的能力;(2)培养针对课程需要。锻炼学生查阅有关手册、图标及文献资料的自学能力,提高组成系统、编程、调试的动手能力;(3)对课程的方案分析、选择、比较、熟悉单片机系统开发、研制的过程,软硬件设计的方法、容及步骤。实训(习)容:安装智能小车及相关功能设计、调试实训(习)要求:1. 本实训要求由一个团队完成,团队人员不超过8个人。2. 通过所学知识并利用

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级

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单片机的最小系统(注意:不同封装的单片机引脚位置不同,下图是D

4、IP40封装)。将一块单片机芯片接成这样就能工作了。下面分析一下电路中各个部分的作用:1. 供电电路:40脚接电源+5V,20脚接地,这样便完成了单片机的供电。2. 选择使用部ROM:我们下载程序的时候是将程序下载的单片机部的ROM里面存放的,将EA/VPP端接到高电平(+5V),就告诉单片机系统我们选择的是部的ROM,这样单片机工作的时候就会执行部ROM里面的代码了。如果将EA/VPP接地,单片机就会执行扩展的外部ROM,我们没有扩展ROM呀,以后在没有扩展ROM的时候我们都将它接高电平就OK。3. 复位电路:复位电路由电阻R1和电容C1组成。复位电路是用以完成单片机的复位初始化操作的(复位

5、单片机RAM和各个寄存器的值的)。也就是说,在单片机还没工作之前,我们先把寄存器的值全部复位成初始的默认值然后再开始工作,避免执行程序的时候发生错乱。那复位电路的工作原理是怎样的呢?在单片机没上电的时候,电容C1两个极板没有电荷,在单片机上电的瞬间,电容C1两端获得电压开始充电,既然C1要充电那么就必定有电流通过R1,所以在R1两端产生了瞬时电压,这个电压被加到了单片机的RST端,单片机的RST端得到了一个高电平便复位了。随着时间的推移,C1充满电了,再也没电流通过R1了,R1两端便没有了电压,单片机的RST引脚又由高电平变成了低电平,这时,单片机便开始工作了。值得注意的是,要引起单片机的复位

6、,加在RST端的高电平必须保持在一定的时间以上(连续2个机器周期以上高电平)。4. 时钟电路:时钟电路由C2、C3和晶振Y1组成。时钟电路的作用是给单片机提供时钟脉冲,只有给单片机提供时钟脉冲单片机才会执行程序。1.2 显示模块与按键模块1.2.1 显示模块学习目标认识数码管是什么东西?用HJ-1G 点亮第一个数码管,认识一个新的芯片HJ573集成电路的应用。1.2.4 单个数码管原理图如果需要显示“3”字符,则“E” “F” “DP”段都不显示,其他段点亮可以根据上图算出需要的8 位段码值:共阴16 进制:0x4F共阳16 进制:0xB0本开发板使用共阴数码管1.2.5开发板数码管模块原理图

7、1.3 源码编写开始写程序之前认识一下锁存器(74HC573):顾名思义,就是把输入端的数据锁存(或送)到输出端,请看下图中的U3 元件,第11 角(锁存端)为高电平的时候,右边D0-D7 的输入与左边Q0-Q7 的输出是直通的,就是说,输入端是什么电平,输出端就是什么电平,可以把它当作不存在。当第11 角为低电平的时候,左右两端就被断开了,无论输入端怎么变化,输出端都不会变化,当第11 角由低电平变为高电平的一瞬间,输入端的数据立刻被传送到输出端,并且在11 角保持为高电平期间,输出端数据始终与输入端数据相同,如果此时我们再次把第11 角设置为低电平,那么以后当输入端无论再怎么变化,输出端都

8、不会变化而是保持刚才第11 角在下降沿(由高电平到低电平跳变)之间时输入端的值,这样就达到了锁存数据的目的,这也就是所谓的总线设计思路,一个8 位的数据线加一个锁存器后就可以扩接多个元件,当选通哪个元件的片选信号,就送数据给那个元件。先说这个元件,以后用到别的元件我们再解释。74HC573 11 脚接高电平,锁存不起作用,相当于直通。相应的段赋值“1”有效。74HC138 A、B、C 赋值07,则输出端分别是Y0Y7 置“0”,如P2=0,则Y0=0;P2=6;则Y6=0;即选通第七个数码管。程序如下/*-容:数码管使用动态扫描显示,所以可以同时看到数码管同时显示数字或者字符,扫描原理可以参#

9、include#define uint unsigned int#define uchar unsigned charsbit dula=P26;sbit wela=P27;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);多个数码管同时显示

10、上一节单个数码管显示,实际使用中单个数码管往往不能满足要求,这就需要多个数码管组合使用,单个数码管一般用静态显示,占用IO 口线较多,如果使用普通的静态显示,单片机的IO 口是不够用的。所以就需要使用动态扫描。通过程序让任意一位数码管显示任意一种字符,这样我们可以以时间为轴,循环显示每个数码管需要的数值,当循环显示的时间比较小时,眼睛就不能分辨出闪烁,而是看到一个静态的数值显示,可以通过下载“数码管动态扫描”和“数码管动态扫描演示”,就可以深入了解这个原理,以后使用的数码管显示的部分都是基于这个原理的。1.4总结数码管是最常用的显示输出模块,可以显示温度,时间,步进电机转速等,数码管里面简单一

11、点说是集成了8 个发光管,由点变成线,由7 条线1 个点组成1 个数码管,发光管我们会写程序控制它了,这个数码管一定难不到我们,原理方法是一样的,这次不是单片机IO 口直接驱动的,是加了573 还有138 共同来控制数码管的点亮,主要是为了节省单片机IO 口,一口多用,一个8 位IO 口实现多功能控制。1.5.1 学习目标独立按键是区别于矩阵键盘的一种按键方式,主要是按键直接连接到IO 口,另外一端连接VCC 或者GND,一般情况连接到GND(地),也就是按键按下的时候,IO 口的电平被强制拉低,即0,而通过IO 输入检测该端口电平就可以判断按键是否按下。1.5.2 硬件电路1.6 原理图1.

12、6.1 触点存在抖动现象说明由于按键本身都存在不同的机械抖动,单片机属于高速检测器件,可以很容易检测出抖动,但抖动并不是我们需要的,容易造成误操作,所以正常使用过程中需要添加去抖动程序,主要用于跳过抖动,避免造成干扰。1.6.2 开发板独立按键模块原理图1.7 源码编写独立按键软件操作简单,主要检测按键连接的IO 口是否为“0”,为“0”表示按键按下。用以下语句:Sbit KEY1 = P30;If(!KEY1)/添加按键按下时需要执行的操作实际使用中按键有固定的机械抖动,根据不同按键抖动时间不同,一般4-15mS,根据这个特点,需要延时躲避抖动,由于按下和释放都会存着抖动,实际使用程序需要进

13、行2 次去抖。具体程序如下:#include sbit BY1=P34; /定义按键的输入端S2键unsigned char count; /按键计数,每按一下,count加1unsigned 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) /

14、计8次重新计数count=0; /将count清零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 报警模块一、蜂鸣器介绍蜂鸣器有两种:一种是有源蜂鸣器,只要给它加上恒定的电压

15、,就能发声,另一种是无源蜂鸣器,必须给它加上一定频率的方波或正弦波才能发声,一般实验板配的是无源蜂鸣器,HJ-1G 开发板也不例外,由于驱动蜂鸣器电流要求比较大,所以我们使用8550 三极管来放大驱动,电路如下:FM IO 口为P2.3图2 蜂鸣器外形图注意:喇叭和蜂鸣器不同,如果蜂鸣器直接加5V 电源则发出固定频率的声音。掉电后会消失。喇叭不同,加5V 电压后是不发声的, 但是器件处于最大功耗状态,会有非常大的热功耗。长时间会烧毁喇叭。所以使用的时候要注意,如果不是专门针对它操作,请断开它的输入信号端子,防止误操作导致意外损坏。二、蜂鸣器编程实例具体编程时我们间隔一段时间将BZ 线置反,就能

16、输出一个固定频率的方波,让蜂鸣器响起来。大家可能会问,给蜂鸣器多少频率的方波呢?首先这个频率必须在音频围,也就是20Hz 到20KHZ 之间,但是20Hz 到20KHZ 的频率送给蜂鸣器后,只有某一点的频率是最响的,这个频率称为蜂鸣器的谐振频率,离它越远,蜂鸣器发出的声音越轻。1G/3G 开发板配的蜂鸣器的谐振频率是2KHZ,其半周期是250us,这样我们就确定了BZ 口线每延时250us 就要变反。下面是一个蜂鸣器发声的实例程序:/*以下程序为FM 程序,晶振频率为11.0592MHz*/#includesbit SPK=P23;/定义蜂鸣器端口void delay(unsigned int

17、t)/延时while(-cnt);main()unsigned int i;while(1)for(i=0;i200;i+)/喇叭发声的时间循环,改变大小可以改变发声时间长短delay(80);/参数决定发声的频率,估算值SPK=!SPK;SPK=1; /喇叭停止工作,间歇的时间,可更改delay(20000);1.4 电机与驱动模块的工作原理与接口电机驱动原理图电机驱动接口图1.4.1电机驱动模块采用功率三极管作为功率放大器的输出控制直流电机。线性型驱动的电路结构和原理简单,加速能力强,采用由达林顿管组成的 H型桥式电路。用单片机控制达林顿管使之工作在占空比可调的开关状态下,精确调整电动机转

18、速。这种电路由于工作在管子的饱和截止模式下,效率非常高,H型桥式电路保证了简单的实现转速和方向的控制,电子管的开关速度很快,稳定性也极强,是一种广泛采用的 PWM调速技术。这种调速方式有调速特性优良、调整平滑、调速围广、过载能力大,能承受频繁的负载冲击,还可以实现频繁的无级快速启动、制动和反转等优点。因此决定采用使用功率三极管作为功率放大器的输出控制直流电机。1.5循迹模块的工作原理与接口1.6 避障模块的工作原理与接口2 功能方案及软件设计2.1 功能设计本次功能设计为智能小车循迹加避障,循迹指寻黑线走,避障指遇到障碍物小车会自动避开,寻找无障碍路线走下去;以及小车快速前进走直线后慢速后退走

19、直线功能。2.2 软件设计2.2.1程序设计要求赛道一:小车循迹黑线,在桌子上用黑线画出一个椭圆赛道,小车将沿着黑线做循迹运动;中间会设置障碍物,看小车能否自动避障。2.2.4 程序代码#include /包含51单片机头文件,部有各种寄存器定义#include /包含HL-1蓝牙智能小车驱动IO口定义等函数#ifndef _LED_H_#define _LED_H_ /定义小车驱动模块输入IO口 sbit IN1=P12; sbit IN2=P13; sbit IN3=P16; sbit IN4=P17; sbit EN1=P14; sbit EN2=P15; /*蜂鸣器接线定义*/ sbi

20、t BUZZ=P23; #define Left_1_led P3_3 /左传感器(循迹) #define Right_1_led P3_2 /右传感器(循迹) #define Left_2_led P3_5 /左传感器(避障) #define Right_2_led P3_4 /右传感器(避障) #define Left_moto_pwm P1_5 /PWM信号端 #define Right_moto_pwm P1_4 /PWM信号端 #define Left_moto_go P1_2=0,P1_3=1; /左电机向前走 #define Left_moto_back P1_2=1,P1_3=

21、0; /左边电机向后转 #define Left_moto_Stop P1_5=0; /左边电机停转 #define Right_moto_go P1_6=1,P1_7=0; /右边电机向前走 #define Right_moto_back P1_6=0,P1_7=1; /右边电机向后走 #define Right_moto_Stop P1_4=0; /右边电机停转 unsigned char pwm_val_left =0;/变量定义 unsigned char push_val_left =0;/ 左电机占空比N/20 unsigned char pwm_val_right =0; uns

22、igned char push_val_right=0;/ 右电机占空比N/20 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+);/*/前速前进 void run(void) push_val_left=6; /速度调节变量 0-20。0最小,20最大 push_val_right=6; Left_moto_go ; /左电机往前走 R

23、ight_moto_go ; /右电机往前走/后退函数 如果看不明白,请看慧净电子51智能小车视频教程 void backrun(void) push_val_left=6; /速度调节变量 0-20。0最小,20最大 push_val_right=6; Left_moto_back; /左电机往后走 Right_moto_back; /右电机往后走/左转 void leftrun(void) push_val_left=5; push_val_right=5; Right_moto_go ; /右电机往前走 Left_moto_back; /左电机往后走/右转 void rightrun(v

24、oid) 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_ou

25、t_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; /*/*TIMER0中断服务子函数产生PWM信号*/ void timer0()interrupt 1 using 2 TH0=0XFc; /1Ms定时 TL0=0X18; time+; pwm_val_left+; pwm_val_right+; pwm_out_left_moto(); pwm_out_right_moto(); /*/ #endif/主

26、函数 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头文件里定义IO口 BUZZ=0; /50次检测K4确认是按下之后,蜂鸣器发出“滴”声响,然后启动小车。 delay(50); BUZZ=1;/响50ms后关闭蜂鸣器 TMOD=0X01; TH0= 0XFc; /1ms定时 TL0= 0X18; TR0= 1; ET0= 1; EA = 1; /开总中断 while(1) /无限循环 /有信号为0 没有信号为1 if(Left_1_led=0&Right_1_led=0&Left_2_led=1&Right_2_led=1|Left_1_led=1&Right_1_led=1&Left_2_led=1&Right_2_led=1) ru

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1