PWM波形.docx
《PWM波形.docx》由会员分享,可在线阅读,更多相关《PWM波形.docx(24页珍藏版)》请在冰豆网上搜索。
PWM波形
沈阳航空航天大学
课程设计报告
课程设计名称:
微机原理课程设计
课程设计题目:
可控PWM波发生器
院(系):
计算机学院
专业:
计算机科学与技术
班级:
学号:
姓名:
指导教师:
张德园
说明:
结论(优秀、良好、中等、及格、不及格)作为相关教环节考核必要依据;格式不符合要求;数据不实,不予通过。
报告和电子数据必须作为实验现象重复的关键依据。
学术诚信声明
本人声明:
所呈交的报告(含电子版及数据文件)是我个人在导师指导下独立进行设计工作及取得的研究结果。
尽我所知,除了文中特别加以标注或致谢中所罗列的内容以外,报告中不包含其他人己经发表或撰写过的研究结果,也不包含其它教育机构使用过的材料。
与我一同工作的同学对本研究所做的任何贡献均己在报告中做了明确的说明并表示了谢意。
报告资料及实验数据若有不实之处,本人愿意接受本教学环节“不及格”和“重修或重做”的评分结论并承担相关一切后果。
本人签名:
日期:
年月日
沈阳航空航天大学
课程设计任务书
课程设计名称
微机原理课程设计
专业
计算机科学与技术
学生姓名
赵凯敏
班级
24010102
学号
2012040101056
题目名称
可控PWM波发生器
起止日期
2015
年
6
月
29
日起至
2015
年
7
月
10
日止
课设内容和要求:
通过矩阵键盘输入数字,实现占空比可控的PWM波发生器,占空比在LCD液晶上显示;
要求画出电路原理图。
教研室审核意见:
教研室主任签字:
指导教师(签名)
年
月
日
学生(签名)
年
月
日
课程设计总结:
这次单片机课程设计对我来说学到的不仅是更加深入的了解单片机知识,更多的是怎样如何去设计自己的课题,怎样利用学习的知识汇编程序语言。
它不仅仅是让我们把所学的理论知识与实践相结合起来,提高自己的实际动手能力和独立思考的能力,更重要的是与老师之间的交流以及同学之间的互帮互助。
虽然我们这次花去的时间比别人多,但我相信在这同时我们学到的也会更多!
在本次课程设计的过程中,我感触最深的当属怎样去给我们的课题汇编单片机的程序语言。
由于平时对单片机知识学习得不够扎实,理解得不够透彻、一知半解,致使在运用是不能贯通,导致在设计过程中困难重重,往往无从下手,但是通过询问老师以及和同学一起探讨,最后还是一步一步的把问题给解决了。
感谢各位老师的指导,以及同学们的帮助。
目录
1摘要1
2设计概述2
3构件以及原理3
3.1程序流程3
3.2键盘接口电路3
3.3LED显示电路5
3.4八段数码管显示原理5
4总设计原理7
4.1PWM波形发生器的原理与功能7
4.2键盘控制原理7
4.3程序框图7
4.4显示结果9
5调试及结果分析10
5.1调试步骤及方法10
5.2实验结果10
参考文献11
附录(关键部分程序清单)12
1摘要
作为微型计算机的一个重要分支,单片微型计算机(简称单片机)自20世纪70年代问世以来,已广泛地应用在工业自动化、自动化检测与控制、智能仪器仪表、机电一体化设备、汽车电子、家用电器等各个方面。
本设计是一个以单片机为核心的可控PWM波发生器,通过对键盘输入电路、波形的输出电路、显示电路的设计已经程序的编程,实现通过键盘改变占空比,并显示波形频率的功能。
单片机具有性价比高、集成度高、体积小、可靠性好、控制功能强、低电压、低功耗、通用灵活等优点,广泛应用于卫星定向、汽车火化控制、交通自动管理等方面。
Inter公司的mcs-51单片机虽然仍然是6位的单片机,但其功能有很大的增强,此外他还具有品种全、兼容性强、软硬件资料丰富等有点,因为此应用十分广泛,直到现在mcs-51仍为单片机中的主流机型,也是高档单片机的基础。
本课题讨论的方波发生器的核心就是51系列单片机。
2设计概述
基于单片机的占空比可调PWM波形发生器的设计,是通过单片机控制一个有特殊功能的信号发生芯片,可以产生一系列有规律的幅度和频率可调的波形。
通过键盘可以改变占空比。
设计的基本要求是:
设计键盘输入电路、波形的输出电路、显示电路(4位数码管);编制相应程序。
使用按键来进行输入占空比,不同的占空比可以使用不同的按键来实现,而以键盘扫描来实现各键的不同功能;显示部分使用LED数码管来实现。
由此即可构成一个最小单片机应用系统。
基于MCS—51单片机8051芯片所设计的可以实现键位与数字动态显示的一种频率,占空比可调方波发生器。
设占空比任意取20%、40%、50%、60%、80%等值。
通过对键盘上按键的操作完成对占空比的调用,以达到改变当前占空比的目的,并使用其八段数码管显示。
单片机对键位进行扫描,确定键位的输入,根据程序设计要求,数码管显示占空比的数值,PWM波形发生器输出以数码管显示的数值为占空比的波。
基于以上思路,可进行如下功能扩展:
由于仿真实验箱共有6位数码管,2位进行占空比显示。
键盘部分使用4*4键盘中的其中2个按键,其功能分别为:
占空比增大、占空比减小。
按键每按下一次,当前占空比转向下一选定的占空比值。
单片机控制数码管的显示,数码管显示当前所调换到的占空比,并向外输出所示占空比的波。
最后,可采用示波器观察波形。
3构件以及原理
3.1程序流程
简单的流程为:
主程序扫描键盘,将设置信息输入,处理后,输出到LED显示器显示。
单片机用到了定时器0,进行占空比的定时,工作在方式1。
计算定时器初值的公式如下:
N=2^m-FOSC/12×T
根据计算定时器初值的公式,所要装入的初值。
占空比的显示电路由74374和74245构成的驱动电路和LED数码显示管组成,利用数码管来显示,有两位显示占空比。
此电路的键盘由两个功能键(调节占空比的增减)组成,其特殊之处在于利用外部中断实现键盘扫描。
功能键有两种种状态,一种为正顺序调换,根据所取值顺向增大的特点,此时为增大调节;另一种为逆顺序调换,同理,此时为减小调节。
占空比有一组增大及减小的功能键。
3.2键盘接口电路
方案一:
独立式键盘
一个具有4个按键的独立式键盘,每一个按键的一端都接地,另一端接MEGA16的I/O口。
独立式键盘每一按键都需要一根I/O线,占用MEGA16的硬件资源较多。
因此独立式键盘只适合按键较少的场合。
键盘是一组按键或开关的集合,键盘接口向计算机提供被按键的代码。
特点:
使用方便、结构复杂、成本高。
方案二:
矩阵式键盘
我们采用4×4矩阵式键盘,矩阵式键盘由多个按键组成的开关矩阵,当键盘上没有键闭合时,所有的行线和列线断开,行线呈高电平。
当键盘上某一个键闭合时,该键所对应的行线与列线短路。
例如,K0键按下闭合时,行线X0和列线Y0短路,此时X0的电平由Y0的电平所决定。
其按键识别可用扫描法完成。
具体方法如下:
(1)把行线接到微机的输入口,列线接到微机的输出口,则在微机的控制下,使列线Y0位低电平0,其余3根列线Y1、Y2、Y3都为高电平1.
(2)然后微机通过输入口读取行线的状态,如果X0、X1、X2、X3都为高电平,则Y0这一列线上没有键闭合;如果读出的行线状态不完全为高电平,则为低电平的行线和Y0相交的键处于闭合状态。
(3)如果Y0这一列上没有键闭合,接着使列线Y1为低电平,其余列线为高电平。
用同样的方法检查Y1这一列上有无键闭合。
(4)以此类推,最后使列线Y3为低电平,其余的列线为高电平,检查Y3这一列上是否有键闭合。
这种逐行逐列的扫描键盘状态的过程为对键盘的扫描.。
CPU对键盘的扫描可以采取程序控制的随机方式,CPU空闲时才扫描键盘;也可以采取定时控制方式,每隔一段时间,CPU对键盘扫描一次;还可以采用中断方式,当键盘上有键闭合时,向CPU请求中断,CPU响应键盘发出的中断请求,对键盘进行扫描,以识别哪一个键处于闭合状态,并对键输入信息作相应处理。
其按键识别可用扫描法完成。
具体方法如下
图3.1键盘控制LED连接原理图
3.3LED显示电路
方案一:
静态显示方式
当显示器显示某一个字符的时候,相应的发光二极管恒定地导通或截止。
例如,7段LED显示器显示数字0时,a、b、c、d、e、f段恒定导通,g段恒定截止。
这种显示方式每一位都需要一个8段位输出控制。
静态显示时,较小的电流能得到较高的亮度,且字符不闪烁,系统运行过程中,在需要更新显示内容时,CPU才去执行显示更新子程序,这样既节约了CPU的时间,又提高了CPU的工作效率。
其不足之处是占用硬件资源较多,每个LED数码管需要独占8条输出线。
随着显示器位数的增加,需要的I/O口线也将增加。
当显示位数较少时,采用静态显示的方法是合适的。
方案二:
动态显示方式
当位数较多时,用静态显示所需的I/O口太多,不太经济,一百采用动态显示方法,即用扫描法一位一位的轮流点亮显示器的各个位,对于显示器的每一位来说,每隔一段时间电量一次,利用人眼的视觉暂留效应可以看到整个动态显示,但必须保证扫描速度足够快,字符才不闪烁。
显示器的亮度即与导通电流有关,也与点亮时间和时间间隔的比值有关。
调整电流和时间参数,可以得到亮度较高且较稳定的显示。
动态显示方式中,若显示器的位数不大于8位,则控制显示器各位公共极的电位使他们轮流点亮只需一个I/O口(称扫描口);传送显示器的各位所显示的段选码也需一个8位I/O口(称段数据口)。
由于8051单片机本身提供的I/O口有限,因此我们选择方案二——动态扫描方式。
扫描方式中在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的约1MS,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。
节约了电能,节省了I/O口。
3.4八段数码管显示原理
数码管内部由8个发光发光二极管组成,排成一个8字,可以组成0到9数字以及A-F字符的表示形式。
、
图3.1八段数码管引脚图图3.2八位数码管原理图
表3.1显示数字及其所对应的代码
显示数字
1
2
3
4
程序输入数
06H
5BH
4FH
66H
显示数字
5
6
7
8
程序输入数
6DH
7DH
07H
7FH
显示数字
9
0
A
B
程序输入数
6FH
3FH
77H
7CH
显示数字
C
D
E
F
程序输入数
39H
5EH
79H
71H
图3.3键盘及数码管显示电路
4总设计原理
4.1PWM波形发生器的原理与功能
波形发生器的总体原理方框图如下图所示:
占空比数据占空比数据
图4.1总原理方框图
由于系统的要求不高,比较单一,再加上我们是通过定时器来调节频率的,这样仅用键盘、8051芯片及数码显示管便可完成设计,达到所要求实现的功能。
4.2键盘控制原理
通过键盘的控制,实现占空比的变化。
本设计选用后两个数码管显示占空比。
其中,用a键和b键控制占空比的变化:
每按一下a键,占空比就按照调高的顺序正向变化一个数字,每按一下b键,占空比就反向变化。
表4.1占空比---按键对照表
占空比
A
B
+上
_下
4.3程序框图
图4.2程序框图
PWM即脉冲宽度调制(英语:
PulseWidthModulation,缩写为PWM),简称脉宽调制,是将模拟信号转换为脉波的一种技术,一般转换后脉波的周期固定,但脉波的占空比会依模拟信号的大小而改变。
模拟信号能否使用PWM进行编码调制,仅依赖带宽,这即意味着只要有足够的带宽,任何模拟信号值均可以采用PWM技术进行调制编码,一般而言,负载需要的调制频率要高于10Hz,在实际应用中,频率约在1kHz到200kHz之间。
本次课程设计使用通用定时器Timer1/2产生PWM选择连续计数模式可以产生PWM波形。
具体设计思路为:
初始化后单片机产生初值,将初值以动态扫描的方式显示于八段数码管,同时还对键盘进行实时扫描。
在扫描后,单片机读取键值,并将键值通过数码管模块显示出来,PWM波形发生器输出该占空比的方波.
表4.2占空比(%)-代码对照表
编辑代码1
5BH
3FH
显示占空比(%)
2
0
编辑代码2
66H
3FH
显示占空比(%)
4
0
编辑代码3
6DH
3FH
显示占空比(%)
5
0
编辑代码4
7DH
3FH
显示占空比(%)
6
0
编辑代码5
7FH
3FH
显示占空比(%)
8
0
4.4显示结果
图4.3显示结果
5调试及结果分析
5.1调试步骤及方法
在开始的时候,每次都没有结果显示。
于是通过单步调试,通过查看各个寄存器中的值,来验证各模块是否正常跳转以及模块的正确性。
结果,在数据中断中没有中断产生。
经过调试,可以正常显示预定的占空比的值,但是无法对占空比进行调节。
经过思考发现,问题出在数据显示模块,每次显示完第一次预定的值以后没有对数码管进行清空,所以显示出现问题。
之后,修改程序,在每次显示之前对数码管进行清空操作。
问题得到解决。
5.2实验结果
本设计已经基本满足任务书的要求。
现将结果简单介绍如下:
1.当按下实验箱上的“A”时,显示的占空比值增加,在示波器上可以显示出对应占空比的波形。
2.当按下实验箱上的“B”时,显示的占空比值减小,同时在示波器上可以显示出对应占空比的波形。
参考文献
[1]高富平,张楚.电子商务法[M].北京:
北京大学出版社,2002
[2]HuangSC,HuangYM,ShiehSM.Vibrationandstabilityofarotatingshaftcontainingatransersecrack[J],JSoundandVibration,1993,162(3):
387-401.
[3]电子工业出版社.单片机设计与应用[M].
[4]谢自美.电子线路设计•实验•测试.:
华中科技大学出版社,2008
[5]陈小忠.单片机实用接口技术子程序[M].人民邮电出版社,2005
[6]龚尚福.微机原理与接口技术[M].西安:
西安电子科技大学出版社,2003
[7]王忠民.微型计算机原理[M].西安:
西安电子科技大学出版社,2003
[8]赵晓安,MCS-51单片机原理及应用,天津大学出版社,2001
[9]李全利,单片机原理及接口技术,北京:
高等教育出版社,2001
附录(关键部分程序清单)
OUTBITEQU08002H;位控制口
OUTSEGEQU08004H;段控制口
INEQU08001H;键盘读入口
FrequencyDATA30H;频率等级缓冲区
DutyDATA31H;占空比等级缓冲区
TH0_HIGHDATA32H;高电平计数缓冲区,给定时器TH0赋值
TL0_HIGHDATA33H;高电平计数缓冲区,给定时器TL0赋值
TH0_LOWDATA34H;低电平计数缓冲区,给定时器TH0赋值
TL0_LOWDATA35H;低电平计数缓冲区,给定时器TL0赋值
FlagDATA36H;高电平低电平转换标志
OFFSETDATA37H;用来存储偏移量
LEDBUFDATA60H;显示缓冲区
ORG0000H
LJMPINIT
ORG000BH
LJMPTIMER0
ORG0010H
KeyTable:
;键码定义
DB16H,15H,14H,0FFH
DB13H,12H,11H,10H
DB0DH,0CH,0BH,0AH;0AH占空比调高,对应键盘上的A键
DB0EH,0CH,0BH,09H;0BH占空比调低,对应键盘上的B键
FrenqLevel:
;频率占空比转换表格
;TH0_HIGH,TL0_HIGH,TH0_LOW,TL0_LOW
DB0D8H,0F0H,063H,0C0H;10HZDUTY20%
DB0B1H,0E0H,08AH,0D0H;10HZDUTY40%
DB09EH,058H,09EH,058H;10HZDUTY50%
DB08AH,0D0H,0B1H,0E0H;10HZDUTY60%
DB063H,0C0H,0D8H,0F0H;10HZDUTY80%
DutyMAP:
DB5BH,66H,6DH,7DH,7FH;数码管上显示的占空比数字20%40%50%60%80%
INIT:
MOVSP,#40H;更改堆栈指针,避免堆栈与工作寄存器区发生冲突
MOVTMOD,#01H;定时器0方式1
MOVTH0_HIGH,#0D8H
MOVTL0_HIGH,#0F0H
MOVTH0_LOW,#063H
MOVTL0_LOW,#0C0H
MOVTH0,TH0_LOW;先输出低电平定时器初值
MOVTL0,TL0_LOW
MOVFrequency,#00H;频率初值为10HZ
MOVDuty,#00H;占空比初值为20%
MOVLEDBuf+5,#3FH
MOVLEDBuf+4,#5BH
MOVLEDBuf+3,#3FH
MOVLEDBuf+2,#06H
MOVLEDBuf+1,#3FH
MOVLEDBuf,#3FH
SETBEA;cpu开放中断
SETBET0;T0中断允许
SETBTR0;允许T0计数
Main:
CALLDisplayLED;显示
CALLTestKey;是否有键键入
JZMain;无键键入,继续显示
CALLGetKey;有键键入,读入键码
CALLKeyfuction;有键键入,调用相应的功能
CALLChangestate;根据占空比等级,频率等级的改变转变状态
LJMPMain
DisplayLED:
;显示子程序
MOVR0,#(LEDBUF+4)
MOVR1,#02H;共6个八段管
MOVR2,#02H;从左边开始显示
DisplayLOOP:
MOVDPTR,#OUTBIT
MOVA,#00H
MOVX@DPTR,A;关所有八段管
MOVA,@R0
MOVDPTR,#OUTSEG
MOVX@DPTR,A
MOVDPTR,#OUTBIT
MOVA,R2
MOVX@DPTR,A;显示一位八段管
MOVR6,#01H
CALLDELAY
MOVA,R2;显示下一位
RRA
MOVR2,A
INCR0
DJNZR1,DisplayLOOP;循环6次displayloop
RET
TestKey:
;检测是否有按键按下
MOVDPTR,#OUTBIT
MOVA,#00H
MOVX@DPTR,A;输出线置为0
MOVDPTR,#IN
MOVXA,@DPTR;读入键状态
CPLA
ANLA,#0FH;高四位不用保留低四位
RET
GetKey:
;有键按下读取键值
MOVDPTR,#OUTBIT
MOVP2,DPH
MOVR0,#LOW(IN)
MOVR1,#20H
MOVR2,#06H
KeyLoop:
MOVA,R1;找出键所在列
CPLA
MOVX@DPTR,A
CPLA
RRA
MOVR1,A;下一列
MOVXA,@R0
CPLA
ANLA,#0FH;保留低4位
JNZGetKeynum;该列有键入A不为零有输入则转移
DJNZR2,KeyLoop;循环6次
MOVR2,#0FFH;没有键按下,返回0FFH
SJMPExit
GetKeynum:
;键值=列X4+行,扫描键盘值
MOVR1,A;暂存a
MOVA,R2
DECA
RLA
RLA
MOVR2,A;R2=(R2-1)*4
MOVA,R1;R1中为读入的行值
MOVR1,#04H
GetKeynumLoop:
RRCA;移位找出所在行
JCExit;进位标志cy=1转移
INCR2;R2=R2+行值
DJNZR1,GetKeynumLoop
Exit:
MOVA,R2;取出键码
MOVDPTR,#KeyTable
MOVCA,@A+DPTR
MOVR2,A;取出键码给R2
WaitRelease:
MOVDPTR,#OUTBIT;等键释放
CLRA
MOVX@DPTR,A
MOVR6,#0AH
CALLDelay
CALLTestKey
JNZWaitRelease
MOVA,R2
RET
Keyfuction:
MOVB,A;保存返回的键值
XRLA,#0AH;对键值进行判断
JZKey1;A键按下
MOVA,B
XRLA,#0BH;对键值进行判断
JZKey2;B键按下
JMPKeyEnd
Key1:
MOVA,Duty
XRLA,#04H;占空比等级是否到4
JZKEY1_1
INCDuty;占空比等级调高
JMPKeyEnd
Key1_1:
MOVDuty,#04H;占空比等级为4,不能再提高
JMPKeyEnd
Key2:
MOVA,Duty
XRLA,#00H;占空比等级是否到0
JZKEY2_1
DECDuty;占空比等级调高
JMPKeyEnd
Key2_1:
MOVDuty,#00H
JMPKeyEnd
KeyEnd:
RET
Changestate:
MOVA,DUTY
MOVDPTR,#DutyMAP
MOVCA,@A+DPTR
MOVLEDBuf+4,A
MOVLEDBuf+5,#3FH
Dutychange:
CLRTR0
MOVA,DUTY
MOVB,#04H
MULAB;将占空比等级乘上4的偏移量
ADDA,OFFSET;得到总的偏移量,频率偏移+占空比偏移