论文1 - 图文

更新时间:2023-03-08 09:25:03 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

题目:基于单片机的智能小车控制

班级 电气自动化

姓名 贾原 性别 男 年龄 21 指导老师 贾志刚 学号 2014014006 完成日期 2016.6.15 摘 要

智能小车可应用于无人驾驶车辆,生产线,仓库,服务机器人及航空航天等领域,它是一种可行走的智能机器人。智能小车可在恶劣环境中进行人们无法完成的探测任务。因此,为了使智能小车在最佳状态工作,进一步研究及完善其速度的控制是非常有必要的。

本文详细介绍了智能小车速度控制系统的硬件设计。系统主控制核心采用了STC89C528位单片机,该系统是在Keil uVision软件平台基础上设计完成的,采用了C语言编程。系统硬件包括电源模块,测速模块、显示模块及电机驱动模块的设计。在电机驱动模块中,为了提高智能小车调速的准确度和敏捷度,本设计采用PWM技术和PI算法。在测速模块中,为了提高小车测速的精确度,本设计选用了光电测速传感器进行测速。

最后,通过对小车进行实车调试运行,验证了本设计的智能小车及其控制算法具有运行性能良好,可靠性高的特点,实现了自动调速功能,为后续的研究工作提供了一定的基础。

关键词:智能小车;STC89C52;测速;PWM调速;PI算法

Abstract

Intelligent vehicle is an intelligent walking robot.It can be applied to unmanned vehicles,unmanned production lines,warehouses,service robots,aerospace and other fields.Intelligent vehicle can complete the exploration missions in the environment which people could not enter or survive in.Therefore,in order to let the intelligent vehicle in the best condition the further research and improve its velocity control is very necessary.

The hardware velocity control system design is introduced in detail.STC89C52 which program with C and compilation language works on the core processor of the control circuit.The system is designed based on the Keil uVsion software platform.The hardware design of control system include power module,velocity measurement module,display moduleand driving module.In driving module, PI algorithm and a way of PWM used to improve the accuracy and agility of the

vehicle’s velocity control. In velocity measurement module,photoelectric speed sensor is chosen to increase the accuracy of the velocity measurement.

Finally, from the work which has been done in this project,the conclusion can be draw that the intelligent vehicle and its control algorithm not only has the virtues of high-performance,high-reliability, but also has the auto tracing.This paper presented an experimental base for the further research.

目 录

1 绪论 ..................................... 错误!未定义书签。 1.1 本设计研究的背景和意义 ............................... 7 1.2 本设计的研究内容 ..................................... 7 2 智能小车速度控制系统的硬件设计 ............................ 9 2.1 智能小车的速度控制系统的选择 ......................... 9 2.2 速度控制算法 ........................................ 9 2.3 直流调速系统 ....................................... 10 2.4 单片机控制方案论证 .................................. 11 2.5 单片机最小系统设计 .................................. 13 2.6电源模块设计 ........................................ 14 2.6.1 智能车电源设计要点 ............................. 14 2.6.1 三端中电流正固定电压稳压芯片78M05简介 ......... 15 2.7 测速模块设计 ....................................... 16 2.7.1 测速模块方案论证 ............................... 16 2.7.2 MC-2单路测速模块简介 .......................... 17 2.8显示模块设计 ........................................ 19 2.8.1 LED数码显示器的结构与编码方式 ................. 19 2.8.2 LED数码显示器的显示电路 ....................... 21 2.9 电机驱动模块设计 .................................... 21 2.9.1 电机工作原理 ................................... 22

2.9.2 L298n介绍 ..................................... 23 2.9.3 电机转速的控制 ................................. 24 2.10 本章小结 .......................................... 25 3 智能小车速度控制系统的软件设计 ........................... 26 3.1速度控制系统的软件设计概论 .......................... 26 3.2 速度控制系统软件模块分析 ............................ 26 3.3 电机驱动程序设计 .................................... 27 3.4 测速及显示程序设计 .................................. 27 3.5 PI调速程序设计 ..................................... 28 3.6 本章小结 ........................................... 30 4 实验分析 ................................................ 31 5 结 论 ................................................... 32 致 谢 ..................................................... 33 参考文献 .................................................. 34

附 录

33

概述

1.1 本设计研究的背景和意义

20世纪50年代初美国Barrett Electronics公司开发出了世界上第一台自动引导车辆系统(Automated Guided Vehicle System,AGVS),从此开始了智能车辆的研究。1974年,瑞典的Volvo Kalmar轿车装配工厂与Schiinder-Digitron公司合作,研发出了一种可装载轿车车体的AGVS,并用多台该种AGVS获得了显著的经济效益,于是许多西欧国家纷纷效仿Volvo公司,并逐渐使AGVS在装配作业中成为一种流行的运输方式[1]。

智能小车是一个集环境感知、规划决策、自动行驶等功能于一体的机电综合系统,它集中运用了传感、信息、通信、计算机、导航、人工智能及自动控制等技术,是典型的高新技术综合体。智能小车的研究对于汽车自动驾驶、救灾、外太空探测等都有重大意义。

本设计通过构建智能小车系统,培养设计实现智能小车速度控制系统的能力,主要体现智能小车能够实时测量、显示行驶速度,并进行调速。技术上采用对射式光电传感器设计速度检测模块,同时,采用PWM技术和PI算法控制电机转速。在此过程中加深对单片机知识和控制理论的理解和认识。

如今,汽车方面的研究越来越受到人们的关注。全国电子大赛及省内电子大赛几乎每次都有智能小车方面的题目,全国各高校也都非常重视该题目的研究,可见其研究意义之大。 1.2 本设计的研究内容

本设计是设计基于STC89C52单片机由直流电机驱动的智能小车,包括直流电机驱动硬件电路,最小单片机应用系统等,分析速度控制原理,编写控制程序。本设计选择通用、价廉的STC89C52单片机为控制平台,选择常见的电机模型车为机械平台,通过细化设计要求,结合传感器技术和电机控制技术相关知识实现小车行驶速度的测量、显示及调速,达到智能控制,完成设计目标。

本设计以2个直流电机为主驱动,通过测速传感器来采集速度信息,送入主控单元STC89C52单片机处理数据后完成相应动作,以达到自身控制。电机驱动采用L298n,可以驱动2个直流电机或一个步进电机,测速由对射式光电测速传感器完成。

根据设计的作品要达到的效果,本系统以STC89C52为核心控制器,主要由电源模块、电机驱动模块、测速模块、LED显示模块构成。系统的结构框图如图1.1所示。

图1.1 系统结构框图

2 智能小车速度控制系统的硬件设计

2.1 智能小车的速度控制系统的选择

本设计选用7.2V电池组作为智能电动小车的电源,以STC89C52单片机为控制核心,实现小车的测速、显示及调速,达到智能控制。为提高系统的静态性能,智能小车采用PWM 脉宽调制技术,速度控制算法采用PI算法。

速度控制系统是智能汽车的速度控制的核心环节。在确保智能小车稳定运行的前提下,电路应尽量简洁,通过减少系统负载提高车体的灵活性。同时要以车体简洁功能良好为目的、以运行可靠为前提,实现智能小车的平稳运行。

速度控制系统作为一个自动控制系统,能够自动检测智能小车的行驶速度,并发出相应的指令,控制智能车的行驶速度,整个系统包括传感器检测、信息处理、控制算法和执行机构四个部分组成。硬件设计部分传感器、单片机、LED显示器、执行机构以及驱动电路,软件设计部分为信息分析处理与控制算法。 2.2 速度控制算法

由于小车在行驶过程中会产生较大的惯性和时延,从控制信号输出到电机响应有一段时间的延迟,同时小车运行本身的惯性也使得它难以按照预先设定好的理想状况运行,这种影响在小车弯道行驶时显得尤为明显。

在弯道行驶时,若速度过,小车快会冲出赛道,导致无法再次循迹,影响运行效果;速度过慢则小车停在弯道处;而在直线上时,又需要较快的速度来快速完成行驶过程,并将速度稳定在安全的行驶速度范围之内,避免速度过快而影响小车的性能。因此,智能小车的速度控制在行驶过程中非常重要,为了使智能小车能实现直线快速行驶、弯道减速慢行,需要对智能小车的电机进行处理[2]。

在速度控制中,如何获取小车当前车速,以及如何对小车的速度进行控制是两个关键问题,小车的速度可由测速传感器获得。

本系统是个闭环控制系统,为了获得稳定、快速、准确的速度控制系统,本设计采用PI速度控制算法。

PID调节的作用:

1.比例控制:反应系统的基本(当前)偏差,系数大,可以加快调节,减小误差,但过大的比例使系统稳定性下降,甚至造成系统不稳定。

2.积分控制:反应系统的累计偏差 ,消除系统稳态误差,提高无差度,只

要有误差,积分调节就进行,直至无误差。

3.微分控制:反映系统偏差信号的变化率,具有预见性,能预见偏差变化趋势,产生超前控制作用,在偏差还没有形成之前,就已被微分调节作用消除,因此可改善系统的动态性能,其不足之处是放大了噪声信号[3]。

由于在本设计中,仅使用PI调节便足以达到理想的精度和超调量,所以无须再加上微分项。

PI参数的整定:

本设计采用较常用的工程整定法中的临界比例法对PI参数进行调整。用此法进行PI参数整定的步骤如下:(1)先预选一个足够短的采样周期让系统工作;(2)仅加入比例控制环节,直至系统对输入的阶跃响应做出临界振荡,并记下此刻的临界振荡周期和比例放大系数;(3)在一定的控制度下通过公式计算得到PI参数。一个小电机闭环控制,一般P在(1,10)之间,I在(0,5)之间,D在(0.1,1)之间,具体参数要在现场调试时进行修正。 2.3 直流调速系统

目前常见的调速方案有三种: 1. 串电阻调速系统;

2. 静止可控整流器,即V-M系统; 3. 脉宽调速系统 。

旋转变流系统通过交流发电机拖动直流电机来实现,发电机将电供给直流电机,通过调节励磁电流改变输出电压,从而达到调速的目的。电机输出电压的极性与电机的转向都可以通过改变励磁电流的方向来改变,所以G-M系统很容易实现可逆运行。但该系统需要旋转变流机组、旋转电机、励磁发电机等,所需设备多、体积大、效率低等诸多缺点,且技术落后,因此不采用该方案。

V-M系统是目前最主要的直流调速系统,有单相、三相等,有半波、全波、全控等类型。优点是调速平滑,不足之处是晶闸管只能单向导电,无法实现电流反向,可逆运行困难,另一个缺点是运行条件高,维护麻烦。在低速运行状态下,功率因数很低,易危及附近的用电设备。

采用晶闸管的直流斩波器基本原理与整流电路的区别在于晶闸管不受相位控制,而是在于它工作在开关状态。当晶闸管被触发导通时,电源电压加在电机

上,晶闸管在截止状态下,直流电源与电机断开,电机经二极管续流,两端电压接近于零。脉冲宽度调制(Pulse Width Modulation),简称PWM。通过改变晶闸管的导通时间长短,来改变脉冲宽度达到直流电机调速的目的[4]。

与V-M系统相比,PWM调速优点诸多:

1.电力电子元件只有开关状态,电路损耗小,效率高;

2.开关频率较高,当与快速响应的电机一同配合工作时,可以获得很宽的频带,响应速度快,且抗干扰能力强;

3.PWM开关变化频率快,通过滤波作用就能获得很小的直流电流,系统低速运行时较平稳,调速范围较宽,在等电流下,损耗及发热较小。

根据以上比较,本设计采用了PWM进行调速。脉宽调速控制也可通过单片机控制继电器的开闭来实现,但是驱动能力不高。本设计采用了可逆PWM变换器,可以顺利实现电机的正转与反转。可逆PWM变换器主电路的结构式有H型、T型等类型。在本设计中采用了常用的双极式H型变换器,它是由4个三极电力晶体管和4个续流二极管组成的桥式电路。 2.4 单片机控制方案论证

单片机系统的硬件设计一般分两部分,一是系统扩展,二是系统配置。系统扩展,就是单片机内部的功能如I/O口﹑RAM、ROM﹑中断系统等不能够满足设计要求时,在单片机片外选择合适的芯片,设计相应的电路来满足设计要求。系统配置指的是按照功能设计配置外围设备,如键盘、鼠标及LED显示等,设计出合适的接口电路。在常用的单片机中,一般有以下三种方案:

方案一:AVR单片机Atmega128L。Atmega128L单片机具有低功耗、高性能的优点,并拥有8位微处理器,64个引脚。总共包含了133条指令,大部分都可以在一个周期内完成。片内自带有模拟比较器,可以上电复位以及可编程的掉电检测功能。片内资源丰富,具有8个外部中断,53个I/O端口,4个定时计数器,能够很好地解决端口资源不足的困难。大多数引脚具备第二功能,功能强大。

方案二:现场可编辑门列阵(FPGA)方案。现场可编辑门列阵可实现各种复杂的逻辑运算。具有体积小、集成度高、稳定性好等优点,并且可利用软件进行仿真调试。该芯片是并行工作方式,系统处理速度高,被广泛应用于大规模的

系统。

方案三:STC89C52单片机方案。STC89C52是低功耗、高性能的8位微控制器,内含8K可编程控制器,与80C51指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,也适用于常规编程器。AT89S52有5个中断源,和3个定时计数器。

方案比较:综合比较以上方案,FPGA价格较贵,且用不到高速处理功能,造成资源浪费,而Atmega128L编程麻烦,所以本设计选择STC89C52单片机方案[5]。

STC89C52是ST公司生产的一种低功耗、高性能CMOS 8位微控制器,具有 8K 在系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。

在单片机芯片上,拥有灵巧的8位CPU 和在系统可编程Flash,为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。有以下标准功能: 32 位的I/O 口线,512 Byte的RAM,8K Byte的Flash,具有看门狗定时器,内置了4KB的E2PROM,3个16位的定时/计数器,4个外部中断,一个7向量4级中断结构,MAX810复位电路,带全双工串行口。另外STC89C52可降到0Hz静态逻辑来操作,可选择节电模式,支持汇编语言及C语言进行编程。空闲模式下,CPU停止运行,允许定时/计数器、中断、RAM及串口继续工作。在掉电保护方式下,RAM内的内容可被保存,振荡器会被冻结,单片机工作停止,直到下一个中断或硬件复位为止。最高运作频率为35MHz,6T/12T可选[6]。STC89C52RC基本结构图如2.1所示。

图2.1 STC89C52RC基本结构图

STC89C52的引脚排布如图2.2所示。

图2.2 STC89C52引脚图

2.5 单片机最小系统设计

作为智能小车的控制核心,单片机最小系统的合理设计是小车平稳运行的前提。最小系统设计,就是要保证单片机的硬件设计最精简,即在单片机外部尽可能少的增加元件电路,组成一个可让单片机独立工作的系统。

在设计时应注意以下几点:

1. 考虑调试过程中的扩展需要,正常情况下需要将所有的I/O口引出,同时为了避免其他大电流器件对单片机的运行造成影响,还要设计单独的供电系统。

2. 合力集成相应的外围模块,如LED灯,蜂鸣器,因为传感器需要很好的灵敏度,不能够实时看出是否工作正常,所以LED灯能够较好地保证这一点。

3. 最好将程序下载端口集成在最小系统上,虽然可将芯片在开发板上下载软件使用,但在系统的调整和测试过程中,需要不断地修改程序,把芯片换到另一块板子上,不仅麻烦,且易折断引脚。

单片机最小系统的电路图如图2.3所示:

图2.3 单片机最小系统

单片机最小系统由以下几个部分组成: 1.晶振电路

单片机在工作时必须有一个外部的时钟源,这个时钟源由外部晶振产生,具体电路为图中的Y1、C2、C3,在最小化系统设计时晶振和电容要靠近18 脚和19 脚放置,放置过远会引起晶振不能起振,或工作不稳定。典型值为C2、C330pF,Y112M。

2.复位电路

复位电路包括上电复位和手动复位两种方式,单片机多为高电平复位,即RST(9)脚上给持续两个机器周期以上的高电平,单片机就能复位,因此可以利用电容充电的一段时间将复位引脚拉至高电平,使得单片机完成复位动作。电容在充电完成后将复位引脚拉至低电平,从而保证了单片机的正常工作。

3.RS232下载端口

考虑到智能车在实际运行时要多次修改程序参数,故要设计下载端口,能够方便的更新程序,51单片机中常用的下载端口为RS232下载端口。 2.6电源模块设计

2.6.1 智能车电源设计要点

智能小车要稳定工作,必须要有一个电压正常且稳定的电源设计。 本设计的全部硬件电路的电源由7.2V、1.3A/h的可充电镍氢蓄电池提供。由于电路中的不同电路模块所需要的工作电压和电流容量各不相同,因此电源模

块应该包含多个稳定电路,将充电电池电压转换成各个模块所需要的电压,电路中选用了78M05芯片,将电机与其他的电路进行分开供电。电源结构框图如图2.4所示:

图2.4电源系统结构框图

2.6.1 三端中电流正固定电压稳压芯片78M05简介

78M05三端中电流正固定电压稳压器输出电压为5V,最大输出电流为500mA,输入偏置电流为3.2 mA(典型值),最大输入电压为35V,具有过流过热关断保护功能,工作温度为-40℃~125℃,一般用在雷达和声纳方面,例如:车载DVD,属于稳压IC,直流5V低电流供电。能够很好地满足系统需求,并且价格适中,容易购买。

78M05封装和实物图如图2.5所示:

图2.5 78M05封装和实物图

78M05电路设计图如图2.6所示:

图2.6 78M05电路图

在此电路中,采用两路供电,一路单独为单片机、指示灯、光电测速传感器等供电,另一路为电机驱动L298n、光电管等供电,L298n的驱动电压不经任何处理直接由电池供电,根据本设计的需要,电池电压能很好地满足行进速度要求。

2.7 测速模块设计

为了使智能小车能够沿着赛道平稳运行,需要控制电机转速,使小车在急转时不至于速度过快而冲出黑线。通过控制驱动电机上的平均电压可以控制电机转速,但如果是开环控制,会受诸多因素影响,如电源电压、齿轮传动摩擦力、道路摩擦力和前轮转向角度等。这些因素会造成小车行驶不稳定,通过速度检测,对车速进行闭环反馈控制,即可消除上述各因素的影响,使得小车运行更稳定[7]。

2.7.1 测速模块方案论证

在理想状况下(车轮不打滑),车速与驱动电机转速成正比。车速的检测通常通过电机转速的检测来实现。电机转速的检测方法有以下几种常用方法:

1.测速发电机

采用同轴直接连接或齿轮传动等方式,测速发电机与电机相连,它的输出电压与电机转速成正比。

2.转角编码盘

分增量位置输出和绝对位置输出两种。通常可用增量式编码盘,它输出的脉冲个数与电机转角成正比,从而使它的输出脉冲频率与电机转速成正比。它可通

过测量单位周期内脉冲的个数或脉冲周期获得脉冲频率。

3.反射式光电检测

在小车后轮齿轮的传动盘上装上黑白相间的光电码盘,通过固定在附近的反射式红外传感器读取光电码盘转动的脉冲数。

4.对射式光电检测

对射式光电检测可以大大提高测量精度,原理与反射式光电检测一样,它的优势在于机械结构比较稳定。

5.霍尔传感器检测

在电机长尾轴轴上粘贴1个或2个小型永磁体,在附近固定1个霍尔传感器,霍尔元件有3个引脚,其中2个是电源和接地,第3个是输出信号,只要通过1个上拉电阻接上5V电压,就可以形成开关脉冲信号,电机每转1周,就可形成1或2个脉冲信号[8]。

方法比较:采用转角编码盘测速最精准,使用也方便,但成本高;采用霍尔传感器测速比较可靠,抗干扰能力强,但是安装起来比较麻烦;采用反射式光电传感器或对射式光电传感器比较简单,只需在电机的长尾轴上套上一个码盘,用MC-2单路测速模块检测。既可满足小车的精度要求,且成本低,最后从机械结构的稳定性上考虑最后决定用第四种方法—对射式光电传感器检测车速。 2.7.2 MC-2单路测速模块简介

MC-2单路测速模块是用一个小型的对射式红外发射接收对管和一个码盘来实现的。码盘会随电机转动而转动,测速装置会随之产生一系列脉冲信号并将些高低电平经反相器离散后送至单片机的ECT接口,通过单片机来捕捉这些电平的上升和下降沿,计算一定时间内的脉冲个数即可得到电机转速[9]。在电机长尾轴处上固定一个对射式红外传感器,在电机尾部长轴上套上了双叶码盘,使其处于对射式传感器沟槽之间,电机转动时,码盘随电机轴转动,通过固定在附近的对射式红外发射接收对管读取码盘转动的脉冲。安装形式如图2.7所示。

图2.7 MC-2单路测速模块安装形式

MC-2单路测速模块外形图:

图2.8 单路测速模块外形图

MC-2单路测速模块原理图:

图2.9 MC-2单路测速模块原理图

被测转速经过传感器变换后变为电压的变化值。为了进行信号的分析、处理、显示和记录,须对信号作放大、运算、分析等处理,这就引入了中间变化电路。根据系统需要设计了如图4所示的中间变换电路。其中,R1、R4起限流作用,R2起分流作用,R3为输出电阻。当叶片未挡住通光孔时,输出低电平;当通光孔被遮住时,输出高电平。中间变化电路如图2.10所示。

图2.10 中间变化电路

MC-2单路测速模块是专为测速而开发的。配合长尾轴电机,其测速的采样率是非常高的。电机转速在10000转左右,测速模块可以每秒测量到约166个脉冲,模块所配套的遮光片是一个长条形的,所以每转可测得2个脉冲,该模块可以在每秒测到166*2=332个脉冲,大大提高了系统的测试速率,从而为PI速度控制系统提供一个高速率的检测系统。

2.8显示模块设计

2.8.1 LED数码显示器的结构与编码方式

显示单元是智能终端装置和计算机控制的重要组成部分,用来显示中间和最终的计算结果,本设计选用常见7段共阳极LED显示器,用于显示智能小车电机的转速。LED显示器简单易用,其内部为一发光二极管,在发光二极管正极加上正向电压,负极通过限流电阻接地,则发光二级管发光。本设计选用的7段LED数码管显示器内部结构图如图2.11所示,当阴极段加载低电平时,对应段的发光二极管就导通点亮,而加载高电平时则不导通点亮。

图2.11 7段数码显示器外形及结构图

采用7段LED显示器可以显示数字0~9和字母A~F,其显示字符与对应段的点亮是有规律的。7段LED显示器包含7段发光二极管和小数位发光二极管,共8位,正好用一个字节来表示,通常将控制二极管点亮的8位二进制数称为段数码。本设计选用的7段码表的部分显示代码如表2.1所示。

表2.1 7段LED数码管字型显示代码表

显示数字 0 1 2 3 4 5 6 7 8 9 E a 0 1 0 0 1 0 0 0 0 0 0 f 0 1 1 1 0 0 0 1 0 0 0 b 0 0 0 0 0 1 1 0 0 0 1 g 1 1 0 0 0 0 0 1 0 0 0 c 0 0 1 0 0 0 0 0 0 0 1 dp 1 1 1 1 1 1 1 1 1 1 1 d 0 1 0 0 1 0 0 1 0 0 0 e 0 1 0 1 1 1 0 1 0 1 0 共阳极 十六进制显示代码 14H d7H 4cH 45H 87H 25H 24H 57H 04H 05H 2cH 本设计选用的7段LED显示器是通过软件实现译码过程的。设计中由系统程序完成BCD 7段码的转换,直接送出即为显示码,不需要外接7段译码器。

以下是软件完成译码的步骤。

1.从待显示数字中分离出显示的每一位数字:方法是将显示数据除以10进制的权,比如要显示123,则先将123除以100,得到商是1,然后除以10得到商是2,最后是个位上的数3,这样就完成了对显示数的分离。

2.将分离出的显示数字转换为显示字段码:一般采用查表的方法进行,将表2.1按顺序存放在ROM表中,通过编写查表指令即可完成查表工作。 2.8.2 LED数码显示器的显示电路

本设计的LED显示器采用动态刷新,LED显示器的动态显示原理是将各显示位段选线的同名端并联到一起,并由1个8位的I/O口控制,对多段选线多位复用,而各显示位的共阳极端则分别由相应的I/O口线控制,实现各位的分时通选。由于人眼的视觉暂留效应,当每位的显示间隔够短时,会造成多位同时点亮的假象。所以需要单片机不断进行显示刷新,牺牲CPU的时间换取元件的减少及显示功耗的降低[10]。本设计选用的LED显示器的电路结构图如图2.12所示:

图2.12 LED动态显示电路结构图

2.9 电机驱动模块设计

电机驱动模块的设计主要是为了弥补单片机自身驱动能力不足的缺陷,此电路中电机驱动模块主要是达到驱动后面两个直流减速电机的目的,实现电机的速度及正反转的控制。作为系统的动作执行结构,电机的驱动和控制,直接影响着

系统运行的稳定性。 2.9.1 电机工作原理

单片机的驱动能力不足,无法驱动像电机这样的大功率外部器件,因此必须外加驱动电路。电机常用的驱动芯片很多,本设计选用驱动效率高,硬件设计简单的L298n作为直流电机的驱动芯片,L298n采用了H桥电路,H 桥驱动电路是较为常见的一种电路, L298n驱动直流电机的控制电路如图2.13所示。它的形状酷似字母H,因而得名“H桥驱动电路”。

如图2.13所示,H 桥电机驱动电路包括1个电机和4个三极管。必须导通对角线上的一对三极管才可使电机运转。根据三极管对的不同导通状况,电流可能会至左向右或至右向左流过电机,控制电机转向。H桥电路可以很方便地实现电机正反转,因此被广泛应用。其中4个与门与一个“使能”导通信号相连接,从而用一个信号就能控制整个电路的开关。2个非门通过提供一种方向输人,可以保证确保任何时候在H桥的同侧腿上都只有一个三极管导通。

图2.13 H桥驱动电路原理图

如图2.14所示,只要对角线上的一对三极管导通,电机便会运转。当三极管Q1和Q4导通时,电流会从电源正极经Q1至左向右流过电机,再经Q4流回电源负极。如图中电流箭头所示,该流向的电流会驱动电机顺转。图2.15所示为另一对三极管Q2和Q3导通时的情况,电流至右向左流经电机,驱动电机反转[11]。

图2.14 H桥驱动电机正转图 图2.15 H桥驱动电机反转

2.9.2 L298n介绍

L298n是ST公司生产的一种大电流、高电压的电机驱动芯片。该芯片采用15脚封装。其主要特点:输出电流大;工作电压高;内含两个H桥高电压大电流全桥式驱动器,可驱动直流电动机或步进电动机;采用TTL标准逻辑电平信号控制;有两个使能端,在不受输入信号影响的情况下允许或禁止电机工作;有一个逻辑电源输入端,使内部逻辑电路部分在低电压下工作;可外接检测电阻,将变化量反馈给控制电路[12]。L298n的参考电路图如图2.16所示。

图2.16 L298n电路图

对于以上电路图有以下几点说明:

1.电路图中有两个电源,一路为L298n工作需要的5V 电源VCC,一路为驱动电机用的电池电源VSS。

2.1脚和15脚有的电路在中间串接大功率电阻,可以不加。

3. 图中连接了两路电机,P2和P5是一一对应关系,如果只驱动一路电机可以连接对应的12或者34脚。

4.八个续流二极管是为了消除电机转动时的尖峰电压保护电机而设计,简化电路时可以不加。

5.脚1和11脚为两路电机通道的使能开关,高电平使能,所以可以直接接高电平,也可以交由单片机控制。

6.由于工作时L298n的功耗较大,可以适当加装散热片。 L298n封装图如图2.17所示:

图2.17 L298n引脚图

2.9.3 电机转速的控制

PWM(晶体管脉宽调制)控制,一般是配合H桥驱动电路来实现直流电机的调速功能,这种调速方法简单、调速范围广,它是利用了直流斩波原理。

直流电机的转速与附加在电机上的端电压成正比,电压低,转速慢;电压高,转速快。而电机两端的端电压又与单片机输出的控制波形的占空比成正比,所以,直流电机的转速与占空比成正比例。占空比越小,电机转速越慢,当占空比达到最大值1时,电机转速达到最大。

PWM控制波形是通过模拟电路或者是数字电路产生实现的,但是这种电路的占空比不能自动调节,小车自身无法调节车速。目前普遍使用的大部分单片机都能够直接输出PWM波形,所以本设计就采用单片机给L298n驱动芯片输出

PWM信号。

在小车实际行驶过程中,考虑到直行、转弯等情况的发生,占空比不需要设置太高,但为了尽量减少规定路程所用的行驶时间,在直行时要快速行驶,转弯时减速行驶,这些情况分别需要不同的占空比,这些需要根据具体情况慢慢调节。为了快速调节电机转速,并且使电机转速稳定在设定的速度值附近,本设计采用了PI算法,具体分析将在程序设计章节中阐述。 2.10 本章小结

在本章中,探讨了智能小车速度控制系统的硬件模块设计及直流调速系统的选择,选定STC89C52单片机作为控制核心,确定了各模块的功能,以脉宽调速系统作为直流电机的调速方案,并以PI算法作为智能小车的速度控制算法。设计了单片机控制系统、电机驱动模块、显示模块、光电测速模块、电源模块等。

4 实验分析

说明:

1.实验用的是5V的直流电机,驱动电路用的是L298n,测速传感器用的是U型光电测速传感器。

2.实验测得,当PWM=5V(占空比=100%)时,测得电机转速(最大值)为264R/S(转每秒)。

实验数据表如图4.1所示(测量条件:7.5V电源,LED速度显示,L298的VSS=5V,PWM周期为20ms):

表4.1 实验数据表

设定值(R/S) 44 55 74 80 102 114 117 137 实测值(R/S) PWM占空比(%) 42~46 54~56 72~76 76~84 100~104 112~116 126~128 136~138 10.5 12.0 13.5 15.0 16.5 18.0 19.5 21.0 通过对小车的调试运行,验证了本设计的智能小车及其控制算法运行性能良好,可靠性高,实现了自动调速功能。

5 结 论

基于单片机的智能小车速度控制系统,可以用单片机软件编程产生PWM信号来调节直流电机的转速,相对用硬件来实现更加简单、灵活。采用光电测速传感器实现了电机转速的实时测量并在LED上显示出来。

该系统对硬件电路进行了简单设计,利用PI控制容易实现的特点开发了PI速度控制算法,并通过实验分析表明了本算法达到了智能小车调速的稳、快、准的要求,具有较好的可靠性。

本设计对智能小车调速进行了初步设计,控制算法参数的给定规律还有待进一步完善。作为机电学科的前沿课题,智能小车的广泛实用性是毋庸置疑的,想要实现智能小车的高度智能化还有很长的一段路要走,需要我们坚持不懈地探索研究。

致 谢

经过几个月的忙碌,本次毕业设计已接近尾声,通过本次学校组织的毕业设计,端正了我的学习态度,锻炼了我的独立动手能力。在此,我要感谢每一位帮助过我的人。

首先,我要感谢我的指导老师XXX老师,文老师平日里工作繁忙,但是在我做毕设的每个阶段,都给了我悉心的帮助和指导。此外,文老师治学严谨和科学研究的精神也是我学习的榜样,这使我受益匪浅。

再次,我要感谢我的同学在我的毕业设计期间,他们给了我诸多关注和帮助。理论与实践的结合是一个很好的掌握扎实知识的一种方式,本次毕设就有改变高分低能的理念。对于马上就要毕业的我们,社会更加迫切需要的是能力而不是高分。从学校我们就看出了这种现状,所以给我们安排了这毕业生的最后课:理论与实践相结合。所以,在这里我对此表示万分感谢。这次良机真的是机不可失,失不在来。

最后,再次感谢攻读学士学位期间XXXX大学的每一位老师和同学对我的无私帮助。

参考文献

[1] A·布洛基,M·布图兹,A·法斯莉等.智能车辆:智能

交通系统的关键技术[M].北京:人民交通出版社,2003:33~53

[2] 王少峰.竞赛用智能汽车的研究与实现[D].兰州:兰州理工大学,2008:42~46

[3] 曾孟雄,李力,肖露等.智能检测控制技术及应用[M].

北京:电子工业出版社,2010:135~137

[4] 谢桂林,黄章,刘允紘.电力拖动与控制[M].徐州:中国矿业大学出版社,1997.1:36~49

[5] 程运.红外传感器寻迹小车[D].西安:西安科技大学,2012:8~9

[6] 周菁菁.刺激信号为图案的人体反应时测试仪的设计[D].南昌:南昌大学,2009:23~28

[7] 梁昆,王韬,丁丁.上海交通大学SmartStar队技术报

告(节选)[J].电子产品世界,2010,17(1):55~56 [8] 于虹.基于16位单片机MC9S12DG128智能模型车系统开

发研究[D].内蒙古:内蒙古科技大学,2009:29~30 [9] 唐建文.智能小车控制系统的设计与实现[D].广东:广东工业大学,2008:20~21

[10] 倪云峰.单片机原理与应用[M].西安:西安电子科技大学出版社,2009.6:134~137

[11] 董建军.机车车顶人孔盖高压告警联动接地装置的研

制[D].武汉:武汉理工大学,2006:14~16

[12] 张伟刚.室内自主机器人路径规划技术研究[D].西安:西安电子科技大学,2010:34~35

[13] 徐忠燕,简毅,任海洋.基于P87LPC768的小功率直流

电动机调速系统[J].机械与电子,2009(7):46~47

附 录

源程序:

#include #define uchar unsigned char #define uint unsigned int sbit zhen=P1^0; sbit fan=P1^1; sbit en=P1^2; long bb;

#define KP 1.6 //比例系数 #define KI 0.5 //积分系数 #define KD 0 //微分系数

#define max 200 //返回的最大值,是PWM的周期值 #define min 0 //返回的最小值,为0 #define deadline 0x08//速度PID设置死区范围 #define setspeed 80 //速度设定值

typedef struct PID //定义数法核心数据 {

int vi_Ref;//速度PID,速度设定值 int vi_FeedBack; //速度PID,速度反馈值

long PreError;//速度PID,前一次,速度误差setspeed-speed long PreDerror;//速度PID,前一次,速度误差之差 uint v_Kp; //速度PID,Ka = Kp

uint v_Ki; //速度PID,Kb = Kp * ( T / Ti ) uint v_Kd; //速度PID,kc = Kp * ( Td / T ) long PreU;//电机控制输出值 }PID;

static PID sPID; //PID控制结构

static PID*sptr=&sPID;

uchar code loops[] = {0x7f,0xbf,0xdf,0xef};//定义显示位控制驱动码

uchar code table[]={0x14,0xd7,0x4c,0x45,0x87,0x25,0x24,0x57,0x04,0x05}; // 共阳极0,1,2,3,4,5,6,7,8,9

void PIDInit(void) {

sptr->vi_Ref=setspeed;//速度设定值 sptr->vi_FeedBack=bb; //速度反馈值

sptr->PreError = 0 ; //前一次,速度误差,setspeed-speed sptr->PreDerror = 0 ; //前一次,速度误差之差,d_error-PreDerror; sptr->v_Kp = KP; sptr->v_Ki = KI; sptr->v_Kd = KD;

sptr->PreU = 0; //电机控制输出值 }PID;

uint speed_pid(int v); void DisplayFresh(); void delay(uint z); void init(); uchar i,a,b,c,d; main() { init(); while(1) { en=1;

delay(sptr->PreU ); en=0;

delay(200-sptr->PreU ); DisplayFresh(); } }

void delay(uint z) { uint x,y;

for(x=z;x>0;x--) for(y=11;y>0;y--); }

void init()//初始化 {

TMOD=0x51;

TH0=(65536-20000)/256; TL0=(65536-20000)%6; IT1=1;//外部中断1触发类型选择 IT0=1;//外部中断0触发类型选择

TR1=0;//T1的运行控制位,清0时停止T1 TR0=1;//T0的运行控制位,置1时启动T0 EA=1; //开总中断

ET0=1;//定时计数器0中断允许 zhen=1; fan=0;

sptr->PreU=30;//设置初始占空比 }

void timer0() interrupt 1 {

TH0=(65536-20000)/256;//赋初值20ms TL0=(65536-20000)%6; i++;

//延时子程序,延时0.1ms

if(i%==0) // 判断是否时间到了0.5S {

//T1不允许中断

TR1=0;

bb=TH1*256+TL1; //计算脉冲数 TR1=1; bb/=2; 个脉冲

speed_pid(bb); //速度PI计算 }

if(a%==0) {

void ClacSpeed(); } } //PID

uint speed_pid(int v) {

signed long error,d_error,dd_error; // sptr->vi_FeedBack=v;

error = (signed long)(sptr->vi_Ref - sptr->vi_FeedBack); // 偏差计算 d_error = error - sptr->PreError; dd_error = d_error - sptr->PreDerror; sptr->PreError = error; //存储当前偏差 sptr->PreDerror = d_error; //储存当前误差之差

sptr->PreU += (signed long)( sptr -> v_Kp * d_error +sptr -> v_Ki * error +sptr->v_Kd*dd_error);//速度PID计算

if( sptr->PreU >=max )//速度PID,防止调节最高溢出 sptr->PreU = max; else

// 0.25S刷新一次数码管缓存器内的值

//计算转过的圈数,除以2即为转过的圈数,叶片转一圈得到2

if( sptr->PreU <= min ) //速度PID,防止调节最低溢出 sptr->PreU = min; else

return ( sptr->PreU ); // 返回预调节占空比 }

void DisplayFresh() {

P2 =loops[0] ;

P0 = table[a];

delay(50); P2 =loops[1] ; P0 = table[b];

delay(50);

P2 =loops[2] ; P0 = table[c]; delay(50); P2 =loops[3] ;

P0 = table[d]; }

void ClacSpeed() { }

delay(50);

a = (bb/1000); b = (bb/100); c = (bb/10); d = bb;

电路图:

本文来源:https://www.bwwdw.com/article/adq3.html

Top