单片机控制智能小车.doc

上传人:b****3 文档编号:2232117 上传时间:2022-10-28 格式:DOC 页数:15 大小:1.34MB
下载 相关 举报
单片机控制智能小车.doc_第1页
第1页 / 共15页
单片机控制智能小车.doc_第2页
第2页 / 共15页
单片机控制智能小车.doc_第3页
第3页 / 共15页
单片机控制智能小车.doc_第4页
第4页 / 共15页
单片机控制智能小车.doc_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

单片机控制智能小车.doc

《单片机控制智能小车.doc》由会员分享,可在线阅读,更多相关《单片机控制智能小车.doc(15页珍藏版)》请在冰豆网上搜索。

单片机控制智能小车.doc

单片机项目实验报告

单片机项目报告

智能小车控制

班级:

自动化21091

姓名:

邸维汉刘会丽石钱坤

学号:

1020103304

2010103215

2010103122

目录

一、前言

二、方案设计与论证

1)控制器模块选取

2)电机模块选取

3)电机驱动器模块选取

4)电源模块选取

三、硬件设计

1)主控系统

2)电机模块

3)电机驱动模块

4)电源模块

5)按键模块

四、软件设计

1)直行设计

2)转弯设计

3)调速设计

五、调试中存在的问题

六、参考文献

一、前言:

随着汽车工业的迅速发展,关于汽车的研究也就越来越受人关注。

全国电子大赛和省内电子大赛几乎每次都有智能小车这方面的题目,全国各高校也都很重视该题目的研究。

可见其研究意义很大。

本设计就是在这样的背景下提出的,指导教师已经有充分的准备。

本题目是结合科研项目而确定的设计类课题。

我们设计的智能电动小车该具有圆形运行、三角形运行、矩形运行和三者一起运行的功能。

都是运行一循环自动停车。

根据题目的要求,确定如下方案:

在现有玩具电动车的基础上,加了四个按键,实现对电动车的运行轨迹的启动,并将按键的状态传送至单片机进行处理,然后由单片机根据所检测的各种按键状态实现对电动车的智能控制。

这种方案能实现对电动车的运动状态进行实时控制,控制灵活、可靠,精度高,可满足对系统的各项要求。

本设计采用STC89C52单片机。

以STC89C52为控制核心,利用按键的动作,控制电动小汽车的轨迹。

实现四种运行轨迹。

STC89C52是一款八位单片机,它的易用性和多功能性受到了广大使用者的好评。

二、方案设计与论证

1)控制器模块选取

我们采用STC公司的STC89S52单片机作为主控制器,STC公司的单片机内部资源比起ATMEL公司的单片机来要丰富的多,它在5V供电情况下,最多支持80M晶振、且内部有512B的RAM数据存储器、片内含8k空间的可反复擦些1000次的Flash只读存储器、1K的EEPROM、8个中断源、4个优先级、3个定时器、32个IO口、片机自带看门狗、双数据指针等。

但是不兼容Atmel。

从方便使用的角度考虑,我们选择了此方案

2)电机模块选取

采用普通直流电机。

直流电机运转平稳,精度有一定的保证。

直流电机控制的精确度虽然没有步进电机那样高,但完全可以满足本题目的要求。

通过单片机的PWM输出同样可以控制直流电机的旋转速度,实现电动车的速度控制。

并且直流电机相对于步进电机价格经济。

3)电机驱动器模块选取

采用电机驱动芯片L298N。

L298N为单块集成电路,高电压,高电流,四通道驱动,可直接的对电机进行控制,无须隔离电路。

通过单片机的I/O输入改变芯片控制端的电平,即可以对电机进行正反转,停止的操作,非常方便,亦能满足直流减速电机的大电流要求。

调试时在依照芯片手册,用程序输入对应的码值,能够实现对应的动作。

4)电源模块选取

在本系统中,需要用到的电源有单片机的5V,L298N芯片的电源5V和电机的电源7-15V。

所以需要对电源的提供必须正确和稳定可靠。

用9V的锌电源给前、后轮电机供电,然后使用7805稳压管来把高电压稳成5V分别给单片机和电机驱动芯片供电。

因此为了方便,这里我们采用12V电源给电机供电,再用7805转换成5V电源给单片机使用。

三、硬件设计

小车采用四轮驱动,一侧的前后两个车轮共用一个电机驱动,另外两个前后轮共用一个驱动,调节左右车轮转速从而达到控制转向的目的。

按键模块

单片机最小系统

L298N

电源模块

电机模块

系统结构框图

实物连接:

3.2、电机驱动模块

L298N驱动直流电机,它靠两个引脚控制一个电机的运动。

小车采用四轮驱动,小车两侧的电机短接起来各接到L298N的一个输出端。

通过调制两边轮子的转速或正反转来达到控制小车转向的目的。

芯片引脚和功能如图1,驱动电路如图2。

ENA(B)

IN1(IN3)

IN2(IN4)

电机运行情况

H

H

L

正转

H

L

H

反转

H

同IN2(IN4)

同IN2(IN4)

快速停止

L

X

X

停止

将L298N的IN0、1、2、3,接到P1.0到P1.3上,ENA、ENB接到P3.2、P3.3。

3.3、电机模块

电机模块采用4块电机同时驱动,这里将同一侧电机短接接到L298N的一个输出端。

3.4、电源模块

采用两片7805电压稳压5V后给单片机系统和其他芯片供电供电,但缺点是压降过大,消耗的功率过大,发热量过大。

3.5、按键模块

本系统添加4个按键,用来选择控制小车。

并接于P2.0到P2.3口上。

四、软件设计

是否有键按下?

开始

检测按下哪个键?

运行三角形

运行圆形

运行矩形

N

Y

总体流程图

运行以上3个轨迹

S1按下

S2按下

S3按下

S4按下

4.1、小车直行设计:

若要求小车直走,这需要给4个电机正转命令。

根据L298N芯片手册

ENA(B)

IN1(IN3)

IN2(IN4)

电机运行情况

H

H

L

正转

H

L

H

反转

H

同IN2(IN4)

同IN2(IN4)

快速停止

L

X

X

停止

这里将P1=0xfa。

4.2、小车转弯设计:

若要求小车转弯,需要给一侧电机正转,一侧电机反转或者不旋转。

这样将P1=0xf8或者P1=0xf9.

4.3、小车调速设计:

若要求车调速,只需用PWM来控制L298N的ENA和ENB就可以对小车进行调速。

这里我使用定时器T0的工作模式2自动重装。

并赋初值 TH0=0xf6;TL0=0xf6;

U

产生高频脉冲。

C语言源代码实现:

#include

T

#defineucharunsignedchar

#defineuintunsignedint

voidtrigon(uint,uint,uint,uint,uint,uint);

voidround(uint,uint);

voidrectangle(uint,uint,uint,uint,uint,uint,uint,uint);

voiddelay(uintk);

voidPWMA(ucharn);

voidPWMB(ucharn);

ucharkeys();

sbitP3_2=P3^2;

sbitP3_3=P3^3;

voidmain()

{

ucharkey;

TMOD=0x12;

EA=1;

ET0=1;

ET1=1;

TH0=0xf6;

TL0=0xf6;

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

TR0=1;

TR1=1;

P2=0XFF;

while

(1)

{

jump=0;

key=keys();

// c稳定运行d转向e稳定运行f转向g稳定运行h转向

if(key==0xfe)//cdefgh

trigon(30,5,30,10,30,16);

if(key==0xfd)

round(13,70);

//c稳定运行d转向e稳定运行f转向g稳定运行h转向i稳定运行j转向

if(key==0xfb)//cdefghij

rectangle(30,4,30,4,30,4,30,16);

if(key==0xf8)

{

trigon(30,5,30,10,30,16);

jump=0;

delay(1000);

round(13,70);

jump=0;

delay(1000);

rectangle(30,4,30,4,30,4,30,16);

}

}

}

voidtimer0()interrupt1

{

num0++;

}

voidtimer1()interrupt3

{

num1++;

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

}

voidtrigon(uintc,uintd,uinte,uintf,uintg,uinth)

{

uintaa,bb,cc,dd,ee;

aa=c+d;

bb=aa+e;

cc=bb+f;

dd=cc+g;

ee=dd+h;

delay(3000);

num1=0;

num0=0;

while(!

jump&&key!

=0)

{

if(num1=1)//正转稳定运行

{

P1=0xfa;

PWMB(70);

PWMA(70);

}

if((num1>c+1)&&num1<=aa)//转向

{

P1=0xf8;

PWMB(50);

PWMA(80);

}

if(num1>(aa+1)&&num1<=bb)//正转稳定

{

P1=0xfa;

PWMB(70);

PWMA(70);

}

if(num1>(bb+1)&&num1<=cc)//转向

{

P1=0xf8;

PWMB(60);

PWMA(65);

}

if(num1>(cc+1)&&num1<=dd)//正转稳定运行

{

P1=0xfa;

PWMB(70);

PWMA(70);

}

if(num1>(dd+1)&&num1<=ee)//转向

{

P1=0xf8;

PWMB(65);

PWMA(35);

}

if(num1>ee)//停止

{

num1=0;

num0=0;

P1=0xf0;

jump=1;

P3_2=0;

P3_3=0;

key=0;

}

}

}

voidPWMA(ucharn)

{

if(num0

P3_2=1;

else

P3_2=0;

if(num0>=100)

num0=0;

}

五、调试中出现的问题

1.转向时间需要慢慢调,时间长,旋转弧度大;时间短,旋转弧度小。

2.直行时,由于每个电机的性能不一样,导致两侧占空比一样时,小车会存在转弯,这样需要微调占空比。

六、参考文献

[1]楼然苗,李光飞.51系列单片机设计实例.北京航空航天大学出版社

[2]何希才.常用集成电路应用实例.电子工业出版社

[3]王静霞单片机应用技术(C语言版)电子工业出版社

第15页共15页

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 冶金矿山地质

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1