ImageVerifierCode 换一换
格式:DOCX , 页数:33 ,大小:417.30KB ,
资源ID:12372096      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12372096.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(智能寻迹避障小车电机控制系统设计教材.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

智能寻迹避障小车电机控制系统设计教材.docx

1、智能寻迹避障小车电机控制系统设计教材第一章智能寻迹避障小车电机控制系统设计1任务 任务一:产生智能寻迹避障小车电机的基本控制信号;任务二:编制智能寻迹避障小车基本巡航动作的控制函数;2要求(1)能控制智能寻迹避障小车电机的旋转方向和速度;(2)能控制智能寻迹避障小车实现基本巡航动作;1.1 项目描述本项目的主要内容是:对C51单片机编程,使之产生控制电机旋转方向和转速的各种基本控制信号,然后在此基础上编制出能够控制智能寻迹避障小车实现前进、后退、左转弯、右转弯等基本巡航动作的控制函数。控制电机旋转是智能寻迹避障小车实现各种导航控制的重要基础,在本书后续项目模块中都要用到对电机的控制,因此本章所

2、设计出的电机控制函数将作为功能模块被后续设计案例直接调用;通过该项目的学习与实践,可以让读者获得如下知识和技能: 掌握单片机I/O端口的基本应用方法; 学会单片机C语言的基本编程方法; 掌握直流伺服电机的基本工作原理和控制方法; 掌握直流减速电机的基本工作原理和控制方法; 掌握H电桥驱动直流电机的工作原理与控制方法,即直流电机驱动芯片L293工作原理; 能够编制控制轮式教育机器人实现基本巡航动作的控制函数;1.2 必备知识 1.2.1伺服电机伺服:一词源于希腊语“奴隶”的意思。人们想把“伺服机构”当个得心应手的驯服工具,服从控制信号的要求而动作。在信号来到之前,转子静止不动;信号来到之后,转子

3、立即转动;当信号消失,转子能即时自行停转。由于它的“伺服”性能,因此而得名。标准的伺服电机有三条控制线,分别为:电源、地线及控制线。电源线与地线用于提供内部的电机及控制线路所需的能源,控制信号要求是一个周期性的正向脉冲信号,这个周期性脉冲信号的高电平时间通常在1ms2ms之间,而低电平时间应在5ms到20ms之间。本书向读者介绍的伺服电机是PARALLAX公司生产的连续旋转伺服电机,它的控制信号时序是:低电平时间固定为20ms,高电平为1.3ms1.7ms之间。图1.1为PARALLAX公司生产的直流伺服电机外形图。 图1.1 直流伺服电机外形图1.2.2 直流电机 方案二中采用的是直流减速电

4、机,在此只介绍该电机的控制方法,对于其内部结构不作介绍。该电机外形示意图如图1.2所示,它有红、黑两根控制线,电机状态控制电平如表1-1所示。 表1-1 电机控制电平与状态对应表红线控制端黑线控制端电机状态 0 1 顺转 1 0 逆转 1 1 停转直流电机的控制信号由单片机输出送至电机驱动芯片L293后,经L293内部H电桥电路驱动电机运转。 图1.2 直流电机外形图1.2.3 直流电机H桥驱动电路工作原理 本设计中直流电机H桥驱动电路由驱动芯片L293D完成,在L293D内部形成一个H桥型的驱动驱动电路,类似如图1.3所示。图中用开关模拟电机信号通断,在实际的控制中是采用晶体三极管来完成此功

5、能,可参见图1.4所示的电机控制示意图。此处只是为简述控制原理,所以用开关模拟电机工作过程。 图1.3 H桥驱动直流电机电路 从图中可以看出,其形状类似于字母“H”,而作为负载的直流电机是像“桥”一样架在上面的,所以称之为“ H 桥驱动”。4个开关所在位置就称为“桥臂”。从电路中不难看出,假设开关A、D接通,电机为正向转动,则开关B、C接通时,直流电机将反向转动。从而实现了电机的正反向驱动。借助这4个开关还可以产生电机的另外2个工作状态:(1) 刹车 将B 、D开关(或A、C)接通,则电机惯性转动产生的电势将被短路,形成阻碍运动的反电势,形成“刹车”作用。(2) 惰行 4个开关全部断开,则电机

6、惯性所产生的电势将无法形成电路,从而也就不会产生阻碍运动的反电势,电机将惯性转动较长时间。 图1.4 电机控制示意图电路 1.2.4 延时函数在实际的单片机应用系统开发过程中,由于程序功能的需要,经常编写各种延时程序,延时时间从数微秒到数秒不等。实现延时通常有两种方法:一种是硬件延时,要用到单片机的定时器/计数器,这种方法可以提高CPU的工作效率,同时也能做到精确延时;另一种是软件延时,这种方法主要采用循环体进行,本项目开发过程中采用的是软件延时的方法,在后续各项目模块中经常作为延时功能调用的几个延时函数原形如下:void delay_ns(uint i) /延时微秒级函数 i=i/10; w

7、hile(-i); void delay_nms(uint n) /延时毫秒级函数 n=n+1; while(-n) delay_ns(900); void delayms(uint x) /延时函数 12兆晶振 1000为一秒; 11.0592兆晶振 922为一秒 (会有一定误差) uchar i; while(x-) for(i=0;i123;i+);上述函数设计的基本原理是通过执行循环体来消耗时间从而达到延时的目的,其中delay_nms( )是毫秒级的延时,而delay_ns( )是微秒级的延时。例如:如果你想延时1毫秒,可以使用语句delay_nms(1); 延时100微秒则可使用语

8、句delay_ns(100) ;来完成。注意:上述延时函数是在外部晶振为12MHZ的情况下设计的,如果外部晶振频率不是12MHz,调用这两个函数所产生的真正延时就会发生变化。对于许多C51开发者特别是初学者编制非常精确的延时函数有一定难度,关于延时函数的编程经验和技巧此处不作详细介绍,读者目前只要会将这两个函数作为功能模块调用就行了1.3 案例设计 1.3.1 系统设计方案本项目向读者详细介绍了两种实现方案,其中学员实操采用方案二进行。同时该项目设计为本书后续设计案例的基础控制模块,后续的寻迹、避障等功能模块实在该项目上扩展实现的。方案一:该设计方案采用CPU对执行机构输出控制,不涉及到对外部

9、数据信息的采集,因此,系统采用“CPU+执行机构”的总体设计方案,其中CPU采用目前性价比较高的STC89C52单片机,并以此为核心构建最小控制系统,执行机构的动力装置采用PARALLAX公司生产的连续旋转伺服电机,其优点是编程控制方便且不需额外增加驱动电路,系统总体框图如图1.5所示。图1.5 方案一系统框图方案二:采用“单片机最小系统+电机驱动芯片+直流电机”的设计方案,设计方案中的电机采用直流减速电机,该电机具有控制原理简单、性价比高,易于控制等特点,被广泛应用于各种智能玩具小车设计之中;电机驱动采用集成芯片L293完成,该芯片运用H电桥驱动直流电机的控制原理实现对直流电机旋转方向和速度

10、的控制。系统总体框图如图1.6所示。 图1.6 方案二统框图1.3.2 硬件电路设计方案一:该设计方案的硬件电路如图1.7所示:它是在单片机最小系统的基础上直接?础_0ol_1连接伺服电机构成的,其中左电机的控制信号由P1_0提供,右电机的控制信号由P1_1提供,直接对该两个端口编程,便可实现对伺服电机旋转方向和速度控制。图1.7 方案一系统原理图方案二:该设计方案的硬件电路如图1.8所示:电机控制信号由单片机的P0.0P0.3输出送到电机驱动芯片的2脚与7脚以及10脚与15脚,再从芯片的3脚与6脚(左电机控制)以及11脚与14脚(右电机控制)输出驱动电机工作。图1.8 方案二系统原理图1.3

11、.3 系统软件设计任务一:产生智能寻迹避障小车电机的基本控制信号 方案一:本任务是对单片机编程,在指定的单片机引脚P1_0输出伺服电机的各种控制信号。1、源程序sfr P1 = 0x90; /P1口C51定义;sbit P1_0 = P10; /特殊功能位定义#define uint unsigned intvoid delay_ns(uint i) /延时ns函数 i=i/10; while(-i); void delay_nms(uint n) /延时nms函数 n=n+1; while(-n) delay_ns(900); int main(void) /主函数 while(1) P1_

12、0=1; /P1_0输出高电平 delay_ns(1500); /延时1。5ms P1_0=0; /P1_0输出低电平 delay_nms(20); /延时20ms 2、程序运行及调试在智能寻迹避障小车控制板上按图1.7连接伺服电机控制电路,编译以上程序,将产生的可执行文件烧写到控制板上的单片机程序存储器,具体操作步骤如下:步骤1:启动Keil uVision4 IDE,完成对上面程序的编辑,编译和调试,产生可执行的HEX文件。步骤2:将ISP下载线一端连接到PC机的并行接口上,另一端(小端)连接到智能寻迹避障小车的程序下载口上。打开ISP下载软件将步骤1获得的HEX文件下载到智能寻迹避障小车

13、的单片机内部程序存储器,开启电源,运行程序,用示波器测量P1_0引脚,可测出使伺服电机转速为零的控制信号,其波形如图1.9所示。图1.9 使伺服电机转速为零的控制信号4理信号sf,而时序图将程序中的delay_ns(1500)改成delay_ns(1300),即延时1.3ms,再重复以上步骤,可用示波器测得使伺服电机使电机顺时针全速旋转的控制信号,其波形如图1.10所示。图1.10 使电机顺时针全速旋转的控制脉冲序列将程序中的delay_ns(1500)改成delay_ns(1700),即延时1.7ms,再重复以上步骤,可用示波器测得使伺服电机逆时针全速旋转的控制信号,其波形如图1.11所示。

14、图1.11 使伺服电机逆时针全速旋转的脉冲序列在1.3ms1.5ms1.7ms时间范围内改变延时函数的延时量,可获得控制伺服电机不同旋转方向和转速的各种波形。步骤3:对伺服电机进行零点标定所谓伺服电机零点标定是指当发送一个使伺服电机转速为零的控制信号给伺服电机时,让电机保持静止不动的过程,伺服电机在出厂时没有预先标定,因此需要调整。具体做法是:将步骤2产生的使电机转速为零的控制程序加载到单片机程序存储器,开机运行,若电机有旋转,说明未标定,用螺丝刀调整伺服电机上的电位器,同时观察电机的旋转情况,直到电机停止转动,表明已经标定。电机标定后,用步骤2产生的各种控制信号测试电机的旋转方向和速度,观察

15、电机的运行情况,可以实现对电机的不同旋转方向和速度的控制。3、程序设计思路基本思路是:根据伺服电机的控制信号的时序要求,调用延时函数控制单片机引脚高低电平的持续时间,并用循环执行的方式使单片机引脚不断的输出伺服电机控制信号。产生伺服电机基本控制信号的程序流程图1.12所示:图1.12 主函数流程图即利用延时函数将指定的引脚的低电平持续时间固定为20ms,而高电平持续时间根据需要在“1.3ms1.5ms1.7ms”时间范围内改变,然后循环执行,就可获得能够控制伺服电机不同旋转方向和转速的各种控制脉冲信号。方案二:对单片机P0.0、P0.1(左电机)和P0.2、P0.3(右电机)编程,程序设计以左

16、电机为例。1、源程序#include#define uint unsigned int#define uchar unsigned charsbit zuo1=P01; /左电机端口定义sbit zuo2=P00;sbit you1=P03; /右电机端口定义sbit you2=P02;void delay(uint x) uchar i; while(x-) for(i=0;i123;i+);void qian() zuo1=0; zuo2=1; /左边往前 you1=0; you2=1; /右边往前main() while(1) qian(); delay(922*5); 2、程序运行及调

17、试在智能寻迹避障小车控制板上按图1.8连接伺服电机控制电路,编译以上程序,将产生的可执行文件烧写到控制板上的单片机程序存储器,具体操作步骤如下:步骤1:启动Keil uVision4 IDE,完成对上面程序的编辑,编译和调试,产生可执行的HEX文件。步骤2:将STC下载线一端连接到PC机的并行接口上,另一端(小端)连接到智能寻迹避障小车的程序下载口上。打开STC下载软件将步骤1获得的HEX文件下载到智能寻迹避障小车的单片机内部程序存储器,开启电源,运行程序,此时左右电机顺时针旋转,小车前进。将上述程序中的前进函数中的左右端口控制电平按表1-1所示的修改,编辑、编译后便可以得到电机逆转(后退)、

18、停转(原地不动)的控制函数。任务二:编制智能寻迹避障小车基本巡航动作的控制函数方案一:本任务是在伺服电机基本控制信号的基础上设计出智能寻迹避障小车的基本巡航动作的控制函数,并按一定的算法调用这些控制函数,使智能寻迹避障小车完成比较复杂的运动。1、源程序 *=程序名:Control.c功 能:控制轮式教育机器人实现前后左右运动的基本动作=*/#include #define uint unsigned int#define uchar unsigned charvoid delay_ns(uint i); /函数声明void delay_nms(uint n);void Forward(void

19、);void Left_Turn(void);void Right_Turn(void) ;void Backward(void) ;uchar Navigation10=F,L,F,F,R,B,L,B,B,Q;main(void) /主函数int addr=0;while(Navigationaddr!=Q) switch(Navigationaddr) case F:Forward();break; case L:Left_Turn();break; case R:Right_Turn();break; case B:Backward();break; addr+; void delay_

20、ns(uint i) /延时ns i=i/10; while(-i); void delay_nms(uint n) /延时n ms n=n+1; while(-n) delay_ns(900); void Forward(void) /前进子函数 uchar i; for(i=1;i=65;i+) P1_1=1; delay_ns(1700); P1_1=0; P1_0=1; delay_ns(1300); P1_0=0; delay_nms(20); void Left_Turn(void) /左转弯子函数 uchar i; for(i=1;i=26;i+) P1_1=1;delay_ns

21、(1300); P1_1=0; P1_0=1; delay_ns(1300); P1_0=0; delay_nms(20); void Right_Turn(void) /右转弯子函数 uchar i; for(i=1;i=26;i+) P1_1=1; delay_ns(1700); P1_1=0; P1_0=1; delay_ns(1700); P1_0=0; delay_nms(20); void Backward(void) /后退子函数 uchar i; for(i=1;i=65;i+) P1_1=1; delay_ns(1300); P1_1=0; P1_0=1; delay_ns(

22、1700);P1_0=0; delay_nms(20); 2、运行程序这里仍然按图1.7连接伺服电机控制电路,编译以上程序,将产生的可执行文件烧写到智能寻迹避障小车控制板上的单片机程序存储器,开机运行,可以看到小车能按如下规律运动,即:前进左转弯前进前进右转弯后退左转弯后退后退停止,仔细观察可以发现,它的运动轨迹接近一个矩形。3、程序设计思路主函数按数组设定的次序依次调用前进,左转弯、右转弯和后退等四个基本控制函数,这四个函数是在任务一介绍过的伺服电机基本控制信号的基础上设计的,下面我们重点以“前进子函数”为例介绍其基本设计思路,为了便于分析,这里再把程序中的“前进子函数”单独列出如下:voi

23、d Forward(void) /前进子函数 uchar i; for(i=1;i=65;i+) P1_1=1; delay_ns(1700); P1_1=0; P1_0=1; delay_ns(1300); P1_0=0; delay_nms(20); 仔细分析以上程序,根据P1_0和P1_1引脚的高低电平持续时间,可以画出让轮式教育机器人前进的左右电机控制脉冲时序图,如下: 图1.13 前进控制信号时序图对照任务一中介绍过的伺服电机正转、反转控制信号,我们发现,以上控制小车前进的脉冲信号有两个问题需要进一步解释。第一:因为伺服电机安装在车架上的朝向刚好相反,其中一个电机如果原来是正转,那么

24、掉转朝向之后就变成了反转,所以要使两个电机带动两个轮子朝一致的方向转动,就必须让两个伺服电机的旋转方向为一正一反。第二:因为受到单片机的编程限制,两个电机的控制脉冲并没有在时间上保持绝对的同步(如图1.13所示),这样看起来似乎一个电机要先动作,而另一个电机稍微有点滞后,并且由此引起的低电平持续时间也不再是前面介绍的20ms。不过这点小误差在程序实际运行中的影响可以被忽略。图1.13只给出了控制小车前进的一个控制脉冲,为驱使小车向前行进一段距离,程序中用for循环语句产生65个这样的脉冲序列,在具体应用中,可以根据实际需要改变循环次数,以达到改变小车行进距离的目的。用同样的思路,读者不难分析本

25、案例中的左转弯、右转弯和后退等基本动作控制函数。方案二:本任务是在直流减速电机基本控制信号的基础上设计出智能寻迹避障小车的基本巡航动作的控制函数,主要完成智能寻迹避障小车前进、后退、停止等基本巡航动作。 #include#define uint unsigned int#define uchar unsigned charsbit zuo1=P01;sbit zuo2=P00;sbit you1=P03;sbit you2=P02; void delay(uint x) uchar i; while(x-) for(i=0;i123;i+);void qian() zuo1=0; zuo2=1

26、; /左边往前 you1=0; you2=1; /右边往前void hou() zuo1=1; zuo2=0; /左边往后 you1=1; you2=0; /右边往后void zuo() zuo1=1; zuo2=0; /左边往后 you1=0; you2=1; /右边往前void you() zuo1=0; zuo2=1; /左边往前 you1=1; you2=0; /右边往后void ting() zuo1=1; zuo2=1; you1=1; you2=1;main() while(1) qian(); delay(922*5); hou(); delay(922*4); ting();

27、 delay(922*3); 2、运行程序这里仍然按图1.8连接直流减速电机控制电路,编译以上程序,将产生的可执行文件烧写到智能寻迹避障小车控制板上的单片机程序存储器,开机运行,可以看到小车能按如下规律运动,即:前进5秒后退4秒停止3秒;如此周而复始循环。3、程序设计思路主函数按事先设定的次序依次调用前进,延时、后退,延时、停止,延时函数;让智能寻迹避障小车完成规定动作。即主要测试电机的前进、后退、停止功能是否控制正常,读者可以将左转弯、右转弯函数加入主函数中加以调用,看功能是否实现。1.4 相关知识通过上述设计案例的学习和实践,在对单片机输出接口的应用有了直观认识之后,我们下面再来详细学习有

28、关单片输入/输出口机(I/O口)的基本结构及原理,以及特殊功能寄存器(sfr)的Cx51定义方法。1.4.1 89C51并行IO口的内部结构及原理89C51单片机总共有4个8位的并行IO接口,分别是P0,P1,P2和P3(本案例用到P1口),共32根I/O口线,实际上4个并行I/O口就是特殊功能寄存器SFR之中的4个,每个I/O口主要由4部分构成:端口锁存器、输入缓冲器、输出驱动器和端口引脚,下面分别介绍其内部结构及原理: (a)P0口的位结构 (b)P1口的位结构 (c)P2口的位结构 (d)P3口的位结构图1.14 89C51 各I/O口的位结构1、P0口:图1.14中的(a)是P0口中一

29、位结构图。其中包含一个输出锁存器、两个三态缓冲器、一个输出驱动电路和一个输出控制电路。输出驱动电路由两个场效应管T1和T2组成,其工作状态受输出控制电路的控制。控制电路包括一个与门、一个反相器和模拟转换开关MUX。模拟开关的位置由来自CPU的控制信号决定,当控制信号为低电平时,它把输出级与锁存器的Q端接通。同时,因为与门输出为低电平,输出级中的场效应管T1处于截止状态,因此是输出级是漏级开路的开漏电路。这种情况P0口可用做一般的I/O线。其输出和输入操作如下:当CPU向端口输出数据时,写脉冲加在触发器的时钟端CL上,此时与内部总线相连的D端的数据经反向后出现在Q端上,再经T2管反相,于是在P0口这一位引

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

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