基于单片机步进式PWM信号输出毕业设计.docx
《基于单片机步进式PWM信号输出毕业设计.docx》由会员分享,可在线阅读,更多相关《基于单片机步进式PWM信号输出毕业设计.docx(57页珍藏版)》请在冰豆网上搜索。
基于单片机步进式PWM信号输出毕业设计
基于单片机步进式PWM信号输出毕业设计
1引言
模拟信号的值是连续变化的,其时间和幅度都没有限制,可直接用来进行输出控制,但它并不总是非常经济或可行的。
其中一点就是,模拟电路容易随时间漂移,因而难以调节。
能够解决这个问题的精密模拟电路可能非常庞大、笨重(如老式的家庭立体声设备)和昂贵。
模拟电路还有可能严重发热,其功耗相对于工作元件两端电压与电流的乘积成正比。
模拟电路还可能对噪声很敏感,任何扰动或噪声都肯定会改变电流值的大小。
PWM的一个优点是从处理器到被控系统信号都是数字形式的,无需进行数模转换。
让信号保持为数字形式可将噪声影响降到最小。
噪声只有强到足以将逻辑1改变为逻辑0或将逻辑0改变为逻辑1时,才才能对数字信号产生影响。
随着全控型电力电子器件如可关断晶闸管GTO、大功率晶体管IGBT、场效应功率晶体管PMOSFET等的出现和应用技术的进步,PWM控制技术在电力电子技术行业,如:
风力发电、电机调速、直流供电等领域,得到广泛的应用。
在通信领域,由于PWM控制有很强的噪声抵抗能力,从模拟信号转向PWM可以极大地延长通信距离。
在接收端,通过适当的RC或LC网络可以滤除调制高频方波并将信号还原为模拟形式。
在风力发电领域,PWM变换器的控制技术是其核心技术之一。
由于PWM可以同时实现变频变压和抑制谐波的特点,由此在交流传动及至其它能量变换系统中得到广泛应用。
PWM信号的产生通常有两种方法一种是软件的方法另一种是硬件的方法。
硬件调制法模拟电路结构复杂,难以实现精确的控制。
软件生成法其实就是用软件来实现调制的方法,其有两种基本算法,即自然采样法和规则采样法。
随着电力电子技术,微电子技术和自动控制技术的发展以及各种新的理论方法,如现代控制理论,非线性系统控制思想的应用,PWM控制技术获得了空前的发展.到目前为止,已出现了多种PWM控制技术。
脉宽调制(PWM)基本原理:
控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。
也就是在输出波形的半个周期中产生多个脉冲,使各脉冲的等值电压为正弦波形,所获得的输出平滑且低次谐波少。
按一定的规则对各脉冲的宽度进行调制,即可改变逆变电路输出电压的大小,也可改变输出频率。
在采样控制理论中有一个重要的结论,即冲量相等而形状不同的窄脉冲加在具有惯性的环节上,其效果基本相同。
冲量既指窄脉冲的面积。
这里所说的效果基本相同。
是指该环节的输出响应波形基本相同。
如把各输出波形用傅里叶变换分析,则它们的低频段特性非常接近,仅在高频段略有差异。
根据上面理论我们就可以用不同宽度的矩形波来代替正弦波,通过对矩形波的控制来模拟输出不同频率的正弦波。
在PWM波形中,各脉冲的幅值是相等的,要改变等效输出正弦波的幅值时,只要按同一比例系数改变各脉冲的宽度即可,因此在交-直-交变频器中,整流电路采用不可控的二极管电路即可,PWM逆变电路输出的脉冲电压就是直流侧电压的幅值。
根据上述原理,在给出了正弦波频率,幅值和半个周期内的脉冲数后,PWM波形各脉冲的宽度和间隔就可以准确计算出来。
按照计算结果控制电路中各开关器件的通断,就可以得到所需要的PWM波形。
在四年的学习生涯中,通过对通信的学习和掌握,慢慢的开始由喜欢单片机到研究单片机。
加之现在工业控制领域中,对于电动机的使用已经占据着很大的领地,而通过单片机这种既经济又方便的微型处理器的应用,电机的控制更加灵活。
而通过单片机控制电机的关键,运用最多的就是PWM控制技术,通过PWM控制技术,可以很方便的控制电机电机速度的运行和调节。
又加之学校实验条件的限制,想应用简单的程序设计和现有的设备对PWM控制技术有一个很好的了解和掌握,所以,在毕业设计来临时候,为了对自己负责,我选择了用单片机掌握关于步进式PWM信号输出的知识。
本次系统设计分四大块,首先介绍了PWM的算法原理,然后根据所用单片机介绍了STC89C52的一些知识,接着介绍系统设计中所用到的几个软件,接着介绍各个部分的硬件特点和选型问题,最后是程序设计和系统调试环节。
本文的主要工作是设计一个PWM信号输出系统,实现的单极性PWM信号输出。
在直流斩波PWM中,要求PWM的频率,占空比,和输出时间均可调,输出频率为1K-20KHz;在SPWM模式中,频率,调幅比及输出时间可调,输出频率为1-50Hz。
2基于单片机步进式PWM信号输出
2.1PWM算法
PWM的全称是PulseWidthModulation(脉冲宽度调制),它是通过改变输出方波的占空比来改变等效的输出电压。
SPWM,就是在PWM的基础上改变了调制脉冲方式,脉冲宽度时间占空比按正弦规律排列,这样输出波形经过适当的滤波可以做到正弦波输出。
该方法的实现主要有等面积法、硬件调制法和软件生成法。
软件生成法
由于微机技术的发展使得用软件生成SPWM波形变得比较容易,因此,软件生成法也就应运而生。
软件生成法其实就是用软件来实现调制的方法,其有两种基本算法:
即自然采样法和规则采样法。
①自然采样法
以正弦波为调制波,等腰三角波为载波进行比较,在两个波形的自然交点时刻控制开关器件的通断,这就是自然采样法.其优点是所得SPWM波形最接近正弦波,但由于三角波与正弦波交点有任意性,脉冲中心在一个周期内不等距,从而脉宽表达式是一个超越方程,计算繁琐,难以实时控制。
②规则采样法
规则采样法是一种应用较广的工程实用方法,一般采用三角波作为载波。
其原理就是用三角波对正弦波进行采样得到阶梯波,再以阶梯波与三角波的交点时刻控制开关器件的通断,从而实现SPWM法.当三角波只在其顶点(或底点)位置对正弦波进行采样时,由阶梯波与三角波的交点所确定的脉宽,在一个载波周期(即采样周期)内的位置是对称的,这种方法称为对称规则采样。
当三角波既在其顶点又在底点时刻对正弦波进行采样时,由阶梯波与三角波的交点所确定的脉宽,在一个载波周期(此时为采样周期的两倍)内的位置一般并不对称,这种方法称为非对称规则采样。
规则采样法是对自然采样法的改进,其主要优点就是是计算简单,便于在线实时运算,其中非对称规则采样法因阶数多而更接近正弦.其缺点是直流电压利用率较低,线性控制范围较小。
我们这里选择软件生产法中计算简便的对称规则采样法来计算PWM开关动作时间。
具体实施时有单极性SPWM法和双极性SPWM法,在此设计中,我们采用同步调制单极性SPWM法。
其控制图形如图1所示。
图1单极性SPWM
这里我们采用同步调制单极性SPWM法,载波比N=32,调幅比K取值(0,1)。
工业上变频器的调幅比是跟随输出频率而改变的,如在恒V/F控制中,K需要考虑的因素很多,为简化问题,我们选择手动调节K。
SPWM必须做的工作是:
实时地计算调制波(正弦波)和载波(三角波)的所有交点的时间坐标,根据计算结果,有序地向逆变桥中各逆变器件发出“通”和“断”的动作指令;调制波的振幅要随调制比而变,而载波的振幅则不变,所以,每次调节后,交点的时间坐标都必须重新计算。
PWM基本原理及其实现方法
PWM是通过控制固定电压的直流电源开关频率,从而改变负载两端的电压,进而达到控制要求的一种电压调整方法。
PWM可以应用在许多方面,如电机调速、温度控制、压力控制等。
脉冲宽度调制波通常由一列占空比不同的矩形脉冲构成,其占空比与信号的瞬时采样值成比例。
如图2(a)和(b)所示分别表示脉冲宽度调制系统的原理框图和波形图。
图2脉冲宽度调制系统的原理框图和波形图
该系统有一个比较器和一个周期为Ts的锯齿波发生器组成。
语音信号如果大于锯齿波信号,比较器输出正常数A,否则输出0。
因此,从图2中可以看出,比较器输出一列下降沿调制的脉冲宽度调制波。
一般情况下,调节脉冲宽度信号的脉宽有两种方法,一种方法是采用模拟电路中的调制方法,另一种是脉冲计数法。
对于一般电机控制,由于滤波频率较低、滤波精度要求高和滤波电路的参数不易调整地原因,采用第一种方法在控制电压变化时滤波的实现存在较大的困难。
因此,本例主要介绍单片机控制实现的脉冲计数法。
2.2系统结构
本系统结构框图如3所示。
控制器需要完成输入输出交互,数据处理和PWM信号的生成,我们选择AT89C52;为了节省单片机的I/O,我们选用4个按键输入;需要显示的内容较多,我们选择LCD1602;电源则取220V市电整理降压得到。
AT89C52的P3口能驱动4路TTL门电路,能满足小信号输出。
我们就直接采用P3^0和P3^1输出PWM信号。
由于PWM信号对定时的精确度较高,而简单的RC电路稳定性不好,我们采用晶振和电容并联的谐振电路作为时钟发生电路。
图3系统结构图
2.3涉及元器件简介
2.3.1AT89C52介绍
At89C52的芯片引脚结构图如图4所示。
AT89C52其主要参数和性能情况如下。
(1)AT89C52主要性能参数
①与Mcs-51产品指令和引脚完全兼容。
②8字节可重擦写FLASH闪速存储器
③1000次擦写周期
④全静态操作:
0HZ-24MHZ
⑤三级加密程序存储器
⑥256X8字节内部RAM
⑦32个可编程I/0口线
⑧3个16位定时/计数器
⑨6个中断源
⑩可编程串行UART通道、低功耗空闲和掉电模式
图4AT89C52引脚图
(2)AT89C52部分引脚功能说明
XTAL1:
片内晶振电路反相放大器的输入端。
XTAL2:
片内晶振电路反相放大器的输出端。
P0:
P0口是一组8位漏极开路型双向I/O口,即地址/数据总线复用口。
作为输
出口用时.每位能以吸收电流的方式驱动8个TTL逻辑门电路,对端口P0写“1”时,可作为高阻抗输入端用。
P1口:
P1是一个带内部上拉电阻的8位双向I/O口,Pl的输出缓冲级可驱动(吸
收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,因为内部存在上拉电阻某个引脚被外部信号拉低时会输出一个电流。
P2口:
P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑电路。
对端口P2写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。
P3口:
P3口是一组带有内部上拉电阻的8位双向I/O口。
P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。
此时,被外部拉低的P3口将用上拉电阻输出电流。
P3口除了作为I/0口线外,更重要的用途是它的第二功能,如表格1所示。
此外,P3口还接收一些用于FLASH闪速存储器编程和程序校验的控制信号。
表格1P3口第二功能
端口引脚
第二功能
P3.0
RXD(串行输入口〕
P3.1
TXD(串行输出口〕
P3.2
INTO(外中断0〕
P3.3
INTO(外中断l)
P3.4
TO(定时/计数器0)
P3.5
Tl(定时/计数器l)
P3.6
WR(外部数据存储器写选通)
P3.7
RD(外部数据存储器读选通)
ALE/PROG:
当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节.一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。
要注意的是:
每当访问外部数据存储器时将跳过一个ALE脉冲。
PSEN:
程序储存允许PSEN输出是外部程序存储器的读选通信号,当AT89C52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。
在此期间,当访问外部数据存储器,将跳过两次PSEN信号。
EA/VPP:
外部访问允许。
欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地).需注意的是:
如果加密位LBI被编程,复位时内部会锁存EA端状态。
如EA端为高电平(接Vcc端),CPU则执行内部程序存储器中的指令。
2.3.2LCD1602简介
工业字符型液晶,能够同时显示16x02即32个字符(16列2行)。
1602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、符号等的点阵型液晶模块它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。
每位之间有一个点距的间隔每行之间也有间隔起到了字符间距和行间距的作用,正因为如此所以他不能显示图形。
目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。
1602LCD的供电电压为+5V电压,对比度可调,内含复位电路,提供各种控制命令,如:
清屏、字符闪烁、光标闪烁、显示移位等多种功能,有80字节显示数据存储器DDRAM,内建有192个5X7点阵的字型的字符发生器CGROM,8个可由用户自定义的5X7的字符发生器CGRAM。
2.4仿真工具介绍
2.4.1Protues简介
Protues软件是英国Labcenterelectronics公司出版的EDA工具软件。
它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。
它是目前最好的仿真单片机及外围器件的工具。
Protues具有4大功能模块:
1)智能原理图设计(ISIS)
其内部还有丰富的器件库和完善的电路仿真功能(Prospice)。
2)独特的单片机协同仿真功能(VSM)
3)实用的PCB设计平台
4)Protues提供了丰富的资源
Protues可提供的调试手段Protues提供了比较丰富的测试信号用于电路的测试。
这些测试信号包括模拟信号和数字信号。
具有强大的原理图绘制和Protues电路仿真功能。
2.4.2KeiluVision2简介
KeiluVision2是德国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,使用接近于传统c语言的语法来开发,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用,而且大大的提高了工作效率和项目开发周期,他还能嵌入汇编,您可以在关键的位置嵌入,使程序达到接近于汇编的工作效率。
KEILC51标准C编译器为8051微控制器的软件开发提供了C语言环境,同时保留了汇编代码高效,快速的特点。
C51编译器的功能不断增强,使你可以更加贴近CPU本身,及其它的衍生产品。
C51已被完全集成到uVision2的集成开发环境中,这个集成开发环境包含:
编译器,汇编器,实时操作系统,项目管理器,调试器。
uVision2IDE可为它们提供单一而灵活的开发环境。
KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面,能在很短的时间内就能学会使用keilc51来开发单片机应用程序。
另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
在开发大型软件时更能体现高级语言的优势。
3硬件电路设计
3.1电源
本电路所需5V直流电源采用工频220V电源,经由一个变压器降压后,通过H桥整流,再使用三端稳压芯片稳压得到。
常见的三端稳压集成电路有正电压输出的78××系列和负电压输出的79××系列。
三端IC的三条引脚分别是输入端、接地端和输出端。
有TO-220,TO-202的标准封装,也有9013样子的TO-92封装。
用78/79系列三端稳压IC来组成稳压电源所需的外围元件极少,电路内部还有过流、过热及调整管的保护电路,使用起来可靠、方便,而且价格便宜。
因为本设计只需要正电压5V,故这里选用7805。
电路中由于7805的输入输出电压差典型值为2V,设计PWM输出功率3W,加上单片机及其他功耗,可选用220V/9V/10W规格的变压器。
整流桥可以选择正向电流1A,耐压值为25V。
整流出来的波形是脉动的,为了得到平稳的电压,在整流桥输出端接一个大电容。
7805的最高输出电流约为1.5A,输出功率:
P=UI=5V*1.5A=7.5W
故用一片7805可设计满足要求。
下图中C1和C3作平波用,故选用大电容;C2和C4择消除长导线的电感效应,选用小电容。
电源设计如图5所示。
图5电源
3.2复位电路
AT89C52的复位是靠外电路实现的,RST引脚是单片机的复位输入端。
当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。
在时钟电路工作后,只要在单片机的RST引脚上出现24个时钟振荡脉冲以上的高电平,单片机便实现初始化状态复位。
当单片机的时钟f=12MHz时,1个机器周期为1μS,复位信号至少需保持2μS。
为了保证应用系统可靠地复位,通常是RST引脚保持10ms以上的高电平。
复位电路连接如图所示。
此电路仅用一个电容及一个电阻和一个按键。
系统上电时,在RC电路充电过程中,由于电容两端电压不能跳变,故使RESET端电平呈高电位,系统复位。
经过一段时间,电容充电,使RESET端呈低电位,复位结束。
这里C3=20μF,R1=1kΩ,充电时间常数t=R1*C3=20ms,满足要求
。
3.3时钟电路
AT89C52可以使用外部时钟电路。
这时外部时钟脉冲接到XTAL1端,即内部时钟发生器的输入端,XTAL2则悬空。
外部时钟信号通过一个2分频触发器后作为内部时钟的,对占空比没有特殊要求。
但是使用外部时钟需要额外时钟电路,因此这里我们选用内部时钟电路,简化电路。
AT89C52中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。
外接石英晶体及电容C1,C2接在放大器的反馈回路中构成并联振荡电路。
外接电容C1C2的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程度及温度稳定性。
时钟电路和复位电路如图6所示。
图6时钟复位电路
3.4按键中断
AT89C52共有2个外部中断,INT0和INT1为两天外部中断请求输入线,都允许外部中断源以低电平或下降沿触发。
为了能在线修改参数而不影响PWM输出,我们选用优先级低的INT1。
本电路中设计有4个按键,因此需要进行中断扩充。
按键中断的电路如图。
工作原理:
上电后对P2.3、P2.4、P2.5、P2.6及P3.3置高位,持续扫描,
如果有按键按下,如P2.3对应的按键按下,则P2.3接地,检测到低电压,P3.3则通过正向二极管接地,也可认为是低电平。
其余P2.4、P2.5、P2.6由于与P2.3有反向二极管隔离,仍悬空,认为还是高电平,因而能判断哪个按键按下。
图7中断扩展
3.5显示电路
LCD1602的引脚输入时的电流很小,当VDD=5V时,高低电平标准和单片机的P1口兼容,所以这里不需要为LCD提供额外驱动电路,可与单片机直接相连。
LCD1602采用标准的16脚接口,其中:
1脚:
VSS电源
2脚:
VDD电源正极
3脚:
V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高。
4脚:
RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
5脚:
RW为读写信号线,高电平
(1)时进行读操作,低电平(0)时进行写操作。
6脚:
E(或EN)端为使能(enable)端。
7~14脚:
D0~D7为8位双向数据端。
15~16脚:
空脚或背灯电源。
15脚背光正极,16脚背光负极。
液晶与系统的连接如图8所示。
图8液晶与系统连接
3.6输出电路
这里以单片机P3.0和P3.1作为PWM的输出口。
这两个I/O口能驱动一个TTL门电路,作为信号输出可以满足要求故不再添加额外驱动电路。
3.7SPWM测试电路
在SPWM模式下,P3.0作为正向输出端口,P3.1为负向输出端口。
为了把两路信号叠加到一块,我们设计了一个加法电路。
由于单片机无法输出负电压,所以需要把P3.1的信号经过一个反向比例放大电路处理后,再和P3.0叠加。
后面再添加一个一阶滤波电路,这样就可以分析逆变的正弦波基本分量。
为了减少运放对滤波电路的负载效应,同时便于调整,现选用LF412。
这是一种具有JFET作输入级的低失调、高输入阻抗运放。
同时为了使放大电路不产生饱和失真,需把单片机输出的信号进行缩放。
Va=
Vb=(
+
)/5
这里逆变的正弦信号频率为0~50Hz,所以一阶滤波电路里截止频率Wc设为50Hz。
Wc=2πf=1/RC
令C=0.1
可以求得:
R=200k
。
电路图如下:
图9SPWM仿真电路
4软件设计
4.1直流斩波PWM软件计算法
AT89C52单片机每个机器周期由6个状态组成,每个状态又有两个时钟周期,这样一个机器周期就等于12个时钟周期,即机器频率为时钟频率的12分频。
因此一个定时脉冲周期为1uS。
我们用T0来产生PWM波。
由于需要改变定时初值,所以这里我们采用方式1。
在本方式下,定时器按16位加1计数器工作的,该计数器由高8位TH和低8位TL组成。
设PWM输出频率为fkHz,占空比为α,PWM的周期:
T=1/f*10^(-3)S=1000/fuS
由于AT89C52无法处理浮点数,在单片机内占空比取值为(0~100),则在一个PWM周期内,高电平的时间:
tHigh=T*α/100=1000/f*α/100uS;
定时器初值:
TH0=(65536-tHigh)/256;
TL0=(65536-tHigh)%256;
低电平的时间:
tLow=T*(100-α)/100=1000/f*α/100uS;
定时器初值:
TH0=(65536-tLow)/256;
TL0=(65536-tLow)%256;
4.2SPWM软件计算法
这里以对称三角波为载波。
为了减少AT89C52计算时间,我们把正弦值和三角波以数组形式保存在程序空间里。
正弦波和三角波均采样32点,数值均为0-100。
因为单片机主频低,我们采用载波比为32。
在一个三角波周期内,可以认为正弦值不变。
设输出频率为f,三角波频率则为32f。
一个三角波周期分为32段。
一个定时周期:
T=1/(32f)/32S=10^6/(32*32f)μS=1953/fμS
直流斩波PWM和SPWM程序流程图如下:
/**********************T0中断服务程序*******************/
voidtimer0(void)interrupt1using1
{
if(dcac)
{tjump=1-tjump;
if(tjump==0)
{TH0=tempt0;//tempt0=(65536-1000/freq*rac/100)/256;
TL0=tempt1;//tempt1=(65536-1000/freq*rac/100)%256;
OUTPUT0=1;
}
if(tjump)
{TH0=tempt2;//tempt2=(65536-1000/freq*(100-rac)/100)/256;
TL0=tempt3;//tempt3=(65536-1000/freq*(100-rac)/100)%256;
OUTPUT0=0;
}
}
else
{TH0=tempt0,TL0=tempt1;
aci