飞思卡尔讲解 - 图文

更新时间:2024-03-16 12:15:01 阅读量: 综合文库 文档下载

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

哈尔滨工程大学本科生毕业论文

第1章 绪论

1.1 论文研究的背景

闭环控制是自动控制论的一个基本概念,也称反馈控制,在日常生活的各种控制实例中有具体的表现方式,比如常用交通工具中电车的速度控制,汽车的速度控制,冰箱的温度调节等,其中采用闭环控制方案对直流电机进行调速是生产生活中最常见的一种闭环控制实例。在工业自动化飞速发展的今天,利用高性能单片机来完成对仪器设备的自动化控制是其中最重要的一个环节。本文研究对象是基于Freescale单片机的移动小车控制系统设计,涉及到对直流电机的速度控制,倒车防撞报警器设计,LCD(Liquid Crystal Display)显示等功能,既应用了本科阶段所学的电路基础知识、自动控制理论知识,又充分利用了Freescale单片机的高性能与可靠性。 1.1.1 速度闭环控制系统

随着工业自动化以及电子信息技术和自动控制技术的不断发展,电机的种类不断增加,性能也更加出色。以电机为动力的车辆的自动化程度也越来越高,对车辆自动化程度的要求也越来越高,电车近几十年来发展十分迅速,直流电机电瓶车的速度控制水平也得到了极大的提高。转速控制作为电机控制中最关键的部分,具体反映到电车就是在车体速度控制上,而速度闭环控制作为重要的控制方式,得到了最广泛的应用。

直流电机速度闭环控制系统包括以下内容: (1)直流电机在接到起动电压后起动;

(2)转速达到预设速度后,利用PWM脉宽调制电路产生方波,并通过单片机设定占空比,达到无级调速;

(3)采用直流电机反接制动原理来调速,在增量PID控制算法下达到稳定转速的效果。

1

哈尔滨工程大学本科生毕业论文

速度闭环控制系统硬件组成: (1)PWM脉宽调制电路

(2)测速装置(电压输出型光电码盘)

(3)动力装置(直流电机) (4)直流电机驱动器 1.1.2 超声波倒车防撞系统

改革开放以后,我国经济快速发展,汽车的拥有量大大增加,一些大中型城市交通拥挤,导致交通事故频发。安全驾驶逐渐成为大家关注的焦点,倒车防撞系统的需求非常迫切,因此对其进行设计生产显得非常重要。此倒车防撞系统利用了超声波的特点和优点,将超声波测距和飞思卡尔单片机结合为一体,设计出一种基于MC9S12DG128B单片机的超声波倒车防撞报警系统。

1、超声波测距模块

在本系统中,超声波模块的主要任务是:通过单片机产生40KHz的脉冲,来激发发射探头发出超声波,接收探头接收到超声波后反馈给单片机一段脉冲。单片机定时器记录发射跟接收的40KHz脉冲的时间,算出时间间隔,然后通过编程算法计算出距离。

2、防撞报警系统

本系统采用LED发光二极管作为报警器。在车体逐渐逼近障碍物的过程中,通过编程使单片机引脚产生一定频率的脉冲,驱动发光二极管。当倒车时候,如果逼近障碍物,则发光二极管闪烁频率会加快,进而判定有障碍物,达到防撞报警的作用。 1.1.3 LCD液晶显示系统

在日常生活中,我们对液晶显示器并不陌生。液晶显示模块已作为很多电子产品的最大辅助功能,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。在单片机的人机交

2

哈尔滨工程大学本科生毕业论文

流界面中,一般的输出方式有以下几种:发光管、LED数码管、液晶显示器等。 在单片机系统中应用晶液显示器作为输出器件有以下几个优点:

1、显示质量高

由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT)那样需要不断刷新新亮点。因此,液晶显示器画质高且不会闪烁。

2、数字式接口

液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。

3、体积小、重量轻

液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示器要轻得多。

4、功耗低

相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示器要少得多。

由于以上诸多优点,本系统中采用LCD1602A字符液晶来完成LCD显示模块的设计,做到小车行驶时候对小车速度的实时显示,完善移动小车的功能。

1.2 论文研究的目的和意义

本设计以Freescale CodeWarrior为开发环境,采用MC9S12DG128B(16位)MCU (Micro Control Unit)作为主控芯片,利用MC9S12DG128B教学实验系统并增加必要的外围辅助电路,设计完成直流电机的速度闭环控制,直流电机驱动器,超声波倒车防撞报警器,LCD显示系统等功能。整个系统的设计不仅是对小车控制系统的开发,而且充分的利用了清华大学的MC9S12DG128B教学实验系统,达到了理论与实践的结合,加深了对自动控制理论的了解。

3

哈尔滨工程大学本科生毕业论文

1.2.1 直流电机闭环控制的目的和意义

电机在工业生产中的主要控制方式为闭环控制,电机闭环控制技术的不断改进带来生产和生活了众多的好处:能够提高电机运行过程中的平稳,进而使以电机为动力的机械可靠性增加;增加各类机械中的自动化技术含量;增加电力机车在交通运输工具中所占的比例,减少环境污染等。

而为了提高直流电机调速系统的动静态性能指标,通常采用闭环控制系统(包括单闭环系统和多闭环系统)。对调速指标要求不高的场合,采用单闭环系统,而对调速指标较高的则采用多闭环系统。按反馈的方式不同可分为转速反馈、电流反馈、电压反馈等。在单闭环控制系统中,转速单闭环使用较多。在对调速性能有较高要求的领域常利用直流电机作动力,但直流电机开环系统稳态性能不能满足要求,可利用速度负反馈提高稳态精度。

反馈控制系统的规律是要想维持系统中的某个物理量基本不变,就引用该被控量的负反馈信号去与恒值给定相比较,构成闭环系统。对调速系统来说,若想提高动静态指标,希望电机转速在负载电流变化时或受到扰动时基本不变。要想维持转速这一物理量不变,最直接和最有效的方式就是采用转速负反馈构成速度闭环控制系统。

PWM简称脉宽调制,即英文Pulse Width Modulation的缩写,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。采用单片机产生PWM脉冲进行直流电机的无级调速是目前直流电机调速的最常用方法之一。 1.2.2 倒车防撞报警与LCD显示的目的和意义

车辆在行驶过程中最重要的是安全问题,而倒车时候由于驾驶员的视野有限,可能导致撞车,安全问题变得尤为突出。超声波倒车防撞方案是目前汽车市场主流的安全倒车方案,其性能可靠,准确度高,满足车辆在低速倒车中的报警防撞要求,从而能提高机车行驶过程中的安全性。

车辆在行驶过程中,单纯靠驾驶员经验是不可能准确判定车辆行驶的速

4

哈尔滨工程大学本科生毕业论文

度。采用液晶来显示当前行驶速度,首先也最总要的是让驾驶员看到精准车速,避免速度过大,保证了车辆行驶的安全性;其次在一些限速街道,比如慢行街、高架桥等,驾驶员能够保证不超速,避免了不必要的违章行驶导致的行政处罚。

1.3 论文研究的主要内容

本文以Freescale CodeWarrior为开发环境,采用飞思卡尔MC9S12DG128B(16位)MCU作为主控芯片,进行课题的设计与研究。具体研究内容如下:

1、选用恒压恒流H桥式驱动芯片L298N,完成基于PWM(脉宽调制)

电路的直流电机驱动器设计,实现对RS380-ST型7.2V直流电机的 无级调速。

2、采用增量式PID控制算法进行直流电机闭环控制程序设计,编写相应C语言程序,完成对直流电机的速度单闭环控制,从而实现小车速度的实时控制。

3、基于超声波测距原理设计倒车防撞报警器,并用C语言编写功能程序,使小车在倒车过程具有防撞报警功能。

4、设计制作LCD显示系统,用于显示小车的实时速度值,使速度量可视化,完善小车功能。

5、利用Freescale单片机开发板和Freescale CodeWarrior 4.7开发软件包,完成对速度闭环控制程序、超声波倒车防撞报警程序、LCD显示功能程序的调试。

5

哈尔滨工程大学本科生毕业论文

第2章 总体设计思路及方案论证

基于Freescale S12单片机对移动小车控制系统进行设计,实现对小车的速度闭环控制。因为需要设计直流电机驱动器、倒车防撞报警器、LCD液晶显示系统等硬件实物,并通过Freescale CodeWarrior4.7软件包开发设计相应的驱动和功能程序,所以对设计总体思路进行把握主要工作分为两部分:硬件和软件。首先对硬件和软件的设计方案分别进行可行性论证,在此基础上才能进行具体的方案设计与软硬件调试。

2.1 硬件设计方案论证

采用Freescale MCU作为控制芯片,对个功能模块进行控制。由于涉及到的功能相对较多,首先需要在原理上对每一部分功能模块进行分析,再把软硬件集成到一起进行可行性论证。 2.1.1 单片机模块方案

MC9S12DG128B属于Freescale MC9S12系列微控制器[19],是飞思卡尔半导体公司的汽车电子类产品,早在飞思卡尔还没有从摩托罗拉分离出来前就已经诞生了。其内核为CPU12高速处理器。MC9S12DG128B拥有丰富的片内资源,flash达128kb,加入裁减过的μC/OS都没有问题,所以对于中等复杂程度的控制系统它不用扩充片外存储器。

1、Freescale MC9S12系列微控制器

Freescale MC9S12系列MCU是以高速CPU12内核为基础的微控列,简称S12系列[2]。典型的HC12总线频率为8MHz,而典型的S12总线频率为25MHz。HC12与S12指令完全兼容,故统称为HCS12系列微控制器。

智能产品的设计人员可利用S12系列微控制器低成本的FLASH存储器,轻松实现以微控制器为基础的远程升级、换代和现场进行快速再编程系统设计,可缩短嵌入式产品的设计周期,改善性能,同时亦降低售后服务系统的整体成本。S12微控制器已广泛应用于通信、工业以及无数消费类电子

6

哈尔滨工程大学本科生毕业论文

产品中,例如空调、冰箱、PC外围设备和通信机电产品等。

S12系列微控制器主要有A、B、C、D、E、F、G、H、L等系列,分为以下几大类:

(1)MC 9S12A系列和B系列16位微控制器; (2)带CAN总线的MC 9S12D系列16位微控制器;

(3)带液晶驱动的MC 9S12H系列和MC 9S12L系列16位微控制器; (4)低供电电压的MC 9S12E128和MC 9S12E64系列16位微控制器; (5)带USB接口的MC 9S12UF32系列16位微控制器; (6)带以太网接口的MC 9S12NE系列16位微控制器。 S12系列微控制器有以下优点: (1)S12系列具有FLASH存储器;

(2)S12系列采用的C语言已进行了最优化设计,编码方式效率高; (3)S12系列具有低成本调试功能。 2、MC9S12DG128B微控制器的组成

MC9S12DG128B有16路AD转换,精度最高可设置为10位;有8路8位PWM并可两两级联为16位精度PWM,特别适合用于控制多电机系统。它的串行通信端口也非常丰富,有2路SCI,2路SPI此外还有IIC,CAN总线,增强型捕捉定时器等端口,并且采用了引角复用功能,使得这些功能引角也可设置为普通的I/O端口使用。此外它内部还集成了完整的模糊逻辑指令,可大大简化我们的程序设计。

MC9S12DG128的封装有两种,一种为80引角的QFP-8封装形式,它没有引出扩展总线,且AD转换只引出了8路;一种为112引角的LQFP-112封装形式,两种都采用了表面贴片式封装。从下面的引角图我们可以看到MC9S12DG128的引角复用情况,一个引角往往有双重或多重功能,而这些功能的设置大部分是通过编程来实现的,非常方便。对于MC9S12DG128的学习,先从各引角的功能学起,然后试着下载程序,再逐渐编程实现各引角的功能。

7

哈尔滨工程大学本科生毕业论文

在单片模式下,A口、B口和部分E口都可以用作通用I/O接口,如果所有接口工作在通用I/O方式下,那么I/O口将达到63个。这些双重功能的I/O口本身及控制逻辑完全集成在MCU内部,其体积、功耗、可靠性、应用简单方便程度都与用户自行扩充的I/O口有着重要区别。

LQFP-112封装的MC9S12DG128B[1]引脚图如图2.1。

图2.1 MC9S12DG128B引脚图

8

哈尔滨工程大学本科生毕业论文

3、单片机基本硬件系统

目前多数单片机产品都是表面贴片封装的器件,因为直接设计目标板有相当难度,不妨先设计一个最小系统,将单片机所有I/O引脚都引出到排针或者插座上。I/O接口板另外设计,最小系统板可以像一个直插的器件,插在目标板上。虽然S12单片机将CPU、ROM、RAM、以及I/O都集成在一个集成电路芯片上,但仍需要一些外部电路的支持。如为单片机系统提供电源、时钟、复位信号和I/O驱动等。 2.1.2 5V稳压电源模块方案

由于采用7.2V镍镉电池作为驱动直流电机的电源,而飞思卡尔单片机的工作电压为5V,故需要进行5V稳压电路设计。有以下两种设计方案。

方案一:基于LM7850稳压芯片的电路设计。

采用以TO- 220 标准封装的LM7850作为稳压芯片,它只有三条引脚输出,分别是输入端、接地端和输出端。样子象是普通的三极管,是最常见的三端稳压集成电路。这是起始时候我的设计方案。LM7850电路内部还有过流、过热及调整管的保护电路,使用起来可靠、方便,而且价格便宜。但是LM7850稳压电路的稳压性能在电池电压低于7V时候没有稳压效果,直接输出7V电压,这样会高于单片机的工作电压5V,导致烧毁单片机。

电池采用的是实验室的镍镉电池,但是由于其投入使用时间较长导致损耗比较大,持续供电会导致电压不稳,小于7V。

方案二:基于LM2940稳压芯片的电路设计[26]。

采用LM2940作为稳压芯片,当时实验室没有此种芯片,方案二便成了开始时候的备选方案。

这种方案可以保证稳压输出端电压稳定在5V左右,满足单片机的电压要求。由于LM2940是低压差线性稳压器(low dropout regulator),LM2940比LM7805的转换效率高。LM7805直接输入不接输出的情况下,其内部还会有3mA的电流消耗(静态电流)。而LDO元件(即LM2940)的静态电流就比它远远小得多了。用此稳压电源给飞思卡尔单片机和LCD字符液晶以及

9

哈尔滨工程大学本科生毕业论文

超声波测距模块供电。

由于电池损耗原因,第一种方案达不到要求的5V稳定电压,弃用,改用为第二种方案,通过电压表的实际测试,不管电池状态怎样,电压始终稳定在4.95—5.05V,满足设计要求。LM2940稳压电路原理图如图2.2。

图2.2 LM2940稳压电路

2.1.3 LCD液晶显示模块

液晶显示模块已作为很多电子产品的功能器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。在单片机的人机交流界面中,字符型液晶显示器得到非常广泛的应用。 在单片机系统中应用晶液显示器作为输出器件有以下几个优点:

? 显示质量高 ? 数字式接口 ? 体积小、重量轻 ? 功耗低

字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用的有16*1、16*2、20*2和40*2行等模块。以16*2行字符液晶为例,16表示一行能显示16个有效字符(非汉字),2表示LCD可以同时显示两行字符。

10

哈尔滨工程大学本科生毕业论文

由于本设计需要显示的是小车的速度值,故16*2行的液晶足可以满足设计要求。这里我采16*2行字符液晶,具体型号为长沙太阳人电子有限公司生产的的1602A字符型液晶显示器。

1602A字符型液晶显示器模型规格[27]如图2.3,尺寸单位为cm。

图2.3 1602A字符型液晶显示器

2.1.4 超声波倒车防撞模块方案

随着科学技术的快速发展,超声波在科学技术中的应用越来越广。超声波检测项目优势在于其方便迅速、计算简单、易于做到实时控制,是一种非接触检测技术,并且在测量精度方面能达到工业实用的要求,尤其在避障方面应用广泛。

1、超声波发生器

为了研究和利用超声波,人们已经设计和制成了许多超声波发生器。总体上讲,超声波发生器可以分为两大类:一类是用电气方式产生超声波,一类是用机械方式产生超声波。

目前较为常用的是压电式超声波发生器。它有两个压电晶片和一个共振

11

哈尔滨工程大学本科生毕业论文

板。当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动,便产生超声波。

2、超声波接收器

反之,如果两电极间未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收器了。

图2.4为工作原理框图。

障碍物超声波接受滤波放大电路整形电路飞思卡尔S12LED超声波发射整形放大电路40KHz方波单片机图2.4 超声波模块硬件电路工作流程图

本设计中先后采用了两种超声波方案 方案一 :手动焊接超声波模块。

采用集成芯片CX20106A[34],自己设计电路原理图,在万用板上焊装超声波模块。这种方案为初期方案,考验了自己的动手能力,在焊装完成后进行硬件过程中发现性能不理想,容易产生干扰。

集成电路CX20106A是一款红外线检波接收的专用芯片,常用于电视机红外遥控接收器。考虑到红外遥控常用的载波频率38 kHz与测距的超声波频率40 kHz较为接近,可以利用它制作超声波检测接收电路。通过调试证明用CX20106A接收超声波(无信号时输出高电平),具有很好的灵敏度但是由于元件和排板问题,本次设计的抗干扰能力不强,发送波形正常,但是接收波形比较凌乱,达不到测距地要求。

12

哈尔滨工程大学本科生毕业论文

图2.5、2.6为发射电路与接收电路原理图:

图 2.5 超声波发射电路原理图

图 2.6 超声波接收电路原理图

方案二:采用超声波测距集成模块。

采用凌阳超声波测距模块,在第一种方案效果不理想的情况下,指导老师的建议下我采用方案二,这也是我的最终方案,由于超声波测距模块是工业制板,电路聚成度高,元件也性能也相对好,经过硬件测试,发现干扰小,

13

哈尔滨工程大学本科生毕业论文

并且引脚方便,即插即用,适合调试,能很好的完成本设计。 2.1.5 直流电机驱动模块

由于本设计中直流电机的功率限制,不可能由单片机直接驱动直流电机。所以要设计直流电机驱动器,进而驱动直流电机的正反转。这里我采用以恒压恒流桥式2A驱动芯片L298N为驱动芯片的直流电机驱动器设计。

L298是SGS公司的产品,比较常见的是15脚Multiwatt封装的L298N,内部同样包含4通道逻辑驱动电路。可以方便的驱动两个直流电机,或一个两相步进电机。输出电压最高可达50V,可以直接通过电源来调节输出电压;可以直接用单片机的IO口提供信号;而且电路简单,使用比较方便,能完成本设计的要求。图2.7为L298N的引脚图。

图2.7 L298N引脚图

2.1.6 测速方案

速度传感器感知小车的行驶速度,有如下两种方案: 1、采用霍尔元件

霍尔原件[34]的工作原理是利用电磁感应定理:磁场的变化引起电压的变

14

哈尔滨工程大学本科生毕业论文

化,用磁块作为磁场源,磁块和霍尔器件的相对位置和方向决定霍尔原件的输出电压。利用这一原理,将磁块粘在轮胎或轮轴上,每转过一定角度霍尔元件就会有一个脉冲产生,通过测量脉冲周期就可以间接得到速度。这种方法的优点是实现方便,稳定性强,抗干扰能力强,缺点是分辨率较小,只能达到厘米数量级。

2、采用光学编码器

这是目前应用最多的测速传感器,光学编码器[15]由光源、码盘、接收器组成,码盘周围有小孔,光源透过小孔投射在接收管上,由于光电码盘与电动机同轴,电动机旋转时,光栅盘与电动机同速旋转,经发光二极管等电子元件组成的检测装置检测输出若干脉冲信号,通过计算每秒光电编码器输出脉冲的个数就能反映当前电动机的转速。市场上有现成的光学编码盘出售,但体积和重量普遍较大,不符合轻量化设计的原则。自制品稳定性较差。 在此由自动化技术创新中心提供的A、B、Z光学编码器作为测速传感器,电压输出型ZVH-4A-50BM-ES~26E,500P/r,零位宽Tm=1T,DC5~26V。

2.2 控制方案论证

本设计中涉及到速度闭环控制和倒车防撞报警器中的距离控制,首先要提出控制方案,对控制算法原理进行详细的说明,在保证方案可行性的基础上再进行具体的软件设计。 2.2.1 速度控制算法

常用的控制规律有:比例控制;积分控制;微分控制;比例积分控制;比例微分控制;比例、积分、微分控制。

对直流电机的速度控制优先采用PID控制算法,在工程实际中,应用最为广泛的调节器控制规律为比例、积分、微分控制,简称PID控制,又称PID调节。PID控制器问世至今已有近70年历史,它以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。当被控对象的结构和参数不能完全掌握,或得不到精确的数学模型时,控制理论的其它技术难以

15

哈尔滨工程大学本科生毕业论文

采用时,系统控制器的结构和参数必须依靠经验和现场调试来确定,这时应用PID控制技术最为方便。即当我们不完全了解一个系统和被控对象,或不能通过有效的测量手段来获得系统参数时,最适合用PID控制技术。PID控制,实际中也有PI和PD控制。PID控制器就是根据系统的误差,利用比例、积分、微分计算出控制量进行控制的。

因为直流电机带动小车在行驶过程中,路面信息不可确定,首先要保证小车在行驶过程中的运行平稳性,所以为了提高动态性能和稳态性能,采用PID控制方式,理论上PID控制方式可以很好的满足设计性能要求。在实际的调试中只需要选择合适的参数,可以使控制性能达到最佳。 2.2.2 超声波测距算法

超声波发生器在某一时刻发出超声波信号,遇到被测物体后反射回来,被超声波接收器接收到。只要计算出超声波信号从发射到接收到回波信号的时间,知道在介质中的传播速度,就可以计算出距被测物体的距离: d?s2?(vt)2 (2.1) 其中d为被测物到测距仪之间的距离,s为超声波往返通过的路程,v为超声波在介质中的传播速度,t为超声波从发射到接收所用的时间。为了提高精度,需要考虑不同温度下超声波在空气中传播速度随温度变化的关系: v?331.4?0.61T (2.2)

上式中,T为实际温度(℃),v的单位为m/s,t的单位为s。 以上是测距的具体算法,在本设计中由于倒车防撞的主要功能是防撞,只要在程序中设定最小倒车可行距离,并不需要计算实际的距离值。但测距原理仍然是以上算法,只是在编程形式上有所差别。

2.3 本章小结

本章主要讨论的是设计思路论证和方案的选择。首先讨论硬件设计思路,在满足系统性能要求的前提下对备选方案进行论证。接着进行了单片机外围

16

哈尔滨工程大学本科生毕业论文

电路与各个功能部分模块的实际分析,对主要硬件及核心芯片进行了选型。随后进行主要控制算法的论证,了解被控对象的控制要求,匹配单片机的内部电路功能及引脚功能,进行控制算法的选择。针对速度控制系统与超声波测距模块的特点,分析单片机的片内资源,选择合适的控制算法进程序的设计。 通过论证和分析,基本保证了软硬件的可行性,并设计了大体框架。

17

哈尔滨工程大学本科生毕业论文

第3章 系统硬件电路设计

开发单片机的思路是先设计最小系统,给单片机上电,提供必要的时钟让单片机活起来;通过这个最小系统,人要能与单片机沟通,一般是通过BDM接口等来实现。包括发命令给单片机、下载程序、调试程序等。有了这个基本环境后才可以调试硬件,本章讲述基本硬件系统的设计。

3.1 Freescale单片机模块

以MC9S12DG128为核心控制芯片的最小系统[21]主要包括以下几个部分:时钟电路、BDM接口、供电电路、复位电路和调试小灯。其最小系统板如图3.1所示。

图3.1 MC9S12DG128最小系统板

3.1.1 时钟电路

时钟电路给单片机提供一个外接的石英晶振,单片机及系统运行需要两个最基本的条件:电源与时钟。其中时钟电路的设计甚为关键,如果由于设计中的毛病,造成时钟电路不稳定,会导致嵌入式系统瘫痪。通过把一个16MHz的外部晶振接在单片机的外部晶振接入口EXTAL和XTAL上,然后利用MC9S12DG128内部的压控振荡器和锁相环(PLL)把这个频率提高到了

18

哈尔滨工程大学本科生毕业论文

40MHz。作为单片机工作的内部总线时钟。其电路图如图3.2。

图3.2 外部振荡电路

3.1.2 复位电路和BDM接口

复位电路是通过一个复位芯片在电压达到正常值时给单片机一个复位信号。复位电路使用了低压复位芯片MC34064,使用专门的上电复位电路使系统上电复位更加可靠。

BDM接口可用于BDM在线调试,其中,BDMIN接口是接BDM调试工具,向MC9S12DG128单片机下载和调试程序用的。电路原理如图3.3。

图3.3 复位电路与BDM接口电路原理图

19

哈尔滨工程大学本科生毕业论文

3.1.3 单片机最小系统电源电路

MC9S12DG128 系列单片机的外部供电电压为5V,分别为单片机的内部电压调整器,IO 端驱动器,AD 转换器提供电源,下图中除了加入了扼流电感,滤波电容以外还串接了可恢复熔断器F1 和并接了稳压二极管D,这样就可以为单片机提供安全,稳定和纯净的电源了。最后我们别忘了并接一个发光二极管来指示单片机的工作状态。图3.4为单片机供电电路。

图3.4 单片机供电电路

3.2 5V稳压电源模块

由于采用学院自动化技术创新中心提供的7.2V、2Ah的镍镉电池作为电

源来驱动直流电机,而飞思卡尔单片机、超声波测距模块、LCD字符液晶的额定工作电压皆为5V,故需要进行5V稳压电路设计。

采用低压差稳压集成芯片LM2940。由于LM2940是低压差线性稳压器(low dropout regulator),静态电流非常小,它的特点是在整个温度范围内按典型0.5V和最大1V的失稳电压提供1A的电流输出。此外还有静态电流降低电路,当输入与输出的电压大于3V时还可以自动降低静态电流,该稳压器同样也具有一般稳压器的短路保护和热过载保护等功能。

主要性能:

20

哈尔滨工程大学本科生毕业论文

? 输出电压 5V ? 最大输出电流 1A ? 典型失稳电压 0.5V ? 最大工作电压 26V ? 工作温度 40℃~+125℃ ? 引线温度(焊接,10S) +260℃ ? 输出电压组装前微调 ? 反接电池保护 ? 内部短路保护

图3.5为LM2940的引脚图。

图3.5 LM2940的引脚图

LM2940引脚名称见表3.1。

表 3.1 LM2940的引脚名称

符号 INPUT OUTPUT GND 名称 输入 输出 接地

LM2940芯片在焊接时候注意引脚方向,切不能焊错,也不能让烙铁接触引脚时间太长,以免损坏内部电路,经典实用稳压电路如图3.6所示。

21

哈尔滨工程大学本科生毕业论文

图3.6 LM2940稳压电路

注意事项:

1、C1远离电源位置;

2、要稳定的话C2必须高于22μF,并尽可能的接近稳压器。焊接完进行调试,用7.2V电池进行供电,用万用表电压端测量输出引脚,为4.95V。

3.3 超声波测距模块

超声波测距模块,采用凌阳公司的超声波测距模组V2.0版本。 3.3.1 超声波测距模块设计

1、超声波脉冲法测距原理

声波在其传播介质中被定义为纵波。当声波受到尺寸大于其波长的目标物体阻挡时就会发生反射,反射波称为回声。假如声波在介质中传播的速度是已知的,而且声波从声源到达目标然后返回声源的时间可以测量得到,那么就可以计算出从声波到目标的距离。这就是本系统的测量原理。这里声波传播的介质为空气,采用不可见的超声波。

假设室温下声波在空气中的传播速度是335.5m/s,测量得到的声波从声源到达目标然后返回声源的时间是t秒,则距离d可以由下列公式计算:

(cms)?t(s) (3.1) d?33550 因为声波经过的距离是声源与目标之间距离的两倍,声源与目标之间的

22

哈尔滨工程大学本科生毕业论文

距离应该是d2。

超声波测距模组[28]信号:

图3.7为超声波模组上NE5532的7引脚处和模组的J4的40KHz_SEND引脚处测量得到的波形图,而传感器距目标面的距离为1米。

图3.7 超声波信号测量图

图中的波形为示波器抓拍图,1通道为NE5532的7引脚处测得波形,即上方的波形;通道2为J4的40KHz_SEND引脚处测得波形。图中可见,接收回路中测得的超声波信号共有两个波束,第一个波束为余波信号,即超声波接收头在发射头发射信号(一组40KHz的脉冲)后,马上就接收到了超声波信号,并持续一段时间。另一个波束为有效信号,即经过被测物表面反射的回波信号。超声波测距时,需要测的是开始发射到接收到信号的时间差,由上图中就可看出,需要检测的有效信号为反射物反射的回波信号,故要尽量避免检测到余波信号,这也是超声波检测中存在最小测量盲区的主要原因。

软件控制脉冲发射、检测回波信号:程序采用的是脉冲测量法,由MC9S12DG128B发生40KHz的脉冲 号,每次测量发射的脉冲数至少要10个

23

哈尔滨工程大学本科生毕业论文

完整的40KHz脉冲。同时发射信号前打开计数器,进行计时;等计时到达一定值后再开启检测回波信号,以避免余波信号的干扰。采用外部中断对回波信号进行检测(回波信号送到单片机的为一序列方波脉冲)。接收到回波信号后,马上读取计数器中的数值,此数据即为需要测量的时间差数据,并以此进行编程。

3.3.2 超声波测距模组

超声波测距模组实物如图3.8所示。

图3.8 超声波测距模组实物图

1、基本特性与参数指标

? 超声波传感器谐振频率: 40KHz ? 模组传感器工作电压: 4.5V~9V ? 模组接口电压: 4.5V~5.5V 2、主要功能

三种测距模式选择跳线J1(短距、中距、可调距):

(1)短距:20cm~100cm左右(根据被测物表面材料决定),精度1cm; (2)中距:70cm~400cm左右(根据被测物表面材料决定); (3)可调:范围由可调节参数确定,当调节在合适的值时,最远测距

24

哈尔滨工程大学本科生毕业论文

700cm左右。

结构示意图如图3.9。

40KHz_SEND 超声波谐振载波电路模组接口超声波发射探头Back_Plus超声波回波接收处理电路超声波接受探头外部电源接口及电源跳线J3、J2测量模式选择跳线J1 图3.9 超声波测距模组结构图 线J1的连接方法即可。

3、硬件模块说明

(1)超声波谐振频率调理电路:

应用时,设置好J1、J2跳线,不同测距模式的选择只需改变测距模式跳

由编程使单片机产生40KHz的方波,并通过模组接口J4送到模组的CD4049,而后面的CD4049则对40KHz频率信号进行调理,以使超声波传感器产生谐振。

(2)超声波回波接收处理路:

超声波接收处理部分电路前级采用NE5532构成10000倍放大器,对接收信号进行放大;后级采用LM311比较器对接收信号进行调整,比较电压为LM311的3管脚的输入,可由J1跳线选择不同的比较电压以选择不同的测距模式。

4、注意事项

(1)提供给模组的电源必须在4.5V以上,而且尽量保持电源电压的稳定。

25

哈尔滨工程大学本科生毕业论文

模组工作的性能与被测物表面材料有很大关系,如毛料、布料对超声波的反射率很小,会严重影响测量结果。

(2)超声波测距时,存在余波干扰问题,所以针对不同测距范围会有不同的处理方法。模组提供了测距模式选择跳线J1,可以选择短距测量模式、中距测量模式,或距离可调模式。针对前两种测量模式,提供有不同参数的范例程序,跳线选择不同的模式时,要选用相对应的程序进行测量;跳线选择LOW时为近距测量模式,选择HIG时为中距测量例程,选择SET时为距离可调模式。

(3)本模组使用时,把前面的电源输入跳线J2、模式选择跳线J1设置好

后,然后用排线把J4的40KHz_SEND端口与MC9S12DG128B的B口某一通道相接,J5的BACK_PlUS端口与MC9S12DG128B的中断端口PE1端口相接,即可配合本范例程序使用了。

J4和J5的接口定义如图3.10。

J5 VCC_5J4VCC_540KHz_SENDBACK_PLUSGNDGND图3.10 J4、J5接口定义图

3.4 测速传感器模块

本模块采用光电码盘作为测速传感器,通过码盘转轴齿轮与后轮车轴齿轮的啮合,进行小车的测速。

26

哈尔滨工程大学本科生毕业论文

3.4.1 光电码盘的工作原理及设计

光电编码器[32],是一种通过光电转换将输出轴上的机械几何位移量转换成脉冲或数字量的传感器。这是目前应用最多的传感器,广泛用于自动控制,自动测量,作为转角与转速传感器。光电编码器是由光栅盘和光电检测装置组成。光栅盘是在一定直径的圆板上等分地开通若干个长方形孔。由于光电码盘与电动机通过齿轮啮合,电动机旋转时,光栅盘与电动机以一定传动比旋转,经发光二极管等电子元件组成的检测装置检测输出若干脉冲信号,通过计算每秒光电编码器输出脉冲的个数就能反映当前电动机的转速。

增量式编码器是直接利用光电转换原理输出三组方波脉冲A、B和Z相;A、B两组脉冲相位差90º,从而可方便地判断出旋转方向,而Z相为每转一个脉冲,用于基准点定位。它的优点是原理构造简单,机械平均寿命可在几万小时以上,抗干扰能力强,可靠性高,适合于长距离传输。其缺点是无法输出轴转动的绝对位置信息。

光电码盘的工作原理如图3.11。

码盘透镜光源透镜光敏元件脉冲数出放大整形转轴图3.11 光电码盘工作原理

1、产品型号与编号

? 电压输出型 ZVH-4A-50BM-ES~26E ? 精度 500P/r ? 零位宽 Tm=1T

27

哈尔滨工程大学本科生毕业论文

? 工作电压 DC 5~26V ? 码盘直径 Φ18mm ? 最高转速 10000rpm ? 允许角加速度 10000rad/s2

? 最大负载 轴向4.9N 径向9.8N 2、注意事项

(1)光电码盘属于高精密仪器,如安装使用不当会影响仪器的性能和寿命;

(2)避免与光电编码器刚性联接;

(3)安装时注意其允许的轴最大负载,严禁敲击和摔打。 3.4.2 光电编码器的安装结构

光电编码器用于测量电机转速,由于电机驱动后轮,故需要安装在后轮轮轴附近,通过与轮轴上的齿轮进行啮合。

机械安装结构如图3.12。

图3.12 光电码盘安装结构

28

哈尔滨工程大学本科生毕业论文

3.5 LCD显示模块设计

本设计采用LCD1602A字符液晶作为显示模块的芯片,首先进行工作原理的说明,在此基础上围绕它进行外围电路的设计。

1、主要技术参数

? 显示容量 16*2个字符 ? 工作电压 4.5~5.5V ? 工作电流 2.0mA ? 字符尺寸 2.95*4.35mm ? 最佳工作电压 5.0V 2、写操作工作原理及电路图设计

由于只用到了字符液晶写操作,而不用其读操作,故需要重点掌握液晶的写操作时序图

LCD写操作时序图如图3.13所示。

图3.13 LCD写操作时序图

图中RS为写数据/命令引脚选择位,通过单片机往LCD写数据或者命令;R/W为读写引脚选择位,这里只用到写功能;E为使能引脚选择位,通

29

哈尔滨工程大学本科生毕业论文

过单片机初始化使LCD使能;DB0-DB7为数据位,传送数据。

具体的硬件电路如图3.14。

图3.14 电路原理图

在这里用单片机的A、B口来驱动字符液晶。

3.6 直流电机及其驱动模块

直流电机作为本系统的动力来源,通过齿轮来带动后轮转动,但要完成

闭环调速的功能,决定了直流电机不可能直接由单片机或者外接电源供电,必须通过设计直流电机驱动器来驱动直流电机。 3.6.1 直流电机

直流电机参数:

? 电机型号 RS380_ST ? 驱动电压 7.2V ? 空载最大转速 15300转/分 ? 堵转电流 16.72A ? 最大功率 26.68W ? 堵转扭矩 680gcm

30

哈尔滨工程大学本科生毕业论文

? 电机直径 Φ27.7mm 3.6.2 直流电机驱动器

采用以恒压恒流桥式2A驱动芯片L298N为驱动芯片进行直流电机驱动器设计。

L298N是SGS公司的产品,比较常见的是15脚Multiwatt封装的L298N,内部同样包含4通道逻辑驱动电路。可以方便的驱动两个直流电机,或一个两相步进电机。

L298N可接受标准TTL逻辑电平信号VSS,VSS可接4.5~7 V电压。4脚VS接电源电压,VS电压范围VIH为+2.5~46 V。输出电流可达2.5 A,可驱动电感性负载。1脚和15脚下管的发射极分别单独引出以便接入电流采样电阻,形成电流传感信号。L298可驱动2个电动机,OUT1,OUT2和OUT3,OUT4之间可分别接电动机,本装置我们选用驱动一台电动机。5,7脚接输入控制电平,控制电机的正反转。EnA接控制使能端,控制电机的停转。表3.2列举了L298N功能逻辑。

表 3.2 L298N功能逻辑

ENA 0 1 1 1 1 In1 × 1 0 1 0 IN2 × 0 1 1 0 运转状态 停止 正转 反转 刹停 停止 由表3.2可知当EnA为低电平时,输入电平对电机控制起作用,当EnA为高电平,输入电平为一高一低,电机正或反转。同为低电平电机停止,同为高电平电机刹停。

31

哈尔滨工程大学本科生毕业论文

L298N与MC9S12DG128B的连接电路如图3.15。

图3.15 电机驱动电路原理图

3.7 本章小结

本章主要进行了系统硬件电路的具体设计。首先对单片机各模块和内部功能进行了详细的说明,并附有原理图和实物图;而超声波测距模块作为主要功能模块,是讨论的重要对象,从超声波的发射接收原理到发送接收电路,都做了说明,并进行硬件的焊装;测速传感器模块关系到本设计最主要的速度闭环控制部分,在此对光电编码器的原理跟技术参数进行了介绍;随后进行LCD显示模块的具体设计,它的设计能否完成很大程度上影响了整个系统的运行。最后直流电机驱动模块单列出来,进行具体的设计说明,附电路原理图、工作逻辑图。通过以上对进行硬件电路的设计,做出硬件实物。

32

哈尔滨工程大学本科生毕业论文

第4章 系统软件设计

本次设计中,软件设计占据了非常大的比重,软件设计的好坏直接影响到系统的性能。首先进行单片机系统各个部分的初始化,初始化要具体到每个引脚,进而保单片机模块的正常启用。速度控制程序是本设计的最重要程序,从控制算法的选择到具体程序的编写,都要进行规划。超声波防撞报警程序也是重要的功能程序,涉及到超声波硬件的应用。最后是LCD显示程序,在其它程序运行无误的基础上进行此程序的设计编写。软件的实现是在CodeWarrior集成环境中实现的,因此一些用法取决于CodeWarrior所使用的编译器。

4.1 软件功能及流程

编程时候首先要对用到的单片机各个模块进行初始化,包括:系统初始化、端口初始化、中断初始化、PWM初始化、定时器初始化、时钟初始化等,然后是各个模块程序设计。

? 延时程序:采用循环体形式延时,本程序对其它功能模块程序的顺利

运行起到相当大的作用,比如采用软件延时产生40KHz方波,抵消LCD初始化时候的读取忙状态。

? 调速程序:作为本设计最重要的程序,采用增量式PID控制算法对

电机的速度进行闭环控制,使其运行在期望的速度值下。

? 超声波测距程序:测距程序是倒车防撞报警功能实现的前提,实现测

距后才能进行报警器的程序设计,完成倒车防撞报警。

? LCD初始化:先初始化LCD字符液晶,设置LCD的现实方式,换

行功能等,保证LCD能正常工作。

? 速度显示程序:LCD初始化后进行进行速度显示程序设计,液晶显

示程序完成的必要性在于:首先是在电机调速时候方便调速,其次大大完善了了设计的功能。

系统整体软件功能框图如图4.1所示。

33

哈尔滨工程大学本科生毕业论文

堆栈指针初始化端口初始化中断初始化PWM初始化定时器初始化LCD初始化移动小车控制系统主程序延时程序电机控制算法超声波测距算法LCD显示程序防撞报警程序时钟初始化 图4.1 系统软件框图

4.2 单片机系统初始化

单片机系统初始化[16]是单片机进行功能程序设计前的准备工作,只有初始化正确才能进行子程序的编写。包括始化分为以下几个部分:单片机最小系统初始化、定时器初始化、PWM初始化。

初始化流程图如图4.2所示。

开始堆栈指针初始化始终初始化中断初始化I/O端口初始化结束

图4.2 单片机初始化

4.2.1 单片机最小系统初始化

MC9S12DG128B单片机是一片超大规模集成电路,要让单片机工作,要供给电源、时钟源,要有能和人沟通的接口。这些是构成单片机最小系统的基本辅助硬件。让系统能工作,软件上要对系统进行初始化,系统初始化的

34

哈尔滨工程大学本科生毕业论文

过程就是建立单片机运行环境的过程,具体完成三件事:

1、初始化堆栈指针

初始化堆栈是告诉CPU,单片机系统的堆栈空间从哪里开始,没有有效的堆栈指针,调用子程序的指令就无法正常工作[6]。这部分工作事实上不用我们完成,在CodeWarrior生成的系统工程中包含有一个start.c文件,该文件完成了系统最基本的初始化,其中就包括堆栈初始化。

堆栈的初始化只能通过一句汇编指令实现,因此为了在C语言中初始化堆栈,应该使用如下宏定义:

#define Initial_Stack_Pointer {_asm LDS #$3FD7;}

2、初始化时钟

由于为了减少干扰,片外晶振的频率趋向于尽可能低,因此有必要对片外晶振进行超频得到系统时钟。同时Flash的读写、串口通信都依靠时钟的设置[16]。

时钟模块的初始化要通过对几个寄存器的读写来实现。具体实现框图见图4.3。

设置REFDV设置SYNR否CRGFLG位是否为“1”?是设CLKSEL位为“1”

图4.3 始终初始化框图

35

哈尔滨工程大学本科生毕业论文

其中REFDV,SYNR与外部晶振频率(OSCCLK)、锁相环时钟频率(PLLCLK)关系为:

PLLCLK=2OSCCLK?SYNR?1 (4.1)

REFDV?1图4.3中的判断作用是使锁相环稳定后选择锁相环时钟为系统时钟。实际使用的外部晶振为16MHz,因此选择SYNR为32,REFDV为15,就可以使时钟频率达到32MHz。

时钟初始化程序如下: void CRGInit(void) {

SYNR = 31; //32M REFDV = 15;

CRGINT_LOCKIE = 1; // 使能锁相环稳定中断 while(!CRGFLG_LOCK); //等待系统时钟稳定 CLKSEL_PLLSEL = 0x80; //选择PLL时钟作为系统时钟

//The source clock for the RTI is OSCCLK. //OSCCLK = 8MHz; RTICTL = 0x46; // 初始化实时时钟 CRGINT = 0x80; // 使能实时中断

}

3、中断初始化

S12系列单片机内部为了实现中断,在存贮器的高端放置有中断向量,具体的说是在$FF8C~$FFFF的地址段内,共有58个中断向量。当中断发生时,相应的中断向量中的地址就被装入程序计数器,并把当时的寄存器状态压入堆栈。当中断返回时又将堆栈内容送给各寄存器,使主程序继续运行。

Codewarrior中的工程文件中有个专门用来定位各代码段位置的文件,后缀为.prm,文件中定义了代码段的位置、数据段的位置、中断程序的位置、中断向量的位置等。因此如果要使用中断向量,首先要在.prm文件中定义需

36

哈尔滨工程大学本科生毕业论文

要中断向量的位置。具体做法是在.prm文件的最后,添加类似如这样的声明语句:

VECTOR ADDRESS 0XFFE6 TIME4_ISR

这个语句的作用是声明在存储器0XFFE6处存放的是TIME4_ISR函数的入口地址,也就是完成了中断向量的填写工作。

这时应当在主函数中给该函数进行声明,声明的函数名必须和.prm文件中的函数名一致,和普通函数的声明有所不同,中断函数的声明需要对中断代码段进行定义。有两种方法:函数前面加interrput关键字,这是隐式的定义。或者使用预编译关键字#pragma具体做法是用如下语句:

#pragma code_seg default

这种是显式的定义。两种做法的作用都是使函数语句定位在直接寻址的存储器段,使得中断调用时可以直接寻址到该程序入口。在函数定义时进行同样的声明后就可以进行函数定义了。在使用两个或两个以上中断时,需要在每个中断函数声明时在函数名之前加上该中断的编号,这个编号为系统头文件中定义的中断名称的序号。 4.2.2 定时器初始化

程序中的中断我们只使用了定时器的输出比较功能和计数器溢出中断功能,因此这里先对S12的定时器功能做个简单介绍。

S12的定时器功能非常强大,该定时器的核心是一个16位的可编程计数器,计数的频率可以通过分频来调整,可以用来测量输入的脉冲宽度或者产生脉冲波形。定时器具有如下特性:

(1)用于4通道输入捕捉的16位缓冲寄存器; (2)4个8位脉冲累加器或两个16位脉冲累加器; (3)带有4位预分频的16位模数递减计数器; (4)4个可选择的延迟计数器用以增强抗干扰能力。

S12MCU输出比较的作用是产生输出动作或定时事件,该动作或事件与自由运行计数器同步。它由16比较器TCn和自由运行计数器TCNT组成。

37

哈尔滨工程大学本科生毕业论文

当定时器通道配置成输出比较方式时,16位比较寄存器的值与定时器通道寄存器的值相比较,若两值相等,会在通道的引脚上输出预设的电平。若要产生一个硬件的定时中断,只要设置中断标志为(CnF=1),允许输出比较中断即可。

定时器计数寄存器TCNT是一个递增计数器,它对内部时钟信号进行计数,可以随时进行读取,但应按字节访问。如果分别访问高、低字节,可能会得到不同的结果。

定时器寄存器如下表4.1所列。

表 4.1 定时计数寄存器TCNT

TCNT Hi TCNT Lo Read Write Read Write Bit15 Bit14 Bit13 Bit12 Bit11 Bit10 Bit9 Bit8 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 定时器模块控制寄存器控制定时器的中断使能、定时器的复位允许、和预分频选择。预分频在本设计中主要用来控制计数器溢出次数,使其尽可能降低。

预分频系数如表4.2。

表 4.2 预分频系数选择

PR2~PR0 预分频系数 000 1 001 2 010 4 011 8 100 16 101 32 110 64 111 128 定时器的预分频系数选择128,这时,由于总线时钟为16MHz,分频后为131072Hz,计数溢出的时间为65536131072Hz=0.5s,使得超声波发送与接收时间不会超出TCNT两个计数周期。 4.2.3 PWM初始化

PWM(Pulse Width Modulate)即脉宽调制[42],是工业控制和新型消费机

38

哈尔滨工程大学本科生毕业论文

电产品(例如智能空调,节能冰箱,电动车等)中最常用的技术。脉宽调制是一种可以用程序来控制波形占空比、周期、相位的方法。非常广泛的用在直流电机、D/A转换器等场合。MC9S12DG128B芯片的PWM模块具有如下特点:

(1)8个可编程控制周期和占空比的8位PWM通道; (2)每个PWM通道具有专用的计数器; (3)软件选择脉冲极性; (4)周期和占控比的值双缓冲; (5)高电平边沿或中心对称方式; (6)8个8位通道,或是4个16位通道; (7)4个可编程选择的时钟源; (8)紧急关闭;

(9)输出频率可与总线时钟频率相同;

(1)占空比的可调范围为0~100%,最高分辨率为0.15%。 PWM模块的初始化过程流程图可以表示成图4.4。

开始PWM信号禁止PWM信号时钟频率设定PWM信号对齐方式、极性的设定PWM信号周期、占空比设定PWM计数器初始计数值设定PWM端口输出使能PWM信号使能结束 图4.4 PWM初始化流程图

39

哈尔滨工程大学本科生毕业论文

PWM信号要完成电机的控制。电机要求的极限频率为10KHz,占空比要求从0~100%变化,舵机要求的频率为50Hz,占空比要求从5~10%,为了使所有的控制在一个字节内可以完成,要仔细考虑分频系数的选择。

对于电机控制,可以选择分频系数为2800,这样电机控制信号的频率就约是8571Hz,小于极限频率。

这里PWM模块采用左对齐方式,在该方式下,脉冲计数器为循环递增计数,计数初值为0 。当PWM使能后,计数器PWMCNT从0开始对时钟信号递增计数,开始一个输出周期。当计数值与占空比常数寄存器PWMDTY相等时,比较器1输出有效,将触发器置位,而PWMCNT继续计数;当计数值与周期常数寄存器PWMPER相等时,比较器2输出有效,将触发器复位,同时PWMCNT也复位,结束一个输出周期。如图4.5所示。

PWMDTYxPPOLx=0Period=PWMPREx

图4.5 PWM左对齐方式

左对齐方式下周期计算方法:

输出周期 = 通道周期 PWMPERx (4.2)

左对齐方式下脉宽计算方法:

占空比 = [ (PWMPERx —PWMDTYx) / PWMPERx ] 100% (4.3) PWM初始化程序及说明如下: void PWMready(void){

PWMPOL=0XFF; //通道0输出波形开始极性为1 PWMCAE=0x00; //左对齐输出方式 PWMCLK=0XFF; //时钟选择ClockSA PWMSCLA=0x08; //时钟SA为1MHz/128/2

40

哈尔滨工程大学本科生毕业论文

PWMSCLB=0x08; //同上 PWMCTL=0XF0; //通道级联 PWMPER01=4000; PWMDTY01=0; PWMPER23=4000; PWMPER45=4000; PWMDTY45=0;

PWME=0X3f; } //使能

4.3 速度闭环控制程序

本设计重点是基于数字PID算法的速度控制程序设计。 4.3.1 PID控制原理

在模拟控制系统中,控制器最常用的控制规律是PID控制[46]。PID控制器是一种线性控制器,它根据给定值r(t)与实际输出值c(t)构成控制偏差。、积分(I)和微分(D)通过线性组合构e(t)=r(t)-c(t)。将偏差的比例(P)

成控制量,对被控对象进行控制,故称PID控制。其控制框图[6]如图4.6所示。

KPr?e?1KIs???uG(s)yKDs 图4.6 PID控制框图

其控制规律为:

u(t)?KP[e(t)?1TI41

?t0e(t)dt?TDde(t)] (4.4) dt哈尔滨工程大学本科生毕业论文

传递函数表达形式为G(S)?U(S)1?KP[1??TDS] E(S)TIS式中KP、TI、TD分别为比例系数、积分时间常数、微分时间常数。PID控制器三个校正环节,比例环节能及时成比例地反映控制系统的偏差信号

e(t),偏差一旦产生,控制器立即产生控制作用,以减少偏差。比例控制不

能消除稳态误差,KP的加大,会引起系统的不稳定;积分环节主要用于消除静态误差,提高系统的无差度。只要系统存在误差,积分控制作用就不断的积累,输出控制量以消除误差。比例环节的作用是对信号的偏差瞬间做出反应,KP越大,控制作用越强,但过大的KP会导致系统振荡,破坏系统的稳定性。积分环节的作用虽然可以消除静态误差,但也会降低系统的响应速度,增加系统的超调量,甚至使系统出现等幅振荡,减小KI可以降低系统的超调量,但会减慢系统的响应过程。微分环节的作用是阻止偏差的变化,有助于减小超调量,克服振荡,使系统趋于稳定,但其对干扰敏感,不利于系统的鲁棒性。

4.3.2 数字PID控制算法

计算机控制是一种采样控制,它只能根据采样时刻的偏差值计算控制量。因此式4.4中的积分和微分项不能直接使用,需要进行离散化处理。当采样周期T足够短时,用求和代替积分、用向后差分代替微分,则有下式成立:

tk?e(t)dt?T?e(i) (4.5)

0i?0

de(t)e(k)?e(k?1)? (4.6) dtT将上式代入到公式4.4可得到离散的PID控制表达式:

Tke(k)?e(k?1)u(k)?KP[e(k)??e(i)?TD] (4.7)

TIi?0T ?KPe(k)?KI?e(i)?KD[e(k)?e(k?1)] (4.8)

i?0k式中Kp、KI(KI= KpT∕TI )、KD(KD=KpTD∕T)分别为比例系数,积分系数,

微分系数。

42

哈尔滨工程大学本科生毕业论文

此类控制系统是由输出量直接控制执行机构的,控制输入和执行机构的输出是一一对应的,通常称此类控制算法为位置式PID控制算法。由于是控制量的全量输入,当输入变化时,其输出端均与过去的状态有关,计算时要对e(k)进行累加,计算机运算量较大。另外,输入u(k)的大幅度变化会引起输出的大幅度变化,这种情况在实际工程实施中要尽量加以避免。因为有发生事故的可能性,因此提出了增量式PID控制算法。

所谓增量式PID指的是数字控制器的输出只是控制量的增量。根据递推原理可得:

u(k?1)?KPe(k?1)?KI?e(i)?KD[e(k?1)?e(k?2)] (4.9)

i?0k?1用公式4.7减去公式4.9则有:

?u(k)?KP[e(k)?e(k?1)]?KIe(k)KD[e(k)?2e(k?1)?e(k?2)]

?Ae(k)?Be(k?1)?Ce(k?2)

?KP?e(k)?KIe(k)?KD[e(k)?e(k?1)] (4.10)

TTT式中?e(k)?e(k)?e(k?1)、A?KP(1??D)、B?KP(1?2D)其中A、

TTITB、C都是与采样周期、比例系数、积分时间常数、微分时间有关的系数。 就整个控制系统而言,增量式与位置式控制算法并无本质的区别。但是增量式控制的输出是增量,误动作对系统影响小,算式中不需要累加;不足之处是积分截断效应大,有静态误差。 4.3.3 速度闭环控制程序设计

速度程序设计时采用增量PID算法。具体算法执行如下: interrupt void Real_Time_Interrupt(void) //实时中断 { lv=nv; //lv为上一速度,nv为当前速度

nv=PACN32; // PACN32光电码盘的速度测量值 PACN32=0; //清零

CRGFLG=0x80; //清实时中断标志位

43

哈尔滨工程大学本科生毕业论文

dv=nv-lv;

pwmv2=(vwnt-nv)*cp-dv*cd; //vwnt为期望速度值,PID控制 pwmv+=pwmv2;

if(pwmv>10000){pwmv=10000; } else if(pwmv<-10000){pwmv=-10000; } if(pwmv>=0){ PWMDTY01=0; PWMDTY45=pwmv;

}else{

PWMDTY01=-pwmv; PWMDTY45=0; }

} else{

PWMDTY01=600; PWMDTY45=0; }

程序设计的关键是对增量PID算法的了解,通过对当前速度值与期望速度值进行比较作差,差值作为负反馈因子。PID调节器是工业控制中理想的调节器,其中起主导作用的是P(比例)调节,因此对比例项的改进要慎重。

增量式PID控制输出的是控制量增量,并无积分作用,而在小车调速系统中为了增加动态响应速度,放弃了积分作用,单片机出现故障时,误动作影响较小,而执行机构本身有记忆功能,可仍保持原位,不会严重影响系统的工作能达到很好的性能要求。

4.4 超声波放到车防撞报警器程序设计

本模块分为两部分。首先是进行超声波测距部分的程序设计,在此基础上编写防撞报警程序。

图4.7为超声测距程序流程图。

44

哈尔滨工程大学本科生毕业论文

开始测距初始化N是否倒车Y开中断进行测距测距结果防撞报警器闪烁关中断结束 图4.7 程序流程图

4.4.1 距离计算算法和报警方案

超声波发生器在某一时刻发出超声波信号,遇到被测物体后反射回来,被超声波接收器接收到。只要计算出超声波信号从发射到接收到回波信号的时间,知道在介质中的传播速度,就可以计算出距被测物体的距离: d?s2?(vt)2 (4.11) 其中d为被测物到测距仪之间的距离,s为超声波往返通过的路程,v为超声波在介质中的传播速度,t为超声波从发射到接收所用的时间。为了提高精度,需要考虑不同温度下超声波在空气中传播速度随温度变化的关系: v?331.4?0.61T (4.12)

上式中,T为实际温度(℃),v的单位为m/s,t的单位为s。 以上是超声波测距的原理,本设计中不需要测量具体的距离值,以时间当量的形式描述距离值。

45

哈尔滨工程大学本科生毕业论文

报警器采用发光二极管,当小车向障碍物逼近时候,发光二极管闪烁的频率增加。因此以发射与接收超声波的时间间隔为距离当量,此当量再乘以一固定常数,作为发光二极管的闪烁周期。以此原理设计闪烁程序。 4.4.2 具体程序设计

本次设计中采用的凌阳超声波测距模组,重心侧重于程序设计。 首先让单片机发出40KHZ方波,这里的程序采用的是写延迟函数,设定B口1通道为输出口,通过多次更改延时时间系数,使方波稳定在40KHz。

1、40KHz方波延时程序与发射程序

void delay() { //通过软件方式进行延时程序设计 int ii;

for(ii=0;ii<12;ii++){} }产生的波形具体频率为38.8KHz。

由于每次测距需要5个周期,这里定义的40KHz方波发射程序如下所示: void fashe(){

char temp; //定义变量 DDRB=0XF7; //定义B口输出 time0=TCNT; //读取计数器初始值

for(temp=0;temp<10;temp++){ //发射周期数为10/2 PORTB_BIT1=~PORTB_BIT1; //B1口发射超声波 delay(); //延迟产生40KHz超声波 }

2、距离测量程序

方案采用单片机外部中断方式进行测距。超声波接收器接收到声波后会反馈给单片机一列脉冲。以此脉冲作为外部中断源触发单片机PE1通道,每

46

哈尔滨工程大学本科生毕业论文

次在发送时读取定时器技术寄存器的数据,在触发中断后在读取其数值,做差,即为本次测距时间当量。程序设计如下:

interrupt void IRQ(void) // 需要延迟1ms {

time1=TCNT; //触发中断时候读取计数器值 time=time1+count*65536-time0; //计数器数据做差 count=0; //清零

if(time<120) //最小测距为120当量 time=120;

if(time>500) //最大测距为500当量 time=500;

time=time/10; //发管二极管报警器闪烁周期的因子 }

3、报警器程序

通过超声波测距程序将障碍物离小车的距离测量后,进行报警器的设计,设计思想是:通过单片机B口2通道来驱动发光二极管,编写相应的驱动程序,控制发光二加管的闪烁频率,当小车向障碍物逼近时,发光二极管闪烁的频率显著增加,以此来达到报警效果。程序设计如下:

if(shanshuo>time)

shanshuo=0; //闪烁参数清零 if(shanshuo

PORTB_BIT0=~PORTB_BIT0; //B口驱动二极管 }

47

哈尔滨工程大学本科生毕业论文

4.5 LCD显示程序设计

LCD采用1602A显示芯片,围绕其进行设计[47]。

由于只需要显示期望速度跟当前速度两个参数,因此1602A已经够用。字符液晶首先要进行初始化,而初始化时需要不断的清屏指令,因此优先编写延迟函数,通过延时来等待LCD的读取信号忙结束,保证LCD能够接收单片机送来的数据或指令。

LCD1602A的操作有11种指令:

(1)清屏指令:清除液晶显示器,将地址计数器AC的值设为0; (2)光标归位指令:将光标撤回显示器的左上方;

(3)进入模式指令:设定每次进入移位数据后光标的移位方向; (4)显示开关控制指令:控制显示器开∕关、光标显示∕关闭以及光标是否闪烁;

(5)设定显示屏或光标移动方向指令:使光标或整个显示器移位; (6)功能设定指令:设定数据总线位数、显示的行数及字型; (7)设定CGRAM地址指令:设定下一个要存入数据的CGRAM的地址;

(8)设定DDRAM地址指令:设定下一个要存入数据的CGRAM的地址;

(9)读取忙信号或AC地址指令:读取忙信号BF内容,BF=1表示液晶显示器忙;

(10)数据写入CGRAM或DDRAM指令一览; (11)从CGRAM或DDRAM读出数据的指令一览。

通过编写程序每0.35秒读取一次测速值,先将LCD初始化程序写好,再向单片机写LCD指令,延时,再写LCD数据,通过不断地刷新速度值,使小车速度能实时显示,

LCD显示程序流程图如4.8所示。

48

哈尔滨工程大学本科生毕业论文

开始LCD初始化LCD写指令调用测速函数值LCD写数据 图4.8 LCD显示流程图

显示4.5.1 LCD模块初始化

设置LCD的显示方式、光标位置、闪烁与否、移位方式清屏指令等。程序设计如下:

1、延迟函数

void delay_ms4(int ms) { //延迟函数,ms取值1~255; int ii,jj; if (ms<1) ms=1; for(ii=0;ii

2、LCD初始化

此部分主要进行了LCD显示方式、换行方式、光标闪烁方式、清屏方式、光标移动方式等的设置。

void init() //LCD 初始化; {

write_cmd(0x38); //设置8位格式,2行,5x7点阵; delay_ms4(100); //延迟函数;

49

哈尔滨工程大学本科生毕业论文

write_cmd(0x0f); //整体显示,有光标,闪烁; delay_ms4(100);

write_cmd(0x01); //清除屏幕显示; delay_ms4(100);

write_cmd(0x06); //设定输入方式,增量不移位。 delay_ms4(100); }

4.5.2 显示程序设计

LCD初始化完成后,需要对速度参数进行显示,首先写入指令,再写入数据。因此实际程序如下:

先进行写指令函数编写,通过向单片机写入控制指令,控制LCD状态。 void write_cmd(uchar com) //写指令函数 {

LCD_DATA=com; //写入指令 RS=0; RW=0;

LCDEN=0; //给低电平信号 delay3(50); //延时函数 LCDEN=1; //LCD使能 delay3(50);

LCDEN=0; //给低电平信号 delay3(50); }

接着进行写数据函数编写,同样向单片机写入数据指令,进行数据显示。 void write_date(uchar dat) //写数据函数,往LCD写入数据 {

50

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

Top