资源描述
摘要
随着汽车工业的发展,汽车由一个贵族的玩物变成了千家万户最普遍的交通工具。它快捷、方便,并且能提供无限的驾驶乐趣。车能载人,也能载物,牵引系统提供了车辆强大的动力,它包含两个部分:发动机和变速箱。而变速箱也有好几种类型,包括手动变速器和自动变速器。现在自动变速器在越来越多的汽车上装备了,给人们的驾驶提供了方便,因为自动变速器不需要人来踩离合器,特别适合那种刚上车的新手。本设计主要模拟自动的变速器工作原理。
本次设计的自动爬坡小车,采用AT89C52单片机作为小车的检测和控制核心;采用E6B2-CWZ5G作为角度传感器,把反信号馈到的送单片机,使单片机按照预定的工作模式控制小车在坡度不同的情况下按不同的速度行驶,坡度越陡速度越慢;单片机采集的小车的倾斜角度越大,小车的速度越慢,使用数码管显示小车倾斜角,并且时实刷新数码管显示的角度。结合实际一般的车最大只能爬30度的坡,本设计最大爬坡角度为四十五度。
采用的技术主要有:
1.采用定时器产生PWM脉冲,
2.角度传感器的应用
关键词:AT89C52;数码管;角度传感器;坡度;变速器;
目录
1绪论 3
2系统相关技术分析 4
2.1角度传感器的选择 4
2.2显示器件的的选择 5
2.3电动机驱动调速模块的选择 6
2.4电源模块选择 7
2.5小结 8
3系统实现相关技术 9
3.1脉冲宽度调制 9
3.1.1简介 9
3.1.2基本原理 9
3.1.3具体过程 10
3.1.4脉冲宽度调制优点 10
3.2单片机 11
3.3单片机的应用领域 12
3.3.1在智能仪器仪表上的应用 12
3.3.2.在工业控制中的应用 12
3.3.3.在家用电器中的应用 12
3.3.4.在计算机网络和通信领域中的应用 12
3.3.5.单片机在医用设备领域中的应用和各种大型电器中的模块化应用 12
4系统硬件电路设计 14
4.1 STC89C52单片机最小系统 14
4.1.1 复位电路 15
4.1.2 晶振震荡电路 15
4.1.3 RS232下载电路 15
4.2 数码管显示模块 16
4.3电机驱动模块 17
5系统软件设计 19
5.1 整体程序流程图设计 19
5.2 STC89C52的主控程序,系统初始化外部中断和定时器资源配置 20
5.3 整体程序设计论证 20
5.3.1 PWM子程序 20
5.3.2角度检测程序 21
5.3.3数码管显示程序 21
总结 23
致谢 24
参考文献 25
附录一 26
附录二 27
1绪论
智能作为现代的新发明,是以后的发展方向,他可以按照预先设定的模式在一个环境里自动的运作,不需要人为的管理,可应用于科学勘探等等的用途。智能电动车就是其中的一个体现。本次设计的简易的变档电动车,采用AT89S52单片机作为小车的检测和控制核心;采用角度传感器E6B2-CWZ5G作为来检测路的倾斜角度,从而把反馈到的信号送单片机,使单片机按照预定的工作模式控制小车在不同倾斜范围按预定的速度行驶;采用四位数码管实时显示小车的倾斜角度。本设计结构简单,较容易实现,但具有高度的智能化、人性化,一定程度体现了智能。自动爬坡小车设计是依现代汽车的发展方向之一的自动变速器为蓝本设计的,是为了方便人们的驾驶,提高驾车的乐趣。
笔者也驾驶过汽车,手动挡的汽车起步时,特别是上坡起步时如果油门和离合器控制的不好就容易熄火,搞不好会引起交通事故。如果换做是自动挡的汽车,只需要将油门踏下去,车就可以迅速起步,自动挡减少了换挡的步骤使驾驶员能够将注意力集中在前方及周围的危险,最大程度的减少了新手手忙脚乱的时间,避免易出现的危险。而如今的汽车大部分都装的是自动变速器,没有了离合器的束缚,现在更流行的是手自一体变速器,它提供4-7个档位,不仅方便起步,也提高了驾驶的乐趣。
本设计包括两大部分:硬件和软件。
硬件包括:
单片机最小系统;L298电机驱动模块;角度传感器;小车一个;四节干电池作电源;四位数码管。
软件包括:
角度检测器程序模块;电机转速程序模块;数码管显示程序。
2系统相关技术分析
整体设计如下图所示:采用STC89C52为整个设备的检测、控制和显示核心,采用C语言编程实现各种算法和逻辑控制,角度传感器的一跟线的脉冲信号作为中断引入单片机,在单片机中判断另一根线电平的高低确定是正转还是反转,同时计算出坡度,不同的坡度调制出不同的脉宽,产生不同的速度。
图2- 1 整体系统架构
单片机
STC89C52
角度传感器信号
显示电路
接口电路
直流电机驱动块
直流电机
2.1角度传感器的选择
方案一:采用电阻器加上AD转换器组合成角度传感器,电阻加上一个电压值,滑动端可产生电压,旋转电阻器的轴可改变滑动端的电压,通过AD转换器将电压信号输入单片机即可得到旋转的角度。但是使用AD转化器会使用过多的单片机资源,而且旋转电阻器有较大的阻尼,如果加上重物太重会影响小车的爬坡能力。
方案二:采用工业用E6B2-CWZ5G角度传感器,它拥有非常低的阻尼,在轴上固定一重物,只需要十来克就可以很准确的将实时的角度值输入单片机。如下图所示是E6B2-CWZ5G角度传感器的工作原理。其由一个中心有轴的光电码盘,其上有环形通、暗的刻线,有光电发射和接收器件读取,获得四组正弦波信号组合成A、B、C、D,每个正弦波相差90度相位差(相对于一个周波为360度),将C、D信号反向,叠加在A、B两相上,可增强稳定信号;另每转输出一个Z相脉冲以代表零位参考位。
由于A、B两相相差90度,可通过比较A相在前还是B相在前,以判别编码器的正转与反转,通过零位脉冲,可获得编码器的零位参考位。
编码器码盘的材料有玻璃、金属、塑料,玻璃码盘是在玻璃上沉积很薄的刻线,其热稳定性好,精度高,金属码盘直接以通和不通刻线,不易碎,但由于金属有一定的厚度,精度就有限制,其热稳定性就要比玻璃的差一个数量级,塑料码盘是经济型的,其成本低,但精度、热稳定性、寿命均要差一些。
分辨率—编码器以每旋转360度提供多少的通或暗刻线称为分辨率,也称解析分度、或直接称多少线,一般在每转分度5~10000线。
图2- 2 旋转编码器脉冲时序图
基于以上理论分析,采用方案二。
2.2显示器件的的选择
显示器只需要显示角度的值,精度要求在五度以内。没有过多的显示要求。
七段8位二进制数码显示器分为动态显示和静态显示两种。
方案一:七段8位二进制数码
1、静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×8=40根I/O端口来驱动,要知道一个89S51单片机可用的I/O端口才32个呢:),实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。
2、数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。
图2- 3 数码管引脚图
方案二:LCD液晶显示
LCD1602液晶显示器是一种低功耗的显示器件,它不仅省电而且能够显示大量的信息,如文字、曲线、图形等,显示质量高,数字式接口于单片借连接更加简单可靠,操作方便。但是LCD1602价格较贵,而且这个设计中只需显示角度不需要其他的内容。
综上,我们采用数码管来作为显示模块。
2.3电动机驱动调速模块的选择
方案一:采用继电器对电动机的开或关进行控制,通过开关的切换对小车的速度进行调整,这个方案的优点是电路简单,将电机驱动不分隔离了,缺点是继电器响应时间慢,机械机构易损坏,寿命短、可靠性不高。
方案二:采用但林顿管组成的H型PWM电路。用单片机控制达林顿管使之工作在占空比可调的开关状态,精确调整电动机转速。这种电路由于工作在管子的饱和截止模式,效率非常的高,H桥保证了可以简单的实现转速和方向的控制,电子开关的速度很快,稳定性很强,是一种广泛采用的PWM调速技术。
方案三:采用集成电路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接控制使能端,控制电机的停转。表1
是L298N功能逻辑图。
图2- 4 L298N电机驱动集成电路的封装图
图2- 5 L298N芯片简化图
图2- 6 L298N引脚状态图
方案四:
采用DA转换器,可以输出精确的电压值,经过运算放大器可以将电压放大一定倍数在用运放组成射极跟随器输出电压然后驱动电机运转,不过运放驱动能力有限。
基于以上分析,选择方案三可以简化电路设计
2.4电源模块选择
方案一:采用四节AA电池供电,提供6V电压,由于是电池供电基本没有纹波,而且电池是可充电电池短时持续提供大电流,可以减少电机启动时造成的干扰。
方案二:还是采用四节AA电池供电,不同的是在输入给单片机的线路上加上一个稳压管7805。提供单片机更稳定,更干净的电流。而且能保证单片机不被烧毁。
综上,拟采用方案二
2.5小结
经过一番仔细的论证与比较,我们决定了系统各个主要模块的方案如下:角度传感器模块采用E6B2-CWZ5G角度传感器;显示模块采用现成的数码管;电机驱动模块采用L298N;电源采用单电源双输出模块
3系统实现相关技术
3.1脉冲宽度调制
脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。
3.1.1简介
脉冲宽度调制是一种模拟控制方式,其根据相应载荷的变化来调制晶体管栅极或基极的偏置,来实现开关稳压电源输出晶体管或晶体管导通时间的改变,这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。
PWM控制技术以其控制简单,灵活和动态响应好的优点而成为电力电子技术最广泛应用的控制方式,也是人们研究的热点。由于当今科学技术的发展已经没有了学科之间的界限,结合现代控制理论思想或实现无谐振软开关技术将会成为PWM控制技术发展的主要方向之一。
3.1.2基本原理
随着电子技术的发展,出现了多种PWM技术,其中包括:相电压控制PWM、脉宽PWM法、随机PWM、SPWM法、线电压控制PWM等,而在镍氢电池智能充电器中采用的脉宽PWM法,它是把每一脉冲宽度均相等的脉冲列作为PWM波形,通过改变脉冲列的周期可以调频,改变脉冲的宽度或占空比可以调压,采用适当控制方法即可使电压与频率协调变化。可以通过调整PWM的周期、PWM的占空比而达到控制充电电流的目的。
模拟信号的值可以连续变化,其时间和幅度的分辨率都没有限制。9V电池就是一种模拟器件,因为它的输出电压并不精确地等于9V,而是随时间发生变化,并可取任何实数值。与此类似,从电池吸收的电流也不限定在一组可能的取值范围之内。模拟信号与数字信号的区别在于后者的取值通常只能属于预先确定的可能取值集合之内,例如在{0V, 5V}这一集合中取值。
模拟电压和电流可直接用来进行控制,如对汽车收音机的音量进行控制。在简单的模拟收音机中,音量旋钮被连接到一个可变电阻。拧动旋钮时,电阻值变大或变小;流经这个电阻的电流也随之增加或减少,从而改变了驱动扬声器的电流值,使音量相应变大或变小。与收音机一样,模拟电路的输出与输入成线性比例。
尽管模拟控制看起来可能直观而简单,但它并不总是非常经济或可行的。其中一点就是,模拟电路容易随时间漂移,因而难以调节。能够解决这个问题的精密模拟电路可能非常庞大、笨重(如老式的家庭立体声设备)和昂贵。模拟电路还有可能严重发热,其功耗相对于工作元件两端电压与电流的乘积成正比。模拟电路还可能对噪声很敏感,任何扰动或噪声都肯定会改变电流值的大小。
通过以数字方式控制模拟电路,可以大幅度降低系统的成本和功耗。此外,许多微控制器和DSP已经在芯片上包含了PWM控制器,这使数字控制的实现变得更加容易了。
3.1.3具体过程
脉冲宽度调制(PWM)是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。
多数负载(无论是电感性负载还是电容性负载)需要的调制频率高于10Hz,通常调制频率为1kHz到200kHz之间。
许多微控制器内部都包含有PWM控制器。例如,Microchip公司的PIC16C67内含两个PWM控制器,每一个都可以选择接通时间和周期。占空比是接通时间与周期之比;调制频率为周期的倒数。执行PWM操作之前,这种微处理器要求在软件中完成以下工作:
1、设置提供调制方波的片上定时器/计数器的周期
2、 在PWM控制寄存器中设置接通时间
3、设置PWM输出的方向,这个输出是一个通用I/O管脚
4、启动定时器
5、使能PWM控制器
目前几乎所有市售的单片机都有PWM模块功能,若没有(如早期的8051),也可以利用定时器及GPIO口来实现。更为一般的PWM模块控制流程为(笔者使用过TI的2000系列,AVR的Mega系列,TI的LM系列):
1、使能相关的模块(PWM模块以及对应管教的GPIO模块)。
2、配置PWM模块的功能,具体有:
①:设置PWM定时器周期,该参数决定PWM波形的频率。
②:设置PWM定时器比较值,该参数决定PWM波形的占空比。
③:设置死区(deadband),为避免桥臂的直通需要设置死区,一般较高档的单片机都有该功能。
④:设置故障处理情况,一般为故障是封锁输出,防止过流损坏功率管,故障一般有比较器或ADC或G2
PIO检测。
⑤:设定同步功能,该功能在多桥臂,即多PWM模块协调工作时尤为重要。
3、设置相应的中断,编写ISR,一般用于电压电流采样,计算下一个周期的占空比,更改占空比,这部分也会有PI控制的功能。
4、使能PWM波形发生。
3.1.4脉冲宽度调制优点
PWM的一个优点是从处理器到被控系统信号都是数字形式的,无需进行数模转换。让信号保持为数字形式可将噪声影响降到最小。噪声只有在强到足以将逻辑1改变为逻辑0或将逻辑0改变为逻辑1时,也才能对数字信号产生影响。
对噪声抵抗能力的增强是PWM相对于模拟控制的另外一个优点,而且这也是在某些时候将PWM用于通信的主要原因。从模拟信号转向PWM可以极大地延长通信距离。在接收端,通过适当的RC或LC网络可以滤除调制高频方波并将信号还原为模拟形式。
总之,PWM既经济、节约空间、抗噪性能强,是一种值得广大工程师在许多设计应用中使用的有效技术。
3.2单片机
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。
单片机内部也用和电脑功能类似的模块,比如CPU,内存,并行总线,还有和硬盘作用相同的存储器件,不同的是它的这些部件性能都相对我们的家用电脑弱很多,不过价钱也是低的,一般不超过10元即可......用它来做一些控制电器一类不是很复杂的工作足矣了。我们现在用的全自动滚筒洗衣机、排烟罩、VCD等等的家电里面都可以看到它的身影!......它主要是作为控制部分的核心部件。
它是一种在线式实时控制计算机,在线式就是现场控制,需要的是有较强的抗干扰能力,较低的成本,这也是和离线式计算机的(比如家用PC)的主要区别。
单片机是靠程序的,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,这是别的器件需要费很大力气才能做到的,有些则是花大力气也很难做到的。一个不是很复杂的功能要是用美国50年代开发的74系列,或者60年代的CD4000系列这些纯硬件来搞定的话,电路一定是一块大PCB板!但是如果要是用美国70年代成功投放市场的系列单片机,结果就会有天壤之别!只因为单片机的通过你编写的程序可以实现高智能,高效率,以及高可靠性!
由于单片机对成本是敏感的,所以目前占统治地位的软件还是最低级汇编语言,它是除了二进制机器码以上最低级的语言了,既然这么低级为什么还要用呢?很多高级的语言已经达到了可视化编程的水平为什么不用呢?原因很简单,就是单片机没有家用计算机那样的CPU,也没有像硬盘那样的海量存储设备。一个可视化高级语言编写的小程序里面即使只有一个按钮,也会达到几十K的尺寸!对于家用PC的硬盘来讲没什么,可是对于单片机来讲是不能接受的。 单片机在硬件资源方面的利用率必须很高才行,所以汇编虽然原始却还是在大量使用。一样的道理,如果把巨型计算机上的操作系统和应用软件拿到家用PC上来运行,家用PC的也是承受不了的。
可以说,二十世纪跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。不过,这种电脑,通常是指个人计算机,简称PC机。它由主机、键盘、显示器等组成。还有一类计算机,大多数人却不怎么熟悉。这种计算机就是把智能赋予各种机械的单片机(亦称微控制器)。顾名思义,这种计算机的最小系统只用了一片集成电路,即可进行简单运算和控制。因为它体积小,通常都藏在被控机械的“肚子”里。它在整个装置中,起着有如人类头脑的作用,它出了毛病,整个装置就瘫痪了。现在,这种单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。现在有些工厂的技术人员或其它业余电子开发者搞出来的某些产品,不是电路太复杂,就是功能太简单且极易被仿制。究其原因,可能就卡在产品未使用单片机或其它可编程逻辑器件上。
3.3单片机的应用领域
目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。
单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分如下几个范畴:
3.3.1在智能仪器仪表上的应用
单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比起采用电子或数字电路更加强大。例如精密的测量设备(功率计,示波器,各种分析仪)。
3.3.2.在工业控制中的应用
用单片机可以构成形式多样的控制系统、数据采集系统。例如工厂流水线的智能化管理,电梯智能化控制、各种报警系统,与计算机联网构成二级控制系统等。
3.3.3.在家用电器中的应用
可以这样说,现在的家用电器基本上都采用了单片机控制,从电饭褒、洗衣机、电冰箱、空调机、彩电、其他音响视频器材、再到电子秤量设备,五花八门,无所不在。
3.3.4.在计算机网络和通信领域中的应用
现代的单片机普遍具备通信接口,可以很方便地与计算机进行数据通信,为在计算机网络和通信设备间的应用提供了极好的物质条件,现在的通信设备基本上都实现了单片机智能控制,从手机,电话机、小型程控交换机、楼宇自动通信呼叫系统、列车无线通信、再到日常工作中随处可见的移动电话,集群移动通信,无线电对讲机等。
3.3.5.单片机在医用设备领域中的应用和各种大型电器中的模块化应用
单片机在医用设备中的用途亦相当广泛,例如医用呼吸机,各种分析仪,监护仪,超声诊断设备及病床呼叫系统等等。
某些专用单片机设计用于实现特定功能,从而在各种电路中进行模块化应用,而不要求使用人员了解其内部结构。如音乐集成单片机,看似简单的功能,微缩在纯电子芯片中(有别于磁带机的原理),就需要复杂的类似于计算机的原理。如:音乐信号以数字的形式存于存储器中(类似于ROM),由微控制器读出,转化为模拟音乐电信号(类似于声卡)。
在大型电路中,这种模块化应用极大地缩小了体积,简化了电路,降低了损坏、错误率,也方便于更换。
4系统硬件电路设计
4.1 STC89C52单片机最小系统
利用单片机最小系统实验电路板完成传感器与电动机的连接和控制。 单片机选用STC89C52,其内部有4K字节的Flash Rom,电路设计简单。具体为STC89C52的18、19脚接12MHz,40脚输入信号为5伏,20脚接地,EA脚接高电平。
图4- 1 单片机最小系统线路图
图4- 2单片机最小系统板成品
4.1.1 复位电路
单片机上电时,当震荡器正在运行时,只要持续给出RST引脚两个机器周期的高电平,便可以完成系统复位。外部复位电路为内部复位电路提供两个机器周期以上的高电平设计的。系统采用上电自动复位,上电瞬间电容器上的电压不能突变,RST上的电压上VCC上的电压与电容器的电压之差,因而RST上的电压的与VCC上的电压相同。随着充电的进行,电容器上的电压不断上升,RST脚上只要保持10ms以上的高电平,系统就会复位。电容C取22uF,电阻课取值3k欧。
4.1.2 晶振震荡电路
XTAL1脚和XTAL2脚分别构成片内振荡器的反相放大器的输入和输出端,外接石英晶体或陶瓷振荡器以及补偿电容C1、C2构成并联谐振电路,当外接石英晶体时,电容C1、C2选30pF。AT89C52系统中的晶体可在0~24MHz选择。外接电容C1、C2的大小会影响振荡器频率的高低、振荡器频率的稳定性、起振时间以及温度稳定性。
再设计电路板时,晶振和电容应靠近单片机芯片,以减少寄生电容,保证振荡器稳定可靠工作。再设计中,为保证串行通信波特率的误差,选择了12MHz的标准石英晶振,电容C1、C2为30pF
4.1.3 RS232下载电路
Max232是一种把电脑的串行口rs232信号电平(-10 ,+10v)转换为单片机所用到的TTL 信号电平(0 ,+5)的芯片,下图就是MAX232的基本接线图
图4- 3MAX232芯片外围元件图
此单片机最小系统能够满足在线编程的要求,方便应用
4.2 数码管显示模块
下图为数码管硬件连接图
图4- 4 数码管模块连接图
图3- 5 数码管的PCB板图
动态显示数码管能够满足角度实时显示的要求,数码管每段最大能够承受10mA的电流,每个数码管有八段,一共有四个数码,实现动态显示电流最大值不能100mA,但是如果让单片机直接驱动数码管电流又太小,所以在数码管的共阳端加了一个三极管S8050,放大电流的作用,而且为了避免数码管由于过大的电流而烧毁,我们在三级管的基极加了一个100欧姆的电阻。P1.0~1.3输出片选信号,高电平选通,P0口输出位信号,使数码管显示相应的数据。
4.3电机驱动模块
图3- 6L298N的连接电路
IO5、IO6控制IO1和IO2的电平的高低,IO7、IO8控制IO3和IO4的电平的高低。IO1和IO2接电机M0的两端,IO3和IO4接电机M1的两端,IO6控制电机M1的转与不转,IO5控制电机M1的正转还是反转。另外的接口是相同的,这里不进行过多描述。途中八个二极管和两个电容是为了减少电机的启动或停止产生的一些干扰。
IO5
IO6
IO7
IO8
M0
M1
0
0
0
0
停转
停转
0
1
0
1
正转
正转
1
0
1
0
停转
停转
1
1
1
1
反转
反转
表格4- 1 L298N引脚控制图
注:0代表低电平,1代表高电平
图4- 7 电机驱动模块的PCB板图
要使L298N控制电机产生不同的转速,就需要对L298N的ENABLE A 或者 ENABLE B管脚输入PWM信号,不同宽度PWM波将会输出不同的电压值,进而控制电机产生不同的转速。为了减少IO口的支出,也为了隔离L298N模块对单片的干扰,我们在INPUT1和INPUT2之间,还有INPUT3和INPUT4加了一个反向器,进而提高整个系统的稳定性。
5系统软件设计
5.1 整体程序流程图设计
图4- 1整体程序流程图
开始
初始化各种参数
角度是否有变化
判断是正转还是反转
n++
n--
k=1.8*n
实时显示k的值
实时通过k改变小车速度
Y
正转
N
反转
5.2 STC89C52的主控程序,系统初始化外部中断和定时器资源配置
资源名称
功能
定时器0
数码动态扫描
定时器1/ 定时器中断
定时器控制PWM脉宽和周期
外部中断0(下降沿触发)
计算小车倾斜角度
表格5- 1程序使用资源表
5.3 整体程序设计论证
5.3.1 PWM子程序
由于是用的是古老的51单片机本身不具有PWM输出模块,所以只能使用51单片机的引脚模拟PWM输出的功能,方案有二。
方案一:采用直接用程序控制一个引脚输出高低时间的的方法输出高低电平,延时使用for()循环改变时间
static int x;
#include<reg52.h>
void PWM_OUT ( int x )
void Delay( int x)
sbit POW_CTRL=P2^1; //PWM输出脚
PWM_OUT ( int x )
{
POW_CTRL=1;
Delay(x);
POW_CTRL=0;
Delay(100-x);
}
Delay( int x)
{
unsigned char k,f;
for(k=0;k<x ;k++)
for(f=0;f<100;f++);
}
方案二:采用定时器控制PWM 输出,控制定时器的初始值,时间一到翻转引脚电平时重新设置一个初始值等待时间再次翻转。
* 函数名称:PWM_Set
* 功能描述:计算PWM波50Hz定时器的重装值
* 参 数:PWM波的占空比
void PWM_Set( int uiFreq, int ucScale )
{
if( ucScale >= 100 ) //占空比不可能大于100%
return;
s_ulCycle = 10000/uiFreq;
s_uiHighTime = 65535-s_ulCycle*ucScale/100;
s_uiLowTime = 65535-s_ulCycle*(100 - ucScale)/100;
}
考虑到角度传感器反应非常灵敏,需要留出时间给角度计算程序,不然实测角度值就会发生错误。方案一采用了for循环延时,那么单片机就会始终处于高负载状态,一旦角度传感器比较频繁输入会造成单片机响应缓慢,造成数据错误。而方案二采用的是定时器控制PWM输出引脚。当定时器控制的引脚的时候单片机有足够的时间的响应外部中断,确保时间的准确。
综上所述,选用方案二。
5.3.2角度检测程序
我们使用的角度传感器是同过计算脉冲的数量来计算小车的倾斜角度。由于脉冲时间很短,如果采用端口扫描程序那么在单片机没有执行扫描程序时就会错过一些脉冲的检测,那么数据就不准确。我们采用外部中断程序来计算角度,程序很短能够迅速地执行不会耽搁其它程序的执行,数值控制在0~900,实际值为0~90度。
/*********************************************************************/
* 函数名称: int_0
* 功能描述: 外部中断计算旋转角度
* 参 数: 每一个角度由不同个数的脉冲组成
**********************************************************************/
void int_0() interrupt 0
{ if(p3_0==1)
n++;
if(p3_0==0)
n--;
if(n<0)
n=0;
if(n>=50)
n=50;
k=18*n;
}
5.3.3数码管显示程序
本系统采用的是动态显示的七段8位二进制数码显示器,动态显示是一种按位轮流点亮各位数码管的显示方式,即在某一时段,只让其中一位数码管的“位选端”有效,并送出相应的字符显示编码。此时,其他位的数码管因“位选端”无效而都处于熄灭状态:下一时段按顺序选通另一位数码管,并相应的字符显示编码,按此规律循环下去,即可使个位数码管分别间断的显示出相应的字符。这一过程称为动态显示。由于采用了四位显示,精确显示角度。因为程序并不复杂就直接放在了主程序里面了,设置速度的三档程序放在了主程序里了。
程序如下:
for(;;) //显示部分:P1口输出数据,P0.0,P0.1,P0.2,P0.3片选
{
unsigned char s,g,f;
s=k/100;
g=(k-(s*100))/10;
f=k-(s*100)-(g*10);
p0_0=1;
p0_1=0;
p0_2=0;
p0_3=0;
P1=Tab[s];
Delay5ms();
p0_0=0;
p0_1=1;
p0_2=0;
p0_3=0;
P1=Tab[g];
Delay5ms();
p0_0=0;
p0_1=0;
p0_2=1;
p0_3=0;
P1=0XFE;
Delay5ms();
p0_0=0;
p0_1=0;
p0_2=0;
p0_3=1;
P1=Tab[f];
Delay5ms();
if(k>=0&&k<=80)
PWM_Set(20,100); //第一档最快速度
if(k>80&&k<=150)
PWM_Set(20,75); //第二档适中速度
if(k>150)
PWM_Set(20,65); //第三档最慢速度
}
总结
经过半个月的努力,终于在不断的尝试中小车达到了设计要求,剩下的就是写论文。而如今论文写到总结,也就是本论文结束的时候。回想从刚开始的茫然,然后到找到思路继而制作电路模块,包括电机驱动模块,显示模块。各个模块由于功能的区别,影响了包括线的宽度、线距,例如电机驱动模块需要很粗的线,这样才能使模块的负载能力提高。但是H桥芯片 L298N接高负载的时候发热量有点大,所以加了一块散热片,加强散热,以免过高的温度损坏L298N芯片。显示模块在做测试的时候,本人以为数码管能够承受USB提供的电流就直接连上了电源,测试完每个数码管之后突然发现有的数码管不亮了,然后研究怎么回事,结构数码管就全部坏了。就只能再购一个四位的数码管,在三极管的基极加了200欧姆的电阻,将电流降到25mA避免烧坏数码管。从这些失败中得到了教训,也吸收不少得经验。
我不会忘记这难忘的几个月的时间。毕业设计的制作给了我难忘的回忆。在我倘徉书海里查资料的日子里,面对无数书本的罗列,最难忘的是每次找到资料的激动和 兴奋;亲手在设计电路图的时间里,最深刻的是每一次的修改,只为将电路修改到完美。其中板子就做了好几块,最后才出现了本论文中完美的样子。为了将作品变得更好,我曾赶工到深夜,但看在亲手后做出来的东西,和打出来得一字一句,心里满满的只有喜悦,毫无疲倦。这段旅程看似荆棘密布,实则蕴含这无尽的宝藏。我从资料的收集中,让我对所学的知识有所巩固和提高。在整个过程中,我学到了知识,增长了见识,在今后的日子了,我仍然要不断的充实自己,争取在所学的领域有所作为。
接下来,我还要完成毕业论文的答辩,在此要感谢我的导师和专业老师,是你们的细心指导和关怀,使我能够顺利的完成毕业论文。在我的学业和论文的研究工作中无不倾注着老师们辛勤的汗水和心血。老师的严谨治学态度、博学的知识、无私的奉献精神使我深受启迪。从尊敬的导师身上,我不仅学到了扎实、宽广的专业知识,也学到了做人的道理。在此我要向我的导师致以最衷心的感谢和深深的敬意
致谢
三年的读书生活在这个季节即将划上一个句号,而于我的人生却只是一个逗号,我将面对又一次征程的开始。三年的求学生涯在师长、亲友的大力支持下,走得辛苦却也收获满囊,在论文即将付梓之际,思绪万千,心情久久不能平静。 伟人、名人为我所崇拜,可是我更急切地
展开阅读全文