智能循迹小车设计报告文档格式.docx
- 文档编号:1048450
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:25
- 大小:204.32KB
智能循迹小车设计报告文档格式.docx
《智能循迹小车设计报告文档格式.docx》由会员分享,可在线阅读,更多相关《智能循迹小车设计报告文档格式.docx(25页珍藏版)》请在冰点文库上搜索。
第三部分是对系统软件设计部分的说明,主要内容是智能模型车设计中主要用到的控制理论、算法说明及代码设计介绍等。
技术方案概要说明
本模型车的电路系统包括电源管理模块、单片机模块、传感
器模块、电机驱动模块。
工作原理:
Ø
利用红外采集模块中的红外发射接收对管检测路面上的轨迹
将轨迹信息送到单片机
单片机采用模糊推理求出转向的角度和行走速度,然后去控制
行走部分
最终完成智能小车可以按照路面上的轨迹运行。
硬件电路的设计
1、最小系统:
小车采用atmel公司的AT89C52单片机作为控制芯片,图1是其最小系统电路。
主要包括:
时钟电路、电源电路、复位电路。
其中各个部分的功能如下:
1、时钟电路:
给单片机提供一个外接的16MHz的石英晶振。
2、电源电路:
给单片机提供5V电源。
3、复位电路:
在电压达到正常值时给单片机一个复位信号。
图1单片机最小系统原理图
2、电源电路设计:
模型车通过自身系统,采集赛道信息,获取自身速度信息,加以处理,由芯片给出指令控制其前进转向等动作,各部分都需要由电路支持,电源管理尤为重要。
在本设计中,51单片机使用5V电源,电机及舵机使用6V电源。
考虑到电源为充电电池组,额定电压为7.2V,实际充满电后电压则为6.5-6.8V,所以单片机及传感器模块采用7805稳压后的5V电源供电,舵机及电机直接由电池供电。
3、传感器电路:
光电寻线方案一般由多对红外收发管组成,通过检测接收到的反射光强,判断黑白线。
原理图由红外对管和电压比较器两部分组成,红外对管输出的模拟电压通过电压比较器转换成数字电平输出到单片机。
图2赛道检测原理图:
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端子,对电机的转速进行调节。
L298N的逻辑功能:
表1SHARPGP2D12实物图
外形及封装:
图3L298N实物图
L298N电路原理图:
由于一片L298N可以直接驱动两个电机,但是为了加大驱动力,我们采用两路并联的方式来驱动电机。
图3.3L298N电路图
软件系统的实现
小车循迹规则:
若小车偏左的时候,车轮将向右偏转;
若小车偏右,车轮将向左偏转;
若没有偏移,小车将继续向前;
若小车完全偏离黑色轨迹,小车后退以寻找黑色轨迹。
小车程序:
#include"
reg52.h"
#definedet_Dist2.55//单个脉冲对应的小车行走距离,其值为车轮周长/4
#defineRD9//小车对角轴长度
#definePI3.1415926
#defineANG_9090
#defineANG_90_T102
#defineANG_180189
/*============================全局变量定义区============================*/
sbitP10=P1^0;
//控制继电器的开闭
sbitP11=P1^1;
//控制金属接近开关
sbitP12=P1^2;
//控制颜色传感器的开闭
sbitP07=P0^7;
//控制声光信号的开启
sbitP26=P2^6;
//接收颜色传感器的信号,白为0,黑为1
sbitP24=P2^4;
//左
sbitP25=P2^5;
//右接收左右光传感器的信号,有光为0
unsignedcharmType=0;
//设置运动的方式,0向前1向左2向后3向右
unsignedcharDirection=0;
//小车的即时朝向0朝上1朝左2朝下3朝右
unsignedsX=50;
unsignedcharsY=0;
//小车的相对右下角的坐标CM(sX,sY)
unsignedcharStartTask=0;
//获得铁片后开始执行返回卸货任务,StartTask置一
unsignedcharInter_EX0=0;
//完成一个完整的任务期间只能有一次外部中断
//Inter_EX0记录外部中断0的中断状态
//0动作最近的前一次未中断过,
//1动作最近的前一次中断过
unsignedcharcntIorn=0;
//铁片数
unsignedcharbkAim=2;
//回程目的地,0为A仓库,1为B仓库,2为停车场,
//(在MAIN中接受铁片颜色判断传感器的信号来赋值)
unsignedcharLight_Flag=0;
//进入光引导区的标志
(1)
unsignedintcntTime_5Min=0;
//时间周期数,用于T0精确定时
unsignedintcntTime_Plues=0;
//霍尔开关产生的脉冲数
/*------------------------------------------------*/
/*-----------------通用延迟程序-------------------*/
voiddelay(unsignedinttime)//time*0.5ms延时
{
unsignedinti,j;
for(j=0;
j<
time;
j++)
{
for(i=0;
i<
60;
i++)
{;
}
/*-----------------------------------------------*/
/*-------------------显示控制模块----------------*/
/*数码管显示,显示铁片的数目(设接在P0,共阴)*/
voidDisplay(unsignedcharn)
charNumb[12]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x37,0x77};
P0=Numb[n];
/*-------------------传感器模块------------------*/
/*光源检测程序:
*/
/*用于纠正小车运行路线的正确性*/
unsignedcharLightSeek()
{voidDisplay(unsignedchar);
bitl,r;
l=P24;
r=P25;
if(l==0&
&
r==1)
//Display
(1);
return(3);
//偏左,向右开
}
if(r==0&
l==1)
//Display(3);
return
(1);
//偏右,向左开
if((l==1&
r==1)||(l==0&
r==0))
{//Display(9);
return(0);
//没有偏离,前进
/*铁片检测程序:
/*判断铁片的颜色,设定bkAim,0为A仓库,1为B仓库,2为停车场*/
voidIornColor()
{
delay(4000);
bkAim=(int)(P26);
Display((int)(P26)+2);
/*------------------运动控制模块-----------------*/
/*====基本动作层:
完成基本运动动作的程序集====*/
/*运动调整程序:
/*对小车的运动进行微调*/
voidctrMotor_Adjust(unsignedchart)
if(t==0)
P2=P2&
240|11;
//用来解决两电机不对称的问题
delay(6);
if(t==3)
250;
//向左走
delay
(1);
if(t==1)
P2=(P2&
245);
//向右走
P2=((P2&
240)|15);
delay(10);
/*直走程序:
/*控制小车运动距离,dist为运动距离(cm),type为运动方式(02)*/
/*只改变小车sX和sY的值而不改变Direction的值.*/
voidctrMotor_Dist(floatdist,unsignedchartype)
{unsignedchart=0;
mType=type;
cntTime_Plues=(int)(dist/det_Dist);
while(cntTime_Plues)
{
if(Inter_EX0==1&
StartTask==0)
cntTime_Plues=0;
break;
if(Light_Flag==1)t=LightSeek();
if(type==0)//向前走
249;
delay(40);
ctrMotor_Adjust(t);
if(type==2)//向后退
246;
delay(50);
}
P2=((P2&
if(mType==2)delay(60);
//刹车制动0.5ms
elsedelay(75);
/*拐弯程序:
/*控制小车运动角度,type为运动方式(13)*/
/*只改变小车Direction的值而不改变sX和sY的值*/
voidctrMotor_Ang(unsignedcharang,unsignedchartype,unsignedchardir)
unsignedchari=0;
cntTime_Plues=(int)((PI*RD*90/(180*det_Dist)*1.2)*ang/90);
if(type==1)//向左走
delay(100);
ctrMotor_Adjust(0);
if(type==3)//向右走
245;
//刹车制动0.5ms
if(!
(Inter_EX0==1&
StartTask==0))
Direction=dir;
}
/*====基本路线层:
描述小车基本运动路线的程序集====*/
/*当小车到达仓库或停车场时,放下铁片或停车(0,1为仓库,2为停车场)*/
voidrchPlace()
{unsignedinttime,b,s,g;
time=(int)(cntTime_5Min*0.065535);
//只有一个数码管时,轮流显示全过程秒数个十百
b=time%100;
s=(time-b*100)%100;
g=(time-b*100-s*10)%10;
if(bkAim==2)
//到达停车场了,停车
EA=0;
while
(1)
Display(10);
//N
delay(2000);
Display(cntIorn);
Display(11);
//A
Display(b);
Display(s);
Display(g);
else
StartTask==1)P10=0;
//到达仓库,卸下铁片
/*无任务模式:
/*设置小车的固定运动路线,未发现铁片时的运动路线*/
voidBasicRoute()
{//Light_Flag=1;
ctrMotor_Dist(153,0);
//Light_Flag=0;
ctrMotor_Ang(ANG_90,1,1);
ctrMotor_Dist(100-sX,0);
ctrMotor_Dist(125,2);
ctrMotor_Dist(73,0);
ctrMotor_Ang(ANG_90,1,2);
//Light_Flag=1;
ctrMotor_Ang(ANG_180,1,0);
rchPlace();
/*任务模式:
/*设置小车的发现铁片后的运动路线*/
voidTaskRoute()
//基本运行路线表,记载拐弯0向前1左拐2向后3右拐,正读去A区;
反读去B区
StartTask=1;
ctrMotor_Ang(ANG_90_T,1,2);
if(bkAim==1)//仓库A
ctrMotor_Dist(10,0);
delay(60);
ctrMotor_Ang(ANG_90_T,1,3);
ctrMotor_Dist(100-sX,2);
ctrMotor_Ang(ANG_90_T,1,2);
Light_Flag=1;
ctrMotor_Dist(153,2);
Light_Flag=0;
//ctrMotor_Ang(208,1,0);
elseif(bkAim==0)//仓库B
ctrMotor_Ang(ANG_90_T,1,0);
//ctrMotor_Ang(208,1,0);
delay(5000);
/*---------------------------------------------*/
/*-------------------主程序段------------------*/
voidmain()
delay(4000);
P2=0xff;
//初始化端口
P07=0;
P1=0;
TMOD=0x01;
//初始化定时器0/1及其中断
TL0=0;
TH0=0;
TR0=1;
ET0=1;
ET1=1;
IT0=1;
//初始化外部中断
EX0=1;
IT1=1;
EX1=1;
EA=1;
P11=1;
while
(1)
bkAim=2;
BasicRoute();
if(Inter_EX0==1)
TaskRoute();
//按获得铁片后的路线运动
IE0=0;
EX0=1;
Inter_EX0=0;
/*----------------------------------------------------*/
/*----------------------中断程序段--------------------*/
/*定时器0中断程序:
/*当时间过了5分钟,则就地停车并进入休眠状态*/
voidtmOver(void)interrupt1
cntTime_5Min++;
if(cntTime_5Min>
=4520)
Display(5);
//停车程序
P07=1;
PCON=0X00;
while
(1);
/*外部中断0中断程序:
/*发现铁片,发出声光信号并将铁片吸起,发光二极管和蜂鸣器*/
/*并联在一起(设接在P07).0为A仓库,1为B仓库,2为停车场*/
voidfndIorn(void)interrupt0
unsignedchari;
P10=1;
//停车
P07=1;
delay(1000);
Inter_EX0=1;
cntIorn++;
Display(cntIorn);
for(i=0;
40;
delay
(2);
P2=P2&
delay(100);
IornColor();
//判断铁片黑白,设置bkAim
95;
delay(3);
//把铁片吸起来
EX0=0;
/*外部中断1中断程序:
/*对霍尔开关的脉冲记数,对小车的位置进行记录,以便对小车进行定位*/
voidstpMove(void)interrupt2
cntTime_Plues--;
if(Direction==0)//向上
if(mType==0)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 智能 小车 设计 报告