课程设计(论文)单片机实现步进式PWM输出

上传人:痛*** 文档编号:44318810 上传时间:2021-12-05 格式:DOC 页数:18 大小:372KB
收藏 版权申诉 举报 下载
课程设计(论文)单片机实现步进式PWM输出_第1页
第1页 / 共18页
课程设计(论文)单片机实现步进式PWM输出_第2页
第2页 / 共18页
课程设计(论文)单片机实现步进式PWM输出_第3页
第3页 / 共18页
资源描述:

《课程设计(论文)单片机实现步进式PWM输出》由会员分享,可在线阅读,更多相关《课程设计(论文)单片机实现步进式PWM输出(18页珍藏版)》请在装配图网上搜索。

1、单片机实现步进式PWM输出摘 要: 本文介绍了一种新型PWM输出的方式。它是用89C52作为主控部分,用8254-2可编程定时器/计数器来实现1Hz3kHz步进式PWM的输出;具有分辨率高、反应速度快及占用CPU时间少的优点。本设计给出了硬件结构的组成图以及程序设计,很好的完成了软硬件的结合,并实现了预期的功能。且本系统运行稳定,结构简单,应用范围广,所以可以通过扩展而达到实际的应用。关键词:单片机AT89C52 8254-2 脉宽调制(PWM)Microprocessor Stepper PWM outputAbstract:This paper introduces a new type

2、of PWM output mode. It is part of 89C52 as a master, with the 8254-2 programmable timer / counter to implement step-1Hz 3kHz PWM output; high resolution, fast response, and less CPU-time advantage. This design gives the hardware structure diagram and program design, a good combination of software an

3、d hardware to complete and achieve the desired functionality. And the operation of this system stable, simple structure, wide application, it can be extended to achieve practical application.Key Words: SCM AT89C52 8254-2 pulse width modulation (PWM) 引言脉冲宽度调制(Pulse Width Modulation,PWM),简称脉宽调制,是一种最初用

4、于无线电通信的信号调制技术,后来在控制领域中(比如舵机控制、电机调速)也得到很好的应用,从而形成了独特的PWM控制技术。PWM控制的基本原理很早就已提出,但是受电力电子器件发展水平的制约,在20世纪80年代以前一直未能实现。直到进入20世纪80年代,随着全控型电力电子器件的出现和迅速发展,PWM控制技术才得到真正应用。随着电子电力技术、微电子技术和自动控制技术的发展以及各种新的理论方法,如现代控制理论和非线性系统控制思想的应用,PWM控制技术获得了空前的发展。概述在实际应用时,常常是通过调整PWM信号的脉宽来实现控制的,对脉宽的调整即改变方波信号的占空比。本例将实现周期为20ms,而脉宽各不相

5、同(分别为1ms、2ms和3ms)的3路PWM信号输出。采用脉冲计数法实现,即由51单片机配置专用可编程计数芯片的计数值,计数芯片输出满足占空比要求的PWM信号。此种方法不需要外部的信号源输入,硬件电路简化,通过软件的处理即可实现不同脉宽PWM信号的输出。1.1 PWM基本原理及其实现方法 PWM是通过控制固定电压的直流电源开关频率,从而改变负载两端的电压,进而达到控制要求的一种电压调整方法。PWM可以应用在许多方面,如电机调速、温度控制、压力控制等。 脉冲宽度调制波通常由一列占空比不同的矩形脉冲构成,其占空比与信号的瞬时采样值成比例。 如图1(a)和(b)所示分别表示脉冲宽度调制系统的原理框

6、图和波形图。图1 脉冲宽度调制系统的原理框图和波形图 该系统有一个比较器和一个周期为Ts的锯齿波发生器组成。语音信号如果大于锯齿波信号,比较器输出正常数A,否则输出0。因此,从图1中可以看出,比较器输出一列下降沿调制的脉冲宽度调制波。 通过图1(b)的分析可以看出,生成的矩形脉冲的宽度取决于脉冲下降沿时刻t k时的语音信号幅度值。因而,采样值之间的时间间隔是非均匀的。在系统的输入端插入一个采样保持电路可以得到均匀的采样信号,但是对于实际中tk-kTsTs的情况,均匀采样和非均匀采样差异非常小。脉冲宽度调制波可以直接通过低通滤波器进行解调。实现数字脉冲宽度调制器的基本思想如图2所示。图2 数字脉

7、冲宽度调制器的构成图2中,在时钟脉冲的作用下,循环计数器的5位输出逐次增大。5位数字调制信号用一个寄存器来控制,不断于循环计数器的输出进行比较,当调制信号大于循环计数器的输出时,比较器输出高电平,否则输出低电平。循环计数器循环一个周期后,向寄存器发出一个使能信号EN,寄存器送入下一组数据。在每一个计数器计数周期,由于输入的调制信号的大小不同,比较器输出端输出的高电平个数不一样,因而产生出占空比不同的脉冲宽度调制波。奇偶序列的产生方法是将计数器的最后一位作为比较数据的最低位,在一个计数周期内,前半个周期计数器输出最低位为0,其他高位逐次增大,则产生的数据即为偶数序列;后半个周期输出最低位为1,其

8、余高位依次减小,产生的数据为依次减小的偶序列。具体电路如图3所示。 图3 数字PWM实现电路一般情况下,调节脉冲宽度信号的脉宽有两种方法,一种方法是采用模拟电路中的调制方法,另一种是脉冲计数法。对于一般电机控制,由于滤波频率较低、滤波精度要求高和滤波电路的参数不易调整地原因,采用第一种方法在控制电压变化时滤波的实现存在较大的困难。因此,本例主要介绍单片机控制实现的脉冲计数法。1.2选择外部技术芯片计数器既可以采用专用的计数器芯片,也可以利用51单片机自带的内部计数器。如果测控系统的控制量少,而且对体积和重量的要求比较高,可以采用单片机内部的定时器。但是由于一般51单片机的时钟最大只能取24MH

9、z,单指令周期为0.5s,计数频率为106Hz,对于区别类似于频率为2999Hz(计数应为666.889)和3000Hz(计数应为666.87)的输出时无法做到的,随意有些情况就必须使用外部计数器。本例选用Intel公司的定时/计数芯片8254作为外部计数器。8254是8253的改进型,操作方式及引脚于8253完全相同,它的改进主要反映在两方面:8254的计数频率更高,最高可达8MHz,而8254-2更高可达10MHz;8254比8253多1个读回命令。由于使用了外部计数芯片,单片机只需向计数芯片的寄存器中发送控制脉宽的计算值,计数器就能自动地根据计数值调节电平的高低变化,从而模拟PWM信号输

10、出。与Intel公司及大部分公司的微处理器接口兼容;可以处理最高8MHz的输入时钟;具有6种可编程计数器模式;具有3个独立的16位计数器;具有状态读回命令;具有二进制或BCD两种计数方式;可用于实现实时时钟、事件计数、方波产生、复杂波形产生和复杂电压控制等;+5V供电。1.3硬件选择 本例的硬件电路主要由单片机和外部计数芯片构成,接口电路和外围电路的实现都较为简单。单片机是本例的核心器件之一,用于控制外部计数芯片实现PWM信号输出。本例选用Atmel公司的AT89C52作为单片机芯片,它完全能够满足要求,而且极为常用,价格便宜,易于获取。另一主要功能器件就是外部计数器,本例选用Intel公司的

11、专用定时/计数芯片8254。 图4 8254引脚图其引脚功能如下:D7D0(18引脚):双向三态数据线,应用时和系统数据总线相连;CLK0(9引脚):计数器0时钟输入引脚;OUT0(10引脚):计数器0输出引脚;GATE0(11引脚):计数器0门输入引脚;GND(12引脚):接地引脚;OUT1(13引脚):计数器1输出引脚;GATE1(14引脚):计数器1门输入引脚;CLK1(15引脚):计数器1时钟输入引脚;GATE2(16引脚):计数器2门输入引脚;OUT2(17引脚):计数器2输出引脚;CLK2(18引脚):计数器2时钟输入引脚;A0、A1(19、20引脚):地址线,选择进行读写操作的三

12、个计数器或者控制字寄存器,正常情况和系统地址线相连接;/CS(21引脚):片选引脚,低电平有效的输入引脚。/RD(22引脚):读控制引脚,低电平有效的输入引脚。/WR(23引脚):写控制引脚,低电平有效的输入引脚。VCC(24引脚):电源脚,+5V供电。2.硬件设计本设计选用可编程定时器/计数器8254-2,其最高计数频率可达10MHz;充分利用8254-2的3个定时器/计数器,采取频率的分频输出,并且不需要外部的信号源输入,硬件电路简化;通过软件的处理可以实现连续(1Hz3kHz)PWM波的输出。本设计中将要输出的PWM波分为3段,分别由8254-2中的3个定时/计数器输出,门控由P2.2、

13、P2.3、P2.4分别加以控制。在120Hz的输出时,采用定时器0,计数频率为10 4Hz,最大计数为10 4,最小计数为500符合要求,21200Hz的输出中,采用定时器1,计数频率为10 5Hz,最大计数为4762,最小计数为500;在201Hz3kHz 的输出中,采有定时器2,计数频率为10 7Hz,最大计数为49 751,满足二进制计数的范围,最小计数为3333。这些计数值可由单片机89C512送给8254-2的数据输入端,通过除法运算来得到这些计数值,由除法运算得到商。所得到的商去程序指令占用的时间即为所需要的计数值。采用8254-2的3个定时器的输出经过1个或门作为CD4046锁相

14、环的输入,同时经过1个非门进入89C51的INT1口,申请下降沿中断;CD4046锁相环输出所需的PWM。3.电路原理图及说明本例将实现3路PWM信号输出,定时/计数芯片8254具有3个独立的计数器,只需要选择一片就可以满足要求。硬件电路设计部分主要由单片机控制部分电路,定时/计数芯片8254电路以及单片机与定时/计数芯片8254的接口电路组成。单片机控制部分电路原理图如图5所示。图5 单片机控制部分电路原理图图中所示,单片机部分采用Atmel公司的AT89C52(U1),工作时钟为11.0592MHz,P0.0P0.7口与计数芯片8254的数据口D0D7相连,8254的片选信号线连接在单片机

15、的P2.0口,P2.1、P2.2与8354的地址线A1、A0相连,8254的读、写控制脚分别连接在单片机的P3.7(读)、P3.6(写)口。定时/计数芯片8254电路原理图如图6所示。 图6 定时/计数芯片8254电路原理图定时/计数芯片8354(U2)由3个计数器输出3路独立的PWM信号,分别为PWM_1、PWM_2和PWM_3,3个计数器的输入时钟均为1MHz,晶振Y2提供的1MHz时钟CLK,他们的门控制输入均接高电平,确保信号连续输出。4.软件设计4.1设计流程图单片机实现3路PWM信号输出的流程图如图6所示。结束开始定义存储器地址定时器初始化,开始中断T0层初值计数器发送数据图6 单

16、片机实现3路PWM信号输出的流程图单片机对计数芯片8254的控制主要通过对其内部的控制字和计数寄存器的操作来实现的。4.2 8254的内部控制字和计数寄存器8254内部有3个独立的计数器,每个计数器都对应于一个计数寄存器,另外还有一个控制字寄存器,通过它可以实现对3个寄存器的配置。A0、A1是8254的寄存器地址,单片机通过对A0、A1地选择。来确定是对计数寄存器还是控制字寄存器操作,具体如表1所示。表1 A0、A对寄存器的选择A0A1寄存器00计数器001计数器110计数器211控制器由于单片机的P2.0和8254的低电平有效的片选脚/CS相连,P2.1和P2.2分别和A0和A1A相连,因此

17、8254内部各寄存器的地址分配如表2所示。表2 8254内部各寄存器的地址分配寄存器地 址计数器00x0000H计数器10x0200H计数器20x0400H控制字0x0600H控制字寄存器的作用是用于选择每个寄存器的工作方式,其具体内容如表3所示。表3 8254控制字寄存器的内容D7D6D5D4D3D2D1D0SC1SC0RW1RW0M2M1M0BCD各控制位功能如下:SC1、SC0:选择计数器或读回命令,其设置如表4所示。表4 SC0、SC1设置SC1SC0寄存器00选择计数器001选择计数器110选择计数器211读回命令RW1、RW0:读/写方式控制位,其设置如表5所示。表5 RW0、RW

18、1设置RW1RW0寄存器00计数锁存命令01只读/写低位字节00只读/写高位字节01先读/写低位字节,后读/写高位字节M2、M1、M0:模式选择位,其设置如表6所示。表6模式设置M2M1M0模 式000模式0001模式1x10模式2x11模式3100模式4101模式5本例中各计数器均设置为模式0,在此模式下,输出在写完控制字寄存器后为低电平,并一直保持到计数器计数到0时变为高电平,然后一直保持高电平知道新的计数开始或者对控制字寄存器重设置模式0。BCD:此位为0设置计数器为16位二进制计数器;BCD位为1时设置计数器为BCD码计数器。4.3中断处理过程当89C51检测到有INT1中断时,进入中

19、断处理程序中,首先检测30H和31H中的内容是否大于20;若不大于20,则门控为P2.2,选中8254-2,选择计数器0、方式3、16位二进计数, 送上次计算出来的这次所需要的计数值给8254-2,将10 4送入32H、33H中作为除法运算中的被除数,而30H、31H的内容作为除法运算中的除数,调用除法运算子程序将所得的商送入32H、33H,余数放在35H、36H中。比较余数是否大于除数的一半,若大于除数的一半则所得的商加1,否则商不变放在32H、33H中。假设程序指令所占用的时间为X/200(其中X为中断程序中单指令周期的个数),将32H、33H中的内容减去X/200,即为下次所要送入825

20、4-2的计数值,放在35H、36H中,返回中断;若大于20,则门控为P2.3,选中8254-2,选择计数器1、方式3,送上次计算出来的这次所需的计数值给8254-2,将10 5送入32H、33H、34H中作为除法运算中的被除数,而30H、31H中的内容作为除法运算中的除数,调用除法运算子程序,将所得的商送入32H、33H中,余数放在35H、36H中。比较余数是否大于除数的一半,若大于除的一半则所得的商加1,否则商不变。假设程序指令所占用的时间为X/20,将32H、33H中的内容减去X/20即为下次所要送入8254-2的计数值,放在35H、36H中,返回中断,若大于200,则门控为P2.4,选中

21、8254-2,选择计数器2、方式3、二进制计数,送上次计算出来的这次所需的计数值给8254-2,将10 7送入32H、33H、34H中作为除法运算中的被除数,而30H、31H中的内容作为除法运算中的除数,调用除法运算子程序,将所得的商送入32H、33H中,余数放在35H、36H.比较余数是否大于除数的一半,若大于除数的一半则所得的商加1,否则商不变入在32H、33H中。假设程序指令令所占用的时间为X*5,将32H、33H中的内容减去5X,即为下次所要送入8254-2的计数值,放在35H、36H中,返回中断。 结论采用89C52控制PWM分段,8254-2步进式输出1Hz3kHz的PWM,可以通

22、过软件编程的方法提高分辨率。在有些特殊场合只靠单片机内部的定时器或模拟电路无法精确输出1Hz3kHz,单步为1Hz的PWM波形时,此设计就显出其明显的优越性,而且它占用的CPU时间短。此设计的结构简单、成本低、可靠性好、抗干扰能力强,可在控制和测量中得到应用。致谢衷心感谢我的指导教师余大庆,本毕业设计是在他的悉心关怀和精心指导下完成的。经过不断的搜索努力以及余大庆老师的耐心指导和热情帮助,本设计已经基本完成。在这段时间里,余老师严谨的治学态度和热忱的工作作风令我十分钦佩,他的指导使我受益非浅。同时本院508实验室的开放也为我的设计提供了实习场地。在此对余老师表示深深的感谢。感谢赵然、胡辉等同学

23、,他们在我的本科学习期间,给了我很多的帮助和支持,在毕业设计方面也提出了非常多的宝贵意见。通过这次毕业设计,使我深刻地认识到学好专业知识的重要性,也理解了理论联系实际的含义,并且检验了大学四年的学习成果。虽然在这次设计中对于知识的运用和衔接还不熟练。但是我将在以后的工作和学习中继续努力、不断完善。参考文献:1孙韩方,许爱卿.单片机原理及应用M.北京:航空航天大学出版社,1996:4060.2B.A.Arwick.MicromputerIinterfacing.Prenticve-Hall,Inc.1980:77200.3李超青.单片机原理与接口技术M.北京:航空航天大学出版社,2000:586

24、0.4 Chen Wenren.A collection of subprogram of MCS-51 series Micro-controller.Beijing:Tsinghua University Publishing Company,1993:101125.5霍孟友,王爱群.单片机原理与应用M.北京:机械工业出版社,2000:6779.6李全利,迟荣强.单片机原理及接口技术M.北京:高等教育出版社,2004:128139.7何立民.单片机应用系统设计M.北京:航空航天大学出版社,1991:171178.8沈庆阳,郭庭吉.8051单片机实践及应用M.北京:清华大学出版社,2002:

25、7882.9杨镇江.流行单片机使用子程序及应用实例M.西安:科技大学出版社,2002:12130.10张迎新.微型计算机原理及应用接口技术M.北京:国防工业出版社,2002:8892.11Santa Clara,Microprocessor and peripheral handbook,Intel Corporation,1988:5865.12朱定华.单片机原理及接口技术试验M.北京:清华大学出版社,2000:4456.13陈光东.单片机微型计算机原理和接口技术M.武汉:华中理工大学出版社,1999:8896.14A.S.Sedrs and K.C.Smith,Microelectroni

26、c Circuits.4th ed.Oxford University press,Inc,1998:8795.15Zhang Yigang,Peng Xiyuan,Tan Xiaojun,Et al.Application a Single-chip nd design of MCS-51 single-chip computer,Haerbin:Haerbin Industry University Publishing Company,2001:234248.附录1.程序说明基于8254产生PWM信号的程序主要包括三方面内容:一是定义8253寄存器的地址,二是控制字的写入,三是数据的写入

27、。 具体代码如下: #ifndef_PWM_H / 防止PWM.h被重复引用#define_PWM_H#include / 引用标准库的头文件#include #include #define uchar unsigned char #define uint unsigned int #define COUNT0 XBYTE0x0000/ 8254计数器0寄存器地址#define COUNT1 XBYTE0x0200/ 8254计数器1寄存器地址#define COUNT2 XBYTE0x0400/ 8254计数器2寄存器地址#define COMWORD XBYTE0x0600/ 8254控

28、制字寄存器地址#endif /以上为引用头文件。/以下为引用的源程序。#include PWM.hunsigned int m,n;unsigned int sum=0,p=0,q=0;unsigned char hang,lie,num=0,cishu=0;uint flag=0,a=0,b=0,xx,yy;unsigned char code table=0x11,0xd7,0x32,0x92,0xd4,0x98,0x18,0xd3,0x10,0x90;void delay(uint t) /延时涵数 uint i; while(t-) for(i=0;i125;i+); void but

29、ton() P2=0x0f;if(P2=0x0e) hang=0;if(P2=0x0d) hang=1;if(P2=0x0b) hang=2;if(P2=0x07) hang=3;delay(80);P2=0x0f0;if(P2=0x0e0) lie=0;if(P2=0x0d0) lie=1;if(P2=0x0b0) lie=2;if(P2=0x70) lie=3;delay(80); num=(hang)*4+lie; if(num=-5) num=0;if(hang!=0&lie!=0&num10)/大于10的键值的键要用在别处,所以不能加进去,特别注意 cishu+; if(cishu=

30、5) cishu=4; sum=sum%1000; sum=sum*10+num; if(xx!=sum)SBUF=tablesum/1000;SBUF=tablesum/100%10;SBUF=tablesum/10%10;SBUF=tablesum%10;xx=sum; hang=0; lie=0; if(num=10)/确定频率 b=sum; m=(65536-1000/sum*1000/3)/256;n=(65536-1000/sum*1000/3)%256; if(num=11) /确定占空比 p=(sum%100)*1000/b*1000/3/100-150)%256;q=(sum

31、%100)*1000/b*1000/3/100-150)/256; if(num=15)/确定键 flag=0; if(yy!=b)SBUF=tableb/1000;SBUF=tableb/100%10;SBUF=tableb/10%10;SBUF=tableb%10;yy=b;TR0=1; void int0() interrupt 0 flag=1;while(flag)button();void t0() interrupt 1TR0=0;TH0=m;TL0=n;COMWORD=0x30;COUNT0=p;COUNT0=q;TR1=1;void t1() interrupt 3TR1=0

32、;TH1=m;TL1=n;COMWORD=0x70;COUNT1=p;COUNT1=q;TR2=1;void t2() interrupt 6TR2=0;TF2=0;TH2=m;TL2=n;COMWORD=0xB0;COUNT2=p;COUNT2=q;TR0=1;void init()EA=1;EX0=1;IT0=1;ET0=1;ET1=1;ET2=1;TMOD=0x11;T2MOD=0x00;T2CON=0x00;TH0=m;TL0=n;TH1=m;TL1=n;TH2=m;TL2=n;TR0=1;SBUF=table0;SBUF=table0;SBUF=table0;SBUF=table0;void main() init();/* 向8254控制字寄存器选择计数器0,并对其赋初值0 */COMWORD = 0x30;COUNT0 = 0;/ 先赋低位字节COUNT0 = 0;/ 再赋高位字节/* 向8254控制字寄存器选择计数器1,并对其赋初值0 */COMWORD = 0x70;COUNT1 = 0;/ 先赋低位字节COUNT1 = 0;/ 再赋高位字节/* 向8254控制字寄存器选择计数器2,并对其赋初值0 */COMWORD = 0xB0;COUNT2 = 0;/ 再赋低位字节COUNT2 = 0;/ 再赋高位字节while(1)2.产生PWM输出的硬件原理图17

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!