电子设计大赛实验报告
- 格式:doc
- 大小:1.04 MB
- 文档页数:20
系别:信息工程系专业:电气0902班姓名:陈小俊王勇周之栋目录一、概述 (3)二、设计方案 (3)三、硬件设计 (5)1.AT89C52单片机硬件结构 (5)1)引脚及功能 (5)2)电路图模块 (6)2.电动机驱动 (7)1)电动机的选择 (7)2)电路图分解 (8)3)L9110芯片资料 (9)四、软件设计 (10)1.主程序设计 (10)2. 跑道设计 (10)五、电路图设计 (11)六、测试数据、测试结果分析及结论 (13)附录A:智能小车程序 (14)附录B:实物图 (20)关键字:智能小车电机驱动L911自动循迹摘要AT89C52是美国ATMEL公司生产的低电压,高性能CMOS 8位单片机,片内含8K bytes的可重复擦写的Flash只读程序存储器和6bytes的随机数据存储器(RAM),器件采用ATMEL公司的高密度,非易失性存储技术生产,与标准MCS-51指令系统及8052产品引脚兼容。
功能强大的at89c52单片机合适于非常多较为复杂控制应用场合。
一、概述对于小车的制作主要有硬件的焊接组装、软件编程和调试,小车的最终效果是能够按照制作的跑道运行,整个过程中涉及到焊接工艺、单片机接口知识(AT89C52)、和C语言编程。
二、设计方案系统工作原理及功能简介:本系统利用单片机AT89S52单片机作为本系统的主控模块,该单片机可以将从传感器的输出信号得到外界的信息,然后在程序中控制单片机对电动车上的直流电机的输出,从而实现电动车的前进以及转弯等循迹行驶。
系统框架图小车循迹原理:这里的循迹是指小车在白色地板上循黑线行走,由于黑线和白色地板对光线的反射系数不同,可以根据接收到的反射光的强弱来判断“道路”。
通常采取的方法是红外探测法。
(红外探测法,即利用红外线在不同颜色的物体表面具有不同的反射性质的特点,在小车行驶过程中不断地向地面发射红外光,当红外光遇到白色纸质地板时发生漫反射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,小车上的接收管接收不到红外光。
单片机就是否收到反射回来的红外光为依据来确定黑线的位置和小车的行走路线)三、硬件设计1.AT89C52单片机硬件结构采用AT89C52作为主控制芯片,该芯片有足够的存储空间,可以方便的在线ISP下载程序,能够满足该系统软件的需要,该芯片提供了两个计数器中断,对于本作品系统已经足够,采用该芯片可以比较灵活的选择各个模块控制芯片,能够准确的计算出时间,有很好的实时性。
1)引脚及功能A T89C52管脚介绍2)电路图模块1-8引脚,属于P1口,p1.0与p1.1可以作为定时/计数器的外部输入,作为定时计数器用,p1口是内置上拉电阻的i o口,可以输入输出电流,单引脚20mA,如果是给外部芯片赋值,可直接接入,如果要驱动外部电路,比如,发光二极管,需要再接上限流电阻电阻。
因为单片机的输出电流毕竟都非常小,如果要有更大的电流,如驱动蜂鸣器,继电器,则接三极管作为反相且放大大电流的作用。
与之相对应的,p0口并不具有内置上拉电阻,所以必须加上10k的排阻,否则置一的时候输出为高阻态,加上10k或者4.7k都可以,置一的时候便可以为一了,这就是i o口的普通应用。
另外,p2,p3口也都有内置上拉电阻,置一变为1,置零便是0,另外的一些端口,如第九管脚,属于复位管脚,有复位电路要牢牢记住,机给其高电平两个机器周期,十二个时钟周期,就可以达到复位功能,即使其重新执行程序。
第十八十九管脚为外部时钟输入管脚,时钟电路应该牢牢记住,AT89C52单片机的晶振为11.0592HZ。
第29、30、31管脚是决定是否在外部程序存储器中执行程序的管脚,因为我们的应用有限,写不了很大的程序,所以只要内部程序存储器就可以满足我们的要求,所以可以将第三十一管脚接1,另外两个悬空即可,最后是p3口的应用,其中第10管脚和第11管脚属于串口通信的管脚,max232就是通过这两个管脚实现了程序下载,wr和rd我们是不用的,这是外部程序的读取管脚,应为我们一般不会用这种东西,所以不研究,还有两个是外部中断,和定时计数器,这些第二功能我们都是通过对其内部的特殊功能寄存器进行雷丁的设置之后实现的。
2.电动机驱动(L911OH芯片驱动)1)电动机的选择:由于直流电机的控制方法比较简单,只需给电机的两根控制线加上适当的电压即可使电机转动起来,电压越高则电机转速越高。
对于直流电机的速度调节,可以采用改变电压的方法,也可采用PWM调速方法。
PWM调速就是使加在直流电机两端的电压为方波形式,通过改变方波的占空比实现对电机转速的调节。
所以在设计过程中我们采用直流电机电机有两个分别作为左右轮的驱动,而通过两路PWM输出即可控制一个电机,故共需4路PWM输出。
通过编程由控制芯片AT89C52RC经PWM发出驱动信号,PWM输出作为LG9110的输入,经L9110转换输出控制信号使电机转动,进而带动车轮转动,使小车前进后退。
当左轮停止,右轮转时,小车右转。
当右轮停止,左轮转动时,小车左转。
而两路PWM输出的正负顺序转换则可控制电机的正反转,进而控制小车的前进和后退。
2)电路图分解:电动机驱动部分3)L9110芯片资料:引脚图:在电路中的应用:在电路中我们采用了放大电路,我运用三极管8550对电路放大,放大的实质就是将放大电路中直流电源的能量转化成交流能量输出。
当正常行走的时候u=2.26V u=8.14V u 5.9Vce be cb=在外部有探测信号时u=7.41V u=8.45V u 1.14Vce be cb=四、软件设计1.主程序设计主程序主要起到一个导向和决策功能。
其设计思路根据小车所处位置的不同,确定小车的任务。
在黑线轨道上走直线时,对红外接收管的信号进行及时的判断。
2.跑道设计小车通过程序来实行对跑道的探测来运行的方式:流程图:五、电路图设计主电路图彩灯.数码管图:红外接收和发送管部分总电路图a. 红外发射管为二级管(V2V5V4),接收为二极管(V1V3V6),当接收二级管导通时输出低电平,断开时输出高电平。
b.接受二极管则接入L9110的GPIO口,通过读GPIO口的状态即可判断是否处于黑线区域内。
五、测试结果分析及结论测试设备:自制跑道过程分析:转弯角度的设定基本功能:自动循迹扩展功能及其他功能:小车每转一次弯,彩灯就亮一次附录A:智能小车程序#include <at89x51.h> //包含51单片机相关的头文件sbit LeftLed=P2^0; //定义前方左侧指示灯端口sbit RightLed=P0^7; //定义前方右侧指示灯端口sbit LeftIR=P3^5; //定义前方左侧红外探头端口sbit RightIR=P3^6; //定义前方右侧红外探头端口sbit FontIR=P3^7; //定义前方正前方红外探头端口sbit M1A=P0^0; //定义左侧电机驱动A端sbit M1B=P0^1; //定义左侧电机驱动B端sbit M2A=P0^2; //定义右侧电机驱动A端sbit M2B=P0^3; //定义右侧电机驱动B端sbit B1=P0^4; //定义语音识识别传感器端口sbit SB1=P0^6; //定义蜂鸣器端口typedef unsigned int uint; //重命名整数类型关键字typedef unsigned char uchar; //重命名字符类型关键字uchar code LedShowData[]={0x9F,0x25,0x0D,0x99,0x49, //定义固定存储显示字符0x41,0x1F,0x01,0x19,0x03};//1,2,3,4,5,6,7,8,9,0#define RunShow P1 //定义数据显示端口void Delay() //定义机器人调转子时间子程序{ unsigned int DelayTime=20000; //定义机器人转弯时间变量while(DelayTime--); //机器人转弯循环SB1=!SB1; //蜂鸣器闪响return;}void ControlCar(unsigned char ConType) //定义电机控制子程序{M1A=0; //将M1电机A端初始化为0M1B=0; //将M1电机B端初始化为0M2A=0; //将M2电机A端初始化为0M2B=0; //将M2电机B端初始化为0switch(ConType) //判断用户设定电机形式{case 1: //前进//判断用户是否选择形式1{ M1A=1; //M1电机正转M2A=1; //M2电机正转break;}case 2: //后退//判断用户是否选择形式2{ M1B=1; //M1电机反转M2B=1; //M2电机反转break;}case 3: //左转//判断用户是否选择形式3{M2A=1; //M2电机正转break;}case 4: //右转//判断用户是否选择形式4{ M1A=1; //M1电机正转//M2电机反转break;}case 8: //停止//判断用户是否选择形式8{break; //退出当前选择}}}void main() //主程序入口{bit RunFlag=0; //定义小车运行标志位uchar CountData=0; //定义计数变量RunShow=0; //初始化显示状态ControlCar(1); //初始化小车运行状态while(1) //程序主循环{P2=LedShowData[CountData]; //P2端口读入显示数据CountData++; //计数变量++(加加)if(CountData>=10) //判断是否超出计数范围{CountData=0; //重新置零}Delay(); //延时函数被调用Start:LeftLed=LeftIR; //前方左侧指示灯指示出前方左侧红外探头状态RightLed=RightIR; //前方右侧指示灯指示出前方右侧红外探头状态if(LeftIR==0) //左侧红外探头没有接收到白色道路信号{ControlCar(4); //左侧没有信号时,开始向右转一定的角度Delay(); //修改这里进行转弯角度的调整Delay(); //同上Delay();goto NextRun;}if(RightIR==0){ControlCar(3); //右侧没有信号时,开始向左转一定的角度Delay(); //修改这里进行转弯角度的调整Delay(); //同上Delay();goto NextRun;}goto Start;NextRun:ControlCar(1);}附录B:实物图图1图2图3。