智能循迹小车设计、调试报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2010年湖南省第三期中职教师资培训
-电子技术应用专业
专业方向选修模块《智能寻迹小车设计与调试报告》
学员:杜正国、周伟、凌畅
小组号:第四组
湖南省应用电子技术专业教师水平认证
岳阳职业技术学院培训基地
2010年12月20 日
串联直流稳压电源设计报告
杜正国、周伟、凌畅
摘要:
本课题是基于AT89C52单片机的智能小车的设计与实现,小车完成的主要功能是能够自主识别黑色(或白色)引导线并根据黑线(或白色)走向实现快速稳定的寻线行驶。
小车系统以 AT89S52 单片机为系统控制处理器。
系统采用红外传感获取赛道的信息,来对小车的方向和速度进行控制。
此外,对整个控制软件进行设计和程序的编制以及程序的调试,并最终完成软件和硬件的融合,实现小车的预期功能。
关键词:单片机、AT89C52、引导线、红外传感、寻迹
1、任务分析
1.1任务描述
通过分析智能寻迹小车的设计要求,完成任务分析、功能设计,硬件系统设计、制作与装调,软件系统设计及整机调试等工作任务。
其培训流程为:智能寻迹小车任务分析与功能设计→智能寻迹小车硬件系统设计与制作→智能寻迹小车软件系统设计及整机调试。
1.2设计要求
基于培训基地提供的单片机最小系统和电机、机械运动等主要部件,设计满足以下性能要求的智能寻迹小车:
①输入电源:DC3~6V;
②具有恒流充电以及电池保护电路;
③具有前进、后退、左拐、右拐、刹车和速度调节等功能;
④能根据现场给定路线循迹前进。
1.3具体任务
设计制作一台智能寻迹小车,具有按键启动、前进、左拐、右拐、刹车、终点自动停车和速度调节等功能,能根据下图所提供的路线进行循迹。
不能用人工遥控电动小车。
运行线路如图1、2所示。
起点
终点图1白线图2黑线
2、技术方案设计
2.1系统方案
整个电路系统分为检测、控制、驱动三个模块。
首先利用光电对管对路面信号进行检测,经过比较器处理之后,送给软件控制模块进行实时控制,输出相应的信号给驱动芯片驱动电机转动,从而控制整个小车的运动。
本模型车的电路系统包括电源管理模块、单片
机模块、传感器模块、电机驱动模块。
系统方案方框图如图3所示。
图3 智能小车寻迹系统框图
2.2工作原理:
①利用红外采集模块中的红外发射接收对管检测路面上的轨迹
②将轨迹信息送到单片机
③单片机采用模糊推理求出转向的角度和行走速度,然后去控制行走部分
④最终完成智能小车可以按照路面上的轨迹运行。
3、硬件电路的设计
3.1最小系统:
小车采用atmel公司的AT89C52单片机作为控制芯片,图4是其最小系统电路。
主要包括:时钟电路、电源电路、复位电路。
其中各个部分的功能如下:
1、时钟电路:给单片机提供一个外接的16MHz的石英晶振。
2、电源电路:给单片机提供5V电源。
3、复位电路:在电压达到正常值时给单片机一个复位信号。
图4 单片机最小系统原理图
此部分是整个小车运行的核心部件,起着控制小车所有运行状态的作用。
其程序控制方框图如图5所示。
图5 系统的程序流程图
小车进入循迹模式后,即开始不停地扫描与探测器连接的单片机I/O口,一旦检测到某个I/O口有信号变化,程序就进入判断程序,把相应的信号发送给电动机从而纠正小车的状态。
3.2电源电路设计:
模型车通过自身系统,采集赛道信息,获取自身速度信息,加以处理,由芯片给出指令控制其前进转向等动作,各部分都需要由电路支持,电源管理尤为重要。
在本设计中,52单片机使用5V电源,电机使用6V电源。
考虑到电源为充电电池组,额定电压为7.2V,实际充满电后电压则为6.5-6.8V,所以单片机及传感器模块采用LM2940CT稳压后的5V电
源供电,舵机及电机直接由电池供电。
U1
LM2940CT
图6 稳压电路
3.3传感器电路:
光电寻线方案一般由多对红外收发管组成,通过检测接收到的反射光强,判断黑白线。
原理图由红外对管和电压比较器两部分组成,红外对管输出的模拟电压通过电压比较器转换成数字电平输出到单片机。
图7 赛道检测原理图
3.4电机驱动电路:
电机驱动芯片L298N是SGS公司的产品,内部包含4通道逻辑驱动电路。
是一种二相和四相电机的专用驱动器,即内含二个H桥的高电压大电流双全桥式驱动器,接收标准TTL 逻辑电平信号,可驱动46V、2A以下的电机。
其引脚排列如图1中U4所示,1脚和15脚可单独引出连接电流采样电阻器,形成电流传感信号。
L298可驱动2个电机,OUT1、OUT2和OUT3、OUT4之间分别接2个电动机。
5、7、10、12脚接输入控制电平,控制电机的正反转,ENA,ENB接控制使能端,控制电机的停转。
也利用单片机产生PWM信号接到ENA,ENB端子,对电机的转速进行调节。
3.4.1 L298N的逻辑功能:
表1 SHARP GP2D12实物图
3.4.2 外形及封装:
图8 L298N实物图
3.4.3 L298N电路原理图:
图10 PCB正面图图11 PCB背面图
5、元件选择与检测
表2 元件清单
6、底盘设计与制作
小车底盘功能:小车采用双面敷铜板作小车底板,固定前后轮、电池盒,支撑单片机控制模块、电机驱动模块和两片寻迹模块的电路PCB板。
前轮两个,单独采用每分钟70转的微型减速直流电机驱动。
后轮一个,不带电机驱动。
电池盒采用五节7号电池盒,每节1.5V,可以是干电池,也可以是充电电池。
图12 小车底盘顶面
图13 小车底盘底面
7、软件系统的实现
7.1小车循迹规则:
当小车放置到起点时,小车开始寻迹运动。
若小车偏左的时候,车轮将向右偏转;若小车偏右,车轮将向左偏转;若没有偏移,小车将继续向前;若小车完全偏离黑色轨迹,小车后退以寻找黑色轨迹。
当小车到达重点时,小车停止运动。
7.2小车程序:
#include<reg51.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
/**********************************************************/
#define control 1 //control为1是黑线寻迹,为0是白线寻迹
#define rate_1 100 //档1速度控制,范围为0-100。
#define rate_2 20 //档2速度控制,范围为0-100。
#define rate_3 100 //档3速度控制,范围为0-100。
/*********************************************************/
sbit LeftIR=P1^6; //左边红外接收
sbit RightIR=P1^7; //右边红外接收
sbit ENA=P1^2; // L298的Enable A
sbit IN1=P1^0; // L298的Input 1
sbit IN2=P1^1; // L298的Input 2
sbit ENB=P1^5; // L298的Enable B
sbit IN3=P1^3; // L298的Input 3
sbit IN4=P1^4; // L298的Input 4
uchar t=0; //中断计数器
uchar motor_1=0,motor_2=0; //电机1,2速度值
uchar tmp1,tmp2; // 两电机当前速度值
uchar aa=0; //定时器1中断计数
uchar m; //速度控制
uchar num; //档数控制
/* 电机控制函数 index-电机号(1,2); speed-电机速度(-100—100) */ void motor(uchar index, char speed)
{
if(speed>=-100 && speed<=100)
{
if(index==1) // 电机1的处理
{
motor_1=abs(speed); // 取速度的绝对值
if(speed<0) // 速度值为负则反转
{
IN1=0;
IN2=1;
}
else // 不为负数则正转
{
IN1=1;
IN2=0;
}
}
if(index==2) // 电机1的处理
{
motor_2=abs(speed); // 取速度的绝对值
if(speed<0) // 速度值为负则反转
{
IN3=0;
IN4=1;
}
else // 不为负数则正转
{
IN3=1;
IN4=0;
}
}
}
}
void init()
{
m=rate_1;
num=0;
TMOD=0x12; // 设定T0的工作模式为2 TH0=0x9B; // 装入定时器的初值
TL0=0x9B;
T1=15536; //设置初值定时50ms
EA=1; // 开中断
ET0=1; // 定时器0允许中断
ET1=1; //定时器1允许中断
TR0=0; // 关闭定时器0
TR1=0; // 关闭定时器0
ENA=0; //关闭电机1
ENB=0; //关闭电机2
}
void main()
{
int irDetectLeft,irDetectRight;
init();
do
{ irDetectRight = RightIR;//右边接收
irDetectLeft = LeftIR;//左边接收
}
while((irDetectLeft==!control)||(irDetectRight==!control));
TR1=1;
do
{
irDetectRight = RightIR;//右边接收
irDetectLeft = LeftIR;//左边接收
motor(1,m);
motor(2,m);
}
while((irDetectLeft==control)&&(irDetectRight==control));//向前进 while(1)// 电机实际控制演示
{
irDetectRight = RightIR;//右边接收
irDetectLeft = LeftIR;//左边接收
if((irDetectLeft==!control)&&(irDetectRight==!control))//向前进 {
motor(1,m);
motor(2,m);
}
if((irDetectLeft==!control)&&(irDetectRight==control))//右转 {
motor(1,-m);
motor(2,m);
}
if((irDetectLeft==control)&&(irDetectRight==!control))//左转 {
motor(1,m);
motor(2,-m);
}
if((irDetectLeft==control)&&(irDetectRight==control))//第二次探测时小车停
break;
}
IN1=1;
IN2=1;
IN3=1;
IN4=1;
TR1=0;
TR0=0;
while(1);
}
void timer0() interrupt 1 // T0中断服务程序
{
if(t==0) // 1个PWM周期完成后才会接受新数值
{
tmp1=motor_1;
tmp2=motor_2;
}
if(t<tmp1)
ENA=1;
else
ENA=0; // 产生电机1的PWM信号
if(t<tmp2)
ENB=1;
else
ENB=0; // 产生电机2的PWM信号
t++;
if(t>=100)
t=0; // 1个PWM信号由100次中断产生}
void timer1() interrupt 3
{
TR1=0;
T1=15536; //设置初值定时50ms
TR1=1;
aa++;
if(aa==20) //定时1s后置标志位
{
aa=0;
TR0=1;
switch(num)
{
case 1:m=rate_1;break;
case 15:m=rate_2;break;
case 35:m=rate_3;break;
}
num++;
}
}
8、装配与调试
8.1智能循迹小车的整机装配
图14 整机装配俯视效果图
图15 整机装配侧视效果图
8.2智能循迹小车的调试
8.2.1调试工具:
仪器名称用途
电脑调试及下载程序
数字万用表测量各种电路工作情况
8.2.2调试过程:
我们尝试着先用STC89C52RC来控制小车的跑马灯,结果实验成功。
证明单片机运转正常。
然后尝试寻迹,结果试验成功,小车能正常的跑动起来。
这个小试验,是为了检测小车的机械性能。
达到了我们预期目的。
主板通电前检查:电路安装完毕,我们首先直观检查电路各部分生产线是否正确,检查电源、地线、信号线、元器件引脚之间有无短路,器件有无接错。
通电检查:给电机通电,观察电机是否工作正常。
电机正常工作时,后驱工作电流为。