智能小车报告
小型电子产品设计报告
题 目 智能小车设计报告 学 院 XXXX
专 业 应用电子技术
班 级 应用电子A班
学 号 XXXXXX
学生姓名 XXX
完成日期 2014年5月24日
摘要
本文介绍了一种基于52单片机的小车寻轨系统。该系统采用3个高灵敏度的单端反射式红外光电对管和红外传感器来实现小车的寻轨功能。并利用单片机产生PWM波,通过控制电机驱动芯片去控制小车速度。测试结果表明,该系统能够平稳跟踪给定的路径。本小车以AT89C52低功耗、高性能单片机为检测和控制核心,通过写入的驱动、循迹等程序再连接外围电路来实现小车的启停、智能避障、智能循迹功能。
关键词:简易智能小车、AT89C52、主板电路、红外探测电路、马达驱动电路
引言 当今社会,科学技术日新月异,时代前进的步伐越迈越宽,应用自动化设备,
计算机处理,现代化通讯,数字化信息,现代化显示设备等高新技术而建立的现代化智能,监控等系统已经得到充分的发展与应用,智能机器人也就应运而生。同时,在建设以人为本的和谐社会的过程中,智能服务机器人能够完成考古发掘,海底揭密,宇宙探索等危险作业,以保证人身安全。《国家中长期科学和技术发展规划纲要》一文指出:智能服务机器人是在非结构环境下为人类提供必要服务的多种高技术集成的智能化装备。以服务机器人和危险作业机器人应用需求为重点,研究设计方法、制造工艺、智能控制和应用系统集成等共性基础技术。重点研究低成本的自组织网络,个性化的智能机器人。2006━2020年,既是国家中长期技术发展计划实现阶段,也是我们最具有活力和最激情洋溢的时段。该智能小车模型是一辆由PCB和车体拼装的小车。所有的机械结构和零部件都安装固定在电路板上。因此完全不需要机械加工,非常适合实验阶段机器人的研制。
目 录
摘要
引言
1.任务分析 ......................................................... 4
2.方案初步设计 ..................................................... 4
2.1设计思路..................................................... 4
2.1.1 机械部分设计.......................................... 4
2.1.2 电路部分设计.......................................... 4
2.1.3 软件部分设计.......................................... 5
2.2总体方案论证与选择........................................... 5
3.产品详细设计 ..................................................... 6
3.1 硬件设计 .................................................... 6
3.1.1主板电路 ............................................... 6
3.1.2红外探测电路 ........................................... 7
3.1.3马达驱动电路 ........................................... 9
3.2软件设计.................................................... 11
3.2.1开发工具 .............................................. 11
3.2.2设计思路 .............................................. 12
3.2.3程序 .................................................. 12
4.调试与测试 ...................................................... 20
4.1驱动模块的功能测试.......................................... 20
4.2循迹模块的功能测试.......................................... 20
4.3主板模块的功能测试.......................................... 21
4.4软件的功能测试.............................................. 21
5.总结 ............................................................ 21
附作品图 .......................................................... 22
参考文献 .......................................................... 22
1.任务分析
本小车以AT89C52低功耗、高性能单片机为检测和控制核心,通过写入的驱
动、循迹等程序再连接外围电路来实现小车的启停、智能避障、智能循迹功能。充分运用了C52单片机的功能。论文介绍了智能小车的机械结构和硬件电路的实现方法。在机械结构上采用的是四轮四驱动,为小车的启动和运转提供强劲的动力,四轮式小车的应用范围广,稳定性更优越,底盘空间大,便于安装传感器、驱动电路,循迹电路,使小车外观搭配更为合理美观。 分析整个智能车系统,PCB电路板功能化、模块化。自行设计制作的PCB电
路板形状根据车模量身定做,布局走线合理,并根据功能实现了模块化分离,使电路的易用性、稳定性大幅提高,维护和更换也更加容易。
在未来的智能车设计中,定会出现更先进的光电传感器,也会出现更先进的
技术,使光电车拥有更大的前瞻,采集到更多的赛道信息。随着信息的增加,期待着更先进的技术出现。
2.方案初步设计
2.1设计思路
2.1.1 机械部分设计:
包括智能小车的底盘、驱动模块和循迹模块电路板、传感器等的安装设计,这些设计是非常严格的,它们都得根据元件的需要来设计。
2.1.2 电路部分设计:
根据需求设计相应的电路原理图,调试电路板,在检查完硬件连接和完成
电路的综合调试后,进入软件设计部分。
2.1.3 软件部分设计:
根据需求设计相应的程序流程图,在此基础上编写出程序,并下载到控制
小车的芯片中用以控制小车。这个部分的设计也包括三个方面的设计即:电机驱动部分的程序、传感器读入部分和循迹的实现。
2.2总体方案论证与选择
方案一:基于AT89C52单片机,配以其他常用模块电路完成智能小车设计。此方案主要包括以下几个模块:避障模块、黑线检测模块、电机驱动模块、及显示模块。方案总体框图,如图1所示。此方案使用常用单片机AT89C52作为主控芯片,AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令
系统,片内置通用8位中央处理器和Flash存储单元,32个双向I/O口; 256x8bit内部RAM;3个16位可编程定时/计数器中断;时钟频率0-24MHz;2个串行中断,可编程UART串行通道;2个外部中断源,共8个中断源; 2个读写中断口线,3级加密位; 低功耗空闲和掉电模式,软件设置睡眠和唤醒功能。
方案二:ATmega16是基于增强的AVR RISC结构的低功耗8 位CMOS微
控制器。配以其他常用模块电路完成智能小车设计。此方案主要包括以下几个模块:避障模块、黑线检测模块、电机驱动模块、及显示模块。方案总体框图,如图2所示。此方案使用ATmega16单片机作为主控芯片,16K字节的系统内可编程Flash(具有同时读写的能力,即RWW),512 字节EEPROM,1K 字节SRAM,
32 个通用I/O 口线,32 个通用工作寄存器,用于边界扫描的JTAG 接口,支持片内调试与编程,三个具有比较模式的灵活的定时器/ 计数器(T/C),片内/外中断,可编程串行USART,有起始条件检测器的通用串行接口,8路10位具有可选差分输入级可编程增益(TQFP 封装) 的ADC ,具有片内振荡器的可编程看门狗定时器,一个SPI 串行端口,以及六个可以通过软件进行选择的省电模式。
鉴于对51单片机知识领域的掌握,选择方案一更好,控制方便,编程简单,且功能易于实现。
3.产品详细设计
3.1 硬件设计
3.1.1主板电路
主板电路原理图
主板电路PCB图
3.1.2红外探测电路 方案一:用光敏电阻组成光敏探测器。
光敏电阻的阻值可以跟随周围环境光线的变化而变化。当光线照射到白线上面时,光线发射强烈,光线照射到黑线上面时,光线发射较弱,因此光敏电阻在白线和黑线上方时,阻值会发生明显的变化。将阻值的变化值经过比较器就可以输出高低电平。这种方案受光照影响很大,不能够稳定的工作。
方案二:采用反射式红外发射-接收ST168
采用反射式红外发射-接收器ST168,直接用直流电压对发射管进行供电。其优点是可以实现实时控制,而且灵敏度可调,受外界干扰较小。
方案三:采用脉冲调制的红外发射-接收器
在方案二的基础上采用脉冲调制发射。由于环境光干扰主要是直流分量,
因此如果采用带有特定交流分量的调制信号,则可在接收端采用相应的手段来大幅减少外界干扰。缺点是实现复杂、成本高。
综合分析:由于传感器可以在车体的下部,发射、接收距离地面都很近,外界光对其干扰都很小。因此在基本不影响效果的前提下,为了方便起见,选用反射式红外发射-接收器ST168作为循迹检测模块的传感器。
循迹电路采用的是ST188红外对管,在小车行进的过程中由51机控制发射管发射信号,再将接收回来的信号送入单片机进行分析处理,使小车沿着反射信号的方向前进。
红外探测电路原理图
红外探测电路PCB图
3.1.3马达驱动电路
方案一:采用交流电经直流稳压处理后供电 :采用交流电提供直流稳压电源,电流驱动能力及电压稳定性最好,且负载对电源影响也最小。但由于需要电线对小车供电,极大影响了壁障小车行动的灵活性及地形的适应能力。而且壁障小车极易把拖在地上的电线识别为障碍物,人为增加了不必要的障碍。故我们放弃了这一方案。
方案二:采用单一电源供电。电源直接给单片机供电,通过单片机的IO口连接到电动机上,这样输出的电压稳定,不会给电路造成损坏。同时也减轻了小车的重量,使小车在启动和停止时的反应时间更短,减小了惯性的影响。其供电也比方案一简单。
综上所述,我们选择方案二。
电机驱动部分主要采用一片L298N和主控芯片AT89C52单片机相连接构成驱
动电路。L298N芯片直插式的
15个引脚,其中两个使能端ENA和ENB,
两个反馈端SA和SB,四个输入端IN1、IN2、IN3和IN4一个接地端GND,一个VSS(5V时性能最好)逻辑电源电压输入端和一个VS功率电源电压输入端。L298N可同时驱动两个电机,最大输出电流为2A,鉴于它的良好性能和价格,选取L298N作为电机驱动芯片,L298N芯片如下图,L298N的四个输出端直接与两个电机相连驱动电机。
L298N实物图
电机驱动电路原理图
电机驱动电路PCB图
3.2软件设计
3.2.1开发工具
我们采用的软件是Altium.Designer.v6.9.
Altium Designer 是原Protel软件开发商Altium公司推出的一体化的电子产品开发系统,主要运行在Windows操作系统。这套软件通过把原理图设计、电路仿真、PCB绘制编辑、拓扑逻辑自动布线、信号完整性分析和设计输出等技术的完美融合,为设计者提供了全新的设计解决方案,使设计者可以轻松进行设计,熟练使用这一软件必将使电路设计的质量和效率大大提高。
3.2.2设计思路
程序先从看程序开始,然后写了串口程序,在写串口程序过程中也遇到不少问题,最后都找到了解决方法。写出的串口程序可以清晰的在上位机上呈现出摄
23 页
第 11 页 共
像头所采集的图像,在这一过程中也遇到许多问题,比如采集得到的是乱码,一些有规律的乱码,仔细查找原因,原来是波特率设置的问题,虽然程序中设定的波特率和上位机的是一致的,但设置为9600和57600的效果却完全不同。另外还是因为没有设置换行,呈现出的是把本来是列上的图像,放到了每一行上,解决方法是,在每一发送结束后,加了一个换行函数。该程序也得到了应用。
3.2.3程序
#include "reg52.h" sbit LED
= P1^0;
sbit BUZZER = P1^1; sbit MotoL1 = P1^7; sbit MotoL2 = P1^2; sbit MotoR1 = P1^5; sbit MotoR2 = P1^6; sbit ENA_L = P1^3; sbit ENA_R = P1^4; sbit SMG_1 = P2^2; sbit DATA = P2^1; sbit CLK = P2^0; sbit sens_out = P0^0;
unsigned char count=0; unsigned char speed; unsigned char spd1; unsigned char spd2; unsigned
char
tab[]={0x3F,0x0c,0x5b,0x4f,0x6c,0x67,0x77,0xcd,0x7f,0x6f,0x00}; unsigned char Tdata[4];
第 12 页 共
23 页 code
unsigned int cnt500; bit dp;
unsigned char Keyboard(); unsigned char tance(); void turn_l(); void turn_rr(); void forward(); void turn_r(); void turn_ll(); void stop(); void display();
void delay(unsigned int x) {
unsigned char i; }
//******************************* void main(void) {
unsigned char KeyV; unsigned char senS; LED=0;
while(x--) {
for(i=250;i>0;i--); }
BUZZER=0;
23 页 第 13 页 共
delay(300);
LED=1;
BUZZER=1; delay(300);
LED=0;
BUZZER=0; delay(300);
LED=1;
BUZZER=1; ENA_L=1; ENA_R=1; MotoL1=0; MotoR1=0;
TMOD=0x01; TH0=0xFC; TL0=0x18; TR0=1; EA=1; ET0=1; speed=8; spd1=speed; spd2=speed;
Tdata[0]=1; Tdata[1]=2; Tdata[2]=3; Tdata[3]=4;
第 14 页 共
23 页
{
//按键
KeyV=Keyboard(); if(KeyV==1) { }
if(KeyV==2) { }
if(KeyV==3) { } //显示 if(dp==1) { } //循轨 senS=tance();
23 页 第 15 页 共
ENA_L= !ENA_L; ENA_R= !ENA_R;
speed++;
if(speed>14) speed=14; spd1=speed; spd2=speed;
if(speed!=0) spd1=speed; spd2=speed;
speed--;
display(); dp=0;
{ case 0: forward();break; //0000 0000 case 1: turn_rr();break; case 2: forward();break; case 3: turn_r();break;
case 4: turn_ll();break; //case 5: KeyValue=2;break; case 6: turn_l();break; case 7: stop();break;
default: break;
}
}
}
void INT_T0(void)interrupt 1 { TH0=0xfc; TL0=0x18; cnt500++; if(cnt500>499) { cnt500=0; dp=1;
} count++;
if(count>14) count=0; if(count
{
第 16 页 共
23 页 //0000 0010 //0000 0100 //0000 0110 //0000 1000 //0000 1010 //0000 1100 //0000 1110
}
}
else { }
if(count
MotoR2=0; MotoR2=1; MotoL2=0;
//*******************显示************************* void display(void) {
unsigned char i,j,temp,tmp1; SMG_1=0; for(i=0;i
for(j=0;j
tmp1=temp & 0x80; //0000 0000 if(tmp1==0x80) DATA=1; else
DATA=0;
23 页 第 17 页 共
temp=tab[Tdata[i]]; //0000 1100
}
}
CLK=1;
temp=temp
//0001 1000
//**************按键********************************** unsigned char Keyboard(void) {
unsigned char tmp1,tmp2,KeyValue; KeyValue=0xff; tmp1=P0 & 0xf0; if(tmp1!=0xf0) {
delay(5); tmp2=P0 & 0xf0; if(tmp2==tmp1) {
switch(tmp1) {
case 0xe0: KeyValue=1;break; case 0xd0: KeyValue=2;break; case 0xb0: KeyValue=3;break; case 0x70: KeyValue=4;break; default: KeyValue=0xff;break;
}
LED=0; BUZZER=0; delay(200); LED=1;
23 页 第 18 页 共
}
}
BUZZER=1; while(tmp2!=0xf0) { } }
tmp2=P0 & 0xf0;
return(KeyValue);
//**************探测********************************* unsigned char tance(void) { }
void turn_l(void) { }
void turn_rr(void) { }
void forward(void)
23 页 第 19 页 共
unsigned char tmp3; sens_out=1; tmp3=P0 & 0x0e; tmp3=tmp3>>1; return(tmp3);
spd2=0; spd1=speed;
spd2=speed; spd1=speed-5;
{ spd2=speed; spd1=speed;
}
void turn_r(void) { spd2=speed; spd1=0;
}
void turn_ll(void) { spd2=speed-5; spd1=speed;
}
void stop(void) { ENA_L=0; ENA_R=0;
}
void turn_ll(void) { spd2=speed-5; spd1=speed;
}
void stop(void) { ENA_L=0; ENA_R=0;
}
第 20 页 共
23 页
4.调试和测试
4.1驱动模块的功能测试
驱动模块的调试是能正常的驱动电机的转动。一个电机对应两盏LED灯,电机的正反转分别对应一盏LED灯亮。LED灯能正常的亮灭即表示驱动模块正常。
4.2循迹模块的功能测试
完成小车循迹的主要器件是三个红外探测,发射管发射出信号后,接收管再将接收到的信号送入单片机进行处理,判断黑线在小车下的位置,从而实现了循迹功能。首先,要调试探测板能否正常工作。经检测,遇黑线对应LED灯亮,从而判断探测板无问题。再之后是调整红外探测的灵敏度。确定探测板与跑道的距离,转动可调电阻,从而使三盏LED灯在同一高度能灵活亮灭。
4.3主板模块的功能测试
主模块是连接驱动模块和循迹模块的重要桥梁,也是接受信息和控制的中枢。所以,这部分的调试尤为重要。首先检测的是7805稳压芯片是否正常工作。再就是各个部分的检测,蜂鸣器、LED灯、开关、52芯片等是否能正常工作。最后是显示部分的检测。短接电路,看看数码管是否是每一段都是正常点亮。结果只是一些线路未接,硬件无问题,基本功能可以实现。
4.4软件的功能测试
根据老师讲的程序,分部完成各部的控制程序。电机驱动,两个电机不同速
度;数码管显示,显示固定的数;按键控制,停止、启动、加速、减速;探测,转向与速度控制。通过一次次的试跑,不断调整初始速度、小转弯的速度、大转弯的速度、左右转的速度,完成基本的循轨。再在确保能循轨的情况下,加快速度,减少时间,调试出最佳的初始速度、转弯速度、直线速度。
5.总结
本学期电子设计制作与创新提高课程的学习任务,是让我们制作智能小车并最后能让它自动寻轨。 通过此次的设计制作,使我们更加认识到了动手能力和理论知识的重要性,而理论与实践的结合更是重中之重。当然,我们也深刻地认识到我们的不足,由于自身理论知识的欠缺和动手能力的不佳在工作中频频受阻,走了好多弯路,虽然在制作过程中不可避免地遇到很多问题,但是最后还是在老师以及同学的帮助下圆满解决了这些问题,实现了整个系统设计与最后调试,相关指标达到预期的要求,很好地完成了本次设计任务。经过多次的修改和调试测量,本设计基本符合设计要求,由于受人为因素和软硬件的限制,系统难免不了带来一些误差,但通过调节和精确计算可以减小误差,并且在不断的摸索前进中我们学到了很多东西。在制作和调试过程中,小组团结合作,在调试过程中更加的被我们引以重视,每个有可能错误的环节,大家集思广益,寻找可能存在的错误,最终可以说圆满的完成任务。通过这次创新设计,我了解并掌握了传感器的基本理论知识,更深入的掌握单片机的开发应用和编程控制。我深刻的认识到团队的协作真的很重要,周围人的帮助也很重要,而这两个方面,我都拥有了,大家一起的努力,我们有了坎坷的过程,有了圆满的结果,让我们对理论和实践有了更好的认知。
附作品图
参考文献 1. 阎吉祥. 激光原理与技术[M]. 北京:高等教育出版社, 2006.(5)
2. 卓晴,黄开胜,邵贝贝等. 学做智能车-挑战“飞思卡尔”杯[M]. 北京: 北京航空航天大学出版社, 2007.(3).
3. 孙同景,陈桂友. Freescale 9S12 十六位单片机原理及嵌入式开发技术[M]. 北京: 机械工业出版社, 2008.(7) .
4.薛涛,宫辉,曾鸣等. 单片机与嵌入式系统开发方法[M]. 北京: 清华大学出版社,2009,(10).