2.2 显示模块
由于本设计中要求显示界面显示一些参数,因此这里选用了LCD1602作为界面显示,可以实时的显示当前信号输出的频率、波形、占空比以及幅值,同时也方便用户设置相关的参数。
2.2.1 液晶LCD1602原理
液晶显示器[6](LCD)英文全称为Liquid Crystal Display[7],它一种是采用了液晶控制透光度技术来实现色彩的显示器。和CRT显示器相比,LCD的优点是很明显的。由于通过控制是否透光来控制亮和暗,当色彩不变时,液晶也保持不变,这样就无须考虑刷新率的问题。
显示接口用来显示系统的状态,命令或采集的电压数据。本系统显示部分用的是LCD液晶模块,采用一个16×2的字符型液晶显示模块。
LCD1602液晶模块采用HD44780控制器,hd44780具有简单而功能较强的指令集,可以实现字符移动,闪烁等功能,LM016L与单片机MCU通讯可采用8位或4位并行传输两种方式,hd44780控制器由两个8位寄存器,指令寄存器(IR)和数据寄存器(DR)忙标志(BF),显示数RAM(DDRAM),字符发生器ROMA(CGOROM)字符发生器RAM(CGRAM),地址计数器RAM(AC)。IR用于寄存指令码,只能写入不能读出,DR用于寄存数据,数据由内部操作自动写入DDRAM和CGRAM,或者暂存从DDRAM和CGRAM读出的数据,BF为1时,液晶模块处于内部模式,不响应外部操作指令和接受数据,DDTAM用来存储显示的字符,能存储80个字符码,CGROM由8位字符码生成5*7点阵字符160中和5*10点阵字符32种.8位字符编码和字符的对应关系, CGRAM是为用户编写特殊字符留用的,它的容量仅64字节,可以自定义8个5*7点阵字符或者4个5*10点阵字符,AC可以存储DDRAM和CGRAM的地址,如果地址码随指令写入IR,则IR自动把地址码装入AC,同时选择DDRAM或CGRAM。LCD1602液晶模块的引脚图如图2-9所示:
图2-9 LCD1602引脚图
2.2.2 液晶与单片机的接口
查阅资料知LCD1602的接口信号说明如下表2-1所示:
表2-1 LCD1602的接口信号说明
因而可将STC89C52单片机的P0口作为数据传输口与LCD1602相连,将P1.2、P1.1、P1.0分别与LCD1602的RS、R/W、EN端口相连。液晶LCD1602与STC89C52单片机的接口连接图如下图2-10所示:
图2-10 LCD1602与STC89C52的接口
2.3 键盘模块
本按键模块使用的是多位独立按键,如下图2-11所示。按键一端接STC89C52单片机的IO口P1,另一端接地。由于单片机的IO口P1都有内部上拉,因此当按键没有按下的时候,IO检测到的电平为高电平,当按键按下的时候,相当于按键对应的IO口对地短路,因此这时候单片机检测到的电平为低电平。通过检测不同时刻的IO口的状态就可以判断按下的是哪个按键。4个按键分别代表以下功能:按键S1为功能按键,可以切换不同参数设置界面;按键S2为切换按键,若在波形设置功能下,通过该按键可以切换不同的波形,若在频率设置功能下,通过该按键可以确定对频率的哪个位(个位,十位,百位,千位)进行修改,在幅值和占空比设置功能下亦是如此;按键S3为增加按键,按键S4为减少按键,通过S3和S4可以对幅值、频率和方波的占空比按位进行设置。
图2-11 按键模块
2.4 外围芯片介绍
2.4.1 液晶与单片机的接口
DAC0832是8分辨率的D/A转换集成芯片[1],与微处理器完全兼容。这个DA芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。D/A转换器由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路构成,其结构如下图2-12所示。
图2-12 DAC0832结构图
其中:
* D0~D7:8位数据输入线,TTL电平,有效时间应大于90ns(否则锁存器的数据会出错);
* ILE:数据锁存允许控制信号输入线,高电平有效;
* CS:片选信号输入线(选通数据锁存器),低电平有效;
* WR1:数据锁存器写选通输入线,负脉冲(脉宽应大于500ns)有效。由ILE、CS、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变换,LE1的负跳变时将输入数据锁存;
* XFER:数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于500ns)有效;
* WR2:DAC寄存器选通输入线,负脉冲(脉宽应大于500ns)有效。由WR2、XFER的逻辑组合产生LE2,当LE2为高电平时,DAC寄存器的输出随寄存器的输入而变化,LE2的负跳变时将数据锁存器的内容打入DAC寄存器并开始D/A转换。
* IOUT1:电流输出端1,其值随DAC寄存器的内容线性变化;
* IOUT2:电流输出端2,其值与IOUT1值之和为一常数;
* Rfb:反馈信号输入线,改变Rfb端外接电阻值可调整转换满量程精度;
* Vcc:电源输入端,Vcc的范围为+5V~+15V;
* VREF:基准电压输入线,VREF的范围为-10V~+10V;
* AGND:模拟信号地;
* DGND:数字信号地。
根据对DAC0832的数据锁存器[1]和DAC寄存器的不同的控制方式,DAC0832有三种工作方式:直通方式、单缓冲方式和双缓冲方式[8]。
1、单缓冲方式:单缓冲方式是控制输入寄存器和DAC寄存器同时接收资料,或者只用输入寄存器而把DAC寄存器接成直通方式。此方式适用只有一路模拟量输出或几路模拟量异步输出的情形。其连接方式如下图2-13所示。
图2-13 单缓冲方式连接图
2、双缓冲方式:双缓冲方式是先使输入寄存器接收资料,再控制输入寄存器的输出资料到DAC寄存器,即分两次锁存输入资料。此方式适用于多个D/A转换同步输出的情节。其连接方式如下图2-14所示。
图2-14 双缓冲方式连接图
3、直通方式:直通方式是资料不经两级锁存器锁存,即 CS*,XFER* ,WR1* ,WR2* 均接地,ILE接高电平。此方式适用于连续反馈控制线路和不带微机的控制系统,不过在使用时,必须通过另加I/O接口与CPU连接,以匹配CPU与D/A转换。其连接方式如下图2-15所示。
图2-15 直通方式连接图
DAC0832是采样频率为八位的D/A转换芯片[1],集成电路内有两级输入寄存器,使DAC0832芯片具备双缓冲、单缓冲和直通三种输入方式,以便适于各种电路的需要(如要求多路D/A异步输入、同步转换等)。D/A转换结果采用电流形式输出。若需要相应的模拟电压信号,可通过一个高输入阻抗的线性运算放大器实现。运放的反馈电阻可通过RFB端引用片内固有电阻,也可外接。DAC0832的输出方式分为两种:单极性输出和双极性输出。这两种输出方式下输出电压值与输入数字量之间的关系如下:
单极性输出[1]:
图2-16 单极性电压输出电路
如图2-16所示, 由运算放大器进行电流→电压转换,使用内部反馈电阻。输出电压值VOUT和输入数字量D的关系为:
VOUT =-VREF ×D/256;
D = 0~255,VOUT = 0~-VREF ×255/256;
VREF =-5V,VOUT =0~5×(255/256)V;
VREF = +5V,VOUT = 0~-5×(255/256)V。
双极性输出[1]:
如果实际应用系统中要求输出模拟电压为双极性,则需要用转换电路实现。如图2-17所示。
图2-17 双极性电压输出电路
其中:R2=R3=2R1;
VOUT= 2×VREF×D/256-VREF= (2D/256-1)VREF;
D = 0,VOUT=-VREF;
D = 128,VOUT= 0;
D = 255,VOUT= (2×255/256-1)×VREF= (254/255)VREF。
即:输入数字为0~255时,输出电压在-VREF ~+ VREF之间变化。
2.4.2 芯片TL431简介
TL431[6]是可控精密稳压源。它的输出电压用两个电阻就可以任意的设置到从Verf(2.5V)到36V范围内的任何值。该器件的典型动态阻抗为0.2Ω,在很多应用中用它代替稳压二极管[6],例如,数字电压表,运放电路,可调压电源,开关电源等。
TL431是由德州仪器生产,所谓TL431就是一个有良好的热稳定性能的三端可调分流基准源。它的输出电压用两个电阻就可以任意地设置到从Vref(2.5V)到36V范围内的任何值。该器件的典型动态阻抗为0.2Ω,在很多应用中可以用它代替齐纳二极管[6],例如,数字电压表,运放电路、可调压电源,开关电源等。
TL431可等效为一只稳压二极管,其基本连接方法如下图所示。下图2-18可作2.5V基准源,下图2-19可作可调基准源,电阻R2和R3与输出电压的关系为U0=(1+R2/R3)*2.5V
图2-18 2.5V基准源
图2-19 可调基准源
具体工作原理:当输入电压增大,输出电压增大导致了输出采样增大,这时内部电路通过调整使得流过自身的电流增大,这也就使得流过限流电阻的电流增大,这样限流电阻的压降增大,而输出电压等于输入电压减限流电阻压降,输入电压增大与限流电阻压降增大使得输出电压减小 ,实现稳压。
2.4.3 芯片LM324简介
LM324是单电源四路运算放大器[1],其管脚图见图2-20。具有真正的差分输入。在单电源应用中,它们与标准运算放大器类型相比具有几个明显的优势。该四路放大器可以工作于低至3.0 V或高达32 V的电源电压,静态电流是MC1741的五分之一左右(每个放大器)。共模输入范围包括负电源,因此在众多应用中无需外部偏置元器件。输出电压范围也包括负电源电压。
应用领域包括传感器放大器,直流增益模块和所有传统的运算放大器可以更容易地在单电源系统中实现的电路。例如,可直接操作的LM324系列,这是用来在数字系统中,轻松地将提供所需的接口电路,而无需额外的±15V电源标准的5V电源电压。
图2-20 LM324管脚图
2.5 系统整体设计概述
函数信号发生器的设计总体框图如图2-21所示,主要有单片机STC89C52,电源,键盘模块,LCD1602显示模块构成。
键盘控制模块:通过独立按键来实现波形切换及频率、幅值、和方波占空比的调节;
显示模块:用LCD1602分行显示波形、频率、波形幅值,方波占空比等参数;
电源模块:电源模块由USB供电模块提供+5V电源为单片机和DAC0832供电,由直流电源提供12V的电压为运放LM324供电,从而维持系统正常工作。
图2-21 系统总体框图
第3章 信号发生器各部分功能设计
3.1 正弦波、三角波和锯齿波频率可调的实现
3.1.1 频率可调的硬件设计
为了实现频率的精确可调,可采用如下图3-1所示的硬件电路:
图3-1 频率可调硬件电路
左侧的TL431是可控精密稳压源。它的输出电压用两个电阻就可以任意的设置到从Verf(2.5V)到36V范围内的任何值。本电路采用其典型接法,如图2-18所示:
可以将输出电压稳定为2.5V,从而控制DAC0832的参考电压Uref为2.5V,这样的话DAC0832的输出经过如图3-1所示的一级运放可以输出峰-峰值为2.5V的信号。而DAC0832的数据端口与单片机的P3口相接,倘若在单片机内部通过程序改变波形及其频率,并将代表波形及波形频率的数据通过P3口输入DAC0832,这样的话DAC0832后面的第一个运放的8脚输出的便是峰-峰值为2.5V且波形和频率可控的波(波在y轴负方向),此波再经过二级运放反向放大两倍后14脚输出峰-峰值为5V且波形和频率可控的波(波在y轴正方向)。
3.1.2 频率可调的软件设计
首先,为了减少两次输出之间由于for循环指令在时间控制上的干扰,可将三角波,锯齿波和正弦波做成了码表[9],直接调用码表中的相关数据从而产生相应的波;
其次,为了实现频率的一定范围可调,可采用了如下方法:用定时器进行中断控制,每隔固定的154us时间进入中断服务子程序一次,根据频率的设定值在码表中选择需要输出的码。比如:当所需要的锯齿波的频率为100Hz时,在锯齿波的256个码中以一定的算法选出65个代表用来表示此波形,以154us的间隔相继输出这些码;当所需要的锯齿波的频率为50Hz时,在锯齿波的256个码中以相同的算法选出130个代表用来表示此波形,以154us的间隔相继输出这些码。这样的话,虽然时间间隔没有发生改变,但是通过采样输出[10]的方式达到了输出信号频率随设定值变化而变化的目的。
具体算法如下:
由于本单片机采用的是12MHz晶振[11],机器周期为1us,若直接计算频率误差较大,为了减小计算误差,先假设晶振频率为120MHz,这样的话单片机的机器周期则为0.1us。
首先,设:
1、fword:频率控制字;
2、count:初始值为0中间变量,对其右移8位后得到的值为采样点在码表中对应的地方;
3、count=fword+count; (3-1)
4、fword=K*f;(f为设定的频率,K为频率系数)
以1000Hz为参考,让120MHz的单片机在此频率下输出65个采样点,其他频率的波形以此为参照进行输出。现在需要确定的量为计数初值和频率控制系数K。
单片机每过t时间进入中断一次,则有:,从而得t=15.4us,则定时器在模式二下初值为TH1=TH2=0x66;
而右移8位相当于除以256,故有:,可得频率系数K=1.009,则频率f下的采样次数计算公式为,带入频率f可以得到采样次数。
120MHz晶振下,以1000Hz为例说明具体的采样点。由公式(3-1)可得如采样表:
表3-1 1000Hz频率下采样点
由于以上过程均在120MHz的晶振频率下进行计算得来的,故转换为本单片机12MHz的晶振时,实际输出的波形频率为设定值的1/10,因此还需在程序内部做一定的处理,具体做法为:当设定的频率为100Hz时,需要先对其扩大10倍变为1000Hz后再经由上述的算法计算得到相应的采样点,即freqtemp=10*f。具体程序流程图如下图3-2所示,
图3-2 频率控制程序流程图