波形发生器的设计波形发生器的设计 摘 要 各种各样的信号是通信领域的重要组成部分,其中正弦波、三角波和方波等是较为常见的信号。在科学研究及教学实验中常常需要这几种信号的发生装置。为了实验、研究方便,研制一种灵活适用、功能齐全、使用方便的信号源是十分必要的。本文介绍的是利用AT89C51单片机和数模转换器件DAC0832产生所需不同信号的低频信号源,其信号幅度和频率都是可以按要求控制的。文中简要介绍了DAC0832数模转换器的结构原理和使用方法,AT89C51的基础理论,以及与设计电路有关的各种芯片。根据对课程设计的要求,文中着重介绍了如何利用单片机控制D/A转换器产生上述信号的硬件电路和软件编程。信号频率幅度也按要求可调。本次关于产生不同低频信号的信号源的设计方案,不仅在理论和实践上都能满足实验的要求,而且具有很强的可行性。该信号源的特点是:体积小、价格低廉、性能稳定、实现方便、功能齐全。
关键词:AT89C51单片机 ,DAC0832转换器,信号源
信号发生器是一类非常重要的电子仪器,在做实验、进行产品研制和调试以及系统测试中都是必不可少的,而一般的信号发生器是由硬件组成的,它的输出频率范围宽,各项指标高,性能优良,因而在对输出波形要求较高的地方被广泛采用。这种仪器的缺点是电路复杂,成本高,输出波形种类不多,不够灵活。在对波形指标要求不高、频率要求较低的场合,可以用单片机构成一个波形发生器,产生所需要的各种波形.这样的函数发生器靠软件产生各种波形,小巧灵活,便于修改,且成本低廉,容易实现。但受单片机工作频率的限制,它所构成的波形发生器的输出频率较低,各项指标也都不太高,只能用于对波形要求不高的场合。 2 系统主要硬件设计 2.1硬件电路构成本电路的核心部件是 AT89C51 单片机, 此芯片是美国 ATMEL公司生产的低电压、高性能 CMOS 8 位单片机, 具有丰富的内部资源:4kB闪存、 128BRAM、 32 根 I/O口线、 2 个 16 位定时 / 计数器、 5 个向量两级中断结构、 2 个全双工的串行口, 具有 4.25~5.50V的电压工作范围和 0~24MHz工作频率, 使用 AT89C51 单片机时无须外扩存储器。另一主要部件是 DAC0832, 此芯片是 8 位分辨率 D/A转换集成芯片,与处理器完全兼容, 其价格低廉, 接口简单, 转换控制容易等优点, 因此在单片机应用系统中得到了广泛的应用。KA324 是四路独立的集成差分放大器。 图l 波形发生器的电路图 2.2 AT89C51单片机由图2可见,在这一块芯片上,集成了一台微型计算机的主要组成部分,其中包括CPU、存储器、可编程I/O口、定时器/计数器、串行口等,各部分通过内部总线相连。下面介绍几个主要部分。
图2 AT89C51 功能方块图 1.管脚说明 ATMEL公司的AT89C51是一种高效微控制器。采用40引脚双列直插封装形式。AT89C51单片机是高性能单片机,因为受引脚数目的限制,所以有不少引脚具有第二功能。 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.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(外部数据存储器读选通) P3口同时为闪烁编程和编程校验接收一些控制信号。 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.振荡器特性: XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。 4.芯片擦除: 整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms 来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。 DAC0832芯片是8位D/A转换器芯片,转换时间为1 us。DAC0832输出为电流信号,因此需要外接运算发大器,才能得到模拟的电压输出。其内部哟两级锁存器:第一级为输入锁存器,第二级为DAC寄存器。由于芯片内有两级输入寄存器,使DAC0832具备双缓冲、单缓冲和直通三种输入方式,可通过一个高输入阻抗的线性运算放大器实现模拟信号的输出,同时还可以采集下一个数据,以便适于各种电路的需要,这样可以有效的提高转速和效率。 图3 D/A转换电路图 2.4 时钟电路的设计XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。 因为一个机器周期含有6个状态周期,而每个状态周期为2个振荡周期,所以一个机器周期共有12个振荡周期,如果外接石英晶体振荡器的振荡频率为12MHZ,一个振荡周期为1/12us,故而一个机器周期为1us[5]。如图4所示为时钟电路。 图4 时钟电路图 2.5 复位电路的设计 复位电路设计的核心是:在振荡器运行时,保证AT89C51的RST引脚上出现10ms以上稳定的高电平,这样可以使AT89C51可靠地复位。复位方法一般有上电自动复位和外部按键手动复位,单片机在时钟电路工作以后, 在RESET端持续给出2个机器周期的高电平时就可以完成复位操作。例如使用晶振频率为12MHz时,则复位信号持续时间应不小于2us。本设计采用的是外部手动按键复位电路。如图5示为复位电路。 图5 复位电路图 3 系统软件设计 3.1总体软件设计 1.软件主流程图如图6所示。 图6 主程序流程图 2.中断服务子程序流程图如图7所示。 图7 中断服务子程序流程图 3.2主程序设计ORG 0000H LJMP MAIN ORG 0003H LJMP CT0 ORG 0013H LJMP CT1 ORG 0100H MAIN: KEYFDATA10 DATA 27H KEYFDATA11 DATA 28H KEYFDATA1 DATA 29H KEYFDATA2 DATA 3AH KEYADATA3 DATA 2BH KEYNAME DATA 2CH MOV P1 , #11100000B PSUH PSW MOV R7 ,#10H LOOP1;MOV R6 ,#30H LOOP2:DJNZ R6 LOOP2 DJNZ R7 LOOP1 POP PSW MOV P1, #00000000B MOV DPTR ,#8300H MOV A,#10001001B MOVX @DPTR,A MOV R2,#05H MOV DPTR ,#8100H MOV A,#OOH MOV R3,10H LOOP: MOVX @DPTR,A ADD A,R3 DJNZ R2 LOOP MOV DPTR ,#8200H MOV A,#00001111B MOVX @DPTR ,A CLR ITO ;中断初始化 MOV A, IPH ANL A ,#11111110B ORL A , #00000001B MOV IPH ,A CLR PXO SETB EXO SETB EA CLR IT1 MOV A,IPH ANL A, #11111110B ORL A, #00000001B MOV IPH ,A SETB PX1 SETB EX1 SETE EA START: MOX A ,#00000000B MOV P1 ,A PSUH PSW SETB RS0 CLR RS1 MOV R7 ,#10H LOOP3: MOV R6 ,#30H LOOP4: DJNZ R6 LOOP4 DJNZ R7 LOOP3 POP PSW MOV P1 ,A XRL A.#00H JZ STARD XRL A ,#00000001B JZ SQUAR XRL A,#00000010B JZ SINE XRL A ,#00000100B JZ RECT LJMP ATRART 3.3子程序设计1.正弦波发生子程序如下: MOV DPTR,#SINTAB ;正弦表写入内部RAM6DH-7FH MOV R0,#6DH LOOP: CLR A MOVC A,@A+DPTR MOV @R0,A INC DPTR INC R0 CJNE R0,#80H,LOOP MOV DPTR,#7FFFH ;设置D/A转换器的端口地址 MOV R0,#6DH ;设置正弦表指针 LOOP1: MOV A,@R0 ;查表 MOVX @DPTR,A ;D/A转换 ACALL DELAY ;延时,等待转换结束 DEC R0 ;正弦表位移量增量 CJNE R0 #6DH,LOOP1 ;第一象限输出完? LOOP2: MOV A,@R0 ;查表 MOVX @DPTR,A ;D/A转换 ALCALL DELAY ;延时,等待转换结束 DEC R0 ;正弦表位移量减量 CJNE R0 #6DH,LOOP2 ;第二象限输出完? LOOP3: MOV A,@R0 ;查表 CPLA ;表值取反 MOVX @DPTR,A ;D/A转换 ACLALL DELAY ;延时,等待转换结束 INC R0 ;正弦表位移量增量 CJNE R0,#7FH,LOOP3 ;第三象限输出完? LOOP4:MOV A,@R0 ;查表 CPL A ;表值取反 MOVX @DPTR,A ;D/A转换 ALCALL DELAY ;延时,等待转换结束 DEC R0 ;正弦表位移量减量 CJNE R0,#6DH,LOOP4 ;第四象限输出完? SJMP LOOP1 DELAY:MOV R7,#200 ; 延时50ms DEL1:MOVR6,#123 NOP DEL2:DJNZ R6,DEL2 DJNZ R7,DEL1 RET SINTAB: DB 7FH,89H,94H,9FH,0AAH,0B4H,0C8H,0D1H,0D9H DB 0E0H,0E7H,0EDH,0F2H,0F7H,0FAH,0FCH,,OFEH,0FFH END 2.锯齿波发生子程序如下: MOV DPTR,#7FFFH ;端口地址7FFFH—间址寄存器 MOV R7,#0 ;R7为0 DASAW:MOV A,R7 ;A清零 MOVX @DPTR,A ;写RAM INC R7 ;R7寄存器加一 NOP ;空操作 NOP NOP SJMP DASAW ;转移 END 3.方波发生子程序: MOV DPTR,#7FFFH ; 设置D/A转换器的端口地址 MOV R7,#FFH ;将#FFH送R7 FANGB:MOV A,R7 ;给A赋值 MOVX @DPTR,A ;写RAM ACALL DELAY ;调用延时子程序 CPL A ;A取反 MOVX @DPTR,A ;写RAM ACALL DELAY ;调用延时子程序 SJMP FANGB ;返回FANGB DELAY:MOV R7,#200 ; 延时50ms DEL1:MOVR6,#123 NOP DEL2:DJNZ R6,DEL2 DJNZ R7,DEL1 RET END ; 程序结束 4.三角波发生子程序如下: MOV DPTR,#7FFFH ; 设置D/A转换器的端口地址 L1:MOV R7,#00H ;A清零 MOV A,R7 L2: MOVX @DPTR,A ;写外部存储器 NOP ;延时 NOP NOP INC A ;A加1 JNZ L1 ;不等与零则转L1 L3: MOVX @DPTR,A ;写外部存储器 结 论信号发生器是一种能产生标准信号的电子仪器,是工业生产和电工、电子实验中经常使用的电子仪器之一。信号发生器种类较多,性能各有差别,但它们都可以产生不同频率的正弦波、调幅波调频波信号,以及各种频率的正弦波、方波、三角波、锯齿波等。本课程设计在AT89C51单片机的基础上,通过对时钟电路,复位电路,DAC0832转换电路的设计实现了正弦波、方波、三角波、锯齿波的输出,达到了设计的目的。 致 谢 经过一段时间的忙碌和工作,本次课程设计已经接近尾声,作为一个本科生的课程设计,由于经验的匮乏,难免有许多考虑不周全的地方,如果没有导师的督促指导,以及一起工作的同学们的支持,想要完成这个设计是难以想象的。
参考文献 [1] 胡汉才.单片机原理与接口技术[M].北京:清华大学出版社,1995.6. [2] 楼然苗等.51系列单片机设计实例[M].北京:北京航空航天出版社,2003.3. [3] 何立民. 单片机高级教程[M].北京:北京航空航天大学出版社,2001. [4] 赵晓安. MCS-51单片机原理及应用[M]. 天津:天津大学出版社,2001.3. [5] 肖洪兵. 跟我学用单片机[M]. 北京:北京航空航天大学出版社,2002.8. [6] 夏继强. 单片机实验与实践教程[M]. 北京:北京航空航天大学出版社, 2001. [7]于凤明.单片机原理及接口技术[M].北京:中国轻工业出版社.1998.
|
|