设计并实现两路相位可调方波信号发生器.docx
- 文档编号:9341121
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:33
- 大小:1.26MB
设计并实现两路相位可调方波信号发生器.docx
《设计并实现两路相位可调方波信号发生器.docx》由会员分享,可在线阅读,更多相关《设计并实现两路相位可调方波信号发生器.docx(33页珍藏版)》请在冰豆网上搜索。
设计并实现两路相位可调方波信号发生器
《单片机应用实践》
课程设计
课程名称:
单片机应用实践
姓名:
李晓月
学院:
信息工程学院
专业:
电子信息工程
班级:
电信1305班
学号:
0000000000000
指导老师:
王绪国
课程设计任务书
学生姓名:
李晓月专业班级:
电信1305
指导教师:
王绪国工作单位:
信息工程学院
题目:
设计并实现两路相位可调方波信号发生器
初始条件:
具备模拟电子电路的理论知识;具备单片机的设计能力;具备模拟电路的基本调试手段;自选相关电子器件;可以使用实验室仪器调试。
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
1、输出两路方波信号
2、键盘控制频率和两信号的相位差
3、频率范围和变化步长值自定
4、相位范围0~360°
5、相位差变化步长值自定
6、用双踪示波器观察
7、能做到频率和相位差两参数独立变化更好
时间安排:
一月六号答辩
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
摘要
本文的设计电路名称为设计并实现两路相位可调方波信号发生器。
此次设计主要是利用单片机的应用实践,核心器件是AT89c51芯片,程序框图通过Visio软件进行绘制,经Proteus软件或者Keil软件进行仿真,再通过STC-ISP软件进行程序烧录写入单片机最小系统AT89c51芯片,最终通过外部两个键盘的控制初步实现了两路相位可调的方波信号发生器,并且做到了频率和相位差可以单独控制变化。
设计并实现两路可调方波信号发生器运用了硬件和软件相结合的实现方法,共同作用,相互影响。
可以实现频率按照步长值改变,相位按照等相位差进行变化。
关键词:
AT89C51;频率;相位差;
Abstract
Inthispaper,thedesignofthecircuitforthedesignandimplementtworoadphaseadjustablesquarewavesignalgenerator.Thisdesignmainlyusingsinglechipmicrocomputerapplicationpractice,thecorecomponentisAT89c51chip,programblockdiagramdrawnbyVisiosoftware,throughtheProteussoftwareorKeilsoftwaresimulation,andthenpassedonSTC-ISPsoftwareprogramstoburnintosinglechipmicrocomputerAT89c51chipminimumsystem,ultimatelythroughthetwoexternalkeyboardcontrolpreliminaryrealizedtworoadphaseadjustablesquarewavesignalgenerator,anddothechangesonfrequencyandphasedifferencecanbecontrolledseparately.
Keywords:
at89c51;frequency;phasedifference
课程任务书2
摘要3
正文6
1设计原理或方法6
1.1单片机概述……………………………………………………………………………………………………………………….6
1.2AT89C51引脚说明……………………………………………………………………………………………………………..8
1.3方案选择……………………………………………………………………………………………………………………………9
1.4设计原理说明………………………………………………………………………………………………………………….10
1.4.1设计方案…………………………………………………………………………………………………………………10
1.4.2参数计算…………………………………………………………………………………………………………………11
2系统硬件线路设计图12
2.1硬件模块分析…………………………………………………………………………………………………………………………12
2.1.1主程序设计……………………………………………………………………………………………………………………12
2.1.2系统初始化子程序设计………………………………………………………………………………………………..12
2.1.3时钟和复位电路设计…………………………………………………………………………………………………….13
2.1.4频率改变设计………………………………………………………………………………………………………………..14
2.1.5相位改变设计………………………………………………………………………………………………………………..15
2.2子程序设计电路图…………………………………………………………………………………………………………………16
3程序框图17
4资源分配表18
5源程序19
6仿真结果21
7仿真结果分析26
8性能分析27
9心得体会28
10致谢辞……………………………………………………………………………………………………………………………………29
附录1电路图30
附录2源程序31
本科生课程设计成绩评定表33
参考文献34
1设计原理或方法
1.1单片机概述
单片微型计算机(Single-ChipMicrocomputer),简称单片机。
就是将微处理器(CPU)、存储器(存放程序或数据的ROM和RAM)、总线、定时器/计数器、输入/输出接口(I/O口)和其他多种功能器件集成在一块芯片上的微型计算机。
本次课程设计选用的是MCS-51系列单片机中的AT89C51。
MCS-51单片机包含中央处理器(CPU)、程序存储器(ROM)、数据存储器(RAM)、定时器/计数器、并行I/O接口、串行I/O接口和中断系统等几大单元。
其内部结构框图如图1-1所示。
图1-1单片机内部结构框图
中央处理器由运算器、控制器组成。
8051的CPU包含以下功能部件:
(1)8位CPU。
(2)布尔代数处理器,具有位寻址能力。
(3)128B内部RAM数据存储器,21个专用寄存器。
(4)4KB内部掩膜ROM程序存储器。
(5)2个16位可编程定时器/计数器。
(6)32位(4×8位)双向可独立寻址的I/O口。
(7)1个全双工UART(异步串行通信口)。
(8)5个中断源、两级中断优先级的中断控制器。
(9)时钟电路,外接晶振和电容可产生1.2MHz~12MHz的时钟频率。
(10)外部程序/数据存储器寻址空间均为64KB。
(11)111条指令,大部分为单字节指令。
(12)单一+5V电源供电,双列直插40引脚DIP封装。
内部结构如图1-2所示
图1-2单片机内部结构框图
MCS-51单片机中有两个16位的定时器/计数器T0和T1,它们由4个8位寄存器(TL0,TH0,TL1和TH1)组成,2个16位定时器/计数器是完全独立的。
可以单独对这4个寄存器进行寻址,但不能把T0和T1当做16位寄存器来使用。
1.2AT89C51引脚说明
MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。
现在我们对这些引脚的功能加以说明。
图1-3AT89C51引脚图
Pin9:
RESET/Vpd复位信号复用脚,当89C51通电,时钟电路开始工作,在RESET引脚上出现24个时钟周期以上的高电平,系统即初始复位。
初始化后,程序计数器PC指向0000H,P0-P3输出口全部为高电平,堆栈指针写入07H,其它专用寄存器被清“0”。
RESET由高电平下降为低电平后,系统即从0000H地址开始执行程序。
然而,初始复位不改变RAM(包括工作寄存器R0-R7)的状态,80C51的初始态。
89C51的复位方式可以是自动复位,也可以是手动复位。
此外,RESET/Vpd还是一复用脚,Vcc掉电其间,此脚可接上备用电源,以保证单片机内部RAM的数据不丢失。
Pin30:
ALE/
当访问外部程序器时,ALE(地址锁存)的输出用于锁存地址的低位字节。
而访问内部程序存储器时,ALE端将有一个1/6时钟频率的正脉冲信号,这个信号可以用于识别单片机是否工作,也可以当作一个时钟向外输出。
更有一个特点,当访问外部程序存储器,ALE会跳过一个脉冲。
如果单片机是EPROM,在编程其间,
将用于输入编程脉冲。
Pin29:
当访问外部程序存储器时,此脚输出负脉冲选通信号,PC的16位地址数据将出现在P0和P2口上,外部程序存储器则把指令数据放到P0口上,由CPU读入并执行。
Pin31:
EA/Vpp程序存储器的内外部选通线,8051和8751单片机,内置有4kB的程序存储器,当EA为高电平并且程序地址小于4kB时,读取内部程序存储器指令数据,而超过4kB地址则读取外部指令数据。
如EA为低电平,则不管地址大小,一律读取外部程序存储器指令。
显然,对内部无程序存储器的8031,EA端必须接地。
1.3方案选择
两路相位可调方波信号发生器设计,相位差的调节原理是通过两个波形的输出产生延迟实现的,延迟的实现可以有两种思路,其中一种方法是用单片机自带的定时器来实现,还有一种方法是利用延时来实现。
这两种方法各有利弊。
如果利用单片机自带的定时器,单片机中定时器是可以产生很精确的定时,这样就可以产生很精准的频率,还可以通过控制定时器的工作来产生延迟输出波形,借此来产生相位差;但是这种方法考虑的方案设计要比较复杂,而且程序的设计也是很复杂的。
如果使用延时程序来控制,是很容易产生误差,而且相位调节更有可能调节很不准确;但是方案设计和程序的书写比较简单。
经过以上的认真分析,要想做出好的设计,我们应该选择用定时器来实现频率可调和延时程序来实现相位差可调的方波输出。
因此本次课程设计可以实现固定步长值的频率、相位可调。
1.4设计原理说明
1.4.1设计方案
本次设计的目的是实现两路相位可调的方波信号发生器。
包括两个方面,产生频率和相位可调的方波,相位差和频率变化步进值可以自定。
通过对51单片机工作原理的学习,设计方案如下:
选用51单片机中的T0和T1两个定时器,对于两路输出信号P0.0和P0.1分别进行控制,通过定时器的定时计数功能,调整电平变化,产生方波。
采取改变两个定时计数器计数初值的手段,改变方波电平产生的延时时间,从而改变方波频率(本次设计中方波占空比为1)
本设计通过2个按键P3.5,P3.6分别控制输出信号的频率和相位变化。
根据周期和频率的关系,可知周期T=1/频率F,本系统用的是12MHZ晶振,一个机器周期是1us。
本设计通过单片机的P0口的P0.0和P0.1两个引脚输出两路方波信号,通过P3口的P3.5和P3.6两个引脚接两个按键分别来控制输出方波的相位和频率变化。
本设计的相位是通过调用延时子程序来控制的,而频率是通过定时器来控制的。
通过按键使延时的时间和定时的时间发生改变从而输出不同相位和不同的频率的方波信号,框图如下图1-4所示:
示波器显示两路方波信号波形
单片机
键盘发出命令
P3口P0口
图1-4系统框图
1.4.2参数计算
本次设计输出频率为10HZ的方波,步进值为1HZ。
两个输出都采用定时方式1产生方波。
实现时,通过设计一个标志位,当信号开始变为高电平时,把相应的高电平计数初值赋给T0,当产生T0溢出中断时,把信号变为低电平,同时把低电平相应的计数初值赋给T0,通过标志位的0和1循环,从而产生持续交替的高低电平,一个频率可调的方波就出来了。
方波频率的设置:
根据T=1/频率F,得出周期为0.1s,即100ms,则首先产生50ms脉冲,计数初值为:
C=模—[t/MC]
带入数据得,初值C=3CB0H
频率步进值的设计:
初始脉冲个数为C350H,则根据步进值为1HZ,可得若增加后的频率为11HZ,则首先产生脉冲约为45ms,根据C=模—[t/MC],带入计算得初值为5038H。
即对于初始脉冲,高8位减少13H,低8位减少88H,并取反,即可得到初始值5038H。
同理可得,若使频率减少,相应变化值也应该增加1388H后并取反。
相位步进值的设置:
两路方波产生相位差主要是通过更改P0.1端口定时中断中加入输出方波前的独立延时时间。
通过延时电路的设计,以及机器周期的计算可知,延时的时长约为2.5ms,即产生18度的相位差。
所以每按下调相按钮时,都会产生相位差,并以18度步进值变化。
2系统硬件线路设计图
2.1硬件模块分析
2.1.1主程序设计
主程序包括系统初始化程序、键盘程序、控制当前的两个波形的频率和相位差程序,因为程序要不断地执行,所以主程序必须是一个死循环系统。
主程序流程图如图2-1所示:
图2-1主程序流程图
2.1.2系统初始化子程序设计
在此程序中,给所有变量赋初值,有波形输出端口、频率和相位差、定时器T0、T1计数值、定时器T0、T1工作方式和定时中断时间设置等。
初始化时启动了定时器0与定时器1,开定时器T1中断,关定时器T0中断。
频率初始化时设置值为10Hz,相位差值为0度。
其中最重要的是定时器的设置,两个定时器都采用自动重装方式,便于减少误差,具体分析会在后面的模块程序里面介绍。
2.1.3时钟和复位电路设计
单片机的时钟信号用来提供单片机内各种微操作时间基准;复位操作完成单片机片内电路的初始化,单片机从一种确定的状态开始运行。
8XX51单片机的时钟信号通常有两种形式:
内部振荡方式和外部振荡方式,设计电路图中采用内部振荡电路,晶振频率为12MHz。
复位操作完成单片机片内电路的初始化,单电机从一种确定的状态开始运行。
复位通常有两种形式:
上电复位和开关复位,设计电路图中采用手动复位电路。
图2-2时钟和复位电路
2.1.4频率改变设计
频率的改变是通过键盘命令控制的。
对于给定步长的频率增加值,由于采用自动重装模式计数,最大计数到255就会回零,所以设定频率最大为256,但要根据实际测得值来判断频率值。
频率值不能一直加,所以频率值应该离最大值有一个步长才能够加,设定一直加到255停止增加。
同样,对于给定步长的频率减少值,频率值不能一直减少,所以频率值应该大于一个给定步长才能够减少,设定一直减到1停止减少。
如图2-3是频率增加和频率减少程序流程图:
图2-3频率改变程序流程图
2.1.5相位改变设计
两路方波产生相位差主要是通过更改P0.1端口定时中断中加入输出方波前的独立延时时间。
通过延时电路的设计,以及机器周期的计算可知,延时的时长约为2.5ms,即产生18度的相位差。
所以每按下调相按钮时,都会产生相位差,并以18度步进值变化。
相位的改变值要很准确,首先计算1度占180度的比例1/180=0.0056,所以定时器T0选用的是55us,以减小误差,定时器T1选用200us,所以计算各个溢出次数是要除以相应的定时时间0.000055和0.0002,相位对应延迟时间是通过变量Control_Phase来控制的,所以要根据Control_Phase值来确定延迟时间,在确定延时时间下的一个机器周期指令执行的次数,这是本次设计的重点;频率的改变是通过定时器T1控制,频率的改变需要计算当前频率下的半个周期的时间,以控制方波变反输出。
两种情况下都要进行取整运算,减小误差。
图2-4相位改变程序框图
2.2系统硬件设计电路图
本设计通过单片机的P0口的P0.0和P0.1两个引脚输出两路方波信号,通过P3口的P3.5和P3.6两个引脚接两个按键分别来控制输出方波的相位和频率变化。
本硬件设计电路图通过Proteus仿真软件进行截图。
如下图2-5所示:
图2-5硬件系统设计电路图
3程序框图
N
Y
N
图3-1程序设计框图
4系统资源分配表
表1-1系统资源分配表
资源/引脚
实现功能
P3.5
调整频率按键
P3.6
调整相位按键
P0.0
第一路方波输出端(定时中断入口0BH)
P0.1
第二路方波输出端(定时中断入口1BH)
T0
控制P0.0的方波输出
T1
控制P0.1的方波输出
XTAL1
接外部晶振,频率为12MHZ
XTAL2
接外部晶振,频率为12MHZ
5源程序
ORG0000H
AJMPSTART
ORG000BH
AJMPBRK0
ORG001BH
AJMPBRK1
ORG0030H
START:
MOVR0,#3CH;设定定时器的初值
MOVR1,#0B0H
MOVR2,#0C3H;相应的脉冲个数
MOVR3,#50H
MAIN:
SETBP0.0
SETBP0.1
MOVTMOD,#11H;设定T0、T1均工作于方式1
MOVTH0,R0;设定T0初值
MOVTL0,R1
MOVTH1,R0;设定T1初值
MOVTL1,R1
SETBTR1;启动T1工作
SETBEA
SETBTR0;启动T0工作
SETBET0;允许T0中断
WAIT:
JNBP3.5,TF2;等待调频按键的操作
JNBP3.6,TP;等待调相按键的操作
LJMPWAIT
TP:
MOVR4,#16H
DL1:
MOVR6,#16H
DJNZR6,$
DJNZR4,DL1
MOVR7,#01H
LJMPWAIT
TF2:
JNBP3.5,$;步进值为-1Hz的调频程序
MOVA,R3
CLRC
ADDCA,#88H
MOVR3,A
CPLA
MOVR1,A;调频后的计数器初值低八位
MOVA,R2
ADDCA,#13H
MOVR2,A
CLRC
CPLA
MOVR0,A;调频后的计数器初值高八位
MOVTH1,R0;重新给计数器赋初值
MOVTL1,R1
MOVTH0,R0
MOVTL0,R1
LJMPWAIT
BRK0:
SETBET1;T0中断程序入口
CPLP0.0
MOVTH0,R0
MOVTL0,R1
RETI
BRK1:
CJNER7,#01H,XX;T1中断程序入口
CALLCF;若R7为1,则调用调相程序XX
CPLP0.1
MOVTH1,R0
MOVTL1,R1
RETI
CF:
MOVR4,#16H
DL2:
MOVR6,#16H
DJNZR6,$
DJNZR4,DL2
DECR7;将R7位清零
RET;返回定时中断程序
6仿真结果
图6-1初始复位仿真图
图6-2第一次按“相位”键之后仿真图
图6-3第二次按“相位”键之后仿真图
图6-4第三次按“相位”键之后仿真图
图6-5选取初始频率仿真图
图6-6第一次按“频率”键之后仿真图
图6-7第二次按“频率”键之后仿真图
图6-8第三次按“频率”键之后仿真图
图6-9第四次按“频率”键之后仿真图
图6-10第五次按“频率”键之后仿真图
7仿真结果分析
对于频率调节仿真,可以根据仿真波形计算出频率和误差:
10Hz波形频率:
1/100ms=10Hz,误差(10-10)/10*100%100=0;
20Hz波形频率:
1/100.5ms*2=19.9Hz,误差(20-19.9)/20*100%100=0.5%;
50Hz波形频率:
1/100ms*5=50Hz,误差(50-50)/50*100%100=0。
对于相位差调节仿真,可以根据仿真波形计算出相位差和误差:
45度相位差:
12.5/100*360=45,误差(45-45)/45*100%100=0;
90度相位差:
25/100*360=90,误差(90-90)/90*100%100=0;
综合上面的分析计算,频率和相位差的误差比较小,这是在仿真情况下,并且所取值比较特殊时,所得到的结果,然而在实际中会有偏差。
8性能分析
本次设计实现了两路频率可调、相位可调的方波信号的输出。
采用键盘控制频率、相位差,用“-1Hz”按钮改变方波给定频率,按钮每按下一次,给定频率改变1Hz;用键盘按钮实现相位差为18度的改变。
同时还有“系统复位”按键用来控制系统的复位操作。
输出方波的频率和相位差在示波器上得到显示。
利用单片机输出两路方波,其中一路方波作为参考,另外一路方波作为调节波,与前一路波形成对比,以测试实现功能频率、相位可调。
以上是系统设计时应该达到的目标,但是实际上,系统设计出来测试后发现按键控制功能可能与设计的不一致。
例如在频率比较高时,“+1Hz”按键好像表现出不起作用一样。
经过分析这是因为程序设计中有频率校正程序,频率校正后与原来设计的增加值会减小1Hz或者2Hz。
另外对于相位差减少函数,一开始采用直接调用函数,由于函数中浮点数的计算时间问题,导致相位差在超过180度后再减小(即相位左移)会出现错误,经过修改将函数中所要计算的式子通过手工计算好后在代入式子中,这样就避免的错误。
总体上,整个系统的设计要求可以达到。
设计出来的效果比较好。
频率在频率比较小时比较准确,而在比较高时误差较大,这是因为程序运行时间造成的时间延迟所致,频率较小,定时时间比较长,相应的时间延迟影响比较小;但是频率较高时影响比较大,尽管加入了频率校正程序,但是这个程序段并不能保证所有的频率都能很好的校正。
如果要得到比较好的修正,需要统计出各个频率对应的实际值和数码管显示值的误差,得到一个表,可以根据频率查表进行修正,或者绘出曲线得到近似的公式,再用程序编写公式,这样就可得到更小误差的频率。
本次软件设计完成之后,也进行过在单片机硬件系统上进行调试。
在进行硬件调试时,总体上,系统设计满足我们的预期目标,硬件系统上再现了软件仿真的效果,可以说单片机的控制是十分精准的。
但是硬件实现不像软件实现那样理想化,硬件上的实现会与软件的理想程度是有差别的,这是硬件系统的原因。
在进行硬件调试时发现,频率的调节是无法和显示的频率是精确一致的,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 设计 实现 相位 可调 方波 信号发生器