函数信号发生器是一种常用的信号源,它广泛地应用在电子技术实验。目前常用的函数信号发生器,一般可靠性较差,准确度较低,难以满足科研和高精度实验的需要。现用单片机和支持软件及其外设电路构成的智能函数信号发生器,采用编程的方法来实现波形,将产生波形的程序用子程序的形式编写,在需要波形时再调用相应子程序,经过D/A转换、运算放大器处理后,作为该信号源输出,其线路简捷、功能强大、性价比较高。
1 主要芯片介绍
1.1 AT89C51单片机芯片
1.1.1 引脚图
本文采用的单片机芯是AT89C51,它是采用高速CMOS制造工艺,通用型为40脚双列直插封装方式,其引脚如图1所示。只要将+5 V电源接到VCC和VSS两端,将晶振接到XTAL1和XTAL2两端,给EA端加高电平控制电压,然后将机器码固化到AT89C51内就可以使用了。
1.1.2 单片机基本功能
单片机基本系统即单片机正常工作不可缺少的部分,进行设计都要在此系统基础上进行。
(1)外接晶振引脚XTAL1与XTAL2
单片机之所以要加振荡器是因为单片机内的CPU在执行指定程序时,要经过“取指”、“译码”,再定时给相关电路发出控制信号,以实现“机器码指令”所要求的功能。这就要求内部必须有一个基准时钟。可通过外接晶振或振荡信号二种方式来实现,一般采用外接晶振的方法较方便。
XTAL1(19),XTAL2(18)为外接晶振的两个引脚。接入晶振时,还要接入两个20~30 pF的瓷片电容C1,C2,晶振频率因单片机工作速度而异,Intel MCS-51系列为1.2~12 MHz,ATMEL89C系列为0~24 MHz,目前常采用6 MHz,11.059 MHz和12 MHz。石英晶振起振后,XTAL2(18)脚有一个3 V左右的正弦波。C1,C2短路、晶振不良,AT89C51(18),(19)脚内部反相器会损坏。VCC电源未加上等故障可能造成晶振不起振,使单片机无法工作。当采用外部振荡器时,信号接入(19)脚,(18)脚悬浮。振荡器的12分频为一个机器周期,当外接12 MHz晶振时,一个机器周期为1μs。MCS-51大多数指令为一个机器周期。
(2)复位与复位电路
单片机必须进行复位,是因为单片机内的CPU“取指”过程即为CPU从PC指针所指定的程序存储器ROM地址单元中读取“机器码”的过程。单片机加电后,PC指针应指向ROM中某个固定的单元,当然,程序开始的第一条指令也应放在ROM的这一地址单元内,这样整个程序才能有序地执行。这个单元就是 ROM的0000H单元。只有上电复位正常后,PC值才为0000H,即指向ROM的0000H单元。此外,专用寄存器SFR中的SP为07H,即指向片内数据存储器(片内RAM)07H单元,P0~P3值为0FFH,其余的专用寄存器值大多为00H。
复位的方法:当振荡器正常工作时,RST(9)脚上出现的两个机器周期的高电平将使单片机有效复位。考虑到振荡器有一定的起振时间,该引脚必须保持 10 ms以上高电平,才能有效复位。复位电路有开机自动复位和手动复位。注意:复位信号为2个以上机器周期的高电平,单片机复位后正常工作时应该为低电平,如果未加复位电平或复位后复位电平仍未撤除,则单片机不能正常工作,此时,可检查RST电压及相关器件。
在掉电期问RST/VPD引脚如接入备用电源VPD(5 V±0.5 V),则可保存片内数据。当VCC下降到某一规定值时,VPD便向片内RAM供电。
(3)EA/VDD片内程序存储器选用端
单片机复位后,PC指针可能指向片内ROM0000H或片外ROM0000H单元,这取决于EA/VDD(31)脚外接高电平(指向片内 ROM0000H)还是低电平(指向片外ROM0000H)。AT89C51内部有4 kB ROM,这时EA(31)脚需外接高电位VCC。
在编程期间,此引脚作编程电压VDD的输入端。
1.2 关于DAC0832
DAC0832是具有20条引脚的双列直插式COMS器件,它内部具有两级数据寄存器,完成8位电流D/A转换。其结构框图及信号引线如图2所示。
以下是其三种不同的工作方式:
(1)直通方式
将WR1,WR2,XFER,CS接地,ILE接高电平,就能使得两个寄存器的输出跟随输入的数字量变化,DAC0832的输出也同时跟随变化。直通方式常用于连续反馈控制的环路中。
(2)单缓冲方式
单缓冲方式就是将其中一个寄存器工作在直通状态,另一个处于受控的锁存器状态。在实际应用中,如果只有一路模拟量输出,或虽有几路模拟量但并不要求同步输出,就可采用单缓冲方式。
(3)双缓冲方式
所谓双缓冲方式就是将两个寄存器都处于受控的锁存方式。为了实现两个寄存器的可控,应当给它们各分配一个端口地址,以便能按照端口地址进行操作。 D/A转换采用两步写操作来完成。可在DAC0832转换输出前一个数据的同时,将下一个数据传送到输入寄存器,以提高D/A转换速度。还可用于多路数模转换系统,以实现多路模拟信号同步输出的目的。
在所设计的电路中DAC0832采用的是单缓冲方式。
2 原理概述
单片机通过扩展D/A转换接口,结合灵活的程序可以方便地产生各种低频信号。下面以正弦信号为例进行说明。
2.1 正弦波信号的产生原理
正弦波的产生比较特殊,它不能由单片机直接产生,它只能产生如图3所示的阶梯波来向正弦波逼近。
很显然,在一个周期内阶梯波的阶梯数目越多,单片机输出的波形也就越接近正弦波。
先假定正弦波的振幅是2.56 V,则波谷对应的数字量为最小值00H,波峰对应的数字量为最大值FFH。将正弦波的第一个周期的波形按角度均分为若干等份,并计算出各点对应的电压值,电压值计算方法:Vx=2.5·(1+sinθ),因为00H~FFH对应的数字量为0~255,所以根据算出的电压就可直接写出各点所对应的数字量。单片机将一个周期的数字量存入一定的存储区域中,然后依次循环取出这些数字量,并送D/A电路转换成阶梯波,即近似的正弦波输出。所输出的正弦波的幅值可以通过D/A转换电路实现。2.2 变频原理
单片机产生的阶梯逼近正弦波对应的程序中加入了软件延时,最后再加入根据20H单元中的内容进行延时的延时程序,那么20H单元中的内容一变,则输出正弦波的频率也就发生了变化。即:就是把一个正弦信号(阶梯逼近)取样、量化、编码,形成一个正弦函数表储存在了ROM中。合成时改变相位增量,由于相位增量不同,则一个周期内的取样点数也不同,从而达到频率合成的目的。