智能寻迹避障小车电机控制系统设计Word文件下载.docx

上传人:b****7 文档编号:22012186 上传时间:2023-02-02 格式:DOCX 页数:47 大小:34.43KB
下载 相关 举报
智能寻迹避障小车电机控制系统设计Word文件下载.docx_第1页
第1页 / 共47页
智能寻迹避障小车电机控制系统设计Word文件下载.docx_第2页
第2页 / 共47页
智能寻迹避障小车电机控制系统设计Word文件下载.docx_第3页
第3页 / 共47页
智能寻迹避障小车电机控制系统设计Word文件下载.docx_第4页
第4页 / 共47页
智能寻迹避障小车电机控制系统设计Word文件下载.docx_第5页
第5页 / 共47页
点击查看更多>>
下载资源
资源描述

智能寻迹避障小车电机控制系统设计Word文件下载.docx

《智能寻迹避障小车电机控制系统设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《智能寻迹避障小车电机控制系统设计Word文件下载.docx(47页珍藏版)》请在冰豆网上搜索。

智能寻迹避障小车电机控制系统设计Word文件下载.docx

方案二中采纳的是直流减速电机,在此只介绍该电机的控制方法,关于其内部结构不作介绍。

该电机外形表示图如图1.2所示,它有红、黑两根控制线,电机状态控制电平如表1-1所示。

表1-1电机控制电平与状态对应表

红线控制端

黑线控制端

电机状态

1

顺转

逆转

停转

直流电机的控制信号由单片机输出送至电机驱动芯片

L293后,经L293内

部H电桥电路驱动电机运行。

图1.2直流电机外形图

1.2.3直流电机H桥驱动电路工作原理

本设计中直流电机H桥驱动电路由驱动芯片L293D完成,在L293D内部形成一个H桥型的驱动驱动电路,近似如图1.3所示。

图顶用开关模拟电机信号通断,在实质的控制中是

采纳晶体三极管来完成此功能,可拜见图1.4所示的电机控制表示图。

此处但是为简述控制

原理,所以用开关模拟电机工作过程。

图1.3H桥驱动直流电机电路

从图中可以看出,其形状近似于字母“H”,而作为负载的直流电机是像“桥”相同架在

上边的,所以称之为“H桥驱动”。

4个开关所在地点就称为“桥臂”。

从电路中不难看出,假设开关A、D接通,电机为正向转动,则开关B、C接通时,直流

电机将反向转动。

从而实现了电机的正反向驱动。

借助这4个开关还可以产生电机的其余

个工作状态:

2

(1)刹车——将B、D开关(或A、C)接通,则电机惯性转动产生的电势将被短路,形成阻截运动的反电势,形成“刹车”作用。

(2)惰行——4个开关所有断开,则电机惯性所产生的电势将没法形成电路,从而也就不会产生阻截运动的反电势,电机将惯性转动较长时间。

图1.4电机控制表示图电路

1.2.4延时函数

在实质的单片机应用系统开发过程中,因为程序功能的需要,常常编写各种延时程序,延不时间从数微秒到数秒不等。

实现延时平常有两种方法:

一种是硬件延时,要用到单片机的准时器/计数器,这种方法可以提高CPU的工作效率,同时也能做到精确延时;

另一种是软件延时,这种方法主要

采纳循环体进行,本项目开发过程中采纳的是软件延时的方法,在后续各项目模块中常常作为延时功能调用的几个延时函数原形以下:

voiddelay_nμs(uint//i)延时微秒级函数

{

i=i/10;

while(--i);

}

voiddelay_nms(uintn)//延时毫秒级函数

n=n+1;

while(--n)

delay_nμs(900);

voiddelayms(uintx)//延时函数12兆晶振1000为一秒;

11.0592兆晶振922为一秒(会有必然偏差)

uchari;

while(x--)

for(i=0;

i<

123;

i++);

上述函数设计的基本源理是经过履行循环体来耗费时间从而达到延时的目的,此中

delay_nms()是毫秒级的延时,而

delay_nμs()是微秒级的延时。

比方:

假如你想延时

1毫

秒,可以使用语句delay_nms

(1);

延时100微秒则可使用语句delay_nμs(100);

来完成。

注意:

上述延时函数是在外面晶振为12MHZ的状况下设计的,假如外面晶振频率不是

12MHz,调用这两个函数所产生的真切延时就会发生变化。

关于很多C51开发者特别是初学者编制特别精确的延时函数有必然难度,关于延时函数的编程经验和技巧此处不作详细

介绍,读者目前只需会将这两个函数作为功能模块调用就行了

1.3事例设计

1.3.1系统设计方案

本项目向读者详细介绍了两种实现方案,此中学员实操采纳方案二进行。

同时该项目

设计为本书后续设计事例的基础控制模块,后续的寻迹、避障等功能模块实在该项目上扩展

实现的。

方案一:

该设计方案采纳CPU对履行机构输出控制,不涉及到对外面数据信息的收集,

所以,系统采纳“CPU+履行机构”的整体设计方案,此中CPU采纳目前性价比较高的STC89C52

单片机,并以此为中心成立最小控制系统,履行机构的动力装置采纳PARALLAX公司生产的

连续旋转伺服电机,其长处是编程控制方便且不需额外增添驱动电路,系统整体框图如图

1.5所示。

单片机最小系统

左轮伺服电机

复位电路

时钟电路STC89C52

右轮伺服电机

图1.5方案一系统框图

方案二:

采纳“单片机最小系统+电机驱动芯片+直流电机”的设计方案,设计方案中

的电机采纳直流减速电机,该电机拥有控制原理简单、性价比高,易于控制等特色,被宽泛应用于各种智能玩具小车设计之中;

电机驱动采纳集成芯片L293完成,该芯片运用H电桥驱动直流电机的控制原理实现对直流电机旋转方向和速度的控制。

系统整体框图如图1.6所示。

复位电路P0口电机驱动直流电机

cpu

P3口寻迹电路

时钟电路P1口LED指示

图1.6方案二统框图

1.3.2硬件电路设计

该设计方案的硬件电路如图1.7所示:

它是在单片机最小系统的基础上直接

连接伺服电机构成的,此中左电机的控制信号由P1_0供给,右电机的控制信号由P1_1提

供,直接对该两个端口编程,即可实现对伺服电机旋转方向和速度控制。

5V

左轮驱动电机

右轮驱动电机

M

1P1.0VCC

V

P1.1

GND

+/

F

C3-U

AT89C51

R110K

9RST

30PF

C1

12MHZ

18

XTA1

C2

19

XTA2

20GND

图1.7

方案一系统原理图

该设计方案的硬件电路如图

1.8所示:

电机控制信号由单片机的P0.0—P0.3

输出送到电机驱动芯片的

2脚与7脚以及10脚与15脚,再从芯片的

3脚与6脚(左电机控

制)以及

11脚与14脚(右电机控制)输出驱动电机工作。

电源电路

IC3

104

BT1

S3

VCCBAT

16V/1000uF

INPUT1

RX110K上拉电阻

+

C17

OUTPUT1

10uF

RM1

跳线

C15M1

C4

INPUT2

INPUT3

C9

OUTPUT2

OUTPUT3

INPUT4

IC1

ENA

P1.0

40

Vcc

ENB

OUTPUT4

39

P0.0

P1.2

3

38

P0.1

P1.3

P0.2

DC

C14

M2

寻线模

块电路

R3

R4

R5

R6

220

15K

22015K

+C6

V3

V4

V6

V5

u

R15

10K

C7

复位

30P

Z1

电路

C8

11.0592

时钟电路

4

37

L293D

P1.4

36

P0.3

5

P1.5

35

P0.4

6

电机控制

P1.6

34

P0.5

模块电路

7

P1.7

33

P0.6

8

RESET

32

P0.7

9

P3.0

31

EA

10

P3.1

30

ALE

11

P3.2

29

PSEN

12

D1

P3.3

P2.7

28

13

P3.4

27

P2.6

14

R7

R2

P3.5

P2.5

26

560

15

P3.6

25

P2.4

16

P2.3

P3.7

24

D2

17

XLA1

23

P2.2

XLA2

22

P2.1

Gnd

21

P2.0

20

STC89C52

V2

R14

S8550220

寻线传感器

LED指示电路

图1.8方案二系统原理图

1.3.3系统软件设计

产生智能寻迹避障小车电机的基本控制信号

本任务是对单片机编程,在指定的单片机引脚P1_0输出伺服电机的各种控制

信号。

1、源程序

sfrP1=0x90;

//P1口C51定义;

sbitP1_0=P1^0;

//特别功能位定义

#defineuintunsignedint

voiddelay_nμs(uint//i)延时nμs函数

voiddelay_nms(uintn)//延时nms函数

intmain(void)

//主函数

while

(1)

P1_0=1;

delay_nμs(1500);

//P1_0输出高电平

//延时1。

5ms

P1_0=0;

//P1_0

输出低电平

delay_nms(20);

//延时

20ms

2、程序运行及调试

在智能寻迹避障小车控制板上按图1.7连接伺服电机控制电路,编译以上程序,将产生的可履行文件烧写到控制板上的单片机程序储蓄器,详细操作步骤以下:

步骤1:

启动KeiluVision4IDE,完成对上边程序的编写,编译和调试,产生可履行的HEX文件。

步骤2:

将ISP下载线一端连接到PC机的并行接口上,另一端(小端)连接到智能寻迹避障小车的程序下载口上。

打开ISP下载软件将步骤1获取的HEX文件下载到智能寻迹避障小车的单片机内部程

序储蓄器,开启电源,运行程序,用示波器丈量P1_0引脚,可测出使伺服电机转速为零的控制信号,其波形如图1.9所示。

1.5ms

Vdd(5v)

Vss(0v)

图1.9

使伺服电机转速为零的控制信号时序图

将程序中的delay_nμs(1500)改成delay_nμs(1300),即延时1.3ms,再重复以上步

骤,可用示波器测得使伺服电机使电机顺时针全速旋转的控制信号,其波形如图1.10所

示。

1.3ms1.3ms

图1.10使电机顺时针全速旋转的控制脉冲序列

将程序中的delay_nμs(1500)改成delay_nμs(1700),即延时骤,可用示波器测得使伺服电机逆时针全速旋转的控制信号,其波形如图

1.7ms,再重复以上步

1.11所示。

1.7ms1.7ms

图1.11使伺服电机逆时针全速旋转的脉冲序列

在1.3ms—1.5ms—1.7ms时间范围内改变延时函数的延时量,可获取控制伺服电机不一样样旋转方向和转速的各种波形。

步骤3:

对伺服电机进行零点标定

所谓伺服电机零点标定是指当发送一个使伺服电机转速为零的控制信号给伺服电机时,

让电机保持静止不动的过程,伺服电机在出厂时没有开初标定,所以需要调整。

详细做法是:

将步骤2产生的使电机转速为零的控制程序加载到单片机程序储蓄器,开机运行,,若电

机有旋转,说明未标定,用螺丝刀调整伺服电机上的电位器,同时观察电机的旋转状况,直到电机停止转动,表示已经标定。

电机标定后,用步骤2产生的各种控制信号测试电机的旋转方向和速度,观察电机的运行状况,可以实现对电机的不一样样旋转方向和速度的控制。

3、程序设计思路

基本思路是:

依据伺服电机的控制信号的时序要求,调用延时函数控制单片机引脚高低

电平的连续时间,并用循环履行的方式使单片机引脚不停的输出伺服电机控制信号。

产生伺服电机基本控制信号的程序流程图1.12所示:

开始

引脚电平置高

延时(1.3ms-1.5ms-1.7ms)

引脚电平置低

延时20ms

图1.12主函数流程图

即利用延时函数将指定的引脚的低电平连续时间固定为20ms,而高电平连续时间根

据需要在“1.3ms—1.5ms—1.7ms”时间范围内改变,此后循环履行,即可获取可以控制伺服电机不一样样旋转方向和转速的各种控制脉冲信号。

对单片机P0.0、P0.1(左电机)和P0.2、P0.3(右电机)编程,程序设计以左电机为例。

#include<

at89x52.h>

#defineucharunsignedchar

sbitzuo1=P0^1;

//

sbitzuo2=P0^0;

sbityou1=P0^3;

sbityou2=P0^2;

voiddelay(uintx)

左电机端口定义

右电机端口定义

voidqian()

zuo1=0;

zuo2=1;

//左侧往前

you1=0;

you2=1;

//右侧往前

main()

qian();

delay(922*5);

在智能寻迹避障小车控制板上按图1.8连接伺服电机控制电路,编译以上程序,将产生的可履行文件烧写到控制板上的单片机程序储蓄器,详细操作步骤以下:

将STC下载线一端连接到PC机的并行接口上,另一端(小端)连接到智能寻迹避障小车的程序下载口上。

打开STC下载软件将步骤1获取的HEX文件下载到智能寻迹避障小车的单片机内部程序储蓄器,开启电源,运行程序,此时左右电机顺时针旋转,小车行进。

将上述程序中的行进函数中的左右端口控制电平按表1-1所示的更正,编写、编译后即可以获取电机逆转(退后)、停转(原地不动)的控制函数。

编制智能寻迹避障小车基本巡航动作的控制函数

本任务是在伺服电机基本控制信号的基础上设计出智能寻迹避障小车的基本巡航动作

的控制函数,并按必然的算法调用这些控制函数,使智能寻迹避障小车完成比较复杂的运动。

*=========================================================

程序名:

Control.c

功能:

控制轮式教育机器人实现前后左右运动的基本动作

=========================================================*/

REGX52.H>

voiddelay_nμs(uinti);

//函数申明

voiddelay_nms(uintn);

voidForward(void);

voidLeft_Turn(void);

voidRight_Turn(void);

voidBackward(void);

ucharNavigation[10]={'

F'

'

L'

R'

B'

Q'

};

main(void)//主函数

intaddr=0;

while(Navigation[addr]!

='

switch(Navigation[addr])

case'

:

Forward();

break;

Left_Turn();

Right_Turn();

Backward();

addr++;

voiddelay_nμs(uint//i)延时nμs

i=i/10;

while(--i);

voiddelay_nms(uintn)//延时nms

n=n+1;

delay_nμs(900);

voidForward(void)

//行进子函数

for(i=1;

=65;

i++)

P1_1=1;

delay_nμs(1700);

P1_1=0;

P1_0=1;

delay_nμs(1300);

P1_0=0;

delay_nms(20);

voidLeft_Turn(void)//左转弯子函数

=26;

voidRight_Turn(void)//右转弯子函数

voidBackward(void)//退后子函数

2、运行程序

这里仍旧按图1.7连接伺服电机控制电路,编译以上程序,将产生的可履行文件烧写到智能寻迹避障小车控制板上的单片机程序储蓄器,开机运行,可以看到小车能按以下规律运动,即:

行进→左转弯→行进→行进→右转弯→退后→左转弯→退后→退后→停止,认真观察可以发现,它的运动轨迹凑近一个矩形。

主函数按数组设定的次序挨次调用行进,左转弯、右转弯和退后等四个基本控制函数,这四个函数是在任务一介绍过的伺服电机基本控制信号的基础上设计的,下边我们要点以“行进子函数”为例介绍其基本设计思路,为了便于剖析,这里再把程序中的“行进子函数”独自列出以下:

delay_nμs(1300)

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

当前位置:首页 > 幼儿教育 > 幼儿读物

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

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