基于AT89S52单片机直流电机PWM控制系统

发布者:RadiantBreeze最新更新时间:2015-12-31 来源: eefocus关键字:AT89S52  单片机  直流电机  PWM控制系统 手机看文章 扫描二维码
随时随地手机看文章
1 绪论

1.1直流电机的发展   

直流电动机在冶金、矿山、化工、交通、机械、纺织、航空等领域中已经得到广泛的应用。而以往直流电动机的控制只是简单的控制,很难进行调速,不能实现智能化。如今,直流电动机的调速控制已经离不开单片机的支持,单片机应用技术的飞速发展促进了自动控制技术的发展,使人类社会步入了自动化时代,单片机应用技术与其他学科领域交叉融合,促进了学科发展和专业更新,引发了新兴交叉学科与技术的不断涌现。现代科学技术的飞速发展,改变了世界,也改变了人类的生活。由于单片机的体积小、重量轻、功能强、抗干扰能力强、控制灵活、应用方便、价格低廉等特点,计算机性能的不断提高,单片机的应用也更加广泛特别是在各种领域的控制、自动化等方面。

在实际应用中,电动机作为把电能转换为机械能的主要设备,一是要具有较高的能量转换效率;二是应能根据生产工艺的要求调整转速。电动机的调速性能如何对提高产品质量、提高劳动生产率和节省电能有着直接的决定性影响。因此,调速技术一直是研究的热点。

直流电机由于具有速度控制容易,启动制动性能良好,且能在宽范围内平滑调速等特点而在电力、冶金、机械制造等工业部门中得到广泛应用。直流电动机转速的控制方法可分为两类:励磁控制阀与电枢电压控制法。励磁控制法控制磁通,其控制功率虽然小但低俗时受到磁场饱和的限制,高速时受到换向火花和转向器结构强度的限制,而且由于励磁线圈电感较大动态响应较差。所以常用的控制方法是改变电枢端电压调速的电枢电压控制法。

传统的改变端电压的方法是通过调节电阻来实现的,但这种调压方法效率低。随着电力电子技术的发展,创造了许多新的电枢电压控制方法。其中脉宽调制(Pulse Width Modulation,PWM)是常用的一种调速方法。其基本原理是用改变电机电枢电压的接通和断开的时间比(即占空比)来控制马达的速度,在脉宽调速系统中当电机通电时,其速度增加,电机断电时其速度降低。只要按照一定的规律改变通断电的时间,就可使电机的速度保持在一稳定值上。

1.2单片机以及微处理器控制系统的发展

单片微型计算机的诞生是计算机发展史上的一个新的里程碑。近年来,随着技术的发展和进步,以及市场对产品功能和性能的要求不断提高,直流电动机的应用更加广泛,尤其是在智能机器人中的应用。直流电动机的起动和调速性能、过载能力强等特点显得十分重要,为了能够适应发展的要求,单闭环直流电动机的调速控制系统得到了很大的发展。而作为单片嵌入式系统的核心—单片机,正朝着多功能、多选择、高速度、低功耗、低价格、大存储容量和强I/O功能等方向发展。随着计算机档次的不断提高,功能的不断完善,单片机已越来越广泛地应用在各种领域的控制、自动化、智能化等方面,特别是在直流电动机的调速控制系统中。这是因为单片机具有很多优点:体积小,功能全,抗干扰能力强,可靠性高,结构合理,指令丰富,控制功能强,造价低等。所以选用单片机作为控制系统的核心以提高整个系统的可靠性和可行性。

早期直流传动的控制系统采用模拟分离器件构成,由于模拟器件有其固有的缺点,如存在温漂、零漂电压,构成系统的器件较多,使得模拟直流传动系统的控制精度及可靠性较低。随着计算机控制技术的发展,微处理器已经广泛使用于直流传动系统,实现了全数字化控制。由于微处理器以数字信号工作,控制手段灵活方便,抗干扰能力强。所以,全数字直流调速控制精度、可靠性和稳定性比模拟直流调速系统大大提高。所以,直流传动控制采用微处理器实现全数字化,使直流调速系统进入一个崭新的阶段。

微处理器诞生于上个世纪七十年代,随着集成电路大规模及超大规模集成电路制造工艺的迅速发展,微处理器的性价比越来越高。此外,由于电力电子技术的发展,制作工艺的提升,使得大功率电子器件的性能迅速提高。为微处理器普遍用于控制电机提供了可能,利用微处理器控制电机完成各种新颖的、高性能的控制策略,使电机的各种潜在能力得到充分的发挥,使电机的性能更符合工业生产使用要求,还促进了电机生产商研发出各种如步进电机、无刷直流电机、开关磁阻电动机等便于控制且实用的新型电机,使电机的发展出现了新的变化。

对于简单的微处理器控制电机,只需利用用微处理器控制继电器、电子开关元器件,使电路开通或关断就可实现对电机的控制。现在带微处理器的可编程控制器,已经在各种的机床设备和各种的生产流水线中普遍得到应用,通过对可编程控制器进行编程就可以实现对电机的规律化控制。对于复杂的微处理器控制电机,则要利用微处理器控制电机的电压、电流、转矩、转速、转角等,使电机按给定的指令准确工作。通过微处理器控制,可使电机的性能有很大的提高。目前相比直流电机和交流电机他们各有所长,如直流电机调速性能好,但带有机械换向器,有机械磨损及换向火花等问题;交流电机,不论是异步电机还是同步电机,结构都比直流电机简单,工作也比直流电机可靠,但在频率恒定的电网上运行时,它们的速度不能方便而经济地调节[2]。高性能的微处理器如DSP (DIGITAL  SIGNAL  PROCESSOR即数字信号处理器)的出现,为采用新的控制理论和控制策略提供了良好的物质基础,使电机传动的自动化程度大为提高。在先进的数控机床等数控位置伺服系统,已经采用了如DSP等的高速微处理器,其执行速度可达数百万兆以上每秒,且具有适合的矩阵运算。

 

2 系统论述

2.1设计背景

近年来,随着科技的进步,电力电子技术得到了迅速的发展,直流电机得到了越来越广泛的应用。直流它具有优良的调速特性,调速平滑、方便,调速范围广;过载能力大,能承受频繁的冲击负载,可实现频繁的无级快速起动、制动和反转;需要能满足生产过程自动化系统各种不同的特殊运行要求,从而对直流电机的调速提出了较高的要求,改变电枢回路电阻调速,改变电枢电压调速等技术已远远不能满足要求,这时通过PWM方式控制直流电机调速的方法应运而生。

 

2.2 设计思路

直流电机PWM控制系统的主要功能包括:实现对直流电机的加速、减速以及电机的正转、反转和急停,并且可以调整电机的转速,能够很方便的实现电机的智能控制。

主体电路:即直流电机PWM控制模块。这部分电路主要由AT89S52单片机的I/O端口、定时计数器、外部中断扩展等控制直流电机的加速、减速以及电机的正转和反转,并且可以调整电机的转速,能够很方便的实现电机的智能控制。其间是通过AT89S52单片机产生脉宽可调的脉冲信号并输入到L298驱动芯片来控制直流电机工作的。该直流电机PWM控制系统由以下电路模块组成:

设计输入部分:这一模块主要是利用带中断的独立式键盘来实现对直流电机的加速、减速以及电机的正转、反转和急停控制。

设计控制部分:主要由AT89S52单片机的外部中断扩展电路组成。直流电机PWM控制实现部分主要由一些二极管、电机和L298直流电机驱动模块组成。

设计显示部分: LED数码显示部分,实现对PWM脉宽调制占空比的实时显示。

2.3 系统框架设计

 

直流电机PWM调速方案

方案说明:直流电机PWM调速系统以AT89S52单片机为控制核心,由命令输入模块、LED显示模块及电机驱动模块组成。采用带中断的独立式键盘作为命令的输入,单片机在程序控制下,定时不断给L298直流电机驱动芯片发送PWM波形,H型驱动电路完成电机正,反转和急停控制;同时单片机不停的将PWM脉宽调制占空比送到LED数码管完成实时显示。


3 PWM脉宽调制原理

3.1 PWM调速原理

PWM(脉冲宽度调制)是通过控制固定电压的直流电源开关频率,改变负载两端的电压,从而达到控制要求的一种电压调整方法。PWM可以应用在许多方面,比如:电机调速、温度控制、压力控制等等[7]。

在PWM驱动控制的调整系统中,按一个固定的频率来接通和断开电源,并且根据需要改变一个周期内“接通”和“断开”时间的长短。通过改变直流电机电枢上电压的“占空比”来达到改变平均电压大小的目的,从而来控制电动机的转速。也正因为如此,PWM又被称为“开关驱动装置”。

如图1所示:

图1  PWM信号的占空比

设电机始终接通电源时,电机转速最大为Vmax,设占空比为D= t1 / T,则电机的平均速度为Va = Vmax * D,其中Va指的是电机的平均速度;Vmax 是指电机在全通电时的最大速度;D = t1 / T是指占空比。

由上面的公式可见,当我们改变占空比D=t1/T时,就可以得到不同的电机平均速度Vd,从而达到调速的目的。严格来说,平均速度Vd与占空比D并非严格的线性关系,但是在一般的应用中,我们可以将其近似的看成是线性关系。

3. 2  PWM调速方法

基于单片机类由软件来实现PWM:在PWM调速系统中占空比D是一个重要参数在电源电压不变的情况下,电枢端电压的平均值取决于占空比D的大小,改变D的值可以改变电枢端电压的平均值从而达到调速的目的。改变占空比D的值有三种方法:

A、定宽调频法:保持 不变,只改变t,这样使周期(或频率)也随之改变[。

B、调宽调频法:保持t不变,只改变 ,这样使周期(或频率)也随之改变[。

C、定频调宽法:保持周期T(或频率)不变,同时改变 和t。

 前两种方法在调速时改变了控制脉冲的周期(或频率),当控制脉冲的频率与系统的固有频率接近时,将会引起振荡,因此常采用定频调宽法来改变占空比从而改变直流电动机电枢两端电压。利用单片机的定时计数器外加软件延时等方式来实现脉宽的自由调整,此种方式可简化硬件电路,操作性强等优点。

3.3 PWM实现方式

方案一:采用定时器做为脉宽控制的定时方式,这一方式产生的脉冲宽度极其精确,误差只在几个us。

方案二:采用软件延时方式,这一方式在精度上不及方案一,特别是在引入中断后,将有一定的误差。故采用方案一。

 

                               

 

     4系统硬件设计

4.1系统基本组成

4.1.1 硬件模块组成

(1)单片机控制模块

(2)L298电机驱动模块

(3)LED显示模块

(4)独立键盘控制模块3.3系统硬件各模块电路

4.1.2 单片机整个控制模块

单片机整个控制模块

    这里利用定时计数器让单片机P2口的P2.6、P2.7引脚输出占空比不同的方波,然后经驱动芯片L298放大后控制直流电机。驱动芯片的输入电压是两引脚的电压差,在调速时一根引脚线为低电平,另一个引脚产生调速方波,这样两个引脚的电压差就可通过控制其中一个引脚来控制。当需要改变电机转动方向时,两个引脚的输出相反。

    定时计数器若干时间(1us)中断一次,就使P2.6或P2.7产生一个高电平或低电平。直流电机的速度分成100个等级,因此一个周期就有100个脉冲,周期为一百个脉冲的时间,速度等级对应一个周期的高电平脉冲的个数。占空比为高电平脉冲个数占一个周期总脉冲个数的百分数。一个周期加在电机两端的电压为脉冲高电压乘以占空比。占空比越大,加在电机两端的电压越大,电机转动越快。电机的平均速度等于在一定的占空比下电机的最大速度乘以占空比。当我们改变占空比时,就可以得到不同的电机平均速度,从而达到调速的目的。精确的讲,平均速度与占空比并不是严格的线性关系,在一般的应用中,可以将其近似看成线性关系。

4.2  AT89S52的简介

4.2.1 AT89S52主要性能

AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51   产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

与MCS-51单片机产品兼容;8K字节在系统可编程Flash存储器;1000次擦写周期;全静态操作:0Hz~33Hz;三级加密程序存储器;32个可编程I/O口线;三个16位定时器/计数器;八个中断源;全双工UART串行通道;低功耗空闲和掉电模式;掉电后中断可唤醒;看门狗定时器;双数据指针;掉电标识符。

 

4.2.2 AT89S52主要功能列举

1、拥有灵巧的8位CPU和在系统可编程Flash

2、晶片内部具时钟振荡器(传统最高工作频率可至 12MHz)

3、内部程序存储器(ROM)为 8KB

4、内部数据存储器(RAM)为 256字节

5、32 个可编程I/O 口线

6、8 个中断向量源

7、三个 16 位定时器/计数器

8、三级加密程序存储器

9、全双工UART串行通道

4.2.3 AT89S52各引脚功能介绍

VCC:

AT89S52电源正端输入,接+5V。

VSS:

电源地端。

XTAL1:

单芯片系统时钟的反相放大器输入端。

XTAL2:

系统时钟的反相放大器输出端,一般在设计上只要在 XTAL1 和 XTAL2 上接上一只石英振荡晶体系统就可以动作了,此外可以在两引脚与地之间加入一 20PF 的小电容,可以使系统更稳定,避免噪声干扰而死机。

RESET:

AT89S52的重置引脚,高电平动作,当要对晶片重置时,只要对此引脚电平提升至高电平并保持两个机器周期以上的时间,AT89S51便能完成系统重置的各项动作,使得内部特殊功能寄存器之内容均被设成已知状态,并且至地址0000H处开始读入程序代码而执行程序。

EA/Vpp:

"EA"为英文"External Access"的缩写,表示存取外部程序代码之意,低电平动作,也就是说当此引脚接低电平后,系统会取用外部的程序代码(存于外部EPROM中)来执行程序。因此在8031及8032中,EA引脚必须接低电平,因为其内部无程序存储器空间。如果是使用 8751 内部程序空间时,此引脚要接成高电平。此外,在将程序代码烧录至8751内部EPROM时,可以利用此引脚来输入21V的烧录高压(Vpp)。

ALE/PROG:

ALE是英文"Address Latch Enable"的缩写,表示地址锁存器启用信号。AT89S52可以利用这支引脚来触发外部的8位锁存器(如74LS373),将端口0的地址总线(A0~A7)锁进锁存器中,因为AT89S52是以多工的方式送出地址及数据。平时在程序执行时ALE引脚的输出频率约是系统工作频率的1/6,因此可以用来驱动其他周边晶片的时基输入。此外在烧录8751程序代码时,此引脚会被当成程序规划的特殊功能来使用。

PSEN:

此为"Program Store Enable"的缩写,其意为程序储存启用,当8051被设成为读取外部程序代码工作模式时(EA=0),会送出此信号以便取得程序代码,通常这支脚是接到EPROM的OE脚。AT89S52可以利用PSEN及RD引脚分别启用存在外部的RAM与EPROM,使得数据存储器与程序存储器可以合并在一起而共用64K的定址范围。

PORT0(P0.0~P0.7):

端口0是一个8位宽的开路汲极(Open Drain)双向输出入端口,共有8个位,P0.0表示位0,P0.1表示位1,依此类推。其他三个I/O端口(P1、P2、P3)则不具有此电路组态,而是内部有一提升电路,P0在当做I/O用时可以推动8个LS的TTL负载。如果当EA引脚为低电平时(即取用外部程序代码或数据存储器),P0就以多工方式提供地址总线(A0~A7)及数据总线(D0~D7)。设计者必须外加一锁存器将端口0送出的地址栓锁住成为A0~A7,再配合端口2所送出的A8~A15合成一完整的16位地址总线,而定址到64K的外部存储器空间。

PORT2(P2.0~P2.7):

端口2是具有内部提升电路的双向I/O端口,每一个引脚可以推动4个LS的TTL负载,若将端口2的输出设为高电平时,此端口便能当成输入端口来使用。P2除了当做一般I/O端口使用外,若是在AT89S52扩充外接程序存储器或数据存储器时,也提供地址总线的高字节A8~A15,这个时候P2便不能当做I/O来使用了。

PORT1(P1.0~P1.7):

端口1也是具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个LS TTL负载,同样地若将端口1的输出设为高电平,便是由此端口来输入数据。如果是使用8052或是8032的话,P1.0又当做定时器2的外部脉冲输入脚,而P1.1可以有T2EX功能,可以做外部中断输入的触发脚位。

PORT3(P3.0~P3.7):

端口3也具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个TTL负载,同时还多工具有其他的额外特殊功能,包括串行通信、外部中断控制、计时计数控制及外部数据存储器内容的读取或写入控制等功能。

其引脚分配如下:

P3.0:RXD,串行通信输入。

P3.1:TXD,串行通信输出。

P3.2:INT0,外部中断0输入。

P3.3:INT1,外部中断1输入。

P3.4:T0,计时计数器0输入。

P3.5:T1,计时计数器1输入。

P3.6:WR:外部数据存储器的写入信号。

P3.7:RD,外部数据存储器的读取信号。

RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。

  /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

  /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

  XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:来自反向振荡器的输出。

4.2.4 AT89S52的内部资源

    AT89S52 有6个中断源:两个外部中断(INT0 和INT1),三个定时中断(定时器0、1、2)和一个串行中断。这些中断每个中断源都可以通过置位或清除特殊寄存器IE中的相关中断允许控制位分别使得中断源有效或无效。IE还包括一个中断允许总控制位EA,它能一次禁止所有中断。

    AT89S52内部具有看门狗定时器及3个16位可编程定时器/计数器。16位是指他们都是由16个触发器构成,故最大计数模值为 。可编程是指它们的工作方式由指令来设置,或者当计数器用,或者当定时器用,并且记数(定时)的范围也可以由指令来设置。这种控制功能是通过定时器方式控制器TMOD来完成的。

    存储器结构:MCS-51器件有单独的程序存储器和数据存储器。外部程序存储器和数据存储器都可以64K寻址。程序存储器:如果EA引脚接地,程序读取只从外部存储器开始。对于 89S52,如果EA 接VCC,程序读写先从内部存储器(地址为0000H~1FFFH)开始,接着从外部寻址,寻址地址为:2000H~FFFFH。

数据存储器:AT89S52 有256 字节片内数据存储器。高128 字节与特殊功能寄存器重叠。也就是说高128字节与特殊功能寄存器有相同的地址,而物理上是分开的。当一条指令访问高于7FH 的地址时,寻址方式决定CPU 访问高128 字节RAM 还是特殊功能寄存器空间。直接寻址方式访问特殊功能寄存器(SFR)。例如,下面的直接寻址指令访问0A0H(P2口)存储单元

MOV 0A0H , #data

使用间接寻址方式访问高128 字节RAM。例如,下面的间接寻址方式中,R0 内容为0A0H,访问的是地址0A0H的寄存器,而不是P2口(它的地址也是0A0H)。

MOV @R0 , #data

堆栈操作也是简介寻址方式。因此,高128字节数据RAM也可用于堆栈空间。

         

4. 3 L298电机驱动模块

4. 3.1 L298电机驱动简介

    L298是SGS公司的产品,L298N为15个管角的单块集成电路,高电压,高电流,四通道驱动,设计用L298N来接收DTL或者TTL逻辑电平,驱动感性负载(比如继电器,直流和步进马达)和开关电源晶体管。内部包含4通道逻辑驱动电路,其额定工作电流为 1 A,最大可达 1.5 A,Vss 电压最小 4.5 V,最大可达 36 V;Vs 电压最大值也是 36 V。L298N可直接对电机进行控制,无须隔离电路,可以驱动双电机。

4. 3.2 L298内部的原理图

 

 

 

 

 

 

 

 

 

 

4. 3.3 L298 引脚符号及功能

引 脚

功 能

SENSA、SENSB

分别为两个H桥的电流反馈脚,不用时可以直接接地

ENA 、ENB

使能端,输入PWM信号

IN1、IN2、IN3、IN4

输入端,TTL逻辑电平信号

OUT1、OUT2、OUT3、OUT4

输出端,与对应输入端同逻辑

VCC

逻辑控制电源,4.5~7V

VSS

电机驱动电源,最小值需比输入的低电平电压高

GND

4. 3.4 L298的逻辑功能

IN1

IN2

ENA

电机状态

X

X

0

停止

1

0

1

顺时针

0

1

1

逆时针

0

0

0

停止

1

1

0

停止

当使能端为高电平时,输入端IN1为PWM信号,IN2为低电平信号时,电机正转;输入端IN1为低电平信号,IN2为PWM信号时,电机反转;;IN1与IN2相同时,电机快速停止。当使能端为低电平时,电动机停止转动。

在对直流电动机电压的控制和驱动中,半导体功率器件(L298)在使用上可以分为两种方式:线性放大驱动方式和开关驱动方式在线性放大驱动方式。

半导体功率器件工作在线性区优点是控制原理简单,输出波动小,线性好,对邻近电路干扰小,缺点为功率器件工作在线性区,功率低和散热问题严重。开关驱动方式是使半导体功率器件工作在开关状态,通过脉调制(PWM)来控制电动机的电压,从而实现电动机转速的控制。

4. 4 LED数码管显示

4. 4.1 LED简介

LED(Light Emitting Diode),发光二极管,是一种固态的半导体器件,它可以直接把电转化为光。LED的心脏是一个半导体的晶片,晶片的一端附在一个支架上,一端是负极,另一端连接电源的正极,使整个晶片被环氧树脂封装起来。半导体晶片由两部分组成,一部分是P型半导体,在它里面空穴占主导地位,另一端是N型半导体,在这边主要是电子。但这两种半导体连接起来的时候,它们之间就形成一个“P-N结”。

  当电流通过导线作用于这个晶片的时候,电子就会被推向P区,在P区里电子跟空穴复合,然后就会以光子的形式发出能量,这就是LED发光的原理。而光的波长也就是光的颜色,是由形成P-N结的材料决定的。除半导体激光器外,当电流激励时能发射光学辐射的半导体二极管。严格地讲,术语LED应该仅应用于发射可见光的二极管;发射近红外辐射的二极管叫红外发光二极管(IRED,Infrared Emitting Diode);发射峰值波长在可见光短波限附近,由部份紫外辐射的二极管称为紫外发光二极管;但是习惯上把上述三种半导体二极管统称为发光二极管。

4. 4.2 LED七段数码管的结构

 

          共阴极                    共阳极                   管脚图

其中:图(a)为共阴极结构,8断发光二极管的阴极端连接在一起,阳极端分开控制,使用时公共端接地,要使哪根发光二极管,则对应的阳极端接高电平。图(b)为共阳极结构,8端发光二极管的阳极端连接在一起,阴极端分开控制,使用时公共端接电源。要使哪根发光二极管,则对应的阴极端接地。其中7段发光二极管构成7笔的字形“8”,1根发光二极管构成小数点。图“c”为引脚图,从a-g引脚输入不同的8位二进制编码,可显示不同的数字或字符。通常把控制发光二极管的7(或8)位二极管编制称为字段码。不同数字或字符其字段码不一样,对于同一个数字或字符,共阴极连接和共阳极连接的字段码也不一样,共阴极和共阳极的字段码互为反码。

4. 4.3常见数字和字符的字段码

显示字符

共阴极字段码

共阳极字段码

显示字符

共阴极字段码

共阳极字段码

0

3FH

C0H

C

39H

C6H

1

06H

F9H

D

5EH

A1H

2

5BH

A4H

E

79H

86H

3

4FH

B0H

F

71H

8EH

4

66H

99H

P

73H

8CH

5

6DH

92H

U

3EH

C1H

6

7DH

82H

T

31H

CEH

7

07H

F8H

Y

6EH

91H

8

7FH

80H

L

38H

C7H

9

6FH

90H

8.

FFH

00H

A

77H

88H

“灭”

00

FFH

B

7CH

83H

……

……

……

4. 4.4 LED数码管和单片机的连接

电路的接法决定了必须采用逐位扫描显示方式。即从段选口送出某位LED的字型码,然后选通该位LED,并保持一段延时时间。然后选通下一位,直到所有位扫 描完。

4. 4.5简单的程序流程

                     

4. 4.6本系统中单片机与LED的连接

 

4.5独立式键盘控制模块

4.5.1键盘的功能及分类

键盘是一种最常用的输入设备,它是一组按键的集合,从功能上可分为数字键和功能键两种,作用是输入数据与命令,查询和控制系统的工作状态,实现简单的人机对话。[page]

键盘的分类

(a)键盘按照接口原理可分为编码键盘与非编码键盘两类。这两类键盘的主要区别是识别键符及给出相应键码的方法。

    编码键盘主要是用硬件来实现对键的识别;

    非编码键盘主要是由软件来实现键盘的定义与识别。

(b)键盘按照其结构可分为独立式键盘与矩阵式键盘两类。

    独立式键盘主要用于按键较少的场合,矩阵式键盘主要用于按键较多的场合,也称行列式键盘

4.5.2独立式键盘

独立式键盘的按键相互独立,每个按键接一根I/O口线,一根I/O口线上的按键工作状态不会影响其它I/O口线的工作状态。因此,通过检测I/O口线的电平状态,即可判断键盘上哪个键被按下

 

 

 

 

 

 

 

 

4.5.3独立式键盘与单片机的链接

 

5系统软件设计

    直接应用AT89S52的软件方法实现PWM信号输出,这比硬件实现PWM信号成本低。限制少。实现便捷。其流程图如下所示。

 

4.1流程图

4.1.1主程序流程图

 

 

 

 

 

 

 

                                                                                                                                                 

图 8 主程序流程图

 

 

 

 

 

 

 

 

4.1.2定时器中断程序流程图

 

图 9 定时器中断程序流程图

 

 

 

 

 

4.1.3 键盘控制流程图

图 10 键盘控制流程图

 

结论

通过本次毕业设计,使我学到了许多书本上无法学到的知识,也使我深刻体会到单片机技术应用领域的广泛。不仅让我对学过的单片机知识有了很多的巩固,同时也对单片机这一门课程产生了更大的兴趣。在本次课程设计过程中,我学会了在网络上查找有关本设计的各硬件的资源,其中包括:直流电机PWM调速、AT89S52单片机、L289引脚图及其引脚功能等,LED数码管显示,为本次毕业设计提供了一定的资料。

在做毕业设计的初期阶段,难度很大,没有头绪。通过求助于陈老师、理清了思路。同时,在图书馆里、网上查阅资料,攻克了毕业设计中的道道难题。通过本次科技创新实践,我学到了许多东西,知道光靠书本上的东西是不够的,需额外去查资料。无论是在硬件还是软件设计上,我都遇到了不少的问题,在克服困难的过程中,我学到了许多,特别是在课堂上学不到的东西如(PWM)。也锻炼了我的protel画图能力,以前学的时候元器件都是给定的只要到库里面找出名字就可以,只要连线就可以,而这次是根据自己的设计需要去画,感觉不同。本次设计我能独立完成,算是有了很大的收获。总的感受有以下几方面:

1、通过本次毕业设计,我不但对单片机有了更为深入的了解,对一个课题如何画流程图,编程序等有了一定的认识。

2、进一步加强了我的动手能力和运用专业知识的能力,从中学习到如何去思考和解决问题,以及如何灵活地改变方法去实现设计方案。特别是深刻体会到了软件和硬件结合的重要性,以及两者的联系和配合作用。

3、让我了解到单片机技术对当今人们生活的重要性。同时这次做毕业设计的经历也使我受益匪浅,让我知道做任何事情都应脚踏实地,刻苦努力地去做,只有这样,才能做好。

 

致谢

经过近半学期的忙碌和工作,本次毕业设计已经接近尾声,作为一个本科生的毕业设计,由于经验的匮乏,难免有许多考虑不周全的地方,如果没有导师的督促指导,以及一起学习的同学们的支持,想要完成这个设计是难以想象的。在这里首先要感谢我的指导老师陈老师。陈老师平日里工作繁多,但在我做毕业设计的每个阶段,从查阅资料到设计草案的确定和修改,中期检查,后期详细设计,装配草图等整个过程中都给予了我悉心的指导。我的设计较为复杂烦琐,但是陈老师仍然细心地纠正设计内容中的错误。除了敬佩陈老师的专业水平外,他的治学严谨和科学研究的精神也是我永远学习的榜样,他的循循善诱的教导和不拘一格的思路也给予我无尽的启迪。并将积极影响我今后的学习和工作。其次要感谢我的同学对我无私的帮助,特别是在直流电机控速技术的相关信息方面,正因为如此我才能顺利的完成设计。最后我要感谢我的母校——徐州工程学院,是母校给我们提供了优良的学习环境;另外,我还要感谢那些曾给我授过课的每一位老师,是你们教会我专业知识。在此,我再说一次谢谢!谢谢大家!!!。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

参考文献

[1] 林志琦.基于Proteus的单片机可视化软硬件仿真[M].北京:北京航空航天大学出版    社,2006.9

[2] 周润景,张丽娜.基于PROTEUS的电路及单片机系统设计与仿真[M].北京:北京航空航天大学出版社,2006.5

[3] 张靖武,周灵彬.单片机系统的PROTEUS设计与仿真[M].北京:电子工业出版社,2007.4

[4] 周润景,张丽娜.PROTEUS入门实用教程[M].北京:机械工业出版社,2007.9

[5] 楼然苗,李光飞.51系列单片机设计实例[M].北京:北京航空航天大学出版社,2003.3

[6] 楼然苗,李光飞.单片机课程设计指导[M].北京:北京航空航天大学出版社,2007.7

[7] 贾东耀,汪仁煌. 数字温度传感器在仓库温度检测系统的应用[J]. 传感器世界,2001

[8] DALLAS DS18B20数据手册[Z].http://www.maximic.com、

[9]李朝青.单片机原理及接口技术[M].北京:北京航空航天大学出版社,2006.

[10]康华光,陈大钦.电子技术基础(模拟部分)[M].北京:高等教育出版社,1999.

[11]康华光,邹寿彬.电子技术基础(数字部分)[M].北京:高等教育出版社,2000.

[12]胡祝兵.基于单片机控制的直流电机调速系统的设计[J].承德石油高等专科学校学报,2008(1).

[13] 卢春华,姚海燕,张莉. 基于单片机的直流电机调速系统设计[J].硅谷,2009(20).

[14] 吴守箴,戚英杰.电气传的脉宽调制控制技术.北京:机械工业出版社.

[15] 贾玉瑛,王臣.基于单片机控制的PWM直流调速系统.包头钢铁学院学报,2005年.

[16] 康华光,邹寿彬.电子技术基础(数字部分第四版).北京:高等教育出版社,2004年.

[17] 三恒星科技.MCS 51单片机原理与应用实例.北京:电子工业出版社,2008年1月.

[18] 浦龙梅,李私.单片机控制的直流PWM调速装置的研究.变频器世界,2006年3月

[19] 张波.SG3525A控制的直流电机脉宽调速装置.电气制造,2006年第七期.


附录

附录1 C程序

*********************************************************************

                                                 直流电机PWM调速

功能描述:使用单片机T0定时器产生(xxxHz)脉宽调制信号,输到L298N的EN_A

                实现双直流电机的速度调控。

修订日期:2011-5-7

*********************************************************************/

#include   

#include                       

#define uchar unsigned char 

#define uint unsigned int

             

/**********************************************************************

                                                 L298n接口定义

**********************************************************************/ 

sbit MOTOR_A_2=P3^6;

sbit MOTOR_A_1=P3^7;

sbit EN_MOTOR_A =P3^4;                                                                                                             

sbit k1=P1^5;        //定义k1为p1.5口

sbit k2=P3^1;   //定义k2为p3.1口

sbit k3=P3^2;   //定义k3为p3.2口

sbit k4=P3^3;   //定义k4为p3.3口

uchar T=0;         //定时标记

uchar W=0;       //脉宽值   0~100

uchar A=0;        //方向标记 0,1

uchar k=0;         //按键标记

uchar i=0;            //计数变量

 

 

uchar code table1[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

 

uchar code table2[]={0xef,0xbf,0xdf,0x7f};

               

void delayms(uint t);                                                     

/**********************************************************************

                                          数码管显示

**********************************************************************/

void disp(void)

{

       P0=table2[3];                             

       P2=table1[W%10];               //显示占空比个位

       delayms(1);                                //延时1ms

       P0=0xff;                                           //P0清1

 

       P0=table2[2];

       P2=table1[W/100];              //显示占空比百位

       delayms(1);                                //延时1ms

       P0=0xff;                                           //P0清1

 

       P0=table2[1];

       P2=table1[W/10%10];  //显示占空比十位

       delayms(1);                          //延时1ms

       P0=0xff;                                   //P0清1

 

       P0=table2[0];

       P2=table1[A];                    //显示方向

       delayms(1);                         //延时1ms

       P0=0xff;                                    //P0清1

}

 

/**********************************************************************

                                                 定时器变量定义

**********************************************************************/

 

 

void init(void)

{

       //启动中断

       TMOD=0x01;

       EA=1;                                       

       ET0=1;

       TR0=1;

       //设置定时时间

       TH0=0xfd;

       TL0=0x17;

}

 

void timer0() interrupt 1

{                            

       //重置定时器时间

       TL0=0x17;

       TH0=0xff;

       T++;                   //定时标记加1

       disp();            //数码管显示

       if(T>W)

              EN_MOTOR_A =1;

       else

              EN_MOTOR_A =0;

       if(T==100)

              T=0;

 

}                  

/**********************************************************************

                                                 延时1ms

**********************************************************************/

void delayms(uint t)

{

       uchar j;

       while(t--)

       {

              for(j=0;j<250;j++)               //循环250次

              {

                      _nop_();             //系统延时          

       _nop_();                                              //系统延时

       _nop_();                                              //系统延时

       _nop_();                                              //系统延时

              }

       }

}

/**********************************************************************

                                                 独立按键检测

**********************************************************************/

void key(void)           //按键判断程序

{

       if(k1==0)                                                 //按键1按下

       {

              while(k1==0);                      //按键1抬起

              if(W==100)                                //如果脉宽为100

                     W=0;                                                //脉宽置0

              else

                     W+=1;                                              //否则加1

       }

       else if(k2==0)                      //按键2按下

       {                         

              while(k2==0);                      //按键2抬起

              if(W==0)                                          //如果脉宽为0

                     W=100;                                      //脉宽设置成100

              else

                     W-=1;                                               //否则减1

       }

       else if(k3==0)                      //按键3按下

       {                     

              while(k3==0);                      //按键3抬起

              A=!A;                                                      //方向标记取反

              k=0;                                                  //按键标记清0

       }

       else if(k4==0)                      //按键4按下

       {                     

              while(k4==0);                      //按键4抬起

              W=0;                                                       //脉宽清0

              k=0;                                                  //按键标记清0

       }

}

 

void main(void)

{

       init();                         /////////系统初始化 

       while(1) 

              key();                    ////////查询按键

}

 

/**********************************************************************

                                                   END

**********************************************************************/


附录2:原理图

关键字:AT89S52  单片机  直流电机  PWM控制系统 引用地址:基于AT89S52单片机直流电机PWM控制系统

上一篇:基于单片机的定时控制电路的设计
下一篇:基于单片机的电子秤

推荐阅读最新更新时间:2024-03-16 14:42

MSP430单片机常见加密总结
1、为什么要加密,如何加密? 当您的产品推向市场的时候,您的竞争对手就开始盯上它了,如果您的产品硬件很容易被模仿,而且您使用的MSP430单片机没有被加密的话,那么您辛辛苦苦的劳动成功就很容易成为您竞争对手的产品了,使用JTAG调试工具FET虽然可以将程序下载到芯片内部,但只有使用专业编程器能够防止程序被 窃取。 2、JTAG、BSL、BOOTLOADER、熔丝的区别和关系是什么? JTAG接口能够访问MSP430单片机内部所有资源,通过JTAG可以对芯片进行程序下载、代码调试、内存修改等等,通过JTAG还能烧断加密熔丝,熔丝一旦被烧断,JTAG接口绝大部分功能失效,就再也不能通过它进行编程了。 BSL接口是利用芯
[单片机]
最大限度降低电池供电的MCU系统耗电量
  今日的便携式产品设计对所用的电池会有些相互冲突的要求,例如更丰富的产品功能会增加耗电,终端用户希望电池使用时间更长,但不断缩小的产品体积和成本限制却使电池容量无法增加,因此节省电力就成为最重要的考虑。传统设计为了将耗电减到最低,通常都尽可能减少电流消耗,但其实电池的蓄电量是电压、电流和时间的乘积,要有效提升整个系统的电源效率,就必须同时考虑这三项变量。微控制器系统若以电池做为电源,这些电池又能由使用者更换,则可采用专为这些变量而设计的微控制器,因为它们可通过芯片内置电压转换等功能和传统低耗电操作模式来解决上述问题。   电池特性   多数低端和中端便携式产品都会使用可替换的电池或充电电池,这些电池还可由使用者自行更换。
[电源管理]
基于AT89C51型单片机的号音自动播放器设计
1 引言 机关、院校日常作息需要计时和号音提示,笔者利用AT89C51型单片机和LM386型音频功率放大器构成了自动计时和号音播放器,成本低,效果好,值得推广。 2 AT89C51的主要特性和引脚功能 AT89C51是带4K字节闪烁可编程可擦除只读存储器(EPEROM)的低电压、高性能CMOS 8位微处理器(俗称单片机)。该单片机与工业标准的MCS-51型机的指令集和输出引脚兼容。AT89C51将多功能8位CPU和闪烁存储器组合在单个芯片中,为很多嵌入式控制提供了灵活性高且价格低廉的方案。 AT89C51的主要特性如下: 寿命达1000写/擦循环; 数据保留时间:10年; 全静态工作:0Hz-24
[单片机]
基于51单片机超声波避障+蓝牙遥控智能小车
单片机源程序如下: #include reg52.h #include intrins.h typedef unsigned char u8; typedef unsigned int u16; typedef unsigned long u32; sbit Sevro_moto_pwm = P2^6; //接舵机信号端输入PWM信号调节速度 sbit ECHO= P1^1; //超声波接口定义 sbit TRIG= P1^0; //超声波接口定义 sbit PWM1 = P2^5; //左电机高电平 sbit PWM2 = P2^
[单片机]
STC89C52单片机 定时器
怎么去设置定时? 例如: 定时 50微秒 首先 50000 ÷ 1.085 = 46,082.94930875576 从 0 开始加 19,453 次会溢出 这样的计算会有误差,但是影响比较小可以忽略不计 TH0 = (65535 - 46082) / 256; // 将商放在高八位 TL0 = (65535 - 46082) % 256; // 将余数放在低八位 或者 65535 - 46082 = 19453 十六进制得到:4BFD 二进制得到:0100 1011 1111 1101 将得到的十六进制分别放入 TH0 和 TL0; TH0 = 0x4
[单片机]
用51单片机设计解决电动车在跷跷板上的运行和控制问题
1.前 言 本设计为参加电子设计竞赛而作,较好地解决了电动车在跷跷板上的运行和控制问题,系统结构比较简单,控制比较准确。 2.系统方案设计、比较与论证 根据题目的基本要求,设计任务主要完成电动车在规定时间内按规定路径稳定行驶,并能具有保持平衡功能,同时对行程中的有关数据进行处理显示。为完成相应功能,系统可以划分为以下几个基本模块:电动机驱动模块、寻迹线探测 模块、平衡状态检测模块、信息显示模块。见图1 图1 系统框图 2.1寻迹线探测模块 探测路面黑色寻迹线的原理:光线照射到路面并反射,由于黑线和白纸的反射系数不同,可根据接受到反射光强弱由 传感器 产生高低 电平 并最终通过 单片机 判断是否到
[单片机]
用51<font color='red'>单片机</font>设计解决电动车在跷跷板上的运行和控制问题
8051单片机特殊功能存储器SFR基础详解
8051单片机共有21个专用寄存器,现把其中部分寄存器简单介绍如下: 程序计数器(PC—Program Counter)。在实训中,我们已经知道PC是一个16位的计数器,它的作用是控制程序的执行顺序。其内容为将要执行指令的地址,寻址范围达64 KB。PC有自动加1功能,从而实现程序的顺序执行。PC没有地址,是不可寻址的,因此用户无法对它进行读写,但可以通过转移、调用、返回等指令改变其内容,以实现程序的转移。因地址不在SFR(专用寄存器)之内,一般不计作专用寄存器。 累加器(ACC—Accumulator)。累加器为8位寄存器,是最常用的专用寄存器,功能较多,地位重要。它既可用于存放操作数,也可用来存放运算的中间结果。MCS-5
[单片机]
8051<font color='red'>单片机</font>特殊功能存储器SFR基础详解
以C8051F340单片机为核心的红外测温系统设计
引言 螺旋装药过程中,经常会因为内部药品温度分布不均匀导致在装药过程中药品内出现气泡的现象,这严重影响了弹体内的药品质量和弹药参数。因此,本文希望通过设计一种温度监测系统来实现对腔体内药品温度检测,寻找装药过程中温度与药品质量之间的关系。由于装药机结构的特殊性,我们无法通过传统的接触测温法获取药品的温度。因此本文设计了一种基于红外测温方法的系统来实现对药品温度的实时检测。 1 时分复用原理 复用方法的设计主要依据TN9红外传感器的信号特征及接口特点,TN9红外温度传感器具有5个接口,其中电源和地不需要接到CPLD上,其余三个接口分别为低电平有效的TN9工作使能接口,工作在主模式的SPI时钟接口和数据接口。采用复用模式是只需通过设置
[单片机]
以C8051F340<font color='red'>单片机</font>为核心的红外测温系统设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved