武汉绘芯科技有限公司欢迎您!
10余年经验沉淀展览展示运动控制的专家
全国咨询热线:027-87052087
联系我们
武汉绘芯科技有限公司
电话:027-87052087
手机:13329706647
邮箱:956693667@qq.com
地址:武汉市江夏区藏龙岛谭湖一路8号
联系人:黄先生
您的位置: 滑轨屏|绘芯科技 > 知识库 >
知识库

基于单片机的信号发生器设计

日期:2016-07-30 11:56:16 来源:未知 点击

 

基于单片机的信号发生器设计

 

本文介绍一种用AT89C51单片机构成的波形发生器,可产生方波、三角波、正弦波、锯齿波等多种波形,波形的周期可用程序改变,并可根据需要选择单极性输出或双极性输出,具有线路简单、结构紧凑、性能优越等特点。文章给出了源代码,通过仿真测试,其性能指标达到了设计要求。

关键词单片机;DAC;信号发生器

  


第一章 绪 论

 

1.1单片机概述

 

随着大规模集成电路技术的发展,中央处理器(CPU)、随机存取存储器(RAM)、只读存储器(ROM)(I/O)接口、定时器/计数器和串行通信接口,以及其他一些计算机外围电路等均可集成在一块芯片上构成单片微型计算机,简称为单片机。单片机具有体积小、成本低,性能稳定、使用寿命长等特点。其最明显的优势就是可以嵌入到各种仪器、设备中,这是其他计算机和网络都无法做到的[9,10]

 

1.2信号发生器的分类

 

信号发生器应用广泛,种类繁多,性能各异,分类也不尽一致。按照频率范围分类可以分为:超低频信号发生器、低频信号发生器、视频信号发生器、高频波形发生器、甚高频波形发生器和超高频信号发生器。按照输出波形分类可以分为:正弦信号发生器和非正弦信号发生器,非正弦信号发生器又包括:脉冲信号发生器,函数信号发生器、扫频信号发生器、数字序列波形发生器、图形信号发生器、噪声信号发生器等。按照信号发生器性能指标可以分为一般信号发生器和标准信号发生器。前者指对输出信号的频率、幅度的准确度和稳定度以及波形失真等要求不高的一类信号发生器。后者是指其输出信号的频率、幅度、调制系数等在一定范围内连续可调,并且读数准确、稳定、屏蔽良好的中、高档信号发生器[5]

 

1.3信号发生器的用途及发展趋势

 

信号发生器是一种常用的信号源,广泛应用于科学研究、生产实践和教学实验等领域。特别是在通信系统的科研实验中,常常需要用到多种不同频率和相位的信号,如正弦波、三角波、方波和锯齿波等,因此多功能信号发生器应用十分广泛。在数字化时代的今天,经典的由模拟电路组成的信号发生器已经渐渐远离了人们,取而代之的是电路简洁、功能多样、功耗低的数字电路。在以后的时间里,将会有越来越多的数字化的信号发生器运用在各种科学技术领域和工程实践中,给人们的日常生活带来更多的便利[1]

 

 


1.4 研究内容

 

本文是做基于单片机的信号发生器的设计,将采用编程的方法来实现三角波、锯齿波、矩形波、正弦波的发生。根据设计的要求,对各种波形的频率和幅度进行程序的编写,并将所写程序装入单片机的程序存储器中。在程序运行中,当接收到来自外界的命令,需要输出某种波形时再调用相应的中断服务子程序和波形发生程序,经电路的数/模转换器和运算放大器处理后,从信号发生器的输出端口输出。


第二章 方案的设计与选择

 

2.1 方案的比较

 

方案一:采用单片函数发生器(如8038),8038可同时产生正弦波、方波等,而且方法简单易行,用D/A转换器的输出来改变调制电压,也可以实现数控调整频率,但产生信号的频率稳定度不高。

方案二:采用锁相式频率合成器,利用锁相环,将压控振荡器(VCO)的输出频率锁定在所需频率上,该方案性能良好,但难以达到输出频率覆盖系数的要求,且电路复杂。

方案三:采用单片机编程的方法来实现。该方法可以通过编程的方法来控制信号波形的频率和幅度,而且在硬件电路不变的情况下,通过改变程序来实现频率的变换。此外,由于通过编程方法产生的是数字信号,所以信号的精度可以做的很高。

鉴于方案一的信号频率不够稳定和方案二的电路复杂,频率覆盖系数难以达标等缺点,所以决定采用方案三的设计方法。它不仅采用软硬件结合,软件控制硬件的方法来实现,使得信号频率的稳定性和精度的准确性得以保证,而且它使用的几种元器件都是常用的元器件,容易得到,且价格便宜,使得硬件的开销达到最省[1,7]

 

2.2 设计原理

 

数字信号可以通过数/模转换器转换成模拟信号,因此可通过产生数字信号再转换成模拟信号的方法来获得所需要的波形。89C51单片机本身就是一个完整的微型计算机,具有组成微型计算机的各部分部件:中央处理器CPU、随机存取存储器RAM、只读存储器ROMI/O接口电路、定时器/计数器以及串行通讯接口等,只要将89C51再配置键盘及其接口、显示器及其接口、数模转换及波形输出、指示灯及其接口等四部分,即可构成所需的波形发生器,其信号发生器构成原理框图如图2.1所示[2]

89C51是整个波形发生器的核心部分,通过程序的编写和执行,产生各种各样的信号,并从键盘接收数据,进行各种功能的转换和信号幅度的调节。当数字信号经过接口电路到达转换电路,将其转换成模拟信号也就是所需要的输出波形。


2.3 设计思想

 

1)利用单片机产生方波、正弦波、三角波和锯齿波等信号波形,信号的频率和幅度可变。

2)将一个周期的信号分离成256个点(按X轴等分),每两点之间的时间间隔为T,用单片机的定时器产生,其表示式为:T=T/256

如果单片机的晶振为12MHz,采用定时器方式0,则定时器的初值为:

                         X=213T/Tmec                                                        (2.1)

定时时间常数为:

                        TL =8192—T/MOD256                           (2.2)

TH = (8192—T)/256                                  (2.3)

MOD32表示除32取余数

3)正弦波的模拟信号是D/A转换器的模拟量输出,其计算公式为:

                         Y=A/2sint+A/2   (其中A=VREF)                 (2.4)

t=NT             (N=1~256)                      (2.5)

那么对应着存放在计算机里的这一点的数据为:                    

                                                                                     2.6    4)一个周期被分离成256个点,对应的四种波形的256个数据存放在以TAB1--TAB4为起始地址的存储器中。

 

2.4 设计功能

 

1)本方案利用8155扩展8个独立式按键,6LED显示器。其中“S0”号键代表方波输出,“S1”号键代表正弦波输出,“S2”号键代表三角波输出,“S3” 号键代表锯齿波输出。

2)“S4”号键为10Hz的频率信号,“S5”号键为100Hz的频率信号,“S6”号键为500Hz的频率信号,“S7”号键为1KHz的频率信号,6LED显示器输出信号的频率值,选用共阳极LED

3)利用两片DAC0832实现幅度可调的信号源,(其中一片用来调节幅度,另外一片用来实现信号源的输出)。

4)频率范围:10~1000Hz

5输出波形幅度为05V

 



第三章 主要器件介绍

 

3.1 AT89C51简介

 

在设计中,AT89C51用于产生波形的数字信号,并控制信号的频率和幅度。AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS 8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8CPU和闪烁存储器组合在单个芯片中,ATMELAT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。其引脚图如图3.1所示:

 

 

 

 

 

 

 

 

      

 

 

 

 

3.1  AT89C51引脚图

3.1.1 主要特性

8031 CPUMCS-51 兼容

4K字节可编程FLASH存储器(寿命:1000/擦循环)

• 全静态工作:0Hz-24KHz

• 三级程序存储器保密锁定

128*8位内部RAM

32条可编程I/O线

• 两个16位定时器/计数器• 6个中断源

• 可编程串行通道


• 低功耗的闲置和掉电模式

• 片内振荡器和时钟电路

3.1.2 管脚说明

P0P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。

P2P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4TTL门电流,当P2口被写“1时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4TTL门电流。当P3口写入“1后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL),这是由于上拉的缘故。

RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVXMOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。

PSEN:外部程序存储器的选通信号。在由外部程序存储器取址期间,每个机器周期两次PSEN有效。但在访问外部数据存储器时,这两次有效的PSEN信号将不出现。

EA/VPP:当EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,EA将内部锁定为RESET,当EA


端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:来自反向振荡器的输出。

VCC:供电电压。

GND:接地。

 

3.2 8155芯片简介

 

8155是通用的可编程并行接口芯片,在设计中用做键盘、显示器的扩充。其引脚图如图3.2所示:

 

 

 

 

 

 

 

 

 

 

 

 

3.2  8155引脚图

RST:复位信号输入端,高电平有效。复位后,3I/O口均为输入方式。

AD0AD7:三态的地址/数据总线。与单片机的低8位地址/数据总线(P0口)相连。单片机与8155之间的地址、数据、命令与状态信息都是通过这个总线口传送的。

:读选通信号,控制对8155的读操作,低电平有效。

 :写选通信号,控制对8155的写操作,低电平有效。

 :片选信号线,低电平有效。

IO/8155RAM存储器或I/O口选择线。当IO/0时,则选择8155的片内RAMAD0AD7上地址为8155RAM单元的地址(00HFFH),


IO/1时,选择8155I/O口,AD0AD7上的地址为8155 I/O口的地址。

ALE:地址锁存信号。8155内部设有地址锁存器,在ALE的下降沿将锁存单片机P0口输出的低8位地址信息及IO/的状态都锁存到8155内部锁存器。因此,P0口输出的低8位地址信号不需外接锁存器。

PA0PA78位通用I/O口,其输入、输出的流向可由程序控制。

PB0PB78位通用I/O口,功能同A口。

PC0PC5:有两个作用,既可作为通用的I/O口,也可作为PA口和PB口的控制信号线,这些可通过程序控制。

TIMER IN:定时/计数器脉冲输入端。

TIMER OUT:定时/计数器输出端。

VCC5V电源。

 

3.3 DAC0832简介

 

3.3.1 工作原理

在设计中,DAC0832主要用来将数字信号转换成模拟信号。DAC0832主要由8位输入寄存器、8DAC寄存器、8D/A转换器以及输入控制电路四部分组成。8位输入寄存器用于存放主机送来的数字量,使输入数字量得到缓冲和锁存,由加以控制,8DAC寄存器用于存放待转换的数字量,并加以控制。8D/A转换器输出与数字量成正比的模拟电流,由与门、与非门组成的输入控制电路来控制2个寄存器的选通或锁存状态。其原理框图如图3.3所示。

WR2XFER同时有效时,8DAC寄存器端为高电平“1,此时DAC寄存器的输出端Q跟随输入端D也就是输入寄存器Q端的电平变化,反之,当端为低电平“0”时,第一级8位输入寄存器Q端的状态则锁存到第二级8DAC寄存器中,以便第三级8DAC转换器进行D/A转换。


3.3.2 引脚图及其功能

各引脚分布如图3.4所示。引脚功能如下:

(1) DI7DI0 8位的数据输入端,DI7为最高位。

(2) IOUT1 :模拟电流输出端1,当DAC寄存器中数据全为1时,输出电流最大,当 DAC寄存器中数据全为0时,输出电流为0

(3) IOUT2 :模拟电流输出端2IOUT2IOUT1的和为一个常数,即IOUT1IOUT2常数。











(4) RFB:反馈电阻引出端,DAC0832内部已经有反馈电阻,所以RFB端可以直接接到外部运算放大器的输出端,这样相当于将一个反馈电阻接在运算放大器的输出端和输入端之间。

(5) VREF :参考电压输入端,此端可接一个正电压,也可接一个负电压,它决定0255的数字量转化出来的模拟量电压值的

3.4  DAC0832引脚图

幅度,VREF范围为(+10~-10)VVREF端与D/A内部T形电阻网络相连。

(6) Vcc :芯片供电电压,范围为(+5~ 15)V

(7) AGND :模拟量地,即模拟电路接地端。

(8) DGND :数字量地。

 

3.4 数码管显示原理

 

共阳极数码管的8个发光二极管的阳极(二极管正端)连接在一起,通常,公共阳极接高电平(一般接电源),其它管脚接段驱动电路输出端。当某段驱动电路的输出端为低电平时,则该端所连接的字段导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能吸收额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。

共阴极数码管的8个发光二极管的阴极(二极管负端)连接在一起,通常,公共阴极接低电平(一般接地),其它管脚接段驱动电路输出端,当某段驱动电路的输出端为高电平时,则该端所连接的字段导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能提供额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。其结构如图3.5所示。


 

 

 

 

 

 

 

 

 

        

a 外型结构               b 共阴极              c共阳极

        3.5  数码管结构图

 

3.5 数码管字形编码

 

要使数码管显示出相应的数字或字符必须使得数据口输出相应的字形编码。对照图3.5a,字型码各位定义如下:

数据线DB0a字段对应,DB1字段与b字段对应……,依此类推。如使用共阳极数码管,数据为0表示对应字段亮,数据为1表示对应字段暗;如使用共阴极数码管,数据为0表示对应字段暗,数据为1表示对应字段亮。数码管字形编码如表3.1所示[8]

3.1  数码管字型编码表

显示字符

字形

       

       

dp

g

f

e

d

c

b

a

字型码

dp

g

f

e

d

c

b

a

字形码

0

0

1

1

0

0

0

0

0

0

C0H

0

0

1

1

1

1

1

1

3FH

1

1

1

1

1

1

1

0

0

1

F9H

0

0

0

0

0

1

1

0

06H

2

2

1

0

1

0

0

1

0

0

A4H

0

1

0

1

1

0

1

1

5BH

3

3

1

0

1

1

0

0

0

0

B0H

0

1

0

0

1

1

1

1

4FH

4

4

1

0

0

1

1

0

0

1

99H

0

1

1

0

0

1

1

0

66H

5

5

1

0

0

1

0

0

1

0

92H

0

1

1

0

1

1

0

1

6DH

6

6

1

0

0

0

0

0

1

0

82H

0

1

1

1

1

1

0

1

7DH

7

7

1

1

1

1

1

0

0

0

F8H

0

0

0

0

0

1

1

1

07H

8

8

1

0

0

0

0

0

0

0

80H

0

1

1

1

1

1

1

1

7FH

9

9

1

0

0

1

0

0

0

0

90H

0

1

1

0

1

1

1

1

6FH


第四章 硬件设计

 

 4.1 硬件原理框图

 

硬件原理方框图如图4.1所示。

4.2 主控电路

 

AT89C51单处机内部设置两个16位可编程的定时器/计数器T0T1,它们具有计数器方式和定时器方式两种工作方式及4种工作模式。在波形发生器中,将其作定时器使用,用它来精确地确定波形的两个采样点输出之间的延迟时间。模式1采用的是16位计数器,当T0T1被允许计数后,从初值开始加计数,最高位产生溢出时向CPU请求中断。

中断系统是使处理器具有对外界异步事件的处理能力而设置的。当中央处理器CPU正在处理某件事的时候外界发生了紧急事件,要求CPU暂停当前的工作,转而去处理这个紧急事件。在波形发生器中,只用到片内定时器/计数器溢出时产生的中断请求,即是在AT89C51输出一个波形采样点信号后,接着启动定时器,在定时器未产生中断之前,AT89C51等待,直到定时器计时结束,产生中断请求,AT89C51响应中断,接着输出下一个采样点信号,如此循环产生所需要的信号波形[6]

如图4.2所示,AT89C51P0口接收来自键盘的信号,并通过P2口输出一些控制信号,将其输入到8155的信号控制端,用于控制其信号的输入、输出。如果有键按下,则在读控制端会产生一个读信号,使单片机读入信号。如果有信号输出,则在写控制端产生一个写信号,并将所要输出的信号通过8155PB口输出,并在数码管上显示出来。


4.2  主控电路图

 

4.3 /模转换电路

 

由于单片机产生的是数字信号,要想得到所需要的波形,就要把数字信号转换成模拟信号,所以该文选用价格低廉、接口简单、转换控制容易并具有8位分辨率的数模转换器DAC0832DAC0832主要由8位输入寄存器、8DAC寄存器、8D/A转换器以及输入控制电路四部分组成。但实际上,DAC0832输出的电量也不是真正能连续可调,而是以其绝对分辨率为单位增减,是准模拟量的输出。DAC0832是电流型输出,在应用时外接运放使之成为电压型输出。

由图4.3可知,DAC0832的片选地址为7FFFH,当P25有效时,若P0口向其送的数据为00H, 则U1 的输出电压为0V;P0口向其送的数据为0FFH时, 则U1的输出电压为-5V. 故当U1 输出电压为0V时,由公式                  得:Vout = - 5V.当输出电压为- 5V时,可得:Vout = +5V所以输出波形的电压变化范围为- 5V+ 5V. 故可推得,当P0所送数据为80H时,Vout0V[4]

 

 

 

 

 

 

 

4.3  数模转换电路


4.4 键接口电路

 

4.4为键盘接口电路的原理图,图中键盘和8155PA口相连,AT89C51P0口和8155D0口相连,AT89C51不断的扫描键盘,看是否有键按下,如有,则根据相应按键作出反应。其中“S0”号键代表方波输出,“S1”号键代表正弦波输出,“S2”号键代表三角波输出。 “S3”号键代表锯齿波输出,“S4”号键为10Hz的频率信号,“S5”号键为100Hz的频率信号,“S6”号键为500Hz的频率信号,“S7”号键为1KHz的频率信号[3]

 

 

 

 

 

 

 

 

 

 

 

   4.4  按键接口

 

4.5 时钟电路

 

8051单片机有两个引脚(XTAL1XTAL2)用于外接石英晶体和微调电容,从而构成时钟电路,其电路图如图4.5所示。

电容C1C2对振荡频率有稳定作用,其容量的选择为30pf,振荡器选择频率为12MHz的石英晶体。由于频率较大时,三角波、正弦波、锯齿波中每一点的延时时间为几微秒,故延时时间还要加上指令时间才能获得较大的频率波形[9]

 

 

 

 

 

 

 

 

     4.5  时钟电路


4.6 显示电路

 

显示电路是用来显示波形信号的频率,使得整个系统更加合理,从经济的角度出发,所以显示器件采用LED数码管显示器。而且LED数码管是采用共阳极接法,当主控端口输出一个低电平后,与其相对应的数码管即变亮,显示所需数据。其器件模型如图4.6所示。

 

4.6  LED显示电路

 

 

 

 



第五章 软件设计

 

5.1 程序流程图

 

本文中子程序的调用是通过按键的选择来实现,在取得按键相应的键值后,启动计时器和相应的中断服务程序,再直接查询程序中预先设置的数据值,通过转换输出相应的电压,从而形成所需的各种波形。

主程序的流程图如图5.1所示,在程序开始运行之后,首先是对8155进行初始化,之后判断信号频率值,如符合所需的频率,则重置时间常数,并通过显示器显示出来,不符则返回。在中断结束后,还要来判断波形是否符合,如符合,则显示其频率,不符则返回,重新判断。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5.1  主程序流程图


5.2为各波形子程序的流程图。如图所示,在中断服务子程序开始后,通过判断来确定各种波形的输出,当判断选择的不是方波后,则转向对正弦波的判断,如此反复。如果选择的是方波,则用查表的方法求出相应的数据,并通过D/A转换

器将数据转换成模拟信号,形成所需波形信号。

 

5.2  子程序流程图

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


5.2 波形仿真

 


通过前面的软、硬件设计,整个电路的设计已基本完成,下面将进行正弦波、方波、三角波、锯齿波等波形的仿真与测试。本文中波形信号的仿真是以Proteus 6.5这一款软件为平台,装入波形发生程序,验证硬件电路和程序的正确性。

5.2.1 正弦波的仿真

如图5.3所示,此波形为幅度为5V,频率为500HZ的正弦波,是通过查表转换的方法来实现的。而要实现其他如10HZ100HZ1KHZ等频率的波形,则需要调用延时子程序,改变波形发生的时间常数。

 

 

 

 

 

 

 

 

5.3  正弦波仿真图

5.2.2 三角波的仿真

如图5.4所示,此波形为幅度为5V,频率为500HZ的正弦波,是通过查表转换的方法来实现的。通过调用延时子程序,改变波形发生的时间常数,实现10HZ100HZ1KHZ等频率的波形。

 

 

 

 

 

 

 

 

5.4  三角波仿真图

 

 


5.2.3 锯齿波的仿真

如图5.5所示,此波形为幅度为5V,频率为500HZ的锯齿波,是通过查表转换的方法来实现的。而要实现其他如10HZ100HZ1KHZ等频率的波形,则需要调用延时子程序,改变波形发生的时间常数。

 

 

 

 

 

 

 

 

5.5  锯齿波仿真图

5.2.4 方波的仿真

如图5.6所示,此波形为幅度为5V,频率为500HZ的方波,是通过查表转换的方法来实现的。通过调用延时子程序,改变波形发生的时间常数,实现10HZ100HZ1KHZ等频率的波形。

 

 

 

 

 

 

 

 

5.6  方波仿真图


结束语

 

这种基于单片机的信号发生器已经展示出很好的性能,而且有着很高的性价比。此外,它产生的波形与模拟电路的波形相比,波形有着更好的平滑性,其周期性也更加稳定。已经越来越多的应用到各种电子设备当中,给人们的日常生活带来了方便。

在论文中简单介绍了它的用途和发展趋势,根据它的一些基本知识,按照自己的想法设计了一类低频信号发生器,具体包括了设计方案以及相关参数的选取和计算,根据工作基本原理加入了一些相关的辅助电路,并编写了相关的应用程序。有些指标还有待于进一步提高。例如,在精度及其它功能的扩展上还有较大的潜力可以挖掘,这些都有待于我们通过对电路的改进和对元器件的最佳选择来进一步完善。而且由于本人所学知识有限,很多知识点的学习不够深刻,我会在以后的学习中更加踏实、认真的学好各个知识点。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



 

参考文献

 

[1] 程全.基于AT89C52实现的多种波形发生器的设计[J].周口师范学院学报,2005.22(5)5758.

[2] 周明德.微型计算机系统原理及应用[M].北京:清华大学出版社,2002.341364.

[3] 刘乐善.微型计算机接口技术及应用[M].北京:北京航空航天大学出版社,2001.258264.

[4] 童诗白.模拟电路技术基础[M].北京:高等教育出版社,2000.171202.

[5] 杜华.任意波形发生器及应用[J].国外电子测量技术,2005.13840.

[6] 张友德.单片微型机原理、应用与实践[M].上海:复旦大学出版社,2004.4044.

[7] 程朗.基于8051单片机的双通道波形发生器的设计与实现[J].计算机工程与应用,2004.8100103.

[8] 张永瑞.电子测量技术基础[M].西安:西安电子科技大学出版社,2006.61101.

[9] 李叶紫. MCS-51单片机应用教程[M].北京:清华大学出版社,2004.232238.

[10] 蔡美琴.MCS-51系列单片机系统及其应用[M].北京:高等教育出版社,1988.56289.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

本文的研究工作是在杨永东老师指导、帮助和督促下完成的。杨永东老师在该领域有敏锐的感知力以及对其应用价值的洞察力给我留下了深刻的印象。在攻读学士学位四年的学习期间,导师勇于探索、敢于创新的科研精神激励我不断努力进取,在今后的人生旅途上取得成功的宝贵的精神财富。

同时,在学习期间导师为我提供了良好的研究环境和实践条件,并对一些创新性的工作给予了大量的指导与支持。在本文完成之际,谨向为我倾注了大量心血的导师及帮助过我的老师和同学表示最诚挚的感谢和深深的敬意!



附录一

 

源程序:

ORG  0000H

AJM  MAIN

ORG  000BH

LJMP  TC0

ORG  0030H

MAINMOV  DPTR#9FFFH                指向DAC08321

MOV  A70H

MOVX  DPTR                        DAC08321)输出

MOV  DPTR#7F00H                        指向8155命令字端口地址

MOV  A#06H                              设置A口为输入,B口、C口为输出

MOVX  DPTRA                          送命令字

MOV  DPTR#7F01H                        指向A口地址

MOVX  A,@DPTR                          读入A口的开关数据

JNB   ACC.4K10H                         判断是否“4”号键,若是则转输出10Hz信号

JNB   ACC.5K100H                        判断是否“5”号键,若是则转输出100Hz信号

JNB   ACC.6K500H                        判断是否“6”号键,若是则转输出500Hz信号

JNB   ACC.7K1K                          判断是否“7”号键,若是则转输出1KHz信号

AJMP  MAIN

LED1 MOV R3#06H                      设置6LED显示

MOV  R2#01H                             选通第一位LED数据

MOV  R1#30H                             送显示缓冲区首址

GN1MOV  DPTR#7F03H                  指向C口地址

MOV  AR2                                位选通数据送A

MOVX  DPTRA                          位选通数据送C

RL  A                                       选通下一位

MOV  R2A                                位选通数据送R2中保存


MOV  A R1                             取键值

MOV  DPTR#TAB                         LED显示软件译码表首址

MOVC  AA+DPTR                       查表求出键值显示的段码

MOV   DPTR#7F02H                       指向B口地址

MOV   DPTRA                          段码送显示

LCALL  LOOP1                             调延时子程序

INC  R1                                    指向下一位显示缓冲区地址

DJNZ  R3GN1                             循环显示6LED

RET

LOOP1MOV  R4#08H                    延时子程序

LOOPMOV   R5#0A0H

DJNZ  R5$

DJNZ  R4LOOP

RET

K10HMOV  30H#00H                   显示10Hz

MOV  31H#00H

MOV  32H#00H

MOV  33H#00H

MOV  34H#01H

MOV  35H#00H

LCALL  LED1                            调显示子程序

MOV  TMOD#00H

MOV  TL0#15H

MOV  TH0#9EH

AJMP  PD

K100HMOV  30H#00H                 显示100Hz

MOV  31H#00H

MOV  32H#00H

MOV  33H#01H

MOV  34H#00H


MOV  35H#00H

LCALL  LED1                          调显示子程序

MOV  TMOD#00H

MOV  TL0#08H

MOV  TH0#0F6H

AJMP  PD

K500HMOV  30H#00H               显示500Hz

MOV  31H#00H

MOV  32H#00H

MOV  33H#05H

MOV  34H#00H

MOV  35H#00H

LCALL  LED1                         调显示子程序

MOV  TMOD#00H

MOV  TL0#01H

MOV  TH0#0FEH

AJMP  PD

K1KMOV  30H#00H                显示1KHz

MOV  31H#00H


MOV  32H#01H

MOV  33H#00H

MOV  34H#00H

MOV  35H#00H

LCALL  LED1                        调显示子程序

MOV  TMOD#00H

MOV  TL0#01H

MOV  TH0#0FFH

PDJNB  ACC.0KE0               判断是否“0”号键按下,若是则转方波输出

JNB  ACC.1KE1                   判断是否“1”号键按下,若是则转正弦方波输出

JNB  ACC.2KE2                   判断是否“2”号键按下,若是则转三角波输出

JNB  ACC.3KE3                   判断是否“3”号键按下,若是则转锯齿波输出

LJMP  PD

KE0MOV  R7#00H

LCALL  LED1                     调显示子程序

MOV  R6#00H

AJMP  GN

KE1MOV  R7#02H

LCALL  LED1                     调显示子程序

MOV  R6#00H

AJMP  GN

KE2MOV  R7#02H

LCALL  LED1                     调显示子程序

MOV  R6#00H

AJMP  GN                        

KE3MOV  R7#02H

LCALL  LED1                      调显示子程序

MOV  R6#00H

GN SETB TR0

SETB  ET0

SETB  EA

LOP1JNB  ACC.4K10H          判断是否“4”号键,若是则转输出10Hz信号

JNB  ACC.5K100H                判断是否“5”号键,若是则转输出100Hz信号

JNB  ACC.6K500H                判断是否“6”号键,若是则转输出500Hz信号


JNB  ACC.7K1K                  判断是否“7”号键,若是则转输出1KHz信号

AJMP  LOP1

TC0CJNE  R7#00HTC1        发送方波程序

MOV  DPTR#TAB1               送方波数据表首址

MOV   AR6                     发送数据寄存器

MOVC  AA+DPTR

MOV  DPTR#0AFFFH             指向DAC08322

MOVX  DPTR               DAC08322)输出

MOV  AR6

INC  A

MOV  R6A

CJNE  A#32QL1

MOV  R6#00H

AJMP  QL1

TC1CJNE  R7#01HTC2          发送正弦波程序

MOV  DPTR#TAB2                 送正弦波数据表首址

MOV  AR6

MOVC  A A+DPTR

MOV  DPTR#0AFFFH              指向DAC08322

MOVX  DPTRA                  DAC08322)输出

MOV  AR6

INC  A

MOV  R6A

CJNE  A#32QL1

MOV  R6#00H

AJMP  QL1

TC2CJNE  R7#02HQL1          发送三角波程序

MOV  DPTR#TAB3                 送三角波数据表首址

MOV  AR6

MOVC  AA+DPTR


MOV  DPTR#0AFFFH              指向DAC08322

MOVX  DPTRA                 DAC08322)输出

MOV  AR6

INC  A

MOV  R6A

CJNE  A#32QL1

MOV  R6#00H

AJMP  QL1

TC3::CJNE  R7#03HQL1         发送锯齿波程序

MOV  DPTR#TAB4                 送锯齿波数据表首址

MOV  AR6

MOVC  A A+DPTR

MOV  DPTR#0AFFFH              指向DAC08322

MOVX  DPTRA                 DAC08322)输出

MOV  AR6

INC  A

MOV  R6A

CJNE  A#32QL1

MOV  R6#00H

QL1 RETI

TAB   DB 0C0H0F9H0A4H0B0H99H82H0F8H80H

TAB1  DB 0FFH0FFH0FFH0FFH0FFH0FFH 0FFH 0FFH

         DB 0FFH0FFH0FFH0FFH0FFH0FFH 0FFH 0FFH

DB 0FFH0FFH0FFH0FFH0FFH0FFH 0FFH 0FFH

DB 0FFH0FFH0FFH0FFH0FFH0FFH 0FFH 0FFH

DB 0FFH0FFH0FFH0FFH0FFH0FFH 0FFH 0FFH

DB 0FFH0FFH0FFH0FFH0FFH0FFH 0FFH 0FFH

DB 0FFH0FFH0FFH0FFH0FFH0FFH 0FFH 0FFH

DB 0FFH0FFH0FFH0FFH0FFH0FFH 0FFH 0FFH

DB 0FFH0FFH0FFH0FFH0FFH0FFH 0FFH 0FFH

DB 0FFH0FFH0FFH0FFH0FFH0FFH 0FFH 0FFH

DB 0FFH0FFH0FFH0FFH0FFH0FFH 0FFH 0FFH

DB 0FFH0FFH0FFH0FFH0FFH0FFH 0FFH 0FFH

DB 0FFH0FFH0FFH0FFH0FFH0FFH 0FFH 0FFH

DB 0FFH0FFH0FFH0FFH0FFH0FFH 0FFH 0FFH

DB 0FFH0FFH0FFH0FFH0FFH0FFH 0FFH 0FFH

DB 0FFH0FFH0FFH0FFH0FFH0FFH 0FFH 0FFH

         DB 00H 00H 00H 00H 00H 00H 00H 00H


         DB 00H 00H 00H 00H 00H 00H 00H 00H

         DB 00H 00H 00H 00H 00H 00H 00H 00H

DB 00H 00H 00H 00H 00H 00H 00H 00H

DB 00H 00H 00H 00H 00H 00H 00H 00H

DB 00H 00H 00H 00H 00H 00H 00H 00H

DB 00H 00H 00H 00H 00H 00H 00H 00H

DB 00H 00H 00H 00H 00H 00H 00H 00H

DB 00H 00H 00H 00H 00H 00H 00H 00H

DB 00H 00H 00H 00H 00H 00H 00H 00H

DB 00H 00H 00H 00H 00H 00H 00H 00H

DB 00H 00H 00H 00H 00H 00H 00H 00H

DB 00H 00H 00H 00H 00H 00H 00H 00H

DB 00H 00H 00H 00H 00H 00H 00H 00H

DB 00H 00H 00H 00H 00H 00H 00H 00H

DB 00H 00H 00H 00H 00H 00H 00H 00H

TAB2    DB  80H  83H 86H 89H 8DH90H93H96H

DB  99H  9CH 9FH0A2H0A5H0A8H0ABH0AEH

DB  0B1H 0B4H0B7H0BAH0BCH0BFH0C2H0C5H

DB  0C7H 0CAH0CCH0CFH0D1H 0D4H0D6H0D8H

DB  0DAH 0DDH0DFH0E1H0E3H 0E5H0E7H0E9H

DB  0EAH 0ECH0EEH0EFH0F1H 0F2H0F4H0F5H

DB  0F6H 0F7H 0F8H0F9H 0FAH 0FBH0FCH0FDH

DB  0FDH 0FEH0FFH0FFH0FFH 0FFH0FFH0FFH

DB  0FFH 0FFH0FFH0FFH0FFH 0FFH0FEH0FDH

DB  0FDH 0FCH0FBH0FAH0F9H 0F8H0F7H0F6H

DB  0F5H 0F4H0F2H0F1H0EFH 0EEH0ECH0EAH

DB  0E9H 0E7H0E5H0E3H0E1H 0DEH0DDH0DAH

DB  0D8H 0D6H0D4H0D1H0CFH 0CCH0CAH0C7H

DB  0C5H 0C2H0BFH0BCH0BAH 0B7H0B4H0B1H

DB  0AEH 0ABH0A8H0A5H0A2H 9FH 9CH 99H

DB  96H  93H 90H 8DH 89H 86H 83H 80H

DB  80H  7CH 79H 78H 72H 6FH 6CH 69H


DB  66H  63H 60H 5DH 5AH 57H 55H 51H

DB  4EH  4CH 48H 45H 43H 40H 3DH 3AH

DB  38H  35H 33H 30H 2EH 2BH 29H 27H

DB  25H  22H 20H 1EH 1CH 1AH 18H 16H

DB  15H  13H 11H 10H 0EH 0DH 0BH 0AH

DB  09H  08H 07H 06H 05H 04H 03H 02H

DB  02H  01H 00H 00H 00H 00H 00H 00H

DB  00H  00H 00H 00H 00H 00H 01H 02H

DB  02H  03H 04H 05H 06H 07H 08H 09H

DB  0AH  0BH 0DH 0EH 10H 11H 13H 15H

DB  16H  18H 1AH 1CH 1EH 20H 22H 25H

DB  27H  29H 2BH 2EH 30H 33H 35H 38H

DB  3AH  3DH 40H 43H 45H 48H 4CH 4EH

DB  51H  55H 57H 5AH 5DH 60H 63H 66H

DB  69H  6CH 6FH 72H 76H 79H 7CH 80H

TAB3    DB  00H02H04H06H08H0AH0CH0EH

           DB  10H12H14H16H18H1AH1CH1EH

           DB  20H22H24H26H28H2AH2CH2EH

           DB  30H32H34H36H38H3AH3CH3EH

           DB  40H42H44H46H48H4AH4CH4EH

           DB  50H52H54H56H58H5AH5CH5EH

           DB  60H62H64H66H68H6AH6CH6EH

           DB  70H72H74H76H78H7AH7CH7EH

           DB  80H82H84H86H88H8AH8CH8EH

           DB  0A0H0A2H0A4H0A6H0A8H0AAH0ACH0AEH

           DB  0B0H0B2H0B4H0B6H0B8H0BAH0BCH0BEH

           DB  0C0H0C2H0C4H0C6H0C8H0CAH0CCH0CEH

           DB  0D0H0D2H0D4H0D6H0D8H0DAH0DCH0DEH

           DB  0E0H0E2H0E4H0E6H0E8H0EAH0ECH0EEH

           DB  0F0H0F2H0F4H0F6H0F8H0FAH0FCH0FEH

           DB  0FFH0FEH0FCH0FAH0F8H0F6H0F4H0F2H

           DB  0F0H0EEH0ECH0EAH0E8H0E6H0E4H0E2H


           DB  0E0H0DEH0DCH0DAH0D8H0D6H0D4H0D2H

           DB  0D0H0CEH0CCH0CAH0C8H0C6H0C4H0C2H

           DB  0C0H0BEH0BCH0BAH0B8H0B6H0B4H0B2H

           DB  0B0H0AEH0ACH0AAH0A8H0A6H0A4H0A2H

           DB  0A0H09EH9CH9AH98H96H94H92H

           DB  90H8EH8CH8AH88H86H84H82H

          DB  80H7EH7CH7AH78H76H74H72H

          DB  70H6EH6CH6AH68H66H64H62H

          DB  60H5EH5CH5AH58H56H54H52H

          DB  50H4EH4CH4AH48H46H44H42H

          DB  40H3EH3CH3AH38H36H34H32H

          DB  30H2EH2CH2AH28H26H24H22H

          DB  20H1EH1CH1AH18H16H14H12H

          DB  10H0EH0CH0AH08H06H04H02H

TAB4   DB 00H01H02H03H04H05H06H07H

          DB 08H09H0AH0BH0CH0DH0EH0FH

          DB 10H11H12H13H14H15H16H17H

          DB 18H19H1AH1BH1CH1DH1EH1FH

          DB 20H21H22H23H24H25H26H27H

          DB 28H29H2AH2BH2CH2DH2EH2FH

          DB 30H31H32H33H34H35H36H37H

          DB 38H39H3AH3BH3CH3DH3EH3FH

          DB 40H41H42H43H44H45H46H47H

          DB 48H49H4AH4BH4CH4DH4EH4FH

          DB 50H51H52H53H54H55H56H57H

          DB 58H59H5AH5BH5CH5DH5EH5FH

          DB 60H61H62H63H64H65H66H67H

          DB 68H69H6AH6BH6CH6DH6EH6FH

          DB 70H71H72H73H74H75H76H77H

          DB 78H79H7AH7BH7CH7DH7EH7FH


          DB 80H81H82H83H84H85H86H87H

          DB 88H89H8AH8BH8CH8DH8EH8FH

          DB 90H91H92H93H94H95H96H97H

          DB 98H99H9AH9BH9CH9DH9EH9FH

          DB 0A0H0A1H0A2H0A3H0A4H0A5H0A6H0A7H

          DB 0A8H0A9H0AAH0ABH0ACH0ADH0AEH0AFH

          DB 0B0H0B1H0B2H0B3H0B4H0B5H0B6H0B7H

          DB 0B8H0B9H0BAH0BBH0BCH0BDH0BEH0BFH

          DB 0C0H0C1H0C2H0C3H0C4H0C5H0C6H0C7H

          DB 0C8H0C9H0CAH0CBH0CCH0CDH0CEH0CFH

          DB 0D0H0D1H0D2H0D3H0D4H0D5H0D6H0D7H

          DB 0D8H0D9H0DAH0DBH0DCH0DDH0DEH0DFH

          DB 0E0H0E1H0E2H0E3H0E4H0E5H0E6H0E7H

          DB 0E8H0E9H0EAH0EBH0ECH0EDH0EEH0EFH

          DB 0F0H0F1H0F2H0F3H0F4H0F5H0F6H0F7H

          DB 0F8H0F9H0FAH0FBH0FCH0FDH0FEH0FFH

END

 

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 


附录二

 
文本框: 基于单片机的信号发生器

 


在线客服
联系方式

热线电话

13329706647

上班时间

周一到周五

公司电话

027-87052087

二维码
线