您好,欢迎来到年旅网。
搜索
您的当前位置:首页单片机循迹小车的系统设计

单片机循迹小车的系统设计

来源:年旅网
焦作大学毕业设计 摘要

摘要

本设计是以单片机为核心部件的小车循迹控制,利用电机驱动芯片L298来接控制小车内部前后两个电机的速度与转向。

红外一体传感器RPR220安装于小车地盘采集路面信号,然后经处理过后给单片机进行处理。

鼠标机械滚轮安装于小车后轮通轴上,用来测小车的行驶速度和路程,方便于控制小车速度。

本设计用到扩展芯片74hc1用以I/O口的扩展,后面外接两片带有所存功能的驱动芯片74hc573用来驱动数码管和128液晶模块。

本设计采用C语言编程而非汇编语言,主要因为C语言具有很强的可读性和可移植性,便于改进和扩充,在软件的开发中可大大缩短开发周期,使用C语言进行单片机程序设计也是单片机开发与应用的必然趋势。

关键词:单片机;电机驱动;红外RPR220采集信号

I

焦作大学毕业设计 AbStract

Abstract

The design is based on the core components of MCU ATS52 car tracking control, the use of motor driver chipL298 to take control of car before and after the two motors inside the speed and steering.

Infrared body sensor installed in the car site collection RPR220 road signals, and

then treated after a givenMicrocontroller for processing.

Mouse machinery installed in the car rear wheel pass axis is used to measure speed and distance car ride to facilitate the to control car speed.

The design used for the expansion of 74hc1 chip I / O port expansion, followed

by an external two stored functions with the driver chip 74hc573 used to drive the digital control and LCD Module 128.

This design uses a C instead of assembly language programming language, mainly due to the C language has a very strong readability and portability, easy to improve and expand, in the software development can be greatly shorten the development cycle, using the C language for microcontroller programming SCM is also an inevitable trend of development and application.

Keywords: MCU; Motor drives;Infrared RPR220 acquisition signals

II

焦作大学毕业设计 目录

目录

1 前言 ............................................................... 1 2 方案设计与论证 ..................................................... 3

2.1 直流调速系统 ................................................. 3 2.2 检测系统 ..................................................... 4

2.2.1 行车起始、终点及光线检测 ................................ 4 2.2.2检测放大器方案 .......................................... 5 2.2.3行车距离检测 ............................................ 8 2.3显示电路 ...................................................... 9 2.4 系统原理图 ................................................... 9 3 硬件设计 .......................................................... 10

3.1 80C51单片机硬件结构 ......................................... 10 3.2 最小应用系统设计 ............................................ 11

3.2.1时钟电路 ............................................... 12 3.2.2复位电路 ............................................... 12 3.3 前向通道设计 ................................................ 13 3.4 后向通道设计 ................................................ 15 3.5 显示电路设计 ................................................ 19 4软件设计 .......................................................... 21

4.1主程序设计 ................................................... 21 4.2 显示子程序设计 .............................................. 23 4.3 红外扫描子程序设计 .......................................... 25 4.4 软件抗干扰技术 .............................................. 30 4.5 “看门狗”技术 .............................................. 33 4.6 可编程逻辑器件 .............................................. 33 5 测试数据、测试结果分析及结论 ...................................... 35 参考文献 ............................................................ 36 附录 ................................................................ 37 致谢 ................................................................ 48

III

焦作大学毕业设计 1前言

1 前言

随着汽车工业的迅速发展,关于汽车的研究也就越来越受人关注。全国电子大赛和省内电子大赛几乎每次都有智能小车这方面的题目,全国各高校也都很重视该题目的研究。可见其研究意义很大。本设计就是在这样的背景下提出的,指导教师已经有充分的准备。本题目是结合科研项目而确定的设计类课题。设计的智能电动小车应该能够实时显示时间、速度、里程,具有自动寻迹、寻光、避障功能,可程控行驶速度、准确定位停车。

根据题目的要求,确定如下方案:在现有玩具电动车改装的基础上,加装光电、红外线、超声波传感器及金属探测器,实现对电动车的速度、位置、运行状况的实时测量,并将测量数据传送至单片机进行处理,然后由单片机根据所检测的各种数据实现对电动车的智能控制。

这种方案能实现对电动车的运动状态进行实时控制,控制灵活、可靠,精度高,可满足对系统的各项要求。本设计采用MCS-51系列中的80s52单片机。以80s52为控制核心,利用超声波传感器检测道路上的障碍,控制电动小汽车的自动避障,快慢速行驶,以及自动停车,并可以自动记录时间、里程和速度,自动寻迹和寻光功能。80s52是一款八位单片机,它的易用性和多功能性受到了广大使用者的好评。它是第三代单片机的代表。

第三代单片机包括了Intel公司发展MCS-51系列的新一代产品,如8xC152﹑80C51FA/FB﹑80C51GA/GB﹑8xC451﹑8xC452,还包括了Philips﹑Siemens﹑ADM﹑Fujutsu﹑OKI﹑Harria-Metra﹑ATMEL等公司以80C51为核心推出的大量各具特色﹑与80C51兼容的单片机。新一代的单片机的最主要的技术特点是向外部接口电路扩展,以实现Microcomputer完善的控制功能为己任,将一些外部接口功能单元如A/D﹑PWM﹑PCA(可编程计数器阵列)﹑WDT(监视定时器)﹑高速I/O口﹑计数器的捕获/比较逻辑等。这一代单片机中,在总线方面最重要的进展是为单片机配置了芯片间的串行总线,为单片机应用系统设计提供了更加灵活的方式。Philips公司还为这一代单片机80C51系列8xC592单片机引入了具有较强功能的设备间网络系统总线----CAN(Controller Area Network BUS).

新一代单片机为外部提供了相当完善的总线结构,为系统的扩展与配置打下了良好的基础。

本设计就采用了比较先进的80C51为控制核心,80C51采用CHOMS工艺,功耗很低。该设计具有实际意义,可以应用于考古、机器人、医疗器械等许多方面。

1

焦作大学毕业设计 1前言

尤其是在足球机器人研究方面具有很好的发展前景;在考古方面也应用到了超声波传感器进行检测。所以本设计与实际相结合,现实意义很强。

2

焦作大学毕业设计 2方案设计与论证

2 方案设计与论证

根据题目的要求,确定如下方案:在现有玩具电动车改装的基础上,加装光电检测器,实现对电动车的速度、位置、运行状况的实时测量,并将测量数据传送至单片机进行处理,然后由单片机根据所检测的各种数据实现对电动车的智能控制。

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

2.1 直流调速系统

方案一:串电阻调速系统。

方案二:静止可控整流器。简称V-M系统。 方案三:脉宽调速系统。

旋转变流系统由交流发电机拖动直流电动机实现变流,由发电机给需要调速的直流电动机供电,调节发电机的励磁电流即可改变其输出电压,从而调节电动机的转速。改变励磁电流的方向则输出电压的极性和电动机的转向都随着改变,所以G-M系统的可逆运行是很容易实现的。该系统需要旋转变流机组,至少包含两台与调速电动机容量相当的旋转电机,还要一台励磁发电机,设备多、体积大、费用高、效率低、维护不方便等缺点。且技术落后,因此搁置不用。

V-M系统是当今直流调速系统的主要形式。它可以是单相、三相或更多相数,半波、全波、半控、全控等类型,可实现平滑调速。V-M系统的缺点是晶闸管的单向导电性,它不允许电流反向,给系统的可逆运行造成困难。它的另一个缺点是运行条件要求高,维护运行麻烦。最后,当系统处于低速运行时,系统的功率因数很低,并产生较大的谐波电流危害附近的用电设备。

采用晶闸管的直流斩波器基本原理与整流电路不同的是,在这里晶闸管不受相位控制,而是工作在开关状态。当晶闸管被触发导通时,电源电压加到电动机上,当晶闸管关断时,直流电源与电动机断开,电动机经二极管续流,两端电压接近于零。脉冲宽度调制(Pulse Width Modulation),简称PWM。脉冲周期不变,只改变晶闸管的导通时间,即通过改变脉冲宽度来进行直流调速。

与V-M系统相比,PWM调速系统有下列优点:

(1)由于PWM调速系统的开关频率较高,仅靠电枢电感的滤波作用就可以获得脉动很小的直流电流,电枢电流容易连续,系统的低速运行平稳,调速范围较宽,可达1:10000左右。由于电流波形比V-M系统好,在相同的平均电流下,电

3

焦作大学毕业设计 2方案设计与论证

动机的损耗和发热都比较小。

(2)同样由于开关频率高,若与快速响应的电机相配合,系统可以获得很宽的频带,因此快速响应性能好,动态抗扰能力强。

(3)由于电力电子器件只工作在开关状态,主电路损耗较小,装置效率较高。 根据以上综合比较,以及本设计中受控电机的容量和直流电机调速的发展方向,本设计采用了H型单极型可逆PWM变换器进行调速。

脉宽调速系统的主电路采用脉宽调制式变换器,简称PWM变换器。 脉宽调速也可通过单片机控制继电器的闭合来实现,但是驱动能力有限。为顺利实现电动小汽车的前行与倒车,本设计采用了可逆PWM变换器。可逆PWM变换器主电路的结构式有H型、T型等类型。我们在设计中采用了常用的双极式H型变换器,它是由4个三极电力晶体管和4个续流二极管组成的桥式电路。

2.2 检测系统

检测系统主要实现光电检测,即利用各种传感器对电动车的避障、位置、行车状态进行测量。

2.2.1 行车起始、终点及光线检测

本系统采用反射式红外线光电传感器用于检测路面的起始、终点(2cm宽的黑线),玩具车底盘上沿黑线放置一套,以适应起始的记数开始和终点的停车的需要。利用超声波传感器检测障碍。光线跟踪,采用光敏三极管接收灯泡发出的光线,当感受到光线照射时,其c-e间的阻值下降,检测电路输出高电平,经LM393电压比较器和74LS14施密特触发器整形后送单片机控制。

本系统共设计两个红外一体,分别放置在电动车车头的左、右两个方向,用来控制电动车的行走方向,当左侧光电管检测到黑线时,单片机控制转向电机向左转;当右侧光电管检测到黑线时,单片机控制转向电机向右转;当中间两个光电管都检测到黑线时,单片机控制直行。见图2-1 电动车的方向检测电路。

行车方向检测电路采用反射接收原理配置了一对红外线发射、接收传感器。该电路包括一个红外发光二极管、一个红外光敏三极管及其上拉电阻。红外发光二极管发射一定强度的红外线照射物体,红外光敏三极管在接收到反射回来的红外线后导通,发出一个电平跳变信号。

此套红外光电传感器固定在底盘前沿,贴近地面。正常行驶时,发射管发射红外光照射地面,光线经白纸反射后被接收管接收,输出高电平信号;电动车经过黑线时,发射端发射的光线被黑线吸收,接收端接收不到反射光线,传感器输

4

焦作大学毕业设计 2方案设计与论证

出低电平信号后送80C51单片机处理,判断执行哪一种预先编制的程序来控制玩具车的行驶状态。前进时,驱动轮直流电机正转,进入减速区时,由单片机控制进行PWM变频调速,通过软件改变脉冲调宽波形的占空比,实现调速。最后经反接制动实现停车。前行与倒车控制电路的核心是桥式电路和继电器。电桥上设置有两组开关,一组常闭,另一组常开。

图2-1 电动车的方向检测电路

2.2.2检测放大器方案

方案一:使用普通单级比例放大电路。其特点是结构简单、调试方便、价格低廉。但是也存在着许多不足。如抗干扰能力差、共模抑制比低等。

方案二:采用差动放大电路。选择优质元件构成比例放大电路,虽然可以达

5

焦作大学毕业设计 2方案设计与论证

到一定的精度,但有时仍不能满足某些特殊要求。例如,在测量本设计中的光电检测信号时需要把检测过来的电平信号放大并滤除干扰,而且要求对共模干扰信号具有相当强的抑制能力。这种情况下须采用差动放大电路,并应设法减小温漂。但在实际操作中,往往满足了高共模抑制比的要求,却使运算放大器输出饱和;为获得单片机能识别的TTL电平却又无法抑制共模干扰。

方案三:电压比较器方案。电压比较器的功能是比较两个电压的大小,例如将一个信号电压Ui和一个参考电压Ur进行比较,在Ui>Ur和Ui比较器有各种不同的类型。对它的要求是:鉴别要准确,反应要灵敏,动作要迅速,抗干扰能力要强,还应有一定的保护措施,以防止因过电压或过电流而造成器件损坏。

电压比较器的特点:

工作在开环或正反馈状态。放大、运算电路为了实现性能稳定并满足 一定的精度要求,这些电路中的运放均引入了深度负反馈;而为了提高比较器的反应速度和灵敏度,它所采用的运放不但没有引入负反馈,有时甚至还加正反馈。因此比较器的性能分析方法与放大、运算电路是不同的。

非线性。由于比较器中运放处于开环或正反馈状态,它的两个输入端之间的电位差与开环电压放大倍数的乘积通常超过最大输出电压,使其内部某些管子进入饱和区或截止区,因此在绝大多数情况下输出与输入不成线性关系,即在放大、运算等电路中常用的计算方法对于比较器不再适用。

开关特性。比较器的输出通常只有高电平和低电平两种稳定状态,因此它相当与一个受输入信号控制的开关,当输入电压经过阈值时开关动作,使输出从一个电平跳变到另一个电平。由于比较器的输入信号是模拟量,而它的输出电平是离散的,因此电压比较器可作为模拟电路与数字电路之间的过渡电路。

由于比较器的上述特点,在分析时既不能象对待放大电路那样去计算放大倍数,也不能象分析运算电路那样去求解输出与输入的函数关系,而应当着重抓住比较器的输出从一个电平跳变到另一个电平的临界条件所对应的输入电压值(阈值)来分析输入量与输出量之间的关系。

如果在比较器的输入端加理想阶跃信号,那么在理想情况下比较器的输出也应当是理想的阶跃电压,而且没有延迟。但实际集成运放的最大转换速率总是有

6

焦作大学毕业设计 2方案设计与论证

限的,因此比较器输出电压的跳变不可能是理想的阶跃信号。电压比较器的输出从低电平变为高电平所须的时间称为响应时间。响应时间越短,响应速度越快。减小比较器响应时间的主要方法有:

(1) 尽可能使输入信号接近理想情况,使它在阈值附近的变化接近理想阶跃 且幅度足够大。 (2) 选用集成电压比较器。

(3) 如果选用集成运放构成比较器,为了提高响应速度可以加限幅措施,以避免集成运放内部的管子进入深饱和区。具体措施多为在集成运放的两个输入端并联二极管。如图2-2 电压比较器电路所示:

图2-2 电压比较器电路

在本设计中,光电传感器只输出一种高低电平信号且伴有外界杂波干扰,所以我们尝试采用了一种滞回比较器。简单电压比较器结构简单,而且灵敏度高,但它的抗干扰能力差,也就是说如果输入信号因受干扰在阈值附近变化,则比较器输出就会反复的从一个电平跳到另一个电平。如果用这样的输出电压控制电机或继电器,将出现频繁动作或起停现象。这种情况,通常是不允许的。而滞回比较器则解决了这个问题。滞回比较器有两个数值不同的阈值,当输入信号因受干扰或其他原因发生变化时,只要变化量不超过两个阈值之差,滞回比较器的输出电压就不会来回变化。所以抗干扰能力强。

但是,滞回比较器毕竟是模拟器件,温度的漂移是它无法消除的。 方案四:施密特触发器。

综合考虑系统的各项性能,最后我们决定采用数字器件——施密特触发器。 施密特触发器是双稳态触发器的变形,它有两个稳定状态,触发方式为电平触发,只要外加触发信号的幅值增加到足够大,它就从一个稳定状态翻转到另一个稳定状态。施密特触发器具有与滞回比较器相类似的滞回特性,但施密特触发

7

焦作大学毕业设计 2方案设计与论证

器的抗干扰能力比滞回比较器更强。

2.2.3行车距离检测

由于槽型红外检测具有反应速度快、定位精度高,可靠性强以及可见光传感器所不能比拟的优点,故采用红外光电码盘测速方案。具体电路同图2-3 行车距离检测电路所示:

图2-3 行车距离检测电路

红外测距仪由测距轮,遮光盘,红外光电耦合器及凹槽型支架组成的。测长轮的周长为记数的单位,最好取有效值为单一的数值(如本设计中采用0.1米),精度根据电动车控制的需要确定。测距轮安装在车轮上,这样能使记数值准确一些。

遮光盘有一缺口,盘下方的凹形物为槽型光电耦合器,其两端高出部分的里面分别装有红外发射管和红外接收管。遮光盘在凹槽中转动时,缺口进入凹槽时,红外线可以通过,缺口离开凹槽红外线被阻挡。由此可见,测距轮每转一周,红外光接收管均能接收到一个脉冲信号经过整形器后送入计数器或直接送入单片机中。

为实现可逆记数功能,我们在测距仪中并列放置了两个槽型光电耦合器,遮光盘先后通过凹槽可产生两个脉冲信号。根据两个脉冲信号发生的先后顺序与两个光电耦合器的位置关系,即可计算出玩具车的行驶方向(前进或后退)。

遮光盘及槽型光电耦合器均安装在不透光的盒子里,以避免外界光线的干扰,使电路不能正常工作。

测距原理:将光栅安装在电机轴上,当电机转动时,光栅也随之转动,同时安装在光栅一侧的红外发光二极管点亮,在光栅的另一侧设有红外三极管,用于接收红外发光二极管发出的红外线信号。由于光栅随电机高速转动,则红外线三极管接收到的就是一系列脉冲信号。将该信号传输到80C51单片机的内部计数器

8

焦作大学毕业设计 2方案设计与论证

计数,根据预先实测的数据换算关系即可计算出电动机车的行车距离。

2.3显示电路

本设计中用一片四位共阴数码管做显示器,并具有双重功能,在小车行驶中显示小车的速度状态,在小车停止时显示小车的路程。

2.4 系统原理图

简易智能电动车采用ats52单片机进行智能控制。开始由手动启动小车,并复位,当经过规定的起始黑线,红外光电传感器检测,通过单片机控制小车开始记数显示并循迹、调速;系统的自动循迹功能通过红外RPR220传感器正前方检测和左右侧检测,由单片机控制实现;在电动车进驶过程中,采用电机专用驱动芯片L298,以提高系统的静动态性能;采用动态共阴显示行驶速度和里程。 系统原理图如图2-4所示。

图2-4 系统原理图

9

焦作大学毕业设计 3硬件设计

3 硬件设计

一个单片机应用系统的硬件电路设计包含有两部分内容:一是系统扩展,即单片机内部的功能单元,如ROM﹑RAM﹑I/O口﹑定时/记数器﹑中断系统等能量不能满足应用系统的要求时,必须在片外进行扩展,选择适当的芯片,设计相应的电路。二是系统配置,既按照系统功能要求配置外围设备,如键盘显示器﹑打印机﹑A/D﹑D/A转换器等,要设计合适的接口电路。

3.1 80C51单片机硬件结构

80C51单片机是把那些作为控制应用所必需的基本内容都集成在一个尺寸有限的集成电路芯片上[2]。如果按功能划分,它由如下功能部件组成,即微处理器、数据存储器、程序存储器、并行I/O口、串行口、定时器/计数器、中断系统及特殊功能寄存器。它们都是通过片内单一总线连接而成,其基本结构依旧是CPU加上外围芯片的传统结构模式。但对各种功能部件的控制是采用特殊功能寄存器的集中控制方式。

1 微处理器

该单片机中有一个8位的微处理器,与通用的微处理器基本相同,同样包括了运算器和控制器两大部分,只是增加了面向控制的处理功能,不仅可处理数据,还可以进行位变量的处理。

2 数据存储器

片内为128个字节,片外最多可外扩至k字节,用来存储程序在运行期间的工作变量、运算的中间结果、数据暂存和缓冲、标志位等,所以称为数据存储器。

3 程序存储器

由于受集成度,片内只读存储器一般容量较小,如果片内的只读存储器的容量不够,则需用扩展片外的只读存储器,片外最多可外扩至k字节。

4 中断系统

具有5个中断源,2级中断优先权。 5 定时器/计数器

片内有2个16位的定时器/计数器, 具有四种工作方式。 6 串行口

1个全双工的串行口,具有四种工作方式。可用来进行串行通讯,扩展并行I/O口,甚至与多个单片机相连构成多机系统,从而使单片机的功能更强且应用更

10

焦作大学毕业设计 3硬件设计

广。

7 P1口、P2口、P3口、P4口 为4个并行8位I/O口。 8 特殊功能寄存器

共有21个,用于对片内的个功能的部件进行管理、控制、监视。实际上是一些控制寄存器和状态寄存器,是一个具有特殊功能的RAM区。

由上可见,80C51单片机的硬件结构具有功能部件种类全,功能强等特点。特别值得一提的是该单片机CPU中的位处理器,它实际上是一个完整的1位微计算机,这个一位微计算机有自己的CPU、位寄存器、I/O口和指令集。1位机在开关决策、逻辑电路仿真、过程控制方面非常有效;而8位机在数据采集,运算处理方面有明显的长处。MCS-51单片机中8位机和1位机的硬件资源复合在一起,二者相辅相承,它是单片机技术上的一个突破,这也是MCS-51单片机在设计的精美之处。

3.2 最小应用系统设计

80C51是片内有ROM/EPROM的单片机,因此,这种芯片构成的最小系统简单﹑可靠。用80C51单片机构成最小应用系统时,只要将单片机接上时钟电路和复位电路即可,如图3-1 80C51单片机最小系统所示。由于集成度的,最小应用系统只能用作一些小型的控制单元。其应用特点:

(1)有可供用户使用的大量I/O口线。 (2)内部存储器容量有限。 (3)应用系统开发具有特殊性。

图3-1 80C51单片机最小系统

11

焦作大学毕业设计 3硬件设计

3.2.1时钟电路

80C51虽然有内部振荡电路,但要形成时钟,必须外部附加电路。80C51单片机的时钟产生方法有两种。内部时钟方式和外部时钟方式。

本设计采用内部时钟方式,利用芯片内部的振荡电路,在XTAL1、XTAL2引脚上外接定时元件,内部的振荡电路便产生自激振荡。本设计采用最常用的内部时钟方式,即用外接晶体和电容组成的并联谐振回路。振荡晶体可在1.2MHZ到12MHZ之间选择。电容值无严格要求,但电容取值对振荡频率输出的稳定性、大小、振荡电路起振速度有少许影响,CX1、CX2可在20pF到100pF之间取值,但在60pF到70pF时振荡器有较高的频率稳定性。所以本设计中,振荡晶体选择6MHZ,电容选择65pF。

在设计印刷电路板时,晶体和电容应尽可能靠近单片机芯片安装,以减少寄生电容,更好的保证振荡器稳定和可靠地工作。为了提高温度稳定性,应采用NPO电容。

3.2.2复位电路

80C51的复位是由外部的复位电路来实现的。复位引脚RST通过一个斯密特触发器用来抑制噪声,在每个机器周期的S5P2,斯密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。

复位电路通常采用上电自动复位和按钮复位两种方式。

最简单的上电自动复位电路中上电自动复位是通过外部复位电路的电容充电来实现的。只要Vcc的上升时间不超过1ms,就可以实现自动上电复位。时钟频率用6MHZ时C取22uF,R取1KΩ。

除了上电复位外,有时还需要按键手动复位。本设计就是用的按键手动复位。按键手动复位有电平方式和脉冲方式两种。其中电平复位是通过RST端经电阻与电源Vcc接通而实现的。按键手动复位电路见图3-2。时钟频率选用6MHZ时,C取22uF

12

焦作大学毕业设计 3硬件设计

图3-2 80C51复位电路

3.3 前向通道设计

单片机用与测控系统时,总要有与被测对象相联系的前向通道。因此,前向通道设计与被测对象的状态、特征、所处环境密切相关。在前向通道设计时要考虑到传感器或敏感元件选择、通道结构、信号调节、电源配置、抗干扰设计等。在通道电路设计中还涉及到模拟电路诸多问题。

1﹑前向通道的含义

当将单片机用作测﹑控系统时,系统中总要有被测信号输入通道,有计算机拾取必要的输入信息。作为测试系统,对被测对象拾取必要的原始参量信号是系统的核心任务,对控制系统来说,对被控对象状态的测试以及对控制条件的监测也是不可缺少的环节。

对被测对象状态的测试一般都离不开传感器或敏感元件,这是因为被测对象的状态参数常常是一些非电物理量,如温度、压力、载荷、位移等,而计算机是一个数字电路系统。因此,在前向通道中,传感器、敏感元件及其相关电路占有重要地位。

对被测对象的信号的拾取其主要任务就是最忠实地反映被测对象的真实状态,它包括实时性与测量精度。同时使这些测量信号能满足计算机输入接口的电平要求。

因此,单片机应用系统中的前向通道体现了被测对象与系统相互联系的信号输入通道,原始参数输入通道。由于在该通道中主要是传感器与传感器有关的信号调节、变换电路,故也可称为传感器接口通道。

在单片机应用系统中,对信号输入、传感、变换应作广义理解,例如开关量

13

焦作大学毕业设计 3硬件设计

的检测及信号输入,在单片机的各种应用系统中有着广泛的应用。最简单的开关量输入通道就是一个具有TTL电平的状态开关,如水银温度触点、温度晶闸管、时间继电器、限位开关等。故只要反映外界状态的信号输入通道都可称为前向通道。

并不是所有单片机应用系统都有前向通道,例如时序控制系统,只根据系统内部的时间序列来控制外部的运行状态;分布式测控系统中的智能控制总站完成上级主计算机与现场测、控子站计算机之间的指令、数据传送。这些应用系统没有被测对象,故不需要前向通道。

摄像头传感器测量范围广泛,由于小车的工作要求不是太严格,考虑成本太高,所以放弃此放啊,最终选定反射式红外传感器。

2﹑前向通道的设计 (1)传感器的比较

循迹的首要问题是扫描地面路线,下面对几种传感器的优缺点进行说明(见表3-1 )

表3-1 传感器性能比较

传感器类型 光敏电阻

优点 灵敏度好,价格适当。

缺点 抗干扰能力太弱。 价格略贵。

反射式红外 灵敏度好,抗干扰能力强 摄像头

测量范围广泛,可实现远程控制。 频率要求严苛,价格略贵。

循迹的最简单的方法是使用光敏电阻,它是利用电阻的光敏特性,判定光的强弱程度。该方法被广泛应用于光控领域。其优点是价格便宜,易于使用,性能稳定。不过在此系统设计中除了上文提出的场景外,还有以下问题。首先因其抗干扰能力太弱,所以并不适合做循迹小车只用系统。

摄像头传感器在CW系统中使用得非常广泛。其优点是尺寸小,价格合理, 一定的宽度和视觉域内可以测量定多个目标,并且可以利用测量的图像根据外形和大小对目标进行分类。但是算法复杂,处理速度慢。雷达传感器在军事和航空领域已经使用了几十年。主要优点是可以鲁棒地探测到障碍而不受天气或灯光条件。近十年来随着尺寸及价格的降低,在汽车行业开始被使用。但是仍存在性价比的问题,本设计最终选定利用反射式红外RPR220做地面检测。反射式红外

14

焦作大学毕业设计 3硬件设计

RPR220内部发射头是一个砷化镓红外发射二极管,接收头是一个高灵敏度的硅平面光电三极管。它被广泛应用于游戏机,复印件和办公自动化领域。 2 槽型红外对管测速

槽型红外光电传感器,由高发射功率的砷化镓(砷铝镓)红外发射管和 高灵敏度的光敏晶体管组成。

凹槽型光电开关(光电传感器)是利用被检测物体对红外光束的遮光,由同步回路选通而检测物体的有无,其物体不限于金属,对所有能反射光线的物体均可检测。产品广泛用于电力仪表、电子仪器仪表、计数器、转速测量、位置测量、传真机、碎纸机等各种工业和民用场合,本设计自制计数齿轮如图3-3所示。

图3-3 槽型红外对管测速原理

安装于小车后轮主轴上,盘孔穿过红外对管的槽内,当小车转动时,盘子随着后轮主轴一起转动,此时红外对管的接收管会在饱和和截止来回切换,因红外也会多少受到外界的干扰,所以再经电压比较器LM339处理后方可送往单片机处理。

3.4 后向通道设计

在工业控制系统中,单片机总要对控制对象实现操作,因此,在这样的系统中,总要有后向通道。后向通道是计算机实现控制运算处理后,对控制对象的输出通道接口。

根据单片机的输出和控制对象实现控制信号的要求,后向通道具有以下特点:(1)小信号输出、大功率控制。根据目前单片机输出功率的,不能输出控制对象所要求的功率信号。

(2)是一个输出通道。输出伺服驱动系统控制信号,而伺服驱动系统中的状态反馈信号通常是作为检测信号输入前向通道。

(3) 接近控制对象,环境恶劣。控制对象多为大功率伺服驱动机构,电磁、

15

焦作大学毕业设计 3硬件设计

机械干扰较为严重。但后向通道是一个输出通道,而且输出电平较高,不易受到直接损害。但这些干扰易从系统的前向通道窜入。

单片机在完成控制处理后,总是以数字信号通过I/O口或数据总线送给控制对象。这些数字信号形态主要有开关量、二进制数字量和频率量,可直接用于开关量、数字量系统及频率调制系统,但对于一些模拟量控制系统,则应通过数/模转换成模拟量控制信号。

根据单片机输出信号形态及控制对象要求,后向通道应解决:

(1)功率驱动。将单片机输出信号进行功率放大,以满足伺服驱动的功率要求。

(2)干扰防治。主要防治伺服驱动系统通过信号通道﹑电源以及空间电磁场对计算机系统的干扰。通常采用信号隔离﹑电源隔离和对功率开关实现过零切换等方法进行干扰防治。

(3)数/模转换。对于二进制输出的数字量采用D/A变换器;对于频率量输出则可以采用

本设计调速采用PWM调速[5]:为顺利实现电动小汽车的左转和右转,本设计采用了可逆PWM变换器。可逆PWM变换器主电路的结构式有H型、T型等类型。我们在设计中采用恒压恒流桥式2A驱动芯片L298N,L298是SGS公司的产品,比较常见的是15脚Multiwatt封装的L298N,内部同样包含4通道逻辑驱动电路。可以方便的驱动两个直流电机,或一个两相步进电机。

L298N芯片可以驱动两个二相电机,也可以驱动一个四相电机,输出电压最高可达50V,可以直接通过电源来调节输出电压;可以直接用单片机的IO口提供信号;而且电路简单,使用比较方便。

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,10,12脚接输入控制电平,控制电机的正反转。EnA,EnB接控制使能端,控制电机的停转。表3-2是L298N功能逻辑图。

16

焦作大学毕业设计 3硬件设计

表3-2 逻辑功能表

In3,In4的逻辑图与表2相同。由表2可知EnA为低电平时,输入电平对电机控制起作用,当EnA为高电平,输入电平为一高一低,电机正或反转。同为低电平电机停止,同为高电平电机刹停。

图3-4是L298N控制器原理图,由3个虚线框图组成。

图3-4 L298原理图

(1)虚线框图1控制电机正反转,U1A,U2A是比较器,VI来自炉体压强传感器的电压。当VI>VRBF1时,U1A输出高电平,U2A输出高电平经反相器变为低电平,电机正转。同理VI<VRBF1时,电机反转。电机正反转可控制抽气机抽出气体的流量,从而改变炉体压强。

(2)虚线框图2中,U3A,U4A两个比较器组成双限比较器,当VB<VI<VA时输出低电平,当VI>VA,VI<VB时输出高电平。VA,VB是由炉体压强转感器转换电压的上下限,即反应炉体压强控制范围。根据工艺要求,我们可自行规定VA,VB的值,只要炉体压强在VA,VB所确定范围之间电机停转(注意VB<VRBF1<VA,如果

17

焦作大学毕业设计 3硬件设计

不在这个范围内,系统不稳定)。

(3)虚线框图3是一个长延时电路。U5A是一个比较器,Rs1是采样电阻,VRBF2

是电机过流电压。Rs1上电压大于VREF2,电机过流,U5A输出低电平。由上面可知,框图1控制电机正反转,框图2控制炉体压强的纹波大小。当炉体压强太小或太大时,电动机转到两端固定位置停止,根据直流电机稳态运行方程[3]: U=CeФN+RaIa

其中:Ф为电机每极磁通量; Ce为电动势常数; N为电机转数; Ia为电枢电流; Ra电枢回路电阻。

电机转数N为0,电机的电流急剧增加,时间过长将会使电机烧坏。但电机起动时,电机中线圈中的电流也急剧变大,因此我们必须把这两种状态分开。长延时电路可把这两种状态区分出来。长延时电路工作原理:当Rs1过流U5A产生一个负脉冲经过微分后,脉冲触发

555的2脚,电路置位,3脚输出高电平,由于放电端7脚开路,C1,R5及U6A组成积分器开始积分,电容C1上的充电电压线性上升,延时运放积分常数为100R5C1。当C1上充电电压,即6脚电压超过2/3 VCC,555电路复位,输出低电平。电机启动时间一般小于0.8 s,C1充电时间一般为0.8~1 s。U5A输出电平与555的3脚输出电平经U7相或,如果U5A输出低电平大于C1充电时间,U7在C1充电后输出低电平由与门U8输入到L298N的6脚ENA端使电机停止。如果U5A的输出电平小于C1充电时间,6脚不动作电机的正常启动。长延时电路吸收电机启动过流电压波形,从而使电机正常启动。 下图3-5是其引脚图:

18

焦作大学毕业设计 3硬件设计

图3-5 L298引脚图

1、15脚是输出电流反馈引脚,其它与L293相同。在通常使用中这两个引脚也可以直接接地。上图是其与51单片机连接的电路图。

3.5 显示电路设计

本设计中用两片4位八段共阴数码管作显示器,并具有双重功能,在小车行驶时显示速度变化,另一功能就是当小车停止后显示已经行驶的路程。

本设计中采用带有锁存功能的驱动器74hc573显示驱动器,它的管脚如图3-6 74hc573管脚介绍所示,用单片机的并行口控制,四个数码显示电路用4条位选线,用专用驱动芯片控制可以减少对CPU的利用时间,单片机将有更多的时间去完成其他功能.

图3-6 74HC573的管脚

19

焦作大学毕业设计 3硬件设计

该芯片共有20个管脚,管脚D端与单片机管脚相接,Q端与4位共阴八段数码管的a、b、c、d、e、f、g、h、dp端分别相连,数码管的位选端与单片机的I/O口相接。

该芯片所驱动的显示电路如图4-7所示,显示驱动采用动态显示,利用LED代码查询得共阴什么管的显示断码,代码如表3-3所示。

图3-7 数码管驱动电路

表3-3 74HC573驱动

数字 断码 数字 断码 0 0x3f 8 0x7f 1 0x60 9 0x6f 2 0x5b a 0x77 3 0x4f b 0x7c

4 0x66 c 0x39 5 0x6d d 0x5d 6 0x7d e 0x79 7 0x07 f 0x71

20

焦作大学毕业设计 4软件设计

4软件设计

系统软件设计说明:

在进行微机控制系统设计时,除了系统硬件设计外,大量的工作就是如何根据每个生产对象的实际需要设计应用程序。因此,软件设计在微机控制系统设计中占重要地位。对于本系统,软件更为重要。

在单片机控制系统中,大体上可分为数据处理、过程控制两个基本类型。数据处理包括:数据的采集、数字滤波、标度变换等。过程控制程序主要是使单片机按一定的方法进行计算,然后再输出,以便控制生产。

为了完成上述任务,在进行软件设计时,通常把整个过程分成若干个部分,每一部分叫做一个模块。所谓“模块”,实质上就是所完成一定功能,相对的程序段,这种程序设计方法叫模块程序设计法。

模块程序设计法的主要优点是:

1、单个模块比起一个完整的程序易编写及调试;

2、模块可以共存,一个模块可以被多个任务在不同条件下调用; 3、模块程序允许设计者分割任务和利用已有程序,为设计者提供方便。 本系统软件采用模块化结构,由主程序﹑定时子程序、避障子程序﹑中断子程序显示子程序﹑调速子程序﹑算法子程序构成。

4.1主程序设计

主程序清单如下:

//================函数声明 #include

#define uchar unsigned char #define uint unsigned int

#define pwm_t 4000//=================================周期为4毫秒 bit flag_pwm; //===========PWM_EN脉冲给M1或是M2电机的标志位 //bit direction;//=====================================方向标志位 bit PWM_EN;//==========================================脉冲标志位 //uchar get_speed;//=======================测试装置测得到电机转速 uchar t0;//======================================定时器0计数变量 uchar bai,shi,ge;//============================数码管的前三位变量 uint hight_M1;//====(既保存M1上次的脉冲大小等待下次新脉冲的刷新)

21

焦作大学毕业设计 4软件设计

uint hight_M2;//====(既保存M2上次的脉冲大小等待下次新脉冲的刷新) uint hight;//======================================高电平运作时间 uint pluseB_count;//===============================外中断次数变量 uint k;//==========================================数码管显示变量 uint qian;//===================================数码管的第一位变量 //uint low;//========================================电平运作时间 sbit dula=P1^1;//==================================数码管断选使能 sbit wela=P1^0;//==================================数码管位选使能 uchar code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,

0x07 ,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴四位数码管0--f的断 码

uchar code table_pwm[]={1,2,3,4,5,6,7}; //

①高速前进②减速向左③减速向右④高速向左⑤高速向右⑥自动循迹⑦停车

//======================红外扫描端口管脚的定义=================== sbit center_L=P2^0;//============================左边红外信号接口 sbit center_L=P2^1;//======================中间偏左的红外信号接口 sbit center_R=P2^2;//======================中间偏右的红外信号接口 sbit right=P2^3;//===============================右边红外信号接口 //============L298两路电机接口管脚的定义======================= sbit EN1=P0^0;//====接L298的一路电机驱动使能端6,当bit6=1时电机 sbit EN2=P0^1;//==接L298二路电机驱动使能端11,当bit11=1时电机转 sbit M1=P0^2; //==电机M1的极性控制端,M1=0电机正转;if=1电机负转 sbit M2=P0^3; //==电机M2的极性控制端,M2=0电机正转;if=1电机负转 //==========数码管位选管脚定义=================================== sbit one=P0^4; sbit two=P0^5; sbit three=P0^6;

sbit fore=P0^7;//数码管位选的个位,十位,百位,千位;

//==============================================================

22

焦作大学毕业设计 4软件设计

软件流程 如图

程序初始化 N 按键开关

Y 开始计时显示 测速装置开启 分析路况 黑线在左边 黑线在中间 调制两个电机相应的 PWM大小 黑线在右边 PWM执行子函数 4-1 流程图 4.2 显示子程序设计

程序清单如下:

//=================================================================== //函数名称;void display()

23

焦作大学毕业设计 4软件设计

//函数功能;四位一体数码管显示小车速度和停止后行驶的路程;

//=================================================================== void display() { qian=k/1000; bai=k%1000/100; shi=k%1000%100/10; ge=k%1000%100%10;

fore=0; dula=1;

P0=table[qian]; dula=0; fore=1; P0=0xff; delay_1ms(1); three=0; dula=1; P0=table[bai]; dula=0; three=1; P0=0xff; delay_1ms(1); two=0; dula=1; P0=table[shi]; dula=0; two=1;

P0=0xff; 24

焦作大学毕业设计 4软件设计

}

delay_1ms(1);

one=0; dula=1; P0=table[ge]; dula=0; one=1; P0=0xff; delay_1ms(1);

//=================================================================== //函数名称;INT0_rupt()

//函数功能;外部测试装置的中断,每中断一次显示实参+1;

//=================================================================== void INT0_rupt() interrupt 0 { }

}

pluseB_count++; if(pluseB_count%4==0)

{

pluseB_count=0; k++;

display();//数码管显示

4.3 红外扫描子程序设计

程序清单如下:

//=================================================================== //函数名称;signals()

(∩_∩)

(∩_∩|∩_∩) (∩_∩)

//函数功能;四个红外RPR220传感器路线情况的采集

//===================================================================

25

焦作大学毕业设计 4软件设计

void signals() { if(center_L&¢er_R!=0) //0?=0;中间两个管子得到高电平了吗

线

else

{

if(right&&left!=0) //最外边两个管子为高电平吗 若是

delay_pwm(7); //四个管子都是高电平,小车检测到了停止

else

delay_pwm(2);//高电平脉宽达到最大值=pwm_t;小车全速前进 }

{ if(center_L||center_R!=0)//中间两个管子有为高电平的吗? { if(center_L!=0)//左边的那个管子为高电平吗?

delay_pwm(2);//黑线在左边,小车微左

else

delay_pwm(3);//黑线在右边,小车微右

}

else //中间的两个管子都为低电平,这时候小车要快转了 if(left||right!=1)//外边两个管子也为低电平,

delay_pwm(6);//小车就自动表演寻找线路

else { if(left!=0)//判断黑线是否在左边

delay_pwm(4);//小车快速转向左边

else //黑线就在最右边

delay_pwm(5);//小车快速转向右边

}

} 26

焦作大学毕业设计 4软件设计

}

//=================================================================== //函数名称;delay_pwm()

//函数功能;//根据路面情况调整电机工作方式

//===================================================================void delay_pwm(uchar m1) {

switch(m1)

{

//情况speed;小车上高速 case 1:M1=0;//后边电机前转

M2=1;//前边电机极性随意,只要flag_pwm!=1,调制好的pwm

波就不会给电机M2供电

for(flag_pwm=1;hight_M1<=pwm_t;hight_M1+=100) hight=hight_M1; break;//加速度

case 2:M1=0; //后边电机为前进方向;

M2=1; //前边电机为左拐方向; flag_pwm=1;

if(hight_M1>pwm_t/2)

{

hight_M1-=100;

hight=hight_M1;

}

if(t0==0) //M1电机脉宽一个周期完成后to==0,

{

//然后再给M2电机调制脉宽

flag_pwm=0;//选定调制的脉宽是给电机M2的 hight_M2+=100;//hight_M2=pwm_t/4 然后增大高

电平时间

}

hight=hight_M2;//将设定好的脉宽给hight

27

焦作大学毕业设计 4软件设计

case 3:M1=0; //后边电机为前进方向,hight_M1和hight_M2是两个

电机脉冲波大小存储变量

电平时间

if(t0==0)

M2=0; //前边电机为右拐方向,hight是将要用的脉冲波大

flag_pwm=1;

if(hight_M1>pwm_t/2) { hight_M1-=100;

hight=hight_M1;

}

if(t0==0) //M1电机脉宽一个周期完成后to==0, {

//然后再给M2电机调制脉宽

flag_pwm=0;//选定调制的脉宽是给电机M2的

hight_M2+=100;//hight_M2=pwm_t/4 然后增大高

hight=hight_M2;//将设定好的脉宽给hight

}

case 4: M1=0;//后边电机为前进方向; M2=1;//前边电机为左拐方向; flag_pwm=1;

if(hight_M1>pwm_t/2) {

hight_M1-=100; hight=hight_M1;

}

{

flag_pwm=0;//选定调制的脉冲波是个电机M2的

hight_M2+=400;//将前边电机的脉宽调时间长点

28

焦作大学毕业设计 4软件设计

hight=hight_M2;//将设定好的脉宽给hight

}

case 5: M1=0;//后边电机为前进方向;

M2=1;//前边电机为右拐方向; flag_pwm=1;

if(hight_M1>pwm_t/2)

{

hight_M1-=100; hight=hight_M1;

}

if(t0==0)

{

flag_pwm=0;//选定调制的脉冲波是个电机M2的

hight_M2+=400;//将前边电机的脉宽调时间长点 hight=hight_M2;//将设定好的脉宽给hight

}

case 6: M1=0;//后边电机前进

M2=0;//前边电机右拐 flag_pwm=1; if(hight_M1{

hight_M1+=400; hight=hight_M1; }

if(t0==0)

{ }

flag_pwm=0; hight_M2+=100; hight=hight_M2;

29

焦作大学毕业设计 4软件设计

delay_1ms(5000); //延时5s后开始变换方向

M1=0;//后边电机前进 M2=0;//前边电机右拐 flag_pwm=1; if(hight_M1{

hight_M1+=400; hight=hight_M1; }

if(t0==0)

{ }

flag_pwm=0; hight_M2+=100; hight=hight_M2;

case 7: for(flag_pwm=1;hight_M1>0;hight_M1-=1000);//小车很

快就停止行走 }

}

4.4 软件抗干扰技术

提高玩具车智能控制的可靠性,仅靠硬件抗干扰是不够的,需要进一步借助于软件抗干扰技术来克服某些干扰[6]。在单片机控制系统中,如能正确的采用软件抗干扰技术,与硬件干扰措施构成双道抗干扰防线,无疑为了将大大提高控制系统的可靠性。经常采用的软件抗干扰技术是数字滤波技术、开关量的软件抗干扰技术、指令冗余技术、软件陷阱技术等。

1、数字滤波技术:

一般单片机应用系统的模拟输入信号中,均含有种种噪音和干扰,它们来自被测量本身、传感器、外界干扰等。为了进行准确测量和控制,必须消除被测信号中的噪音和干扰。对于这类信号,采用积分时间等于20ms的整数倍的双积分

30

焦作大学毕业设计 4软件设计

A/D转换器,可有效的消除其影响。后者为随机信号,它不是周期信号。对于随机干扰,我们可以用数字滤波方法予以削弱或滤除。所谓数字滤波,就是通过一定的计算或判断程序减少干扰在有用信号中的比重。故实质上它是一种程序滤波。数字滤波克服了模拟滤波器的不足,它与模拟滤波器相比 ,有以下几个优点:

数字滤波是用程序实现的,不需要增加硬设备,所以可靠性高,稳定性好。 数字滤波可以根据信号的不同,采用不同的滤波方法或滤波参数,具有灵活、方便,功能强的特点。

数字滤波可以对频率很低的信号实现滤波,克服了模拟滤波器的缺陷。 数字滤波器具有以上优点,所以数字滤波在微机应用系统中得到了广泛应用。

2、开关量的软件抗干扰技术:

干扰信号多呈毛刺状,作用时间短,利用这一点,我们在采集某一开关量信号时,可多次重复采集,直到连续两次或两次以上结果完全一致方为有效。若多次采样后,信号总是变化不定,可停止采集,给出报警信号,由于开关量信号主要是来自各类开关型状态传感器,如限位开关、操作按钮、电气触点等,对这些信号的采集不能用多次平均的方法,必须绝对一致才行。如果开关量信号超过8个,可按8个一组进行分组处理,也可定义多字节信息暂存区,按类似方法处理。在满足实时性要求的前提下,如果在各次采集数字信号之间接入一段延时,效果会好一些,就能对抗较宽的干扰。

输出设备是电位控制型还是同步锁存型,对干扰的敏感性相对较大。前者有良好的抗‘毛刺’干扰能力,后者不耐干扰,当锁存线上出现干扰时,它就会盲目锁存当前的数据,也不管此时数据是否有效。输出设备和惯性(响应速度)与干扰的耐受能力也有很大关系。惯性大的输出设备(如各类电磁执行机构)对‘毛刺’干扰有一定的耐受能力。惯性小的输出设备(如通行口、显示设备)耐受能力就小一些。在软件上,最为有效的方法就是重复输出同一个数据。只要有可能,其重复周期尽可能短些。外设设备接受到一个被干扰的错误信息后,还来不及作出有效的反应,一个正确的信息又来了,就可及时防止错误动作的产生。另外,各类数据锁存器尽可能和CPU安装在同一电路板上,使传输线上传送的都是锁存好的电位控制信号,对于重要的输出设备,最好建立检测通道,CPU可以检测通道来确定输出结果的正确性。

31

焦作大学毕业设计 4软件设计

3、指令冗余技术:

当CPU受到干扰后,往往将一些操作数当作指令码来执行,引起程序混乱。当程序弹飞到某一字节指令上时,便自动纳入正轨。当弹飞到某一双字节指令上时,有可能落到其操作数上,从而继续出错。当程序弹飞到三字节指令上时,因它有两个操作数,继续出错的机会就更大。因此,我们应多采用单字节指令(NOP)或将单字节指令重复书写,这便是指令冗余。指令冗余无疑会降低系统的效率,但在绝大多数情况下,CPU还不至于忙到不能多执行几条指令的程度,故这种方法还是被广泛采用。

在一些对程序流向起决定作用的指令之前插入两条NOP指令,以保证弹飞的程序迅速纳入正确轨道。在某些对系统工作状态重要的指令前也可插入两条NOP指令,以保证正确执行。指令冗余技术可以减少程序弹飞的次数,使其很快进入程序轨道,但这并不能保证在失控期间不干坏事,更不能保证程序纳入正常轨道后就太平无事了,解决这个问题必须采用软件容错技术。

4﹑软件陷阱技术:

指令冗余使弹飞的程序安定下来是有条件的。首先,弹飞的程序必须落到程序区;其次,必须执行到冗余指令。所谓软件陷阱,就是一套引导指令,强行将捕获的程序引向一个指定的地址,在那里有一段专门对程序出错进行处理的程序。如果我们把这段程序的入口标号记为 ERR 的话,软件陷阱即为一条无条件转移指令,为了加强其捕捉效果,一般还在它前面加两条 NOP 指令,因此真正的软件陷阱由3条指令构成:

NOP NOP

ERR

软件陷阱安排在以下四种地方: (1)未使用的中断向量区。 (2)未使用的大片ROM空间 (3)表格 5、程序区

由于软件陷阱都安排在正常程序执行不到的地方,故不影响程序执行效率,在当前EPROM容量不成问题的条件下,还是多多益善。

32

焦作大学毕业设计 4软件设计

4.5 “看门狗”技术

PC受到干扰而失控,引起程序乱飞,也可能使程序陷入“死循环” [6]。指令技术、软件陷阱技术不能使失控的程序摆脱“死循环”的困境,这时系统完全瘫痪。如果操作者在场,就可以按下人工复位安钮,强制系统复位。但操作者不能一直监视着系统,也往往是在引起不良后果之后才进行人工复位。为使程序脱离“死循环”,通常采用“看门狗技术”。“看门狗”技术就是不断监视程序循环运行时间,若发现时间超过已知的循环设定时间,则认为系统陷入了“死循环”,然后强迫程序返回到0000H入口,在0000H处安排一段出错处理程序,使系统运行纳入正规。

“看门狗”技术可由硬件实现,可由软件实现,也可由两者结合实现。本系统由于工作环境干扰不是太大,于是就取消看门狗电路的设计。

4.6 可编程逻辑器件

可编程逻辑器件GAL16V8是LATTICE公司研制的一种电可擦除的可重复编程的低密度PLD器件。它采用更为灵活的可编I/O结构,并采用了先进的EECOMS工艺,数秒内即可完成芯片的擦除和编程过程,并可反复改写,是产品开发研制的理想器件之一。

GAL16V8技术特性 (1)电可擦除工艺 可重编程单元 100%成品率 可重配置逻辑

(2)高性能E2CMOS工艺

低功耗:45mA最大运行功耗,35mA最大维持功耗 高速度:15~25us最快存取速度 (3)8个输出逻辑单元

对于复杂逻辑设计具有最大灵活性

GAL16V8可仿真20条引脚的PAL器件,具有功能 / 熔丝图 /参数的完全兼容性

(4)预置、加电复位全部寄存器 (5)具有保密单元、电子标签 (6)数据保持超过20年。

33

焦作大学毕业设计 4软件设计

80C51按键电路直接由80C51接口电路查询。消抖(延时20ms)由软件延时完成。

34

焦作大学毕业设计 5测试数据、测试结果分析及结论

5 测试数据、测试结果分析及结论

测试方法与仪器:

1、测试仪器

测试仪器包括秒表、数字万用表、信号发生器、示波器、MCS51仿真机、直流稳压电源等。

2、测试方法

数字万用表主要用来测试分立元件的电阻、压降、漏电流、截止/导通状态等参数;

信号发生器与示波器用于测试各光电传感器信号的接收与传输; MCS51仿真机用于测试软件;

直流稳压电源在测试期间为各待测系统供电;

秒表用于产品测试,按照任务书的基本要求对制成的电动车进行产品测试。 测试数据及测试结果分析:

计时精度分析 计时系统采用了新型显示芯片。理论上的误差不到1秒/年。 测距精度分析 测速系统采用了电机轴光电码盘检测技术。电机轴与车轮轴之间采用了齿轮箱二级减速,变比1/16。车轮周长135mm,光电码盘与电机轴安装在一起,电机轴每一转产生2个脉冲,车轮每转产生32个脉冲,理论测量精度可达135mm/32=4.22mm<4.5mm

定位精度分析 本设计采用实际测量与软件补偿技术,理论上可使定位精度提高到误差<10mm。 3、结论

历时三个月的设计过程中,我首先边查资料,边在实验室焊接小车的线路板。在焊接过程中,我感觉到即使是一个简单的电路,要想很轻松的焊好,也不是很容易的事情。有时是“虚焊”的原因,有时可能是阻值选错。在焊接显示电路时,我就错将680欧的电阻焊成了6.8千欧。这使我深深感受到理论与实际间的差距。通过这样的设计,提高了我的动手能力。每天在实验室除了焊接线路板,还可以上机编程,使我软件调试知识也提高了。

本设计采用的是ATS52单片机,这主要是因为该单片机的稳定性比较好。还可以采用其它系列的单片机。比如采用陵阳单片机,就可以简化编程,但其稳定性不是很好。

35

焦作大学毕业设计 参考文献

参考文献

[1] 何立民,单片机应用系统设计,北京:航天航空大学出版社,2005,46~50 [2] 李广弟,单片机基础,北京:北京航空航天大学出版社,2001,56~ [3] 何希才,新型实用电子电路400例,电子工业出版社,2000年,60~65 [4] 赵负图,传感器集成电路手册,第一版,化学工业出版社,2004,590~591

[5] 陈伯时,电力拖动自动控制系统,第二版,北京:机械工业出版社,2000年 6月,127~130

[6] 张毅刚,彭喜元,新编MCS-51单片机应用设计,第一版,哈尔滨工业大学出版社,2003,25~27,411~417

36

焦作大学毕业设计 附录

附录

1.总体程序代码

//=================================================================== //程序说明;循迹小车 //作者;邵流河

//日期;2009年12月22日0:10:30

//========函数声明========================================== #include

#define uchar unsigned char #define uint unsigned int

#define pwm_t 4000//====================================周期为4毫秒 //============设定值============================================ bit flag_pwm; //==================PWM_EN脉冲给M1或是M2电机的标志位 //bit direction;//========================================方向标志位 bit PWM_EN;//==============================================脉冲标志位 //uchar get_speed;//==========================测试装置测得到电机转速 uchar t0;//===========================================定时器0计数变量 uchar bai,shi,ge;//===============================数码管的前三位变量 uint hight_M1;//========(既保存M1上次的脉冲大小等待下次新脉冲的刷新) uint hight_M2;//=========(既保存M2上次的脉冲大小等待下次新脉冲的刷新) uint hight;//===================================高电平运作时间 uint pluseB_count;//===============================外中断次数变量 uint k;//==========================================数码管显示变量 uint qian;//=======================================数码管的第一位变量 //uint low;//======================================电平运作时间 sbit dula=P1^1;//===================================数码管断选使能 sbit wela=P1^0;//==================================数码管位选使能 uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,//共阴显示

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0--f

uchar code table_pwm[]={1,2,3,4,5,6,7};//

①高速前进②减速向左③减速向右④高速向左⑤高速向右⑥自动循迹⑦停止工

37

焦作大学毕业设计 附录

//================红外路线扫描接口管脚的定义======================== sbit left=P2^0;//====================================左边红外信号接口 sbit center_L=P2^1;//==========================中间偏左的红外信号接口 sbit center_R=P2^2;//==========================中间偏右的红外信号接口 sbit right=P2^3;//==================================右边红外信号接口 //================L298两路电机接口管脚的定义======================= sbit EN1=P0^0;//======接L298的一路电机驱动使能端6,当bit6=1时电机转 sbit EN2=P0^1;//======接L298二路电机驱动使能端11,当bit11=1时电机转 sbit M1=P0^2; //=====电机M1的极性控制端,M1=0电机正转;if=1电机负转 sbit M2=P0^3; //=====电机M2的极性控制端,M2=0电机正转;if=1电机负转 //=========数码管位选管脚定义======================================== sbit one=P0^4; sbit two=P0^5; sbit three=P0^6;

sbit fore=P0^7;//=================数码管位选的个位,十位,百位,千位; //=================================================================== //函数名称;delay_1ms(uint t) //函数功能;软件延时,基准时间为1ms

//=================================================================== void delay_1ms(uint t) { }

//=================================================================== //函数名称;init()

//函数功能;定时器一中断初始化

//===================================================================

uint i,j,k; for(i=t;i>0;t--)

for(j=5;j>0;j--)

for(k=98;k>0;k--);

38

焦作大学毕业设计 附录

void init_rupt() {

TMOD=0x01;

TH0=(65536-20000)/256;//开机20ms后进入扫描程序 TL0=(65536-20000)%256;

EA=1;================================================//开总中断;

ET0=1;==============================================//开定时器0中断;

EX0=1;=========================================//开外部中断0中断;

TR0=1;=========================================//开定时器工作;

hight_M1=pwm_t;======//设定后边电机M1的高电平时间记录变量等于周期

时间-全速

hight_M2=1000;===//设定前边电机M2的高电平时间记录变量等于周期时间

的14-微速 }

//================================================================= //函数名称;delay_pwm()

//函数功能;//根据路面情况调整电机工作方式

//================================================================== void delay_pwm(uchar m1) {

switch(m1)

{

//情况speed;小车上高速 case 1:M1=0;//后边电机前转

M2=1;//前边电机极性随意,只要flag_pwm!=1,调制好的pwm

波就不会给电机M2供电

for(flag_pwm=1;hight_M1<=pwm_t;hight_M1+=100) hight=hight_M1; break;//加速度

case 2:M1=0; //后边电机为前进方向;

39

焦作大学毕业设计 附录

M2=1; //前边电机为左拐方向; flag_pwm=1;

if(hight_M1>pwm_t/2)

{

hight_M1-=100;

hight=hight_M1;

}

if(t0==0) //M1电机脉宽一个周期完成后to==0,

{

//然后再给M2电机调制脉宽

flag_pwm=0;//选定调制的脉宽是给电机M2的 hight_M2+=100;//hight_M2=pwm_t/4 然后增大高

电平时间

}

hight=hight_M2;//将设定好的脉宽给hight

case 3:M1=0; //后边电机为前进方向,hight_M1和hight_M2是两个

电机脉冲波大小存储变量 小

flag_pwm=1;

if(hight_M1>pwm_t/2)

{

hight_M1-=100;

hight=hight_M1;

M2=0; //前边电机为右拐方向,hight是将要用的脉冲波大

}

if(t0==0) //M1电机脉宽一个周期完成后to==0,

{

//然后再给M2电机调制脉宽

flag_pwm=0;//选定调制的脉宽是给电机M2的 hight_M2+=100;//hight_M2=pwm_t/4 然后增大高

电平时间

hight=hight_M2;//将设定好的脉宽给hight

40

焦作大学毕业设计 附录

}

case 4: M1=0;//后边电机为前进方向;

M2=1;//前边电机为左拐方向; flag_pwm=1;

if(hight_M1>pwm_t/2)

{

hight_M1-=100; }

hight=hight_M1;

if(t0==0)

}

{

flag_pwm=0;//选定调制的脉冲波是个电机M2的 hight_M2+=400;//将前边电机的脉宽调时间长点 hight=hight_M2;//将设定好的脉宽给hight

case 5: M1=0;//后边电机为前进方向;

M2=1;//前边电机为右拐方向; flag_pwm=1;

if(hight_M1>pwm_t/2)

{

hight_M1-=100; hight=hight_M1;

}

if(t0==0)

{

flag_pwm=0;//选定调制的脉冲波是个电机M2的

hight_M2+=400;//将前边电机的脉宽调时间长点 hight=hight_M2;//将设定好的脉宽给hight

}

41

焦作大学毕业设计 附录

case 6: M1=0;//后边电机前进

M2=0;//前边电机右拐 flag_pwm=1; if(hight_M1{

hight_M1+=400; hight=hight_M1; }

if(t0==0)

{ }

flag_pwm=0; hight_M2+=100; hight=hight_M2;

delay_1ms(5000); //延时5s后开始变换方向

M1=0;//后边电机前进 M2=0;//前边电机右拐 flag_pwm=1; if(hight_M1{

hight_M1+=400; hight=hight_M1; }

if(t0==0)

{ }

flag_pwm=0; hight_M2+=100; hight=hight_M2;

case 7: for(flag_pwm=1;hight_M1>0;hight_M1-=1000);//小车很

42

焦作大学毕业设计 附录

快就停止行走 }

//=================================================================== //函数名称;signals()

(∩∩) (∩∩|∩∩) (∩∩)

}

//函数功能;四个红外RPR220传感器路线情况的采集

//=================================================================== void signals() {

if(center_L&¢er_R!=0) //0?=0;中间两个管子得到高电平了吗

{

if(right&&left!=0) //最外边两个管子为高电平吗 若是

delay_pwm(7); //四个管子都是高电平,小车检测到了

停止线

else

delay_pwm(2); //高电平脉宽达到最大值=pwm_t;小

车全速前进

}

else

{

if(center_L||center_R!=0)//中间两个管子有为高电平的吗?

{ }

if(center_L!=0)//左边的那个管子为高电平吗?

delay_pwm(2);//黑线在左边,小车微左

else

delay_pwm(3);//黑线在右边,小车微右

43

焦作大学毕业设计 附录

else //中间的两个管子都为低电平,这时候小车要快转了

if(left||right!=1)//外边两个管子也为低电平,

delay_pwm(6);//小车就自动表演寻找线路

else {

if(left!=0)//最左边为高电平吗?若是证

明黑线在最左边 }

//=================================================================== //函数名称;void time_0() interrupt 1 //函数功能;定时器0中断,pwm波输出;

//=================================================================== void time_0() interrupt 1 {

t0++;

}

}

delay_pwm(4);//小车快速转向左边

//黑线就在最右边

else

delay_pwm(5);//小车快速转向右边

switch(t0)

{

case 1:TH0=(65536-20000*hight/pwm_t)/256;

TL0=(65536-20000*hight/pwm_t)%256; PWM_EN=~PWM_EN;break;

case 2:TH0=(65536-20000*(pwm_t-hight)/pwm_t)/256;

TL0=(65536-20000*(pwm_t-hight)/pwm_t)%256;

PWM_EN=~PWM_EN;t0=0;break;//pwm_t=hight+low;?变量

/pwm_t是电平的作用时间

// default:t0=0;TH0=(65536-1)/256;

44

焦作大学毕业设计 附录

}

//TL0=(65536-1)%256;break;

波 }

if(flag_pwm==1) //判断L298的那路使能端接受这个调制好的脉冲波

EN1=PWM_EN;//后边电机M1接L298的6脚接受这一调制好的脉冲波

else

EN2=PWM_EN;//前边电机M2接L298的11脚接受这一调制好的脉冲

signals(); //重新扫描路面路线情况

//================================================================== //函数名称;void display()

//函数功能;四位一体数码管显示小车速度和停止后行驶的路程;

//=================================================================== void display() {

three=0; dula=1; P0=table[bai]; fore=0; dula=1;

P0=table[qian]; dula=0; fore=1; P0=0xff; delay_1ms(1); qian=k/1000; bai=k%1000/100; shi=k%1000%100/10; ge=k%1000%100%10;

45

焦作大学毕业设计 附录

}

dula=0; three=1; P0=0xff; delay_1ms(1);

two=0; dula=1; P0=table[shi]; dula=0; two=1; P0=0xff; delay_1ms(1);

one=0; dula=1; P0=table[ge]; dula=0; one=1; P0=0xff; delay_1ms(1);

//================================================================== //函数名称;INT0_rupt()

//函数功能;外部测试装置的中断,每中断一次显示实参+1;

//=================================================================== void INT0_rupt() interrupt 0 {

pluseB_count++; if(pluseB_count%4==0)

{

pluseB_count=0;

46

焦作大学毕业设计 附录

}

k++;

display();//数码管显示

}

//=================================================================== //函数名称;main() //函数功能;主函数

//=================================================================== void main() { }

init_rupt();//===================================定时器初始化口令 //init_1();//==================================部分变量初始化口令 display();//===================================调用数码管显示函数 signals();//=============================调用红外采集信号处理函数 delay_pwm(6);//====================调用小车使用的脉宽参数调制函数

47

焦作大学毄业设计 致谢

致谢

历时三个月的毕业设计经过自己不断的搜索努力以及张老师的耐心指导和热情帮助,本设计已经基本完成。在这段时间里,老师严谨的治学态度和热忱的工作作风令我十分钦佩,他的指导使我受益非浅。同时本系实验室的元件补助也为我的设计提供大力支持。通过这次毕业设计,使我深刻地认识到学好专业知识的重要性,也理解了理论联系实际的含义,并且检验了大学三年的学习成果。虽然在这次设计中对于知识的运用和衔接还不够熟练。但是我将在以后的工作和学习中继续努力、不断完善。这三个月的设计是对过去所学知识的系统提高和扩充的过程,为今后的发展打下了良好的基础。

由于自身水平有限,设计中一定存在很多䘍足之处,敬请各位老师批评指正。

48

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务