好好学习,天天向上,一流范文网欢迎您!
当前位置:首页 >> 最新范文 内容页

基于89s51单片机的循迹小车设计报告

基于89s51单片机的循迹小车设计报告 本文关键词:单片机,小车,报告,设计,s51

基于89s51单片机的循迹小车设计报告 本文简介:1基于89s51单片机的循迹小车设计报告基于89s51单片机的循迹小车设计报告摘要本文介绍了基于at89s52单片机的智能小车的设计与实现。小车完成的主要功能是能够自主识别黑色引导线并根据黑线走向实现快速稳定的寻线行驶。小车系统以AT89S52单片机为系统控制处理器;采用红外对管获取赛道的信息;通过

基于89s51单片机的循迹小车设计报告 本文内容:

1

基于

89s51

单片机的循迹

小车设计报告

基于

89s51

单片机的循迹小车设计报告

本文介绍了基于

at89s52

单片机的智能小车的设计与实现。小车完成的主要功

能是能够自主识别黑色引导线并根据黑线走向实现快速稳定的寻线行驶。小车

系统以

AT89S52

单片机为系统控制处理器;采用红外对管获取赛道的信息;

通过数字

PID

控制策略和

PWM

控制技术来对小车的方向和速度进行控制。本

文介绍了小车硬件和软件系统的设计过程。

关键字:at89s52

单片机;

光电管;

PID;

基于

89s51

单片机的循迹小车设计报告

摘摘

要要2

第一章第一章

引言引言2

1.1

设计目的2

1.2

设计方案介绍2

1.3

技术报告内容安排2

第二章第二章

技术方案概要说明技术方案概要说明3

第三章第三章

硬件电路的设计硬件电路的设计4

3.1

单片机最小系统4

3.2

传感器电路4

3.3

电源电路设计5

3.4

舵机及电机驱动电路设计5

第四章第四章

软件系统的实现软件系统的实现6

4.1

主程序设计6

4.2

程序思路6

第五章第五章

结论结论7

附录:源程序主代码附录:源程序主代码8

基于

89s51

单片机的循迹小车设计报告

第一章

引言

1.1

设计目的

通过设计进一步掌握51单片机的应用,特别是在嵌入式系统中的应用。

进一步学习51单片机在系统中的控制功能,能够合理设计单片机的外围电路,

并使之与单片机构成整个系统。

1.2

设计方案介绍

该智能车采用红外对管方案进行道路检测,单片机根据采集到的红外对管

的不同状态判断小车当前状态,通过pid控制发出控制命令,控制舵机和电

机的工作状态以实现对小车姿态的控制。

1.3

技术报告内容安排

本技术报告主要分为三个部分。第一部分是对整个系统实现方法的一个概

要说明,主要内容是对整个技术方案的概述;第二部分是对硬件电路设计的说

明,主要介绍系统传感器的设计及其他硬件电路的设计原理等;第三部分是对

系统软件设计部分的说明,主要内容是智能模型车设计中主要用到的控制理论、

算法说明及代码设计介绍等。

基于

89s51

单片机的循迹小车设计报告

第二章

技术方案概要说明

本模型车的电路系统包括电源管理模块、单片机模块、传感器模块、电机

驱动模块、舵机控制模块。

在整个系统中,由电源管理模块实现对其他各模块的电源管理。其中,对

单片机、光电管、舵机提供

5V

电压,对电机提供

6V

电压。

路径识别电路由

8

对光电发送与接收管组成。由于路面存在黑色引导线,

落在黑线区域内的光电接收管接收到反射的光线的强度与白色的路面不同,进

而在光电接收管两端产生不同的电压值,由此判断路线的走向。传感器模块将

当前采集到的一组电压值传递给单片机,进而根据一定得算法对舵机进行控制,

使小车自动寻线行走。

单片机模块是智能车的核心部分,主要完成对外围各个模块的管理,实现对

外围模块的信号发送,以及对传感器模块的信号采集,并根据软件算法对所采

集的信号进行处理,发送信号给执行模块进行任务执行,还对各种突发事件进

行监控和处理,保证整个系统的正常运作。

舵机控制模块则根据检测情况经单片机处理后发出相应的

PWM

波对舵机

进行转向的控制。

电机驱动模块采用H桥驱动,通过

PWM

波对电机进行控制,以实现对小

车速度的调节。

基于

89s51

单片机的循迹小车设计报告

第三章

硬件电路的设计

3.1

单片机最小系统

小车采用

atmel

公司的

at89s52

单片机作为控制芯片,图

3-1

是其最小系统

电路。主要包括:时钟电路、电源电路、复位电路。其中各个部分的功能如下:

1、时钟电路:给单片机提供一个外接的

16MHz

的石英晶振。

2、电源电路:给单片机提供

5V

电源。

3、复位电路:在电压达到正常值时给单片机一个复位信号。

3-1

单片机最小系统原理图

3.2

传感器电路

光电寻线方案一般由多对红外收发管组成,通过检测接收到的反射光强,

判断黑白线。原理图由红外对管和电压比较器两部分组成,红外对管输出的模

拟电压通过电压比较器转换成数字电平输出到单片机。

基于

89s51

单片机的循迹小车设计报告

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

桥驱动电路

基于

89s51

单片机的循迹小车设计报告

第四章

软件系统的实现

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

周期减去高电平时间得到。

路况信息数据处理

偏转方向

基于

89s51

单片机的循迹小车设计报告

第五章

结论

本设计主要用到了单片机的通用

IO

口的读写,定时器,中断等基本功能,

通过实际操作进一步掌握了

51

单片机的使用。同时,通过单片机外围电路的设

计,更深入学习了

51

单片机在嵌入式系统中的应用。通过实际焊接电路,编写

程序,也进一步提高了我的动手能力以及分析解决错误的能力,是我能够更好

的将所学知识应用到实际中来。

本系统能够基本满足设计要求,能够较快较平稳的是小车沿引导线行驶,

但由于经验能力有限,该系统还存在着许多不尽人意的地方有待于进一步的完

善与改进。

基于

89s51

单片机的循迹小车设计报告

附录:源程序主代码

#include

#include

#include

#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;

基于

89s51

单片机的循迹小车设计报告

while(1)

{

receive=P2;

//采集光电传感器的值

/*--------------switch----------------*/

switch(receive)

//根据采集到的值进行判断

{

case

0x7f:ek[3]=0;break;

//0111

1111

最左边(或右边)1

光电传感器检测到黑线

case

0x3f:ek[3]=1;break;

//0011

1111

最左边(或右边)2

光电传感器检测到黑线

case

0xbf:ek[3]=2;break;

//1011

1111

依次类推

case

0x9f:ek[3]=3;break;

//1001

1111

case

0xdf:ek[3]=4;break;

//1101

1111

case

0xcf:ek[3]=5;break;

//1100

1111

case

0xef:ek[3]=6;break;

//1110

1111

case

0xe7:ek[3]=7;break;

//1110

0111

case

0xf7:ek[3]=8;break;

//1111

0111

case

0xf3:ek[3]=9;break;

//1111

0011

case

0xfb:ek[3]=10;break;

//1111

1011

case

0xf9:ek[3]=11;break;

//1111

1001

case

0xfd:ek[3]=12;break;

//1111

1101

case

0xfc:ek[3]=13;break;

//1111

1100

case

0xfe:ek[3]=14;break;

//1111

1110

default:

ek[3]=15;break;

//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(bLEFT)

b=LEFT;

if(bRIGHT)

b=RIGHT;

{char

i;

基于

89s51

单片机的循迹小车设计报告

for(i=0;i3;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;

}

}

TAG标签: