分享

波形发生器的设计

 共同成长888 2013-07-30

波形发生器的设计

波形发生器的设计

摘  要

各种各样的信号是通信领域的重要组成部分,其中正弦波、三角波和方波等是较为常见的信号。在科学研究及教学实验中常常需要这几种信号的发生装置。为了实验、研究方便,研制一种灵活适用、功能齐全、使用方便的信号源是十分必要的。本文介绍的是利用AT89C51单片机和数模转换器件DAC0832产生所需不同信号的低频信号源,其信号幅度和频率都是可以按要求控制的。文中简要介绍了DAC0832数模转换器的结构原理和使用方法,AT89C51的基础理论,以及与设计电路有关的各种芯片。根据对课程设计的要求,文中着重介绍了如何利用单片机控制D/A转换器产生上述信号的硬件电路和软件编程。信号频率幅度也按要求可调。本次关于产生不同低频信号的信号源的设计方案,不仅在理论和实践上都能满足实验的要求,而且具有很强的可行性。该信号源的特点是:体积小、价格低廉、性能稳定、实现方便、功能齐全。

关键词:AT89C51单片机 ,DAC0832转换器,信号源


 1 绪论

信号发生器是一类非常重要的电子仪器,在做实验、进行产品研制和调试以及系统测试中都是必不可少的,而一般的信号发生器是由硬件组成的,它的输出频率范围宽,各项指标高,性能优良,因而在对输出波形要求较高的地方被广泛采用。这种仪器的缺点是电路复杂,成本高,输出波形种类不多,不够灵活。在对波形指标要求不高、频率要求较低的场合,可以用单片机构成一个波形发生器,产生所需要的各种波形.这样的函数发生器靠软件产生各种波形,小巧灵活,便于修改,且成本低廉,容易实现。但受单片机工作频率的限制,它所构成的波形发生器的输出频率较低,各项指标也都不太高,只能用于对波形要求不高的场合。

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”且在任何非空存储字节被重复编程以前,该操作必须被执行。
此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。

2.3 DAC0832转换电路设计

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.

                                                                          

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多