实现频率可控的正弦波信号发生器.docx
- 文档编号:2024433
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:27
- 大小:450.69KB
实现频率可控的正弦波信号发生器.docx
《实现频率可控的正弦波信号发生器.docx》由会员分享,可在线阅读,更多相关《实现频率可控的正弦波信号发生器.docx(27页珍藏版)》请在冰点文库上搜索。
实现频率可控的正弦波信号发生器
课程设计任务书
学生姓名:
专业班级:
指导教师:
工作单位:
信息工程学院
题目:
设计并实现频率可控的正弦波信号发生器
初始条件:
1.提供单片机实验箱;
2.使用伟福软件进行调试程序。
3.先修课程:
模拟电子技术、数字电子技术、Protues电路设计教程及单片机原理及应用等课程
要求完成的主要任务:
(包括课程设计工作量及技术要求,以及说明书撰写等具体要求)
1、课程设计时间:
1周;
2、要求:
利用DAC0832输出正弦波信号(用示波器观察输出波形),初始频率为50Hz。
3、技术要求:
变频采用“+”、“-”键控制,实时测量输出信号的频率值,并分析和实测输出信号的频率范围
频率范围:
0~255Hz。
③信号类型:
正弦波。
④信号幅值:
0~5V。
⑤误差范围:
<1Hz。
⑥确定设计方案,按功能模块的划分选择元、器件和中小规模集成电路,设计分电路,画出总体电路原理图,阐述基本原理。
4、查阅至少5篇参考文献。
按《武汉理工大学课程设计工作规范》要求撰写设计报告书。
全文用A4纸打印,图纸应符合绘图规范。
时间安排:
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
设计并实现频率可控的正弦波信号发生器
1Protues软件介绍……………………………………………3
2.1整体功能要求……………………………………………4
2.2设计所用芯片简介……………………………………………4
3系统电路设计与分析…………………………………………8
3.1基本原理……………………………………………………8
3.2性能指标分析………………………………………………9
3.3资源分配表…………………………………………………9
3.4正弦波产生电路设计……………………………………10
4程序流程图…………………………………………………11
5程序设计……………………………………………………12
5.1源程序………………………………………………………12
5.2实现功能程序说明………………………………………15
6整体电路图与仿真图………………………………………16
6.1整机电路图………………………………………………16
6.2仿真结果…………………………………………………17
5课程设计心得…………………………………………………19
6参考文献………………………………………………………20
7成绩评定表……………………………………………………21
1Protues软件介绍
Proteus是目前最好的模拟单片机外围器件的工具,它可以仿真51系列、AVR,PIC等常用的MCU及其外围电路(如LCD,RAM,ROM,键盘,马达,LED,AD/DA,部分SPI器件,部分IIC器件...)。
本文章基于ProteusPRO6.7SP3和KEILuVision3软件。
当然,软件仿真精度有限,而且不可能所有的器件都找得到相应的仿真模型,用开发板和仿真器当然是最好选择,可是对于单片机爱好者,或者简单的开发应该是比较好的选择。
Proteus与其它单片机仿真软件不同的是,它不仅能仿真单片机CPU的工作情况,也能仿真单片机外围电路或没有单片机参与的其它电路的工作情况。
因此在仿真和程序调试时,关心的不再是某些语句执行时单片机寄存器和存储器内容的改变,而是从工程的角度直接看程序运行和电路工作的过程和结果。
对于这样的仿真实验,从某种意义上讲,是弥补了实验和工程应用间脱节的矛盾和现象。
Protues软件与KeiluVision的结合
对于初次使用Protues软件的人可能还不知道如何设置,现在把设置步骤简介如下,仅供参考(本文章只讨论在单机上结合,在两个联网机器使用由于篇幅限制不在此讨论):
设置步骤如下:
(1)把proteus安装目录下VDM51.dll(C:
\ProgramFiles\LabcenterElectronics\Proteus6\Professional\MODELS)文件复制到Keil安装目录的\C51\BIN目录中;
(2)编辑C51里tools.ini文件,加入:
TDRV1=BIN\VDM51.DLL("PROTEUSVSMMONITOR-51DRIVER");(3)KeiluVision里设置:
project-->optionsforproject-->debugtab;(4)选中useproteusVSMmonitor51(如果想用两台电脑仿真,双击setting,输入IP地址或者DNSname);(5)载入proteus文件;(6)proteus里选择DEBUG-->useremotedebugmonitor;进入KEIL的project菜单optionfortarget'工程名'。
在DEBUG选项中右栏上部的下拉菜选中ProteusVSMMonitor-51Driver。
在进入seting,如果同一台机IP名为127.0.0.1,如不是同一台机则填另一台的IP地址。
端口号一定为8000注意:
可以在一台机器上运行keil,另一台中运行proteus进行远程仿真.(7)打开KEILuVision,按F5开始仿真.
proteus的工作过程
运行proteus的ISIS程序后,进入该仿真软件的主界面。
在工作前,要设置view菜单下的捕捉对齐和system下的颜色、图形界面大小等项目。
通过工具栏中的p(从库中选择元件命令)命令,在pickdevices窗口中选择电路所需的元件,放置元件并调整其相对位置,元件参数设置,元器件间连线,编写程序;在source菜单的Definecodegenerationtools菜单命令下,选择程序编译的工具、路径、扩展名等项目;在source菜单的Add/removesourcefiles命令下,加入单片机硬件电路的对应程序;通过debug菜单的相应命令仿真程序和电路的运行情况。
Proteus软件所提供了30多个元件库,数千种元件。
元件涉及到数字和模拟、交流和直流等。
Proteus软件所提供的调试手段
Proteus提供了比较丰富的测试信号用于电路的测试。
这些测试信号包括模拟信号和数字信号。
对于单片机硬件电路和软件的调试,Proteus提供了两种方法:
一种是系统总体执行效果,一种是对软件的分步调试以看具体的执行情况。
对于总体执行效果的调试方法,只需要执行debug菜单下的execute菜单项或F12快捷键启动执行,用debug菜单下的pauseanimation菜单项或pause键暂停系统的运行;或用debug菜单下的stopanimation菜单项或shift-break组合键停止系统的运行。
其运行方式也可以选择工具栏中的相应工具进行。
对于软件的分步调试,应先执行debug菜单下的start/restartdebugging菜单项命令,此时可以选择stepover、stepinto和stepout命令执行程序(可以用快捷键F10、F11和ctrl+F11),执行的效果是单句执行、进入子程序执行和跳出子程序执行。
在执行了start/restartdebuging命令后,在debug菜单的下面要出现仿真中所涉及到的软件列表和单片机的系统资源等,可供调试时分析和查看。
在教学中利用该软件,除了能教单片机的具体课程内容外,还可以教会学生应用该工具的能力,为今后的工作打下基础。
2设计要求
2.1整体功能要求
利用DAC0832输出正弦波信号(用示波器观察输出波形),初始频率为50Hz,变频采用“+”、“-”键控制,当按下“+”键是正弦波的频率自动加1输出,当按下“—”时,正弦波频率自动减一输出,实时测量输出信号的频率值,通过数码管动态显示,并分析和实测输出信号的频率范围。
2.2设计所用芯片简介
2.2.1DAC转换器是一种将数字量转换成模拟量的器件,其特点是接收、保持和转换的是数字信息,不存在随温度和时间的漂移问题,因此电路的抗干扰性能较好。
DAC0832是8位分辨率的D/A转换集成芯片,它具有价格低廉、接口简单及转换控制容易等特点。
它由8位输入锁存器、8位DAC寄存器、8位DIA转换电路及转换控制电路组成,能和CPU数据总线直接相连,属中速转换器,大约在1us内将一个数字量转换成模拟量输出。
1.1DAC0832的结构如下:
D0~D7:
8位数据输入线,TTL电平,有效时间应大于90ns(否则锁存器的数
据会出错);
ILE:
数据锁存允许控制信号输入线,高电平有效;
CS:
片选信号输入线(选通数据锁存器),低电平有效;
WR1:
数据锁存器写选通输入线,负脉冲(脉宽应大于500ns)有效。
由ILE、
CS、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据
线变换,LE1的负跳变时将输入数据锁存;
XFER:
数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于500ns)
有效;
WR2:
DAC寄存器选通输入线,负脉冲(脉宽应大于500ns)有效。
由WR1、XFER
的逻辑组合产生LE2,当LE2为高电平时,DAC寄存器的输出随寄存器的输入而
变化,LE2的负跳变时将数据锁存器的内容打入DAC寄存器并开始D/A转换。
IOUT1:
电流输出端1,其值随DAC寄存器的内容线性变化;
IOUT2:
电流输出端2,其值与IOUT1值之和为一常数;
Rfb:
反馈信号输入线,改变Rfb端外接电阻值可调整转换满量程精度;
Vcc:
电源输入端,Vcc的范围为+5V~+15V;
VREF:
基准电压输入线,VREF的范围为-10V~+10V;
AGND:
模拟信号地
DGND:
数字信号地
1.2DAC0832的引脚图和内部结构如图1.1
图1.1DAC0832的引脚图和内部结构图
1.3DAC0832的三种工作方式
1.直通方式
直通方式就是使DAC0832内部的两个寄存器(输入寄存器和DAC寄存器)
处于不锁存状态,数据一旦到达输入端DI7~DI0,就直接送入D/A转换器,被转
换成模拟量。
当ILE为高电平,CS和WR1﹑WR2和XFER端都接数字地,这时
锁存信号LE1﹑LE2均为高
电平,输入寄存器和DAC寄存器均处于不锁存状态,即直通方式。
2.单缓冲方式
单缓冲方式就是使两个寄存器中的一个处于缓冲方式,另一个处于锁存方式,
数据只通过一级缓冲器送入D/A转换器。
通常的做法是将和XFER均接地,使
DAC寄存器处于直通方式,而把ILE接高电平,接端口地址译码信号,WR1接
CPU系统总线的IOW信号,使输入寄存器处于锁存方式。
单缓冲方式只需执行
一次写操作即可完成D/A转换。
一般不需要多个模拟量同时输出时,可采用单
缓冲方式。
3.单缓冲方式
单缓冲方式就是使两个寄存器均处于锁存方式,数据要经过两级锁存(即两级
缓冲)后再送入D/A转换器,这就是说,要执行两次写操作才能完成一次D/A转
换。
只要将ILE接高电平,WR1和WR2接CPU的IOW,CS和XFER分别接两
个不同的I/O地址译码信号即可。
图中的Rfb是内部电阻,是为外部运算放大器提供的反馈电阻,用以提供适当
的输出电压,Vref端是由外电路为芯片提供的参考电源,电压范围在-10V~
+10V。
另外,DAC0832为电流输出型DAC,使用时需外接运算放大器,芯片
的电源电压最好工作在+15V。
2.1.28952单片机
18952单片机的引脚图如图1.2
图1.2单片机的引脚图
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口作为AT89C51的一些特殊功能口,管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器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:
来自反向振荡器的输出。
3系统电路设计与分析3.1基本原理本次实验采用DC0832芯片的但缓冲方式,低频信号发生器的软件的编制主要采用的是查表法。
对于正弦信号,其每一个点的值的确定方法是:
选取一个正弦周期,将一个周期分为255段,取255个点,让其最大值为#FFH,因为所用的0832D/A转换为8位的,这样可以充分保证其转换的精度。
正弦波幅值的计算公式如下:
A=100*sin(I*π/255) I=1…255
正弦波的幅度主要采用由主CPU控制D/A转换的参考电压来控制,正弦波频率的变化由改变输出点之间的延时来实现,根据正弦波的周期性和对称性来编制汇编程序,可以很方便地得到幅度和频率都受控的低频信号。
采用定时方式中断的方式控制正弦波抽样数值的输出,由定时计数器的装入值决定信号的频率,由于定时计数器采用计数方式1,16位计数初值。
单片机采用12M晶振,定时范围0~65536us(即最大为65.536ms)
要设计初始频率为50Hz
定时时间:
20ms/255us=78us
计数值:
78
由于采用计数器方式一,每次需软件装入初值计数器装入初值,理论计算值减去装入初值指令的耗时,通过软件调试得到的装入初值为理论计算值减去9所以
初值:
TH1:
FFH;TL1:
BBH即(78-9)的值取补
针对“+,-”键采用外部中断控制,实现频率值的加减处理,并在处理后调用子程序计算加减后的频率的计数初值
计算公式:
100000/(f*255)-9的值取补
3.2性能指标分析
此次设计频率以1Hz为步进,通过“+,-”按键来改变,测量频率的误差范围小于1Hz,在设计中将频率值用一个八位寄存器存储,频率改变的范围在0~255之间,由于定时中断服务程序的执行需要一定时间,要求在服务程序中断到来前跳出中断服务程序,以便进入下次中断,软件调试得出最高输出频率为148Hz。
可输出的频率范围:
0~148Hz,该频率在16位计数器定时范围内。
输出电压:
由公式Vout=-(Iout1×Rfb)=-Vref(DIGTALINPUT)10/256可以得到输出电压与参考电压Vref有关,由于在本设计中Vref接+5v,由第一级放大器输出的电压范围:
-0~-5v.
3.3资源分配表
在设计中只使用到一个外部设备DA0832
P0口作DC0832的数据总线
CS与XFER接到P2.0,WE1,WR2共同接到WR,0832的访问地址为:
FCFFH
系统采用3个中断:
IT0,IT1,ET1,优先级IT0>IT1>ET1
其中定时器1采用方式一
P1口作数码管显示输出,实时输出当前频率值
R0—R7用来处理4字节除以两字节的除法计算
同时使用到单片机内部的30H—33H,50H-53H空间
3.4正弦波产生电路设计如下图1.3
图1.3正弦波产生电路图
4程序流程图
N
Y
图1.4程序流程图
5程序设计
5.1源程序
ORG0000H
AJMPMAIN
ORG0003H;外部中断0入口
AJMPWB0
ORG0013H;外部中断0入口
AJMPWB1
ORG001BH;定时器1中断入口
AJMPIV1
ORG0030H
MAIN:
MOVTMOD,#10H;T1工作于定时方式1
MOVR5,#0FFH
MOVR4,#0f6H
MOVTH1,R5
MOVTL1,R4;定时0.02/256s
MOV50H,#200
MOV51H,#00H
SETBIT0
SETBIT1
SETBEX0
SETBEX1
SETBTR1
SETBEA
SETBET1
LOOP:
MOVA,50H;当前频率值显示于数码管
LCALLHEX2BCD
setbp3.0
cplp3.1
MOVP1,52H
lcalldelay
setbp3.1
cplp3.0
movp1,53H
lcalldelay1
SJMPLOOP;等待中断
WB0:
INC50H
MOVA,50H
MOVB,#0FFH
MULAB
MOVR3,B
MOVR2,A
MOVR4,#40H
MOVR5,#42H
MOVR6,#0FH
MOVR7,#00H
LCALLJSSZ
CLRC
MOVA,#00H
SUBBA,R4
MOVR4,A
MOVA,#00H
SUBBA,R5
MOVR5,A
CLRC
MOVA,#09H
ADDA,R4
MOVR4,A
MOVA,#00H
ADDCA,R5
MOVR5,A
CLRC
MOVTH1,R5
MOVTL1,R4
RETI
WB1:
DEC50H
MOVA,50H
MOVB,#0FFH
MULAB
MOVR2,A
MOVR3,B
MOVR4,#40H
MOVR5,#42H
MOVR6,#0FH
MOVR7,#00H
LCALLJSSZ
CLRC
MOVA,#00H
SUBBA,R4
MOVR4,A
MOVA,#00H
SUBBA,R5
MOVR5,A
CLRC
MOVA,#09H
ADDA,R4
MOVR4,A
MOVA,#00H
ADDCA,R5
MOVR5,A
CLRC
MOVTH1,R5
MOVTL1,R4
RETI
IV1:
MOVTH1,R5
MOVTL1,R4
PUSHACC
INC51H
MOVDPTR,#TAB
MOVA,51H
MOVCA,@A+DPTR
MOVDPTR,#0FEFFH
MOVX@DPTR,A
NOP
POPA
RETI
JSSZ:
;四字节除二字节除法程序
CLRC
MOV30H,#0
MOV31H,#0
MOV32H,#0
MOV33H,#0
_DIV_LOOP:
CLRC
MOVA,R4
SUBBA,R2
MOVR4,A
MOVA,R5
SUBBA,R3
MOVR5,A
MOVA,R6
SUBBA,#0
MOVR6,A
MOVA,R7
SUBBA,#0
MOVR7,A
JC_DIV_END
_INC_SHANG:
CLRC
MOVA,30H
ADDCA,#1
MOV30H,A
MOVA,31H
ADDCA,#0
MOV31H,A
MOVA,32H
ADDCA,#0
MOV32H,A
MOVA,33H
ADDCA,#0
MOV33H,A
LJMP_DIV_LOOP
_DIV_END:
CLRC
MOVA,R2
ADDCA,R4
MOVR0,A
MOVA,R3
ADDCA,R5
MOVR1,A
MOVR4,30H
MOVR5,31H
MOVR6,32H
MOVR7,33H
RET
DELAY:
MOVR6,#62H
LOP:
MOVR7,#28H
DL1:
NOP
NOP
DJNZR7,DL1
DJNZR6,LOP
RET
DELAY1:
MOVR6,#61H
LOP1:
MOVR7,#1dH
DL11:
NOP
NOP
DJNZR7,DL11
DJNZR6,LOP1
RET
HEX2BCD:
;二进制转BCD码
MOVB,#100
DIVAB
MOV53H,A;存百位数
MOVA,#10
XCHA,B
DIVAB
SWAPA;十位数换到高四位
ADDA,B;加上个位数
MOV52H,A;保存
RET
TAB:
DB80h,83h,86h,89h,8dh,90h,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实现 频率 可控 正弦波 信号发生器