直流电机控制系统的设计(小波).doc

上传人:小飞机 文档编号:3920484 上传时间:2023-03-27 格式:DOC 页数:28 大小:816KB
返回 下载 相关 举报
直流电机控制系统的设计(小波).doc_第1页
第1页 / 共28页
直流电机控制系统的设计(小波).doc_第2页
第2页 / 共28页
直流电机控制系统的设计(小波).doc_第3页
第3页 / 共28页
直流电机控制系统的设计(小波).doc_第4页
第4页 / 共28页
直流电机控制系统的设计(小波).doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《直流电机控制系统的设计(小波).doc》由会员分享,可在线阅读,更多相关《直流电机控制系统的设计(小波).doc(28页珍藏版)》请在三一办公上搜索。

1、 学习情境1 直流电机控制系统的设计江西环境工程职业学院 张小波直流电动机具有优良的调速特性,调速平滑,方便,调速范围广,过载能力大,能承受频繁的冲击负载,可实现频繁的无级快速起动、制动和反转;能满足生产过程中自动化系统各种不同的特殊运行要求。电动机调速系统采用微机实现自动控制,是电气传动发展的主要方向之一。采用微机控制后,整个调速系统体积小、结构简单、可靠性高、操作维护方便,电动机稳态运转时转速精度可达到较高水平,静动态各项指标均能较好地满足工业生产中高性能电气传动的要求。1.1 项目分析1.1.1 项目总体功能分析本系统能实现对电动机的启动、停止、正反转、调速、测速和显示等功能。本系统由信

2、号预处理电路、8051单片机、LCD显示电路、系统软件组成。其中信号预处理电路包含信号放大、波形变换和波形整形。信号预处理电路中的放大器用于对待测信号进行放大,以降低对待测信号的幅度要求;波形变换和波形整形电路则用来将放大的信号转换成可与单片机接口的TTL 信号;通过单片机的设置可使T0 引脚能够对内部定时器T1 的工作进行控制,这样能精确地测出加到T1 引脚的正脉冲宽度(即测出脉冲信号的周期);速度显示部分采用LCD1602显示模块。系统软件包括单片机和液晶模块的初始化模块、液晶模块的写数据/ 命令子模块、数据显示模块以及实时中断服务模块等。 该设计能实时地将所测的速度显示出来。能将传感器输

3、入到单片机的脉冲信号的宽度(传感器将速转变成相应宽度的脉冲信号) 实时地测量出来,然后通过单片机计算出速度, 并由LCD1602显示模块实时显示出所测速度。考虑到信号的衰减、干扰等影响,在信号送入单片机前应对其进行放大整形, 然后再输入到单片机进行测速。系统方框图如图1-1所示。 8051 单片机测速电路时钟电路复位电路直流电机LCD显示电路PWM控制电路电源电路 图1-1 系统方框图1.1.2 有关芯片11.2.1 8253内部结构和工作方式8253具有3个独立的计数通道,采用减1计数方式。在门控信号有效时,每输入1个计数脉冲,通道作1次计数操作。当计数脉冲是已知周期的时钟信号时,计数就成为

4、定时。一、8253内部结构8253芯片有24条引脚,封装在双列直插式陶瓷管壳内。图1-2 8253内部结构1. 数据总线缓冲器 数据总线缓冲器与系统总线连接,8位双向,与CPU交换信息的通道。这是8253与CPU之间的数据接口,它由8位双向三态缓冲存储器构成,是CPU与8253之间交换信息的必经之路。2.读写控制读写控制分别连接系统的IOR#和IOW#, 由CPU控制着访问8253的内部通道。接收CPU送入的读写控制信号, 并完成对芯片内部各功能部件的控制功能, 因此, 它实际上是8253芯片内部的控制器。A1A0:端口选择信号,由CPU输入。8253内部有3个独立的通道和一个控制字寄存器,

5、它们构成8253芯片的4个端口,CPU可对3个通道进行读写操作3对控制字寄存器进行写操作。 这4个端口地址由最低2位地址码A1A0来选择。如表1-1所示。表1-1 读/写控制3.通道选择(1) CS#片选信号,由CPU输入,低电平有效,通常由端口地址的高位地址译码形成。(2) RD#、WR#读写控制命令,由CPU输入, 低电平有效。RD#效时,CPU读取由A1A0所选定的通道内计数器的内容。WR#有效时,CPU将计数值写入各个通道的计数器中, 或者是将方式控制字写入控制字寄存器中。CPU对8253的读写操作如表1-2所示。表1-2 通道选择控制4.计数通道02每个计数通道内含1个16位的初值寄

6、存器、减1计数器和1个16位的(输出)锁存器。8253内部包含3个功能完全相同的通道,每个通道内部设有一个16位计数器,可进行二进制或十进制(BCD码)计数。采用二进制计数时, 最大计数值是FFFFH, 采用BCD码计数时。 最大计数值是9999。与此计数器相对应, 每个通道内设有一个16位计数值锁存器。必要时可用来锁存计数值。图1-3 通道内部结构当某通道用作计数器时,应将要求计数的次数预置到该通道的计数器中、被计数的事件应以脉冲方式从CLK端输入, 每输入一个计数脉冲,计数器内容减“1”,待计数值计到“0”。 OUT端将有输出。表示计数次数到。当某个通道用作定时器时。 由CLK输入一定频率

7、的时钟脉冲。根据要求定时的时间长短确定所需的计数值。并预置到计数器中,每输入一个时钟脉冲,计数器内容减“1”, 待计数值计到“0”。OUT将有输出,表示定时时间到。允许从CLK输入的时钟频在12MHz范围内。因此,任一通道作计数器用或作定时器用,其内部操作完全相同,区别仅在于前者是由计数脉冲进行减“1”计数。 而后者是内时钟脉冲进行减“1”计数。作计数器时, 要求计数的次数可直接作为计数器的初值预置到减“1”计数器中。作定时器时, 计数器的初值即定时系数应根据要求定时的时间进行如下运算才能得到: 定时系数需要定时的时间时钟脉冲周期设置通道:向方式控制字寄存器端口写入方式选择控制字,用于确定要设

8、置的通道及工作方式;计数/定时:向通道写入计数值,启动计数操作;读取当前的计数值:向指定通道读取当前计数器值时,8253将计数器值存入锁存器,从锁存器向外提供当前的计数器值,计数器则继续作计数操作。计数到:当计数器减1为0时,通过引脚OUTi向外输出“到”的脉冲信号。计数初值输入存放在初值寄存器中,计数开始或重装入时被复制到计数器中。 锁存器在非锁存状态,其值随计数器的变化而变化;一旦锁存了计数器的当前值,直到锁存器值被读取后才能解除锁存状态。5.方式选择控制字图1-4 方式控制字二、8253的通道工作方式8253中各通道可有6种可供选择的工作方式, 以完成定时、计数或脉冲发生器等多种功能。8

9、253的各种工作方式如下:1.方式0:计数结束则中断工作方式0被称为计数结束中断方式,它的定时波形如图, OUTi输出为低电平;若门控信号GATE为高电平,当CPU利用输出指令向该通道写入计数值WR#有效时,OUTi仍保持低电平,然后计数器开始减“1”计数, 直到计数值为“0”,此刻OUTi将输出由低电平向高电平跳变,可用它向CPU发出中断请求,OUTi端输出的高电平一直维持到下次再写入计数值为止。图1-5 方式0工作时序图在工作方式0情况下,门控信号GATE用来控制减“1”计数操作是否进行。当GATE=1时,允许减“1”计数;GATE=0时,禁止减“1”计数; 计数值将保持GATE有效时的数

10、值不变, 待GATE重新有效后,减“1”计数继续进行。显然,利用工作方式0既可完成计数功能, 也可完成定时功能。当用作计数器时,应将要求计数的次数预置到计数器中,将要求计数的事件以脉冲方式从CLKi端输入, 由它对计数器进行减“1”计数,直到计数值为0,此刻OUTi输出正跳变, 表示计数次数到。当用作定时器时,应把根据要求定时的时间和CLKi的周期计算出定时系数,预置到计数器中。从CLKi,输入的应是一定频率的时钟脉冲,由它对计数器进行减“1”计数, 定时时间从写入计数值开始,到计数值计到“0”为止,这时OUTi输出正跳变,表示定时时间到。有一点需要说明,任一通道工作在方式0情况下, 计数器初

11、值一次有效,经过一次计数或定时后如果需要继续完成计数或定时功能,必须重新写入计数器的初值。表1-3 方式0引脚设置2.方式1:单脉冲发生器工作方式1被称作可编程单脉冲发生器,其定义波形如下图。进入这种工作方式, CPU装入计数值n后OUTi输出高电平, 不管此时的GATE输入是高电平还是低电平, 都不开始减“1”计数,必须等到GATE由低电平向高电平跳变形成一个上升沿后,计数过程才会开始。与此同时,OUTi输出由高电平向低电平跳变,形成了输出单脉冲的前沿,待计数值计到“0”, OUTi输出由低电平向高电平跳变,形成输出单脉冲的后沿, 因此,由方式l所能输出单脉冲的宽度为CLKi周期的n倍。图1

12、-6 方式1工作时序图如果在减“1”计数过程中, GATE由高电平跳变为低电乎,这并不影响计数过程,仍继续计数;但若重新遇到GATE的上升沿,则从初值开始重新计数, 其效果会使输出的单脉冲加宽。这种工作方式下,计数值也是一次有效,每输入一次计数值,只产生一个负极性单脉冲。表1-4 方式1引脚设置 3.方式2:速率波发生器工作方式2被称作速率波发生器,其定时波形如下图所示。进入这种工作方式, OUTi输出高电平,装入计数值n后如果GATE为高电平,则立即开始计数,OUTi保持为高电平不变; 待计数值减到“1”和“0”之间, OUTi将输出宽度为一个CLKi周期的负脉冲,计数值为“0”时,自动重新

13、装入计数初值n,实现循环计数,OUTi将输出一定频率的负脉冲序列, 其脉冲宽度固定为一个CLKi周期, 重复周期为CLKi周期的n倍。图1-7 方式2工作时序图如果在减“1”计数过程中,GATE变为无效(输入0电平),则暂停减“1”计数,待GATE恢复有效后,从初值n开始重新计数。这样会改变输出脉冲的速率。如果在操作过程中要求改变输出脉冲的速率,CPU可在任何时候,重新写人新的计数值, 它不会影响正在进行的减“1”计数过程,而是从下一个计数操作用期开始按新的计数值改变输出脉冲的速率。表1-5 方式2引脚设置 4.方式3:方波发生器工作方式3被称作方波发生器,其定时波型如图, 只在计数值n为偶数

14、,则可输出重复周期为n、占空比为1:1的方波。图1-8 方式3工作时序图进入工作方式3,OUTi输出低电平, 装入计数值后,OUTi立即跳变为高电平。如果当GATE为高电平, 则立即开始减“1”计数,OUTi保持为高电平,若n为偶数,则当计数值减到n/2时,OUTi跳变为低电平,一直保持到计数值为“0”,系统才自动重新置入计数值n,实现循环计数。这时OUTi端输出的周期为nCLKi周期,占空比为1:1的方波序列; 若n为奇数, 则OUTi端输出周期为nCLKi周期,占空比为(n+1)/2)/(n-1)/2)的近似方波序列。如果在操作过程中, GATE变为无效,则暂停减“1”计数过程,直到GAT

15、E再次有效,重新从初值n开始减“l”计数。如果要求改变输出方波的速率, 则CPU可在任何时候重新装入新的计数初值n,并从下一个计数操作周期开始改变输出方波的速率。表1-6 方式3引脚设置 5.方式4:软件触发方式计数工作方式4被称作软件触发方式,其定时波形如图所示。进入工作方式4,OUTi输出高电平。 装入计数值n后, 如果GATE为高电平,则立即开始减“1”计数,直到计数值减到“0”为止,OUTi输出宽度为一个CLKi周期的负脉冲。由软件装入的计数值只有一次有效,如果要继续操作, 必须重新置入计数初值n。如果在操作的过程中,GATE变为无效,则停止减“1”计数, 到GATE再次有效时,重新从

16、初值开始减“1”计数。图1-9 方式4工作时序图显然,利用这种工作方式可以完成定时功能,定时时间从装入计数值n开始,则OUTi输出负脉冲(表示定时时间到),其定时时间nCLK周期。 这种工作方式也可完成计数功能,它要求计数的事件以脉冲的方式从CLKi输入,将计数次数作为计数初值装入后,由CLKi端输入的计数脉冲进行减“1”计数,直到计数值为“0”,由OUTt端输出负脉冲(表示计数次数到)。 当然也可利用OUTj向CFU发出中断请求。 因此工作方式4与工作方式0很相似,只是方式0在OUTi端输出正阶跃信号、方式4在OUTi端输出负脉冲信号。表1-7 方式4引脚设置 6.方式5:硬件触发方式计数工

17、作方式5被称为硬件触发方式,其定时波形如图所示。进入工作方式5, OUTi输出高电平, 硬件触发信号由GATE端引入。 因此,开始时GATE应输入为0, 装入计数初值n后,减“1”计数并不工作,一定要等到硬件触发信号由GATE端引入一个正阶跃信号,减“1”计数才会开始,待计数值计到“0”, OUTi将输出负脉冲,其宽度固定为一个CLKi周期,表示定时时间到或计数次数到。图1-10 方式5工作时序图这种工作方式下,当计数值计到“0”后, 系统将自动重新装入计数值n,但并不开始计数, 一定要等到由GATE端引入的正跳沿,才会开始进行减“1”计数, 因此这是一种完全由GATE端引入的触发信号控制下的

18、计数或定时功能。如果由CLKi输入的是一定频率的时钟脉冲,那么可完成定时功能,定时时间从GATE上升沿开始,到OUTi端输出负脉冲结束。如果从CLKi端输入的是要求计数的事件,则可完成计数功能,计数过程从GATE上升沿开始,到OUTi输出负脉冲结束。GATE可由外部电路或控制现场产生,故硬件触发方式由此而得名。如果需要改变计数初值, CPU可在任何时候用输出指令装入新的计数初值m,它将不影响正在进行的操作过程, 而是到下一个计数操作周期才会按新的计数值进行操作。表1-8 方式5引脚设置 从上述各工作方式可看出,GATE作为各通道的门控信号,对于各种不同的工作方式,它所起的作用各不相同。在825

19、3的应用中,必须正确使用GATE信号,才能保证各通道的正常操作。7.读取计数器的当前值直接读计数器:输出锁存器在非锁存状态会跟随计数器计数的变化而变化,直接读计数器是从锁存器得到计数器的当前值。但由于计数器处于工作状态,读出值不一定能稳定。先锁存再读取:通过方式选择控制字对指定通道(SC1、SC0)的计数值锁入锁存器(RL1RL0=00), 锁存器一旦锁存了当前计数值,就不再随计数器变化直到被读取。读计数器通道(有锁存器)。11.2.2 L298简介L298是SGS公司的产品,比较常见的是15脚Multiwatt封装的L298N,内部包含4通道逻辑驱动电路。可以方便的驱动两个直流电机,或一个两

20、相步进电机。L298N芯片可以驱动两个二相电机,也可以驱动一个四相电机,输出电压最高可达50V,可以直接通过电源来调节输出电压;可以直接用单片机的IO口提供信号;而且电路简单,使用比较方便。L298N可接受标准TTL逻辑电平信号VSS,VSS可接457 V电压。4脚VS接电源电压,VS电压范围VIH为2546 V。输出电流可达25 A,可驱动电感性负载。1脚和15脚下管的发射极分别单独引出以便接入电流采样电阻,形成电流传感信号。L298可驱动2个电动机,OUT1,OUT2和OUT3,OUT4之间可分别接电动机,本实验装置我们选用驱动一台电动机。5,7,10,12脚接输入控制电平,控制电机的正反

21、转。EnA,EnB接控制使能端,控制电机的停转。表1-8是L298N功能逻辑图。 表1-8 L298真值表In3,In4的逻辑图与表1-8相同。由表1-8可知EnA为低电平时,输入电平对电机控制起作用,当EnA为高电平,输入电平为一高一低,电机正或反转。同为低电平电机停止,同为高电平电机刹停。下图是其引脚图:图1-11 L298引脚图1.1.3 PWM基本原理PWM(脉冲宽度调制)是通过控制固定电压的直流电源开关频率,改变负载两端的电压,从而达到控制要求的一种电压调整方法。PWM可以应用在许多方面,比如:电机调速、温度控制、压力控制等等。 在PWM驱动控制的调速系统中,按一个固定的频率来接通和

22、断开电源,并且根据需要改变一个周期内“接通”和“断开”时间的长短。通过改变直流电机电枢上电压的“占空比”来达到改变平均电压大小的目的,从而来控制电动机的转速。也正因为如此,PWM又被称为“开关驱动装置”。 如下图所示: 图1-12 PWM脉冲 设电机始终接通电源时,电机转速最大为Vmax,设占空比为D= t1 / T,则电机的平均速度为Va = Vmax * D,其中Va指的是电机的平均速度;Vmax 是指电机在全通电时的最大速度;D = t1 / T是指占空比。由上面的公式可见,当我们改变占空比 D = t1 / T时,就可以得到不同的电机平均速度Vd,从而达到调速的目的。严格来说,平均速度

23、Vd 与占空比D并非严格的线性关系,但是在一般的应用中,我们可以将其近似地看成是线性关系。1.2 硬件系统设计121 传感器电路设计在信号脉冲发生源上,本系统采用的是开关型霍尔传感器。 以磁场作为媒介,利用霍尔传感器可以检测多种物理量,如位移、振动、转速、加速度、流量、电流、电功率等。它不仅可以实现非接触测量,并且采用永久磁铁产生磁场,不需附加能源。另外霍尔传感器尺寸小、价格便宜、应用电路简单、性能可靠,因而获得极为广泛的应用。除了直接利用霍尔传感器外,还利用它开发出各种派生的传感器。 金属或半导体薄片的两个端面通以控制电流Ic,并在薄片的垂直方向上施加磁感应强度为B的磁场,则在垂直于电流和磁

24、场的方向上将产生电势Uh,称为霍尔电势或霍尔电压。霍尔电势Uh=KhIcB(其中Kh为霍尔元件灵敏度,它与所用的材料及几何尺寸有关)。这种现象称为霍尔效应,而用这种效应制成的元件称为霍尔元件。霍尔传感器原理图如图1-13所示。 图1-13 霍尔传感器磁场效应本系统采用开关型霍尔传感器A04E。开关型霍尔传感器是一种集成传感器,它内部含有霍尔元件、放大器、稳压电源、带一定滞后特性的比较器及集电极开路输出部分等,如图1-14所示。开关型霍尔传感器的工作特性如图1-15 所示。图1-14 开关型霍尔传感器内部结构图图1-15 开关型霍尔传感器工作特性当外加的磁感应强度超过动作点Bop时,传感器输出低

25、电平,但磁感应强度降到动作点Bop以下时,传感器输出电平不变,一直要降到释放点BRE时,传感器才由低电平跃变为高电平。Bop与Bre之间的滞后(或称为回差)使开关动作更为可靠。 图1-16 霍尔传感器检测转速示意图霍尔传感器检测转速示意图1-16如下。在非磁材料的圆盘边上粘贴一块磁钢,霍尔传感器固定在圆盘外缘附近。圆盘每转动一圈霍尔传感器便输出一个脉冲。通过单片机测量产生脉冲的频率,就可以得出圆盘的转速。同样道理,根据圆盘(车轮)的转速,再结合圆盘的周长就是计算出物体的位移。如果要增加测量位移精度,可以在圆盘(车轮)上多增加几个磁钢。 由于传感器内部为集电极开路输出,所以需外接一个上拉电阻,其

26、阻值与电源电压大小有关,一般取12k,如图1-17所示。 图1-17 传感器输出电路122 信号处理电路设计系统的信号预处理电路由二级电路构成,第一级是由开关三极管组成的零偏置放大器,采用开关三极管可以保证放大器具有良好的高频响应。当输入信号为零或负电压时,三极管截止,电路输出高电平;而当输入信号为正电压时,三极管导通,此时输出电压随着输入电压的上升而下降,这使得速度里程表既可以测量任意方波信号的频率,也可以测量正弦波信号的频率。由于放大器的放大功能降低了对待测信号的幅度要求,因此,系统能对任意大于0.5V的正弦波和脉冲信号进行测量。预处理电路的第二级采用带施密特触发器的反相器DM74LS14

27、来把放大器生成的单相脉冲转换成与COMS电平相兼容方波信号,同时将输出信号加到单片机的P3.5口上。 利用施密特触发器状态转换过程中的正反馈作用,可以把边沿变化缓慢的周期性信号变换为边沿很陡的矩形脉冲信号。输入的信号只要幅度大于VT+,即可在施密特触发器的输出端得到同等频率的矩形脉冲信号。 从传感器得到的矩形脉冲经传输后往往发生波形畸变。当传输线上的电容较大时,波形的上升沿将明显变坏;当传输线较长,而且接受端的阻抗与传输线的阻抗不匹配时,在波形的上升沿和下降沿将产生振荡现象;当其他脉冲信号通过导线间的分布电容或公共电源线叠加到矩形脉冲信号时,信号上将出现附加的噪声。无论出现上述的那一种情况,都

28、可以通过用施密特反相触发器整形而得到比较理想的矩形脉冲波形。只要施密特触发器的VT+和VT-设置得合适,均能受到满意的整形效果。信号预处理电路如图1-18所示。 图1-18 信号预处理电路图图1-19 信号预处理模拟仿真电路图(图中用脉冲来表示霍尔传感器检测到的转速信号)123 显示电路设计 显示电路主要使用了LCD1602液晶芯片。具体设计电路图如下图所示: 图1-20 显示电路设计124 PWM信号发生电路设计 PWM波可以由具有PWM输出的单片机通过编程来得以产生,也可以采用PWM专用芯片来实现。当PWM波的频率太高时,它对直流电机驱动的功率管要求太高,而当它的频率太低时,其产生的电磁噪

29、声就比较大,在实际应用中,当PWM波的频率在18KHz左右时,效果最好。在本系统内,采用了可编程计数器8253和单片机组成了PWM信号发生电路。具体电路图如图所示:图1-21 PWM信号发生电路125 整体电路图综合以上电路,得到整体电路设计图1-22。图1-22 电机控制系统整体电路原理图1.3 软件系统设计1.3.1 传感器检测与信号处理和显示子程序的设计利用霍尔传感器检测到电机转速信号,并经过放大、整形。然后把该脉冲输入到单片机的P3.5端口进行计数,再把记录到的脉冲个数(已经存放在定时器T1中)通过单片机输入到液晶显示频进行实时显示。软件设计流程图如下图所示:开始定时器T0、T1的初始

30、化液晶显示器的初始化NO启动定时器T0、T1YES定时器T0中断服务程序液晶显示器实时显示结束图1-23 PWM电机控制流程图1.3.2 PWM产生与电机驱动子程序的设计本模块主要利用8253芯片产生PWM,然后在通过对L298的控制实现对电动机的正转、反转、停止、加速和减速等的操作。软件设计流程图如下图所示:开始向8253写入控制字液晶显示器的初始化不断调用正转、反转、停止、加速和减速子程序结束1.4 软件和硬件调试仿真1、 利用PROTEUS软件设计电路原理图,并在该软件环境中进行简单调试,排除电气性能上的错误。2、 利用Keil软件建立工程项目文件,并在该文件内添加C语言源程序。把设计好

31、的C语言源代码输入软件环境中,进行编译,排除语法错误。然后生成HEX文件。3、 把生成的HEX文件导入PROTEUS软件的控制芯片中,进行仿真。仔细观察各个硬件的工作情况。同时也可充分利用软件中的各种工具观察硬件运行时参数,如可以观察某点的电压,某条电路上的电流,某个引脚的波形等等。1.5 小结本文主要介绍了利用8253产生PWM波,详细的阐述了8253芯片的内部结构和工作方式,本文中我们使用8253通道0的工作方式3来获得PWM。同时也简单的介绍了PWM的原理;第二,我们也简单的介绍了L298的使用,知道了8253和L298的硬件连接方法;再就是我们在本文中说明了电机转速的测量方法和测量有关

32、的硬件、电路和程序设计方法。附录:本设计的C语言源代码,分为三部分1 、zhiliudianji.c/*/* Copyright (c) 2011, 机械与电子学院 */* All rights reserved. */* 作 者:江西环境工程职业学院 张小波*/*/#include PWM.hsbit LE1=P26;sbit LE2=P27;sbit MOTOR_A=P10;sbit MOTOR_B=P11;sbit Rotation_Positive=P12;sbit Rotation_Negative=P13;sbit Speed_Add=P14;sbit Speed_Sub=P15;

33、sbit Stop_Motor=P16;uchar count;/ LCD显示缓冲uchar LCD_DSY_BUFFER1=Speed=250.2r/min ;uchar LCD_DSY_BUFFER2= pulse = HZ ;/*-子程序声明-*/void delay(uint K); /延时子程序void Z_Rotation(); /正转子程序void FZ_Rotation(); /反转子程序void Motor_Stop() ; /停止子程序void Add_Speed(); /加速子程序void Sub_Speed(); /加速子程序void show_LCD1602();/显

34、示程序void Initialize_LCD1602(); /液晶初始化函数void LCD_Display(uchar p,uchar *str);/* 主程序 */void main() /* 向8253控制字寄存器选择计数器0,并对其赋初值 */ COMWORD = 0x36; /定义8253的工作方式为工作方式3,称作方波发生器, delay(5);Initialize_LCD1602(); /调用液晶初始化函数IE=0x8A; /允许中断 T0,T1中断TMOD=0x51; / 设置定时器的工作方式,T0,T1为方式1TH0=-50000/256; / 写入初值TL0=-50000%

35、256; / 写入初值TH1=0; / 写入初值TL1=0; / 写入初值while(1) show_LCD1602(); Z_Rotation(); /正转 FZ_Rotation(); /反转 Motor_Stop() ; /停止 Add_Speed(); /加速 Sub_Speed(); /减速/ 无限循环 /*-延时子程序-*/void delay(uint K) uint i,j; for(i=K;i0;i-) for(j=120;j0;j-);/正转子程序void Z_Rotation() if(Rotation_Positive=0) delay(10);if(Rotation_

36、Positive=0) TR0=1; TR1=1;MOTOR_A=1; MOTOR_B=1;delay(10);MOTOR_A=1; MOTOR_B=0;COUNT0 = 0xFF; /写入计数初值 COUNT0 = 0x30; /反转子程序void FZ_Rotation() if(Rotation_Negative=0) delay(10);if(Rotation_Negative=0) TR0=1; TR1=1;MOTOR_A=1; MOTOR_B=1;delay(10);MOTOR_A=0; MOTOR_B=1;COUNT0 = 0xFF; /写入计数初值 COUNT0 = 0x30;

37、 /停止子程序void Motor_Stop() if(Stop_Motor=0) delay(10);if(Stop_Motor=0) MOTOR_A=1; MOTOR_B=1;COUNT0 = 0x00; /写入计数初值 COUNT0 = 0x00; /加速子程序void Add_Speed() if(Speed_Add=0) delay(10);if(Speed_Add=0) COUNT0 = 0x00; /写入计数初值 COUNT0 = 0x00; /减速子程序void Sub_Speed() if(Speed_Sub=0) delay(10);if(Speed_Sub=0) COUN

38、T0 = 0xF0; /写入计数初值 COUNT0 = 0x03; void show_LCD1602() LE1=0;LE2=1;LCD_Display(0x00,LCD_DSY_BUFFER1);LCD_Display(0x40,LCD_DSY_BUFFER2); /-/ 定时器0中断函数/- void T0_INT()interrupt 1 uint tmp; TH0=-50000/256; / 写入初值 TL0=-50000%256; / 写入初值 if( +count=20) TR1=0; /关闭定时器 TR0=0; /关闭定时器 count=0; / 显示电机的转动速度 tmp=T

39、H1*255+TL1; LCD_DSY_BUFFER210=tmp/1000+0; LCD_DSY_BUFFER211=tmp%1000/100+0; LCD_DSY_BUFFER212=tmp%1000%100/10+0; LCD_DSY_BUFFER213=tmp%1000%100%10+0; TH1=TL1=0; 2、PWM。H头文件#ifndef_PWM_H / 防止PWM.h被重复引用#define_PWM_H#include / 引用标准库的头文件#include #include #define uchar unsigned char #define uint unsigned

40、int #define COUNT0 XBYTE0x0000/ 8253计数器0寄存器地址#define COUNT1 XBYTE0x0200/ 8253计数器1寄存器地址#define COUNT2 XBYTE0x0400/ 8253计数器2寄存器地址#define COMWORD XBYTE0x0600/ 8253控制字寄存器地址#endif3、 LCD源程序/-LCD1602.c-/液晶控制与显示驱动程序/-#include #include #define uchar unsigned char#define uint unsigned intsbit RS=P23; / LCD寄存器

41、选择sbit RW=P24; / LCD读写控制sbit EN=P25; / LCD启动/*-延时子程序-*/void DelayMS(uint K) uchar i; while(K-) for(i=0;i120;i+); /-读取LCD的状态-*/uchar Read_LCD_State() uchar state; RS=0; RW=1; EN=1; DelayMS(2); state=P0; EN=0; DelayMS(2); return state;/-忙检查-*/void LCD_Busy_Wait() while(Read_LCD_State()&0x80)=0x80);DelayMS(5);/-写LCD命令-*/void Write_LCD_Command(uchar cmd) LCD_Busy_Wait(); RS=0; RW=0; EN=0; P0=cmd; EN=1; DelayMS(2); EN=0;/-向LCD写入数据-*/void Write_LCD_Data(uchar dat) LCD_Busy_Wait(); RS=1; RW=0; EN=0; P0=dat; EN=1; DelayMS(2); EN=0; /-LCD初始化-*/void Initialize_LCD1602() /

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号