智能小车设计报告
组员:......................
指导老师:..............
专业:应用电子技术
班级:....................班
.......................................学院
智能小车设计报告
摘要:
本设计以AT89C52单片机小系统作为控制与检测的核心,用L298N为主控芯片组成的驱动模块作为直流电机驱动,用主控芯片为ST188组成的反射式红外传感器进行寻黑线 ,进而实现智能小车的循迹功能。用超声波进行测距、避障,并用一个液晶进行测距显示,红外无线遥控实现对小车的无线控制。此设计是集循迹、避障、测距、遥控于一体的智能小车 。电路简单,性能可靠,是一款智能化,自动化的电子作品。
关键词:AT89C52单片机 红外传感器ST188 无线遥控 智能化
Abstract:
Combining with SCM AT89C52 as the controlling core,take the L298N as the dc motor driver using a pair of reflective ST188 infrared transmitting and receiving tubes to detect obstructions and black lines. Then the realization of intelligent vehicle tracking function. Ultrasonic range obstacle avoidance, And a liquid crystal display range Infrared wireless remote control to a small wireless control. This design is a set of tracking, obstacle avoidance, ranging remote control in one of the smart car. Simple circuit, reliable performance is an intelligent, automated electronic work
目录
一、各个模块选择方案………………………………4
1.1车体的选择…………………………………………………… 4
1.2控制器模块的选择方案……………………………………… 4
1.3驱动模块的选择方案 …………………………………………5
1.4 避障模块的选择方案 …………………………………………5
1.5 循迹模块的选择方案 …………………………………………6
1.6 电源模块的选择方案 …………………………………………6
1.7红外无线遥控的方案选择…………………………………… 7
1.8总体设计的方案选择……………………………………… …7
二、系统软、硬件方案设计………………………… 8
2.1 电机驱动电路的设计…………………………………………8
2.2 超声波避障电路的设计………………………………………10
2.3 红外循迹电路的设计 ………………………………………13
2.4 无线控制模块的电路设计 …………………………………16
2.5总体电路设计 ………………………………………………17
三、系统功能测试…………………………………18
3.1驱动模块的功能测试 ………………………………………18
3.2避障模块的功能测试 ………………………………………18
3.3循迹模块的功能测试 ………………………………………19
3.4红外无线控制模块的功能测试 …………………………….19
四、项目总 19 五、附录 20
一、各个模块选择方案
1.1车体的选择
方案一:选用四轮四驱的车体。四轮四驱车速较快,但车体太大,过于笨重。四个驱动需要两个驱动电路模块,它的电路复杂,耗电量大,编写程序也相对困难。
方案二: 选用三轮两驱的车体。三轮两驱采用两个驱动马达一
个驱动模块。前轮是一个万向轮进行转弯,调整方向,后轮进行
驱动车体。此方案电路简单,功耗小,小车灵活且费用低。
综上所述我们选择方案二。
1.2控制器模块的选择方案
我们在之前学习与应用的都是由主控芯片AT89C52 组成的单片机小系统,AT89C52单片机小系统由单片机和一些 基本的外围电路所组成的的一个可以工作的单片机小系统,它 包括了单片机、电源、晶振电路和复位电路。它是一款低功耗、高性能CMOS8位单片机。它有4组8位并行I/O端口、3个16位定时器/计数器、一个全双工串行口、片内振荡器和复位电路。它功能齐全,简单易操作,且性价比高。所以我们选择此 款单片机小系统作为智能小车的主要控制器。
1.3驱动模块的选择方案
方案一:使用L298N芯片驱动电机。L298N是一个具有高电压大电流的全桥驱动芯片,输出电压最高可达50V,可以直接通过电源来调节输出电压;可以直接用单片机的IO口连接来进行控制,而且带有使能端,方便PWM调速。L298N芯片可以驱动两个二相电机,也可以驱动一个四相电机,正好符合我们小车的驱动要求。此方案电路简单,性能稳定,使用比较方便。
方案二:使用独立的逻辑器件搭建驱动模块。此方案费用低,
但相对麻烦且性能不稳定,容易在硬件上出现故障。
综上所述,我们选择方案一。
1.4 避障模块的选择方案
方案一:采用红外避障:红外传感器可以实现小车的避障,并且价格便宜。但是红外传感器只能通过调整硬件来改变灵敏度,并且无法量化,所以,判断障碍物效果较差,无法使小车高准确度的运行。
方案二:采用超声波避障:利用超声波传感器,根据时间差可以精确的测量前方障碍物的距离,精度高,价格合理。可以通过调整软件算法,改变小车的避障精度。并且可以控制小车与前方障碍物的距离大小来使小车做出反应,智能化高。
综合比较得:方案二更加智能化,精确度高,更加符合当前
的实际。所以采用方案二。
1.5 循迹模块的选择方案
方案一:采用发光二极管和光敏电阻检测黑线,但这种方案易受到外界光源的干扰,有时可能检测不到黑线。这种方案性能不稳定,所以不采用。
方案二:采用反射式红外发射接收管ST188。由于采用带有交流分量的调制信号,则可大幅度减少外界的干扰;此外红外发射接收管的工作电流取决于平均电流,如果采用占空比小的调制信号,在平均电流不变的情况下,瞬时电流很大(50~100mA),则大大提高了信噪比。此种测试方案反应速度大约在 5us,反应快,符合我们设计要求。
综上所述,我们选择方案二。
1.6 电源模块的选择方案
方案一:采用交流电经直流稳压处理后供电 :采用交流电提供直流稳压电源,电流驱动能力及电压稳定性最好,且负载对电源影响也最小。但由于需要电线对小车供电,极大影响了壁障小车行动的灵活性及地形的适应能力。而且壁障小车极易把拖在地上的电线识别为障碍物,人为增加了不必要的障碍。故我们放弃了这一方案。
方案二: 采用干电池组进行供电 :采用四节干电池降压至5V后给单片机及其他逻辑单元供电,另取六节干电池为电机驱动供电。这样电机启动及制动时的短暂电压干扰不会影响到逻辑单元和单片机的工作。干电池用电池盒封装,体积和重量较小,使用方便。
综上所述,我们选择方案二。
1.7红外无线遥控的方案选择
在无线控制的选择上我们的智能小车采用的是红外无线控制,红外无线控制可以再和其它同样具备红外接口的设备间进行信息交流,红外接口可以省去下载或其它信息交流所发生的费用,操作起来方便简单易懂,而且红外需要对接才能传输信息,安全性较强。综上所述我们选择了红外无线遥控(SC2272)。
1.8总体设计的方案选择
在此智能小车设计中,我们使用的是三轮两驱的小车车体,用干电池组对系统进行供电,采用AT89C52单片机作为主控芯片,采用L298N作为电机驱动的芯片,使用ST188的反射式红外发射接收管作为循迹芯片,使用超声波进行避障,测距,然后用一个1602液晶进行测距显示。
二、系统软、硬件方案设计
2.1 电机驱动电路的设计
1)L298N电机驱动PCB板图
2)L298N电机驱动电路原理图
3)电机驱动模块原理
①、主要芯片:L298N、光电耦合器
②、工作电压:控制信号直流4.5~5.5V;驱动电机电压5~30V
③、可驱动直流(5~30V之间电压的电机)
④、最大输出电流2A (瞬间峰值电流3A)
⑤、最大输出功率25W
⑥、特点:1、具有信号指示
2、转速可调
3、抗干扰能力强
4、具有续流保护
5、可单独控制两台直流电机
6、可单独控制一台步进电机
7、PWM脉宽平滑调速(可使用PWM信号对直流电机调速)
8、可实现正反转
9、采用光电隔离
⑦、L298N逻辑功能表:
2.2 超声波避障电路的设计
1)超声波介绍:
1、典型工作用电压:5V。
2、超小静态工作电流:小于2mA。
3、感应角度:不大于15 度。
4、探测距离:2cm-400cm
5、高精度:可达0.3cm。
6、盲区(2cm)超近。
7、完全谦容GH-311 防盗模块。
8、带金属USB 外壳,坚固耐用。
2)接口定义:
Vcc、 Trig(控制端)、 Echo(接收端)、 Gnd
本产品使用方法:控制口发一个10US 以上的高电平,就可以在接收口等待高电平输出.一有输出就可以开定时器计时,当此口变为低电平时就可以读定时器的值,此时就为此次测距的时间,方可算出距离.如此不断的周期测,就可以达到你移动测量的值了。
3)超声波时序图
4)超声波避障模块工作原理:
①采用 IO 触发测距,给至少10us 的高电平信号;
②模块自动发送8 个40khz 的方波,自动检测是否有信号返回;
③有信号返回,通过IO 输出一高电平,高电平持续的时间就是超声波从发射到返回的时间;
④超声波从发射到返回的时间.测试距离=(高电平时间*声速(340M/S))/2;
5)超声波模块程序流程图:
2.3 红外循迹电路的设计
1)ST188传感器介绍
一、特点
1.采用高发射功率红外光电二极管和高灵敏度光电晶体管组成。
2.检测距离可调整范围大,4-13mm可用。
3.采用非接触检测方式。
二、应用范围
1.IC卡电度表脉冲数据采样。
2.集中抄表系统数据采集。
3.传真机纸张检测。
4.与本公司的方向判别电路ST288A结合使用可判别被测物的运
动方向及正反转速测量、行程测量等。
三、极限参数(Ta=25℃)
2)循迹模块工作原理
我们采用的是ST188作为红外检测传感器。
这里的循迹是指小车在白色地板上循黑线行走,由于黑线和白色地板对光线的反射系数不同,可以根据接收到得反射光的强弱来判断“道路”。通常采用的方法是红外探测法。
在黑线检测的测试中。若检测到白色区域,发射管发射的红外线没有反射到接收管,测量接收管的电压大约为4.8V,若检测到黑色区域,接收管接收到发射管发射的红外线,电阻发生变化所分得的电压也随之变化,测得接收管的电压大约为0.5V。
3)ST188循迹模块的电路原理图
4)循迹工作原理简化图:
5)循迹流程图:
2.4 无线控制模块的电路设计
1) 接收板主要参数:
①工作频率:315M
②工作电压:DC5V
③工作电流:≤3mA(5.0VDC)
④编码芯片:SC2272
⑤遥控距离:20~50米以上(开阔地)
2)接收模块的七个引脚(D3、D2、D1、D0、GND、VT、VCC)说明:
①VCC为DC5V的供电端,GND为接地端。
②VT端为解码有效输出端,只要发射器的数据码有输出,VT都能同步输出高电平。
③D3、D2、D1、D0是2272解码芯片的四位数据输出端,有信号时能输出5V左右的高电平,驱动电流约2mA,与发射器的四位数据码输出一一对应。
2.5总体电路设计
1)智能小车系统结构图
智能小车控制系统由稳压电源模块、主控芯片模块、电机驱动模块和传感器模块、无线控制模块等部分组成,控制系统结构图如下:
2)智能小车实体图
三、系统功能测试
3.1驱动模块的功能测试
在调试驱动模块的过程中,我们首先要搞清楚驱动模块的工作原理和跟51单片机的连线。在书写程序的过程中我们要明确的知道驱动模块的主要芯片L298N的逻辑功能表。驱动模块在通电以后车轮能够正常转动则证明驱动模块的功能测试已成功。
3.2避障模块的功能测试
避障功能使用的是HC-SR04超声波模块,HC-SR04超声波模块包括超声波发射器、接收器与控制电路。我们将两个超声波电路分别安放在智能小车车头两边,输入程序进行测试调整,开始由于车速太快,小车反应不够灵敏,不能够实现避障功能,通过不断的程序修改及电流电压的控制,智能小车最终能够正常实现避障功能。
3.3循迹模块的功能测试
循迹功能的实现我们以前采用的是以ST188为主要芯片的循迹模块,经过我们三个星期的辛苦调试,发现ST188芯片出现了问题,我们替换了循迹模块采用了TCRT5000的循迹模块,经过重新的编程调试,最终实现了小车的循迹功能。
3.4红外无线控制模块的功能测试
红外无线控制我们采用主要芯片是SC2262,在红外无线控制模块中我们花费的精力相对较少,因为在购买此模块的时候,买的就已经是半成品了,按照我们查找的资料把线连接好即可,再把程序输入到单片机中,小车就能通过无线控制来进行行走的方向(向前、向后、向左、向右)。
四、项目总结
此次项目的完成是我们四个人团结努力的结果及指导老师赵老师的辛苦指导。完成此次项目的过程中我们小组也遇到了很多困难,但是面对困难的时候,我们小组选择的不是逃避而是积极的面对去克服困难,然而遇到困难选择一个好的开始必然会带来好的结果在经历了十五个周的学习和制作,终于完成了智能小车的驱动、避障、循迹、无线控制四大功能。
在我们为此次项目的成功感到高兴的同时,我们小组也适时的总结了通过此次项目的学习得到的经验和教训。通过此次项目的学习提高了我们自主学习的能力、动手操作的能力和团结合作的能力。遇到问题时我们小组也会产生分歧,通过此次的学习我们了解到在一个团队合作的过程中沟通是解决分歧的最好办法。一个团队制作一个项目的时候是需要每个成员的团结、配合和努力。
通过我们小组在十五个周的辛苦学习制作后,虽然我们没有达到我们小组刚开始期望的目标,但是通过我们的努力还是完成了最主要的功能实现(驱动、避障、循迹、无线控制),我们小组为此次项目的成功感到自豪高兴,最主要的还是要感谢我们的指导老师赵老师的辛苦指导。
五、附录
5.1参考的书籍:
①单片机应用技术项目教程(C语言版) 郭志勇著
②模拟电子技术基础 周良权、傅恩锡、李世馨著
③电子线路CAD实用教程(第三版) 潘永雄、沙河著
④C程序设计(第四版) 谭浩强著
5.2电机驱动模块程序
#include
sbit in1=P1^0; //电机驱动输出控制管脚配置
sbit in2=P1^1;
sbit in3=P1^2;
sbit in4=P1^3;
unsigned char i,j,k;
void delay(k) //定义延时函数delay(k)
{
for(i=k;i>0;i--)
for(j=0;j<255;j++);
}
void main()
{
while(1)
{
delay (30);
in1=1,in2=0,in3=1,in4=0; //控制小车前进动作
delay(30);
in1=0,in2=1,in3=0,in4=1; //控制小车后退动作
delay(30);
in1=1,in2=0; //控制小车右转
delay(30);
in3=1,in4=0; //控制小车左转
}
}
5.3超声波避障模块的程序
//-----------超声波模块1-------------------------------
void SRF06_1(void)
{
unsigned int j=4000;
TH0=0x00;
TL0=0x00;
TR0=0;
TRIG1=1;
for(i=0;i<100;i++)
_nop_(); //大于10us
TRIG1=0; //启动模块
while(ECHO1==0&&j!=0)j--; //等待发射
TR0=1;
while(ECHO1==1&&TH0<=150);
TR0=0;
Distance1=((TH0*256+TL0)*36.89)/2000;//单位cm
}
//-------超声波模块2hhGGGGGG void SRF06_2(void)
{
unsigned int j=4000;
TH0=0x00;
TL0=0x00;
TR0=0;
TRIG2=1;
for(i=0;i<100;i++)
_nop_(); //大于10us
TRIG2=0 //启动模块
while(ECHO2==0&&j!=0)j--; //等待发射
TR0=1;
while(ECHO2==1&&TH0<=150);
TR0=0;
Distance2=((TH0*256+TL0)*36.89)/2000;//单位cm
}
5.4循迹模块程序
#include
#define uint unsigned int
#define uchar unsigned char
sbit P10=P1^0;
sbit P11=P1^1;
sbit P12=P1^2;
sbit P13=P1^3;
sbit P14=P2^0;//寻迹左
sbit P16=P2^1;//寻迹中
sbit P17=P2^3;//寻迹右
void fun1()
{
P10=1;
P11=0;
P12=1;
P13=0;
}//前
void fun2()
{
P10=1;
P11=0;
P12=1;
P13=1;
}//右
void fun3()
{
P10=1;
P11=1;
P12=1;
P13=0;
}//左
void fun4()
{
P10=1;
P11=1;
P12=1;
P13=1;
}//停
void main()
{
while(1)
{
if( (P14==0&&P16==0&&P17==0)||(P14==1&&P16==0&&P17==1) )
fun1();
else if( (P14==1&&P16==0&&P17==0)||(P14==1&&P16==0&&P17==0)||(P14==1&&P16==1&&P17==0) )
fun2();
else if( (P14==0&&P16==1&&P17==1)||(P14==0&&P16==1&&P17==1)||(P14==0&&P16==0&&P17==1) )
fun3();
// else if( (P14==1&&P16==1&&P17==1) )
//fun4(); `
/* else fun1(); */
}
}
5.5红外无线遥控模块程序
#include
sbit k0=P2^4;
sbit k1=P2^5;
sbit k2=P2^6;
sbit k3=P2^7;
sbit q0=P1^0;
sbit q1=P1^1;
sbit q2=P1^2;
sbit q3=P1^3;
unsigned char i,j,k;
void delay(k)
{
for(i=k;i>0;i--)
for(j=0;j<200;j++);
}
void run ()
{
q0=1,q1=0,q2=1,q3=0;
}
void stop()
{
q0=0,q1=0,q2=0,q3=0;
}
void left ()
{
q0=0,q1=0,q2=1,q3=0;
}
void right ()
{
q0=1,q1=0,q2=0,q3=0;
}
main()
{
if(k0==1&&k1==0&&k2==0&&k3==0)
{delay(100);
if(k0==1&&k1==0&&k2==0&&k3==0)
{
run();
}
}
else if(k0==0&&k1==1&&k2==0&&k3==0)
{delay(100);
if(k0==0&&k1==1&&k2==0&&k3==0)
{
stop();
}
}
else if(k0==0&&k1==0&&k2==1&&k3==0)
{delay(100);
if(k0==0&&k1==0&&k2==1&&k3==0)
{
right();
}
}
else if(k0==0&&k1==0&&k2==0&&k3==1)
{delay(100);
if(k0==0&&k1==0&&k2==0&&k3==1)
{
left();
}
}
}