1、设计并实现频率可控的正弦波信号发生器单片机课设1 Proteus软件简介Proteus ISIS是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:实现了单片机仿真和SPICE电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。支持主流单片机系统的仿真。目前支持的单片机类型有:68000系列、8051系列、AVR系列、PIC12系
2、列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如Keil C51 uVision2等软件。具有强大的原理图绘制功能。总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。特点:支持ARM7,PIC ,AVR,HC11以及8051系列的微处理器CPU模型,更多模型正在开发中;交互外设模型有LCD显示、RS232终端、通用键盘、开关、按钮、LED等;强大的调
3、试功能,如访问寄存器与内存,设置断点和单步运行模式;支持如IAR、Keil和Hitech等开发工具的源码C和汇编的调试;一键“make”特性:一个键完成编译与仿真操作;内置超过6000标准SPICE模型,完全兼容制造商提供的SPICE模型;DLL界面为应用提供特定的模式;14种虚拟仪器:示波器、逻辑分析仪、信号发生器、规程分析仪等;高级仿真包含强大的基于图形的分析功能:模拟、数字和混合瞬时图形;频率;转换;噪声;失真;付立叶;交流、直流和音频曲线;模拟信号发生器包括直流、正旋、脉冲、分段线性、音频、指数、单频FM;数字信号发生器包括尖脉冲、脉冲、时钟和码流;集成PROTEUS PCB设计形成完
4、整的电子设计系统。Protues 软件与Keil uVision 的结合 对于初次使用Protues 软件的人可能还不知道如何设置,现在把设置步骤简介如下,仅供参考(本文章只讨论在单机上结合,在两个联网机器使用由于篇幅限制不在此讨论):设置步骤如下: (1) 把proteus 安装目录下 VDM51.dll ( C:ProgramFilesLabcenterElectronicsProteus6ProfessionalMODELS)文件复制到 Keil 安装目录的 C51BIN 目录中;(2) 编辑C51 里tools.ini 文件, 加入:TDRV1=BINVDM51.DLL(PROTEUS
5、 VSM MONITOR-51 DRIVER);(3)Keil uVision 里设置: project-options forproject-debug tab;(4) 选中use proteus VSM monitor 51( 如果想用两台电脑仿真,双击setting,输入IP 地址 或者DNS name);(5) 载入proteus 文件;(6)proteus 里选择DEBUG-use remote debug monitor;进入KEIL 的project 菜单option for target 工程名。在DEBUG 选项中右栏上部的下拉菜选中 Proteus VSMMonitor-5
6、1 Driver。 在进入seting,如果同一台机IP 名为127.0.0.1,如不是同一台机则填另一 台的IP 地址。端口号一定为8000 注意:可以在一台机器上运行keil,另一台中运行proteus 进行远程仿真.(7)打开KEIL uVision, 按F5 开始仿真. 2 设计要求2.1 整体功能要求利用DAC0832输出正弦波信号(用示波器观察输出波形),初始频率为50Hz,变频采用“”、“”键 控制,当按下“”键是正弦波的频率自动加1输出,当按下“”时,正弦波频率自动减1输出,实时测量输出信号的频率值,通过数码管动态显示,并分析和实测输出信号的频率范围。2.2 设计所用芯片简介2
7、.2.1 DAC转换器介绍 DAC转换器是一种将数字量转换成模拟量的器件,其特点是接收、保持和转换的是数字信息,不存在随温度和时间的漂移问题,因此电路的抗干扰性能较好。DAC0832是8位分辨率的D/A转换集成芯片,它具有价格低廉、接口简单及转换控制容易等特点。它由8位输入锁存器、8位DAC寄存器、8位DIA转换电路及转换控制电路组成,能和CPU数据总线直接相连,属中速转换器,大约在1us内将一个数字量转换成模拟量输出。2.2.2 DAC0832 的结构D0D7:8位数据输入线,TTL电平,有效时间应大于 90ns(否则锁存器的数据会出错);ILE:数据锁存允许控制信号输入线,高电平有效;CS
8、:片选信号输入线(选通数据锁存器),低电平有效;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
9、寄存器的内容线性变化;IOUT2:电流输出端2,其值与IOUT1值之和为一常数;Rfb:反馈信号输入线,改变Rfb端外接电阻值可调整转换满量程精度;Vcc:电源输入端,Vcc的范围为+5V+15V;VREF:基准电压输入线,VREF的范围为-10V+10V;AGND:模拟信号地DGND:数字信号地2.2.3 DAC0832 的引脚图和内部结构图图1.1 DAC0832 的引脚图和内部结构图2.2.4 DAC0832 的三种工作方式1直通方式直通方式就是使 DAC0832 内部的两个寄存器(输入寄存器和DAC 寄存器)处于不锁存状态,数据一旦到达输入端DI7DI0,就直接送入D/A 转换器,被转
10、换成模拟量。当ILE为高电平,CS 和WR 1WR 2和XFER 端都接数字地,这时锁存信号LE 1 LE2 均为高电平,输入寄存器和DAC 寄存器均处于不锁存状态,即直通方式。2单缓冲方式单缓冲方式就是使两个寄存器中的一个处于缓冲方式,另一个处于锁存方式,数据只通过一级缓冲器送入D/A 转换器。通常的做法是将和XFER 均接地,使DAC 寄存器处于直通方式,而把ILE接高电平,接端口地址译码信号,WR 1接CPU系统总线的IOW 信号,使输入寄存器处于锁存方式。单缓冲方式只需执行一次写操作即可完成D/A 转换。一般不需要多个模拟量同时输出时,可采用单缓冲方式。3双缓冲方式双缓冲方式就是使两个
11、寄存器均处于锁存方式,数据要经过两级锁存(即两级缓冲)后再送入D/A 转换器,这就是说,要执行两次写操作才能完成一次D/A 转换。只要将ILE 接高电平,WR 1和WR 2接CPU的IOW ,CS 和XFER 分别接两个不同的I/O 地址译码信号即可。图中的 Rfb 是内部电阻,是为外部运算放大器提供的反馈电阻,用以提供适当的输出电压,Vref 端是由外电路为芯片提供的参考电源,电压范围在-10V+10V。另外,DAC0832 为电流输出型DAC,使用时需外接运算放大器,芯片的电源电压最好工作在+15V。2.2.5 8952单片机1. 8952单片机的引脚图图1.2单片机的引脚图VCC:供电电
12、压。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
13、位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为
14、输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口作为AT89C51的一些特殊功能口, 管脚 备选功能P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断0)P3.3 /INT1(外部中断1)P3.4 T0(记时器0外部输入)P3.5 T1(记时器1外部输入)P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用
15、于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两 /PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA / VPP:当/EA保持低电平时,则在此期间外
16、部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。 3. 系统电路设计与分析 3.1基本原理 本次实验采用DC0832芯片的但缓冲方式,低频信号发生器的软件的编制主要采用的是查表法。对于正弦信号,其每一个点的值的确定方法是:选取一个正弦周期,将一个周期分为255段,取255个点,让其最大值为#FFH,因为所用的0832D/A转换为8位
17、的,这样可以充分保证其转换的精度。正弦波幅值的计算公式如下:A=100*sin(I*/255)I=1255正弦波的幅度主要采用由主CPU控制D/A转换的参考电压来控制,正弦波频率的变化由改变输出点之间的延时来实现,根据正弦波的周期性和对称性来编制汇编程序,可以很方便地得到幅度和频率都受控的低频信号。 采用定时方式中断的方式控制正弦波抽样数值的输出,由定时计数器的装入值决定信号的频率,由于定时计数器采用计数方式1,16位计数初值。单片机采用12M晶振,定时范围065536us(即最大为65.536ms)要设计初始频率为50Hz定时时间:20ms/255=78us计数值:78由于采用计数器方式一,
18、每次需软件装入初值计数器装入初值,理论计算值减去装入初值指令的耗时,通过软件调试得到的装入初值为理论计算值减去9所以初值:TH1:FFH ;TL1:BBH 即(78-9)的值取补针对“+,-”键采用外部中断控制,实现频率值的加减处理,并在处理后调用子程序计算加减后的频率的计数初值计算公式:100000/(f*255)-9的值取补3.2 性能指标分析此次设计频率以1Hz为步进,通过“+,-”按键来改变,测量频率的误差范围小于1Hz,在设计中将频率值用一个八位寄存器存储,频率改变的范围在0255之间,由于定时中断服务程序的执行需要一定时间,要求在服务程序中断到来前跳出中断服务程序,以便进入下次中断
19、,软件调试得出最高输出频率为148Hz。可输出的频率范围:0148Hz,该频率在16位计数器定时范围内。输出电压:由公式 Vout=-(Iout1Rfb)=-Vref(DIGTAL INPUT)10/256 可以得到输出电压与参考电压Vref有关,由于在本设计中Vref接+5v,由第一级放大器输出的电压范围:-0-5v.3.3 资源分配表在设计中只使用到一个外部设备DAC0832P0口作DAC0832的数据总线CS与XFER接到P2.0,WR1,WR2共同接到WR,0832的访问地址为:FEFFH系统采用3个中断:IT0,IT1,ET1,优先级IT0IT1ET1其中定时器1采用方式一P1口作数
20、码管显示输出,实时输出当前频率值R0R7用来处理4字节除以两字节的除法计算同时使用到单片机内部的30H33H,50H53H空间3.4 正弦波产生电路设计图图1.3 正弦波产生电路图3 程序流程图图1.4 程序流程图4 程序设计5.1源程序ORG 0000HAJMP MAINORG 0003H ;外部中断0入口AJMP WB0ORG 0013H ;外部中断1入口AJMP WB1ORG 001BH ;定时器1中断入口AJMP IV1ORG 0030HMAIN: MOV TMOD,#10H ;T1工作于定时方式1MOV R5, #0FFHMOV R4, #0BBHMOV TH1,R5MOV TL1,
21、R4 ; 定时0.02/256sMOV 50H,#50MOV 51H,#00HSETB IT0SETB IT1SETB EX0SETB EX1SETB TR1SETB EASETB ET1LOOP: MOV A ,50H ;当前频率值显示于数码管CALL HEX2BCDsetb p3.0clr p3.1MOV P1,52Hcall delaysetb p3.1clr p3.0mov p1,53Hcall delaySJMP LOOP;等待中断DELAY:MOV R6,#10HLOP: MOV R7,#14HDL1: NOPDJNZ R7,DL1DJNZ R6,LOPRETHEX2BCD: MO
22、V B, #100 DIV AB MOV 53H, A ;存百位数 MOV A, #10 XCH A, B DIV AB SWAP A ;十位数换到高四位 ADD A, B ;加上个位数 MOV 52H, A ;保存 RETWB0:INC 50H MOV A,50H MOV B,#0FFH MUL AB MOV R3,B MOV R2,A MOV R4,#40H MOV R5,#42H MOV R6,#0FH MOV R7,#00H LCALL JSSZ CLR C MOV A,#09H SUBB A,R4 MOV R4,A MOV A,#00H SUBB A,R5 MOV R5,A CLR
23、C MOV A,#00H ADD A,R4 MOV R4,A MOV A,#00H ADDC A,R5 MOV R5,A CLR C MOV TH1,R5 MOV TL1,R4 RETIWB1:DEC 50H MOV A,50H MOV B,#0FFH MUL AB MOV R2,A MOV R3,B MOV R4,#40H MOV R5,#42H MOV R6,#0FH MOV R7,#00H LCALL JSSZ CLR C MOV A,#00H SUBB A,R4 MOV R4,A MOV A,#00H SUBB A,R5 MOV R5,A CLR C MOV A,#09H ADD A,
24、R4 MOV R4,A MOV A,#00H ADDC A,R5 MOV R5,A CLR C MOV TH1,R5 MOV TL1,R4 RETIIV1:MOV TH1,R5 MOV TL1,R4 PUSH ACC INC 51H MOV DPTR,#TAB MOV A,51H MOVC A,A+DPTR MOV DPTR,#0FEFFH MOVX DPTR,A; NOP POP ACC RETIJSSZ: ;四字节除二字节除法程序 CLR C MOV 30H,#0 MOV 31H,#0 MOV 32H,#0 MOV 33H,#0_DIV_LOOP: CLR C MOV A,R4 SUBB
25、A,R2 MOV R4,A MOV A,R5 SUBB A,R3 MOV R5,A MOV A,R6 SUBB A,#0 MOV R6,A MOV A,R7 SUBB A,#0 MOV R7,A JC _DIV_END_INC_SHANG: CLR C MOV A,30H ADDC A,#1 MOV 30H,A MOV A,31H ADDC A,#0 MOV 31H,A MOV A,32H ADDC A,#0 MOV 32H,A MOV A,33H ADDC A,#0 MOV 33H,A LJMP _DIV_LOOP_DIV_END: CLR C MOV A,R2 ADDC A,R4 MOV
26、R0,A MOV A,R3 ADDC A,R5 MOV R1,A MOV R4,30H MOV R5,31H MOV R6,32H MOV R7,33H RET TAB:DB 80h,83h,86h,89h,8dh,90h,93h,96h,99h,9ch,9fh,0a2h,0a5h,0a8h,0abh,0aeh,0b1h,0b4h,0b7h,0bah,0bch,0bfh,0c2h,0c5h DB 0c7h,0cah,0cch,0cfh,0d1h,0d4h,0d6h,0d8h,0dah,0ddh,0dfh,0e1h,0e3h,0e5h,0e7h,0e9h,0eah,0ech,0eeh,0efh,
27、0f1h,0f2h,0f4h,0f5h DB 0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0fdh,0feh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0feh,0fdh DB 0fdh,0fch,0fbh,0fah,0f9h,0f8h,0f7h,0f6h,0f5h,0f4h,0f2h,0f1h,0efh,0eeh,0ech,0eah,0e9h,0e7h,0e5h,0e3h,0e1h,0deh,0ddh,0dah DB 0d8h,0d6h,0d4h,0d1h,0cfh,0cch,0
28、cah,0c7h,0c5h,0c2h,0bfh,0bch,0bah,0b7h,0b4h,0b1h,0aeh,0abh,0a8h,0a5h,0a2h,9fh,9ch,99h DB 96h,93h,90h,8dh,89h,86h,83h,80h,80h,7ch,79h,76h,72h,6fh,6ch,69h,66h,63h,60h,5dh,5ah,57h,55h,51h DB 4eh,4ch,48h,45h,43h,40h,3dh,3ah,38h,35h,33h,30h,2eh,2bh,29h,27h,25h,22h,20h,1eh,1ch,1ah,18h,16h DB 15h,13h,11h,1
29、0h,0eh,0dh,0bh,0ah,09h,08h,07h,06h,05h,04h,03h,02h,02h,01h,00h,00h,00h,00h,00h,00h DB 00h,00h,00h,00h,00h,00h,01h,02h,02h,03h,04h,05h,06h,07h,08h,09h,0ah,0bh,0dh,0eh,10h,11h,13h,15h DB 16h,18h,1ah,1ch,1eh,20h,22h,25h,27h,29h,2bh,2eh,30h,33h,35h,38h,3ah,3dh,40h,43h,45h,48h,4ch,4eh DB 51h,55h,57h,5ah,
30、5dh,60h,63h,66h,69h,6ch,6fh,72h,76h,79h,7ch,80h END5.2 实现功能程序说明1数码管显示主程序不停循环执行将当前的频率值送数码管显示,通过P1口送数据,数据通过转换为BCD码,将该BCD码送BCD硬件译码电路显示2. 正弦波信号产生由定时中断,在中断服务中,由MOV TL0,R4;MOV TH0,R5来装入初值,通过INC 51H,使得一个周期的正弦波的256个抽样值依次输出,由MOVX DPTR,A,DPTR中存放DC0832的地址0FEFFH。正弦波的周期就取决于每个状态的延时时间。当增加定时器的定时初值时即延长了定时时间,即降低了正弦波的频率。反之,当减少定时器的定时初值时,即增加了了正弦波的频率。3+,-按键实现频率以1Hz为步进连续变化的实现加减按键分别由外部的两的中断控制,在中断服务程序中响应频率的加减一变化,同时在中断服务程序中调用多字节除法指令实现改变频率后的需转入的计数初值4产生的正弦波测量将正弦波通过555转化为方波,使用proteus中自带的虚拟频率计进行频率测量。注意由于实际中Vref的参考电压选取正值,有第一级放大器输出电压为负极性值,在设计中可以通过一极性反相电路将负电压变换为正电压,以便进行频率的测量5 整体电路图与仿真图6.1整机电路图图1.5 整机路图6.2 仿
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1