设计并实现频率可控的正弦波信号发生器 单片机课设.docx
- 文档编号:30415025
- 上传时间:2023-08-14
- 格式:DOCX
- 页数:24
- 大小:697.27KB
设计并实现频率可控的正弦波信号发生器 单片机课设.docx
《设计并实现频率可控的正弦波信号发生器 单片机课设.docx》由会员分享,可在线阅读,更多相关《设计并实现频率可控的正弦波信号发生器 单片机课设.docx(24页珍藏版)》请在冰豆网上搜索。
设计并实现频率可控的正弦波信号发生器单片机课设
1Proteus软件简介
ProteusISIS是英国Labcenter公司开发的电路分析与实物仿真软件。
它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:
①实现了单片机仿真和SPICE电路仿真相结合。
具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。
②支持主流单片机系统的仿真。
目前支持的单片机类型有:
68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。
③提供软件调试功能。
在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如KeilC51uVision2等软件。
④具有强大的原理图绘制功能。
总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。
特点:
支持ARM7,PIC,AVR,HC11以及8051系列的微处理器CPU模型,更多模型正在开发中;
交互外设模型有LCD显示、RS232终端、通用键盘、开关、按钮、LED等;
强大的调试功能,如访问寄存器与内存,设置断点和单步运行模式;
支持如IAR、Keil和Hitech等开发工具的源码C和汇编的调试;
一键“make”特性:
一个键完成编译与仿真操作;
内置超过6000标准SPICE模型,完全兼容制造商提供的SPICE模型;
DLL界面为应用提供特定的模式;
14种虚拟仪器:
示波器、逻辑分析仪、信号发生器、规程分析仪等;
高级仿真包含强大的基于图形的分析功能:
模拟、数字和混合瞬时图形;频率;转换;噪声;失真;付立叶;交流、直流和音频曲线;
模拟信号发生器包括直流、正旋、脉冲、分段线性、音频、指数、单频FM;数字信号发生器包括尖脉冲、脉冲、时钟和码流;
集成PROTEUSPCB设计形成完整的电子设计系统。
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开始仿真.
2设计要求
2.1整体功能要求
利用DAC0832输出正弦波信号(用示波器观察输出波形),初始频率为50Hz,变频采用“+”、“-”键控制,当按下“+”键是正弦波的频率自动加1输出,当按下“-”时,正弦波频率自动减1输出,实时测量输出信号的频率值,通过数码管动态显示,并分析和实测输出信号的频率范围。
2.2设计所用芯片简介
2.2.1DAC转换器介绍
DAC转换器是一种将数字量转换成模拟量的器件,其特点是接收、保持和转换的是数字信息,不存在随温度和时间的漂移问题,因此电路的抗干扰性能较好。
DAC0832是8位分辨率的D/A转换集成芯片,它具有价格低廉、接口简单及转换控制容易等特点。
它由8位输入锁存器、8位DAC寄存器、8位DIA转换电路及转换控制电路组成,能和CPU数据总线直接相连,属中速转换器,大约在1us内将一个数字量转换成模拟量输出。
2.2.2DAC0832的结构
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:
数字信号地
2.2.3DAC0832的引脚图和内部结构图
图1.1DAC0832的引脚图和内部结构图
2.2.4DAC0832的三种工作方式
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.2.58952单片机
1.8952单片机的引脚图
图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/255=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资源分配表
在设计中只使用到一个外部设备DAC0832
P0口作DAC0832的数据总线
CS与XFER接到P2.0,WR1,WR2共同接到WR,0832的访问地址为:
FEFFH
系统采用3个中断:
IT0,IT1,ET1,优先级IT0>IT1>ET1
其中定时器1采用方式一
P1口作数码管显示输出,实时输出当前频率值
R0—R7用来处理4字节除以两字节的除法计算
同时使用到单片机内部的30H—33H,50H—53H空间
3.4正弦波产生电路设计图
图1.3正弦波产生电路图
3程序流程图
图1.4程序流程图
4程序设计
5.1源程序
ORG0000H
AJMPMAIN
ORG0003H;外部中断0入口
AJMPWB0
ORG0013H;外部中断1入口
AJMPWB1
ORG001BH;定时器1中断入口
AJMPIV1
ORG0030H
MAIN:
MOVTMOD,#10H;T1工作于定时方式1
MOVR5,#0FFH
MOVR4,#0BBH
MOVTH1,R5
MOVTL1,R4;定时0.02/256s
MOV50H,#50
MOV51H,#00H
SETBIT0
SETBIT1
SETBEX0
SETBEX1
SETBTR1
SETBEA
SETBET1
LOOP:
MOVA,50H;当前频率值显示于数码管
CALLHEX2BCD
setbp3.0
clrp3.1
MOVP1,52H
calldelay
setbp3.1
clrp3.0
movp1,53H
calldelay
SJMPLOOP;等待中断
DELAY:
MOVR6,#10H
LOP:
MOVR7,#14H
DL1:
NOP
DJNZR7,DL1
DJNZR6,LOP
RET
HEX2BCD:
MOVB,#100
DIVAB
MOV53H,A;存百位数
MOVA,#10
XCHA,B
DIVAB
SWAPA;十位数换到高四位
ADDA,B;加上个位数
MOV52H,A;保存
RET
WB0:
INC50H
MOVA,50H
MOVB,#0FFH
MULAB
MOVR3,B
MOVR2,A
MOVR4,#40H
MOVR5,#42H
MOVR6,#0FH
MOVR7,#00H
LCALLJSSZ
CLRC
MOVA,#09H
SUBBA,R4
MOVR4,A
MOVA,#00H
SUBBA,R5
MOVR5,A
CLRC
MOVA,#00H
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
POPACC
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
TAB:
DB80h,83h,86h,89h,8dh,90h,93h,96h,99h,9ch,9fh,0a2h,0a5h,0a8h,0abh,0aeh,0b1h,0b4h,0b7h,0bah,0bch,0bfh,0c2h,0c5h
DB0c7h,0cah,0cch,0cfh,0d1h,0d4h,0d6h,0d8h,0dah,0ddh,0dfh,0e1h,0e3h,0e5h,0e7h,0e9h,0eah,0ech,0eeh,0efh,0f1h,0f2h,0f4h,0f5h
DB0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0fdh,0feh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0feh,0fdh
DB0fdh,0fch,0fbh,0fah,0f9h,0f8h,0f7h,0f6h,0f5h,0f4h,0f2h,0f1h,0efh,0eeh,0ech,0eah,0e9h,0e7h,0e5h,0e3h,0e1h,0deh,0ddh,0dah
DB0d8h,0d6h,0d4h,0d1h,0cfh,0cch,0cah,0c7h,0c5h,0c2h,0bfh,0bch,0bah,0b7h,0b4h,0b1h,0aeh,0abh,0a8h,0a5h,0a2h,9fh,9ch,99h
DB96h,93h,90h,8dh,89h,86h,83h,80h,80h,7ch,79h,76h,72h,6fh,6ch,69h,66h,63h,60h,5dh,5ah,57h,55h,51h
DB4eh,4ch,48h,45h,43h,40h,3dh,3ah,38h,35h,33h,30h,2eh,2bh,29h,27h,25h,22h,20h,1eh,1ch,1ah,18h,16h
DB15h,13h,11h,10h,0eh,0dh,0bh,0ah,09h,08h,07h,06h,05h,04h,03h,02h,02h,01h,00h,00h,00h,00h,00h,00h
DB00h,00h,00h,00h,00h,00h,01h,02h,02h,03h,04h,05h,06h,07h,08h,09h,0ah,0bh,0dh,0eh,10h,11h,13h,15h
DB16h,18h,1ah,1ch,1eh,20h,22h,25h,27h,29h,2bh,2eh,30h,33h,35h,38h,3ah,3dh,40h,43h,45h,48h,4ch,4eh
DB51h,55h,57h,5ah,5dh,60h,63h,66h,69h,6ch,6fh,72h,76h,79h,7ch,80h
END
5.2实现功能程序说明
1.数码管显示
主程序不停循环执行将当前的频率值送数码管显示,通过P1口送数据,数据通过转换为BCD码,将该BCD码送BCD硬件译码电路显示
2.正弦波信号产生
由定时中断,在中断服务中,由MOVTL0,R4;MOVTH0,R5来装入初值,通过
INC51H,使得一个周期的正弦波的256个抽样值依次输出,由MOVX@DPTR,A,DPTR中存放DC0832的地址0FEFFH。
正弦波的周期就取决于每个状态的延时时间。
当增加定时器的定时初值时即延长了定时时间,即降低了正弦波的频率。
反之,当减少定时器的定时初值时,即增加了了正弦波的频率。
3."+,-"按键实现频率以1Hz为步进连续变化的实现
加减按键分别由外部的两的中断控制,在中断服务程序中响应频率的加减一变化,同时在中断服务程序中调用多字节除法指令实现改变频率后的需转入的计数初值
4.产生的正弦波测量
将正弦波通过555转化为方波,使用proteus中自带的虚拟频率计进行频率测量。
注意由于实际中Vref的参考电压选取正值,有第一级放大器输出电压为负极性值,在设计中可以通过一极性反相电路将负电压变换为正电压,以便进行频率的测量
5整体电路图与仿真图
6.1整机电路图
图1.5整机路图
6.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 设计并实现频率可控的正弦波信号发生器 单片机课设 设计 实现 频率 可控 正弦波 信号发生器 单片机