基于89s51单片机的循迹
小车设计报告
摘 要
本文介绍了基于at89s52单片机的智能小车的设计与实现。小车完成的主要功能是能够自主识别黑色引导线并根据黑线走向实现快速稳定的寻线行驶。小车系统以 AT89S52 单片机为系统控制处理器;采用红外对管获取赛道的信息;通过数字PID控制策略和PWM控制技术来对小车的方向和速度进行控制。本文介绍了小车硬件和软件系统的设计过程。
关键字:at89s52单片机; 光电管; PID;
目 录
摘 要 ........................................................................................................................... 1
第一章 引言 ............................................................................................................. 2
1.1 设计目的 ............................................................................................................. 2
1.2 设计方案介绍 ..................................................................................................... 2
1.3 技术报告内容安排 ............................................................................................. 2
第二章 技术方案概要说明 ....................................................................................... 2
第三章 硬件电路的设计 ............................................................................................. 3
3.1 单片机最小系统 ................................................................................................. 3
3.2 传感器电路 ........................................................................................................ 4
3.3 电源电路设计 .................................................................................................... 5
3.4 舵机及电机驱动电路设计 ................................................................................ 5
第四章 软件系统的实现 ............................................................................................. 7
4.1主程序设计 .......................................................................................................... 7
4.2 程序思路 ............................................................................................................ 7
第五章 结论 ............................................................................................................... 8
附录:源程序主代码 ................................................................................................... 9
第一章 引言
1.1 设计目的
通过设计进一步掌握51单片机的应用,特别是在嵌入式系统中的应用。进一步学习51单片机在系统中的控制功能,能够合理设计单片机的外围电路,并使之与单片机构成整个系统。
1.2 设计方案介绍
该智能车采用红外对管方案进行道路检测,单片机根据采集到的红外对管的不同状态判断小车当前状态,通过pid控制发出控制命令,控制舵机和电机的工作状态以实现对小车姿态的控制。
1.3 技术报告内容安排
本技术报告主要分为三个部分。第一部分是对整个系统实现方法的一个概要说明,主要内容是对整个技术方案的概述;第二部分是对硬件电路设计的说明,主要介绍系统传感器的设计及其他硬件电路的设计原理等;第三部分是对系统软件设计部分的说明,主要内容是智能模型车设计中主要用到的控制理论、算法说明及代码设计介绍等。
第二章 技术方案概要说明
本模型车的电路系统包括电源管理模块、单片机模块、传感器模块、电机驱动模块、舵机控制模块。
在整个系统中,由电源管理模块实现对其他各模块的电源管理。其中,对单片机、光电管、舵机提供5V电压,对电机提供6V电压。
路径识别电路由8对光电发送与接收管组成。由于路面存在黑色引导线,落
在黑线区域内的光电接收管接收到反射的光线的强度与白色的路面不同,进而在光电接收管两端产生不同的电压值,由此判断路线的走向。传感器模块将当前采集到的一组电压值传递给单片机,进而根据一定得算法对舵机进行控制,使小车自动寻线行走。
单片机模块是智能车的核心部分,主要完成对外围各个模块的管理,实现对外围模块的信号发送,以及对传感器模块的信号采集,并根据软件算法对所采集的信号进行处理,发送信号给执行模块进行任务执行,还对各种突发事件进行监控和处理,保证整个系统的正常运作。
舵机控制模块则根据检测情况经单片机处理后发出相应的PWM波对舵机进行转向的控制。
电机驱动模块采用H桥驱动,通过PWM 波对电机进行控制,以实现对小车速度的调节。
第三章 硬件电路的设计
3.1 单片机最小系统
小车采用atmel公司的at89s52单片机作为控制芯片,图3-1是其最小系统电路。主要包括:时钟电路、电源电路、复位电路。其中各个部分的功能如下:
1、时钟电路:给单片机提供一个外接的16MHz的石英晶振。
2、电源电路:给单片机提供5V电源。
3、复位电路:在电压达到正常值时给单片机一个复位信号。
图3-1 单片机最小系统原理图
3.2 传感器电路
光电寻线方案一般由多对红外收发管组成,通过检测接收到的反射光强,判断黑白线。原理图由红外对管和电压比较器两部分组成,红外对管输出的模拟电压通过电压比较器转换成数字电平输出到单片机。
3-2赛道检测原理图:
3.3 电源电路设计
模型车通过自身系统,采集赛道信息,获取自身速度信息,加以处理,由芯片给出指令控制其前进转向等动作,各部分都需要由电路支持,电源管理尤为重要。在本设计中,51单片机使用5V电源,电机及舵机使用6V电源。考虑到电源为充电电池组,额定电压为7.2V,实际充满电后电压则为6.5-6.8V,所以单片机及传感器模块采用7805稳压后的5V电源供电,舵机及电机直接由电池供电。
3.4 舵机及电机驱动电路设计
舵机的驱动电路比较简单,电源直接由电池组提供,其输入信号为单片机输出的pwm波。
本系统使用的电机驱动板为一个由分立元件制作的直流电动机可逆双极型桥式驱动器,其功率元件由四支N沟道功率MOSFET管组成,由此电路,通过设置51输出的PWM波的占空比可以达到控制电机转速的效果。
3-3 H桥驱动电路 第 6 页 共 10 页
第四章 软件系统的实现
4.1主程序设计
单片机系统需要接收路径识别电路的信号,采用某种路径搜索算法进行寻线判断,进而控制舵机和直流驱动电机的工作。小车系统的软件使用C语言实现。 主体控制框架:
模型车采用的控制方法是根据传感器采集到的路况信息,通过计算得到具体的方向偏移量和速度,控制小车的行走状态。
4.2 程序思路
智能车利用了一字形排布的8个传感器来探测道路,并将每个传感器采集到的信息转换成了数字电平。因此8个传感器的数据正好构成一个字节,由单片机P2口读入。
由于读入的数据并不方便直接参与控制计算,因此先将该数据集分成16类,分别对应于小车不同的位置信息,由0-15表示,其中0表示引导线位于小车最左侧,7表示引导线位于小车中部,14表示引导线位于小车最右侧,15表示未检测到引导线或其他错误情况。
将上面的转换后的数据作为控制计算的反馈输入,与7相减即得到小车偏差信息,然后通过增量型pid算法计算出舵机的控制信息。
将小车偏差信息的微分作为速度pid的输入,依然通过增量型pid算法得到电机的控制信息。至此小车完成一次控制周期。
由于at89s51单片机没有PWM模块,因此需要通过通用I/O口进行模拟来输出舵机和电机所需的PWM波。
可以分别使用一个定时器来作为一路PWM波的计时器。先将I/O口置位,设定高电平时间及定时器的初值,当定时器产生中断时,再将I/O口清零,并设定低电平时间,由此循环即可产生PWM波。其中,高电平时间有控制计算得出,低电平时间有PWM周期减去高电平时间得到。
第五章 结论
本设计主要用到了单片机的通用IO口的读写,定时器,中断等基本功能,通过实际操作进一步掌握了51单片机的使用。同时,通过单片机外围电路的设计,更深入学习了51单片机在嵌入式系统中的应用。通过实际焊接电路,编写程序,也进一步提高了我的动手能力以及分析解决错误的能力,是我能够更好的将所学知识应用到实际中来。
本系统能够基本满足设计要求,能够较快较平稳的是小车沿引导线行驶,但由于经验能力有限,该系统还存在着许多不尽人意的地方有待于进一步的完善与改进。
附录:源程序主代码
#include <reg52.h>
#include <intrins.h>
#include <math.h>
#define uchar unsigned char
#define uint unsigned int
#define MIDDLE 1390 //舵机中心位置
#define LEFT 1600
#define RIGHT 1000
#define T 20000
#define HIGH 7300 //电机基准速度
sbit rudder=P1^0; //定义舵机PWM波输出端口为P1.0口 sbit pulse=P1^1; //定义后轮PWM波输出端口为P1.1口
char flag1=0,flag2=0; //定义全局变量(flag1用于控制舵机
//PWM标志位,flag2用于控制电机PWM)
uint b=0,a=0; //b用来装载电机所需的高电平时间,a用
于保存电机所需高电平时间
void main()
{
uchar receive,ek[4]={7,7,7,7};
uint pidr=0;
uint pidlr=0;
uint ppid=0;
IE=0x8a;
TMOD=0x11;
TH0=0x00;
TL0=0x00;
TR0=1;
TH1=0x00;
TL1=0x00;
TR1=1;
while(1)
{ receive=P2; /*--------------switch----------------*/ switch(receive) {
case 0x7f:ek[3]=0;break; 电传感器检测到黑线
case 0x3f:ek[3]=1;break; 电传感器检测到黑线
case 0xbf:ek[3]=2;break; case 0x9f:ek[3]=3;break; case 0xdf:ek[3]=4;break; case 0xcf:ek[3]=5;break; case 0xef:ek[3]=6;break; case 0xe7:ek[3]=7;break; case 0xf7:ek[3]=8;break; case 0xf3:ek[3]=9;break; case 0xfb:ek[3]=10;break; case 0xf9:ek[3]=11;break; case 0xfd:ek[3]=12;break; case 0xfc:ek[3]=13;break; case 0xfe:ek[3]=14;break;
default: ek[3]=15;break;
//采集光电传感器的值 //根据采集到的值进行判断
//0111 1111 最左边(或右边)1个光 //0011 1111 最左边(或右边)2个光 //1011 1111 依次类推 //1001 1111 //1101 1111 //1100 1111 //1110 1111 //1110 0111 //1111 0111 //1111 0011 //1111 1011 //1111 1001 //1111 1101 //1111 1100 //1111 1110
//1111 1111 没有检测到黑线(是需要保持上一次测量值的)
}
/*--------------switch----------------*/ if(ek[3]= =15) {pidr = pidlr; } else
{pidr=0.2*pidlr+0.8*(23*(ek[3]-7)+2*(ek[3]+ek[2]+ek[1]+ek[0]-28)+7*(ek[3]-ek[2])); if(ek[2]!=ek[3])
ppid=-160*(cabs(ek[3]-7))+220*(cabs(ek[1]-7)-cabs(ek[3]-7));
}
a=HIGH+ppid; //a是电机高电平时间
b=pidr+MIDDLE; //b就是舵机PWM波高电平时间
if(b>LEFT) b=LEFT; if(b<RIGHT) b=RIGHT; {char i;
for(i=0;i<3;i++)
ek[i]=ek[i+1];
}
pidlr=pidr;
}
}
void zhongduan_t0(void) interrupt 1 //产生舵机PWM波中断子程序(T0中断)
{
if(flag1==0)
{
TH0=(uchar)((65536-b)/256);
TL0=(uchar)((65536-b)%256);
flag1=1;
rudder=1;
}
else
{
TH0=(uchar)((38869+b)/256);
TL0=(uchar)((38869+b)%256);
flag1=0;
rudder=0;
}
}
void zhongduan_t1(void) interrupt 3
{
if(flag2==0)
{
TH1=(uchar)((65536-HIGH)/256);
TL1=(uchar)((65536-HIGH)%256);
flag2=1;
pulse=0;
}
else
{
TH1=(65536-T+HIGH)/256;
TL1=(65536-T+HIGH)%256;
flag2=0;
pulse=1;
}
}
第二篇:循迹小车设计报告(1)
设计报告题目:循
类型:实迹训小报车告
电子信息工程系系别:
班级:应电0934
、03、04、05学号:0202、03、04、姓名:陈岳武、杨鹏、陈春芳、王芬芬指导老师:方跃春、谭刚林
20xx年06月18日
-1-
目
摘要
关键字录················································3················································3
设计第1章项目项目设计
1.1
1.2
1.3项目目标·········································4项目方案选择····································4本章总结··········································5
第2章
2.1硬件设计原理图设计········································6
2.1.1原理图方框图··································6
2.1.2电机驱动······································6
2.1.3循迹部分······································6
2.2本章总结··········································8
第3章
3.1软件设计·········································8系统程序··········································8
····································83.1.1循迹模块·
3.1.2显示模块·····································9
3.1.3提示音模块···································9
3.1.4FPGA模块·····································9
3.1.5单片机控制模块·······························9
3.2
4.1
4.2本章总结··········································9调试过程··········································9·········································10本章总结·第4章系统调试··········································9
第5章
第6章
第7章总结·············································10致谢·············································11附录
附录一:系统测试源程序
-2-
【摘要】:
此次任务描述:通过分析《寻迹小车的技术规程与要求》,完成任务分析、功能设计,硬件系统设计、制作与装调,软件系统设计及整机调试等工作任务。
具体内容:
1、自行设计、制作寻迹电路板;
2、根据《寻迹小车的技术规程与要求》,采用所制作的寻迹电路板、控制板(即单片机_FPGA综合实训板)与实验室提供的小车车体(也可用自己的小车车体)搭建寻迹小车;
3、用C语言和VHDL语言编写程序,使小车实现《寻迹小车的技术规程与要求》中规定的功能。
本组的智能小车是以两个电机来驱动,主板部分自行设计【关键字】:
自动循迹;反射式红外光电传感器ST188;软件系统设计;红外对管;
-3-
第1章
1.1项目目标项目设计
学会智能电子产品的功能设计与任务分析,能进行小型电子产品方案设计;掌握基于51单片机、FPGA模数混合硬件系统设计和程序设计;熟悉电子信息类企业项目完整的运作过程及管理规范,培养团队协作能力、沟通能力、创新能力和组织能力。本次实训任务描述:通过分析《循迹小车的技术规程与要求》,完成任务分析、功能设计,硬件系统设计、制作与装调,软件系统设计及整机调试等工作任务。
实训具体内容:自行设计与制作循迹电路板;根据《循迹小车的技术规程与要求》,采用所制作的循迹电路板、控制板(即单片机-FPGA综合实训板)与实验室提供的小车车体搭建循迹小车;用C语言及VHDL编写程序使小车实现《循迹小车的技术规程与要求》中的要求,及创新部分。
1.2项目方案选择
本小组选用方案二——红外探测法,即利用红外线在不同颜色的物体表面具有不同的反射性质的特点。在小车行驶过程中不断地向地面发射红外光,当红外光遇到白色地面时发生漫反射,反射光被安装在小车身上的接收管接收,如果遇到黑线则红外线被吸
收,则小车上的接收管接收不到信号。
-4-
图中ST188是常用的红外对管,内部由1只红外发光二极管和1只红外接收三极管构成。
1.3本章总结
方案的选择对于一个小组完成接下去的工作很重要,之前我们选用的是第一个方案——光敏电阻,由于该方案有一个显著缺点,即易受到外界光源的干扰,有时甚至检测不到黑线,主要是因为可见光的反射效果、地标的平坦程度、地表材料的反射情况均对检测效果产生直接影响。所以第一次循迹板焊接完之后的调试我们失败了,没有调试成功。在小组成员商量之后,我们决定改采用了二号方案。
第2章
2.1原理图设计
2.1.1
电路原理方框图硬件设计
-5-
FPGA总图
2.1.2电机驱动
驱动电路主要采用驱动芯片L9110H来直接驱动电机,L9110H为单块集成电路、高电流、高电压、四通道驱动,其额定工作电流为1A,最大可达1.5A,VSS电压最小4.5V,最大可达36V,可直接的对电机进行控制,无需隔离电路。L9110H从主控单片机STC89C52那里接受指令直接控制电机的工作状态。可以对电机进行正反转,停止的操作,非常方便。
2.1.3循迹部分
主要由四个反射式红外光电传感器ST188和四个电位器组成。采用ST188型完成系统循迹任务,循迹电路是用以实现小车沿着场地的黑色弧线引导轨迹进行前进和位置校正的,且小车不能偏离此轨迹。在本实训中采用ST188型反射式红外光电传感器完成系统循迹任务,硬件电路实现比较简单,其灵敏度可以通过调节多圈电位器来实现。
其原理图如下:
-6
-
2.2本章总结
理清了思路之后,其实整个实训过程中硬件算比较简单的。
第3章
3.1
系统程序软件设计
-7
-
循迹子函数流程图
3.1.1循迹模块
循迹板送过来的4路检测信号送到FPGA板,FPGA将此4路信号送出至4个LED显示状态,检测到黑线显示亮,否则灭;同时将此4路信号送到单片机。
3.1.2显示模块
显示模块采用数码管显示,小车启动时,显示“1”;小车左拐时,显示“2”;小车右拐时,显示“3”;小车前进时,显示“4”;小车后退时,显示“5”;小车停止时,显示“6”;
3.1.3提示音模块
小车启动前发出三声“嘟嘟嘟”的声音,提示音结束后,FPGA发出一个启动信号给单片机,从而启动小车。小车停车时,FPGA播放一首音乐,即表示小车完成了任务。
3.1.4FPGA模块
循迹板过来的信号一方面送到LED灯显示循迹状态,另一方面要将此信号送到单片机进行处理;小车启动前,发出三声提示音,小车停车后播放一首音乐;小车在发出三声提示音后,FPGA发出一个开始指令给单片机,从而启动小车前进;小车停车后,FPGA收到单片机的停车指令,开始播放音乐,直到音乐播放完毕。
3.1.5单片机控制模块
-8
-
启动小车:
小车在接收到FPGA送过来的启动指令后,读取循迹信号,根据循迹信号
确定小车的运行状态,将小车的运行状态送至FPGA,同时根据相应算法,驱动小车的左右电机前进。
正常前进:
当循迹板中间两个传感器检测到黑线(任意一个检测到黑线或两个同时检测到黑线),小车都正常前进。
左拐弯:
当最左端的传感器检测到黑线,右端3个传感器检测到白线时,小车应左拐弯。
右拐弯:
当最右端的传感器检测到黑线,左端3个传感器检测到白线时,小车应右拐弯。
后退:
当4个传感器都检测到白线时,小车后退。
停车:
当4个传感器同时连续多次检测到黑线(如连续3次),小车停车。小车停车后,发出一个停车标志信号送给FPGA。
(系统具体程序见附录二)
3.2本章总结
程序对这次的整个实训很重要,程序与小车的关系就如同人的身体与身体里的血液一样,都不能离开彼此。程序刚开始写完的时候出了错,下载下来发现小车原本后退的时候却是在前进,最后在李文的帮助下终于解决了问题。
第4章
4.1调试过程
4.1.1测试工具系统调试
-9-
仪器名称
电脑
数字万用表用途调试及下载程序测量各种电路工作情况
4.1.2测试过程
我们尝试着先用STC89C52来控制小车的前进、后退、左右转弯,试验成
功了,小车能正常的跑动,我们达到了预先目的,实现了小车的机械性能。
主板通电前检查:电路安装完毕,我们首先直观检查电路各部分生产线是否正确,检查电源、地线、信号线、元器件引脚间有无短路,元器件有无接错。
通电检查:给电机通电,观察电机是否正常工作,接着给主板通电,观察电路各部分有无异常现象。
主板安装调试:在调试的过程中我们发现原理图中有一个错误,这个错误导致小车的稳压芯片过热。一起讨论之后决定修改了原理图,调换小车驱动芯片的位置。改动之后,小车电源稳压芯片过热现象消失。
4.2本章总结
这个部分动手操作起来还是蛮顺利的,因为这个学期像下载程序,进行调试我们已经做过几次类似的,所以操作起来很成功,程序下载后,小车能实现其基本功能。
第5章总结
像这种一个小组分工完成一件任务的,团队合作精神真的很重要。我们小组第一次选的方案是光敏电阻的,这个方案有个明显的缺点,即易受到外界的干扰,加上元器件也买错,导致第一块循迹板焊完,进行调试的没有成功,当时有的小组的循迹小车已经完成,并能实现其基本功能,但我们也没有灰心,距离最后的验收时间还有一周,我们还有机会成功。于是我们重新购置了元件,选定了红外对管的方案,汲取了上次焊循迹板失败的教训,这次从焊接到安装调试都很成功,在25号调试时,小车已能完成其基本功能。在刚开始接到这个实训任务时,我们都以为这很难,要完成的可能性很小,没想到真的要动手的时候,我们还是可以的,整个流程无非是发现问题,解决问题,说实话我们受益匪浅,当把小车放在地上,看到它能循迹时,那种激动的心情是不言而喻的。在此,要忠心的感谢在此过程中指导我们的方跃春老师、谭刚林老师,及给予我们帮助,给我们提供好建议的张仁熙、李文!
-10-
第6章致谢
在本次实训过程中,由于是第一次完整的动手制作出循迹小车,买元器件、焊接、原理图设计、程序设计、整装调试等等,这其中有很多东西我们弄不明白的时候,方老师和谭老师给予了我们很大的帮助,要么是通过看老师空间里的课程资料,要么遇到资料上没解的时候,我们会当面向老师们请教,老师总是很详细的跟我们讲解,直到我们小组把疑问解决。当然,在完成此次任务中,班上的同学也对我们的设计给予了很多帮助。像李文、张仁熙,在软件设计的过程中不懂的直接请教李文,他会把他知道的一一告诉我们;本组由于刚开始方案选的是有关光敏电阻,在硬件调试部分遇到了障碍,调试没有成功,此时张仁熙那组循迹小车任务已基本完成,这位高手级别的同学发现我们这组遇到了问题,立马出面帮我们查看我们的循迹板,看是哪一个步骤出现了问题,直到跟我们一起把问题解决。
我们本组成员向在本次实训中给予我们帮助的老师及同学致以诚挚的谢意!
第7章附录
附录一:系统测试源程序
(具体程序见小车成员大学城空间)
-11-