表22.1 垂直灵敏度和K1~K5的对应关系
1. 垂直输入电路
垂直输入电路由双运算放大器LM6172和衰减电路等部分组成。对其有两个基本的要求:一是对放大倍数的控制,二是要有满足设计要求的足够的带宽。
示波器输入信号电压的动态范围很大,为了将输入信号电压调节到A/D转换电路的最佳采样范围,以便得到最合理的显示波形,在信号电压较小时要进行放大,在信号过大时要进行衰减。
示波器输入信号的频率范围也很宽,为了使垂直输入电路有较平坦的频率特性曲线,即对不同频率的信号放大电路的增益基本保持一致。为此选用了高速双运放LM6172,其带宽为100MHz,并在衰减电路中加了频率补偿电容。
电阻R1、R2、R3和继电器K1、K2、K3等组成衰减电路,衰减系数分3挡:1:1、1:10、1:100,由K1、K2、K3控制。第一级运算放大器接成电压跟随器的模式,主要起到缓冲的作用,提高输入阻抗,降低输出阻抗。第二级运算放大器接成电压串联负反馈电路的模式,其中电阻R6、R7、R8和继电器K4、K5等组成3挡增益调节电路,放大器的增益由K4、K5控制。当触点K4闭合时增益为(R6 R9)/R6;当触点K4开启、K5闭合时增益为(R6 R7 R9)/(R6 R7);当触点K4、K5均开启时增益为(R6 R7 R8 R9)/(R6 R7 R8)。按电路图中各电阻的取值,对应本级3挡的增益分别为25、12.5、5。
继电器K1~K5工作状态受单片机控制,所以垂直输入电路是一个程控放大器。垂直灵敏度和K1~K5工作状态的对应关系见表22.1(1表示闭合,0表示断开)。
2. A/D 转换电路
我们知道,A/D转换电路的作用就是将模拟信号数字化。一般把实现连续信号到离散信号的过程叫采样。连续信号经过采样和量化后才能被单片机处理。通过测量等时间间隔波形的电压幅值,并把该电压值转化为用二进制代码表示的数字信息,这就是数字示波器的采样,采样的工作过程见图22.5。采样的时间间隔越小,重建出来的波形就越接近原始信号。采样率就是每秒采样的次数,例如,示波器的采样率是10MSa/s,即每秒采样10M次,则表示每 0.1μs进行一次采样。采样率是数字示波器最重要的一项指标。
根据Nyquist采样定理,当对一个最高频率为f的模拟信号进行采样时,采样率必须大于f的两倍以上才能确保从采样值完全重构原来的信号。对于正弦波,每个周期至少需要两次以上的采样才能保证根据采样数据恢复原始波形。在数字示波器中,为了减小显示波形的失真,采样率至少要取被测信号频率的5~8倍。本文介绍的数字示波器采样率取被测信号频率的5倍,因为最高采样率为20MSa/s,所以当被测信号的带宽在4MHz以内时有比较好的测量结果。
采样率的提高受制于A/D转换芯片的工作速度,本文电路中使用的单片机ATmega16内部虽然也有A/D转换器,但其工作频率太低,不能满足数字示波器的采样要求。因此我们用了一片高速A/D转换芯片ADS830E,其最高采样率可达60MSa/s。ADS830E的转换精度为8位二进制数,即垂直分辨率为256,因为选用的LCM的分辨率为320×240,对应垂直分辨率为240,所以ADS830E完全能满足分辨率的使用要求。
ADS830E的IN(17脚)是供采样的模拟信号的输入端,CLK(10脚)是采样时钟信号输入端。每输入一个时钟脉冲就进行一次A/D转换,转换后的8位二进制数据由D0~D7输出。ADS830E的输入电压幅度可以通过11脚进行控制,当11脚接高电平时,ADS830E的输入电压范围是1.5~3.5V;当11脚接低电平时,输入电压范围是2~3V。这里选用1.5~3.5V的输入电压范围,中点电压为2.5V,中点电压由电位器RP进行调节。当IN输入电压为1.5V时,D0~D7输出的转换数据是0x00,当IN输入电压为3.5V时,D0~D7输出的转换数据是0xff,即255。
图22.5 采样的工作过程
3. 数字信号处理与控制电路
数字信号处理与控制电路由单片机ATmega16、FIFO(先进先出)存储器IDT7205、4个2输入与非门74HC00等组成。
单片机ATmega16在电路中的主要作用是:(1)对A/D转换后的数字信号进行处理,转换成LCM能接受的数据格式,输出给它显示;(2)产生ADS830E、IDT7205工作所需要的时钟脉冲信号;(3)通过按键对示波器参数进行控制调节,输出继电器的控制信号。
图22.6 倍频电路及各点的脉冲
FIFO存储器IDT7205是一个双端口的存储缓冲芯片,具有控制端、标志端、扩展端和8192×9的内部RAM阵列,12ns的高速存取时间。内部读、写指针在先进先出的基础上可进行数据的自动写入和读出。当有数据输入到数据输入端口D0~D8时,可由控制端Wclk来控制数据的写入。为了防止数据的写溢出,可用标志端满FF、半满HF来标明数据的写入情况,写入时由内部写指针安排其写入的位置。由于内部RAM阵列的特殊设计,先存入的数据将被先读出。如果需要数据外读,则可由控制端Rclk来控制数据的读出。RST为复位端。Wclk、Rclk、RST均由单片机ATmega16提供控制脉冲。数据输出端口Q0~Q8是三态的,在无读信号时呈高阻态。输入数据位D0~D8和输出数据位Q0~Q8均为9位,这里输入和输出均只使用了8位,即只使用了D0~D7和Q0~Q7。
读到这里,有的读者可能会问:把ADS830E输出端口D0~D7输出的数据直接输入ATmega16的PA端口不就行了吗,为什么还要在中间加上一个IDT7205?这是因为ADS830E工作速度比ATmega16快得多,即ATmega16读取数据的速度比ADS830E输出数据的速度慢,如果直接相连ATmega16就拖了ADS830E的后腿。加上IDT7205后就起到了缓冲的作用,ADS830E转换的结果先存在IDT7205内,等到ATmega16需要时,再从IDT7205中读出来。
ADS830E的采样时钟与IDT7205的写信号时钟是同一个时钟源,以确保两者同步。时钟脉冲信号由ATmega16使用内部定时器产生,由于ATmega16外接晶体的频率为20MHz,所以产生的时钟信号最高频率只能达到10MHz,为了使采样率达到20MSa/s,使用了74HC00等构成的倍频电路。若ATmega16 PD7端输出的脉冲信号频率为f,则74HC00的F4输出的脉冲信号频率为2f,倍频电路的工作过程和各点脉冲信号时序关系如图22.6所示。
K1~K5是干簧继电器,干簧继电器特点是吸合和释放时噪声很小,功耗低。因其吸合电流较小,所以可直接用ATmega16的输出端口驱动。
SB1~SB5是示波器调节按钮。SB1、SB2是水平扫描速度调节按钮,按SB1时μs/div的值增加(水平扫描速度减小),按SB2时μs/div的值减小(水平扫描速度增加);SB3、SB4是垂直灵敏度调节按钮,按SB3时V/div的值增加(垂直灵敏度减小),按SB4时V/div的值减小(垂直灵敏度增加);SB5是波形保持(HOLD)按钮,按一下测量波形被冻结保持,同时在显示屏上显示字符“HOLD”,再按一下又恢复到正常测试状态。所有调节参数均显示在液晶屏上,调节好的参数将自动保存到ATmega16的EEPROM中,下次开机时有关参数将预设在上次关机前的设定值上。
4. 显示电路
LCM采用2.4英寸TFT彩色液晶屏,分辨率为320像素×240像素,驱动控制芯片为ILI9325,该芯片传递数据8/16接口位兼容,使用8位接口时能够节省单片机的输出端口,在8位接口工作状态时16位数据分两次传递,速度稍慢。数据端口D0~D15中的高8位D8~D15为8位接口使用的端口。8/16接口位的选择由端口IM0控制,IM0接高电平时为8位接口工作状态,IM0接低电平时为16位接口工作状态。
电路中ILI9325的工作电压是3V,ATmega16的工作电压是5V,两者高电平不一致,通信端口相连时要进行电平转换,因为这里只需要ATmega16向ILI9325单向传递数据,所以只需要将5V向3V电平转换,不需要将3V电平向5V电平转换,就不必使用专用的电平转换芯片,只要用电阻分压电路将5V高电平转换成3V高电平就行了。电路中R14~R35组成电阻分压电路,连接端口有8个数据端口和3个控制端口。
5. 电源电路
这个数字示波器使用了交流电源,提供 5V、−5V、 3V三种直流电压。
程序设计设计好电路只是为数字示波器奠定基础,更重要的是单片机程序的设计。实际上在设计硬件时既要考虑到功能,也要考虑到程序设计的需要。比如对单片机的选型,主要考虑功能、工作速度、端口的数量、程序存储器Flash的容量、RAM的容量、有没有EEPROM等。综合考虑后选用AVR单片机ATmega16,它的程序存储器Flash为16KB,RAM为1KB,使用时将16MHz的时钟频率超频到20MHz,经过对其资源合理分配,完全可以满足设计要求。
程序的开发环境为ICC-AVR V6.31A,使用 C语言编写。程序采用了分时控制、顺序调度的工作方式,没有使用任何中断程序,程序流程图如图22.7所示。
图22.7 程序流程图
下面对主要部分进行分别介绍。
1. 垂直灵敏度控制
按钮SB3、SB4用来调节垂直灵敏度,按动后通过键盘扫描程序可以增加或减小程序中变量Key_ver的值,Key_ver取值范围为1~9,分别对应9挡垂直灵敏度,通过Key_ver的取值控制继电器K1~K5的工作状态,从而得到相应的灵敏度。
以K1为例,K1接ATmega16的PB0端口,有关宏定义为:
#define K1_ON PORTB &=~(1<
#define K1_OFF PORTB |= (1<
因此,K1_ON表示PB0输出低电平,K1闭合,触点接通;K1_OFF表示PB0输出高电平,K1释放,触点断开。
2. 水平扫描速度控制
水平扫描速度控制是通过改变A/D转换电路的采样率来实现的,按动SB1、SB2可以改变程序中变量Key_hor的值,Key_hor取值范围为1~12,分别对应12挡水平扫描速度。
A/D转换电路所需的采样时钟脉冲用ATmega16的8位定时器/计数器2-T/C2产生,选择CTC工作模式。其工作参数主要由控制寄存器TCCR2、计数寄存器TCNT2、输出比较寄存器OCR2决定。TCCR2中的位CS22、CS21、CS20的取值确定T/C2的时钟源的分频系数,OCR2中的数据用于同TCNT2中的计数值进行连续的匹配比较,一旦TCNT2计数值与OCR2的数据相等,单片机端口OC2的输出电平即取反,这样即可输出脉冲信号。脉冲信号的频率f由时钟源的分频系数和OCR2的预置值决定,计算公式为f=时钟源频率/(2×(1 OCR2)),OC2输出的脉冲信号经倍频后作为采样时钟信号,相关参数之间的关系见表22.2。
只要对寄存器TCCR2、OCR2的值进行设置,就可以获得我们所需频率的采样时钟信号。
3. 数据的存储和读取
ADS830E的采样数据存入IDT7205后达到一定数量就停止采样,再将IDT7205存储的数据读入ATmega16,程序中用一个数组RAM[650]来存储读取的数据,存储容量为650,即一次读取650个采样数据。
仔细看了电路图的读者可能会发现,IDT7205的满FF端口并没有使用,为什么不用呢?这是因为ATmega16的RAM容量只有1KB,只能分配约650个存储单元用来存储从IDT7205读取的数据,IDT7205存多了数据也没有用,ATmega16不能全部存储,多余的数据就丢弃了,还不如少读点数据节省时间,提高显示波形的刷新频率。这在采样时钟频率较低时效果尤为明显,因为采样时钟频率越低,采集一个数据所花的时间越长。以采样时钟频率5kHz为例,如果要将IDT7205存满8192个数据,所需要的时间为8192/5000≈1.6s, 显示波形1.6s以上才能刷新一次,这显然是不行的。如果存满700个就结束,则所需要的时间为700/5000=0.14s,刷新速度提高了很多。
从上面的分析可以看出,FIFO存储器其实使用IDT7202就够了,IDT7202有1024个存储单元。不过笔者只买到了DIP封装的IDT7205,虽然有点大材小用,但为以后数字示波器升级提供了空间。FIFO存储器存储数据的容量称为数字示波器的存储深度,也称记录长度,存储深度也是数字示波器的一个重要技术指标,适当存储深度便于对显示波形进行分析和处理。
不使用FF端口是如何控制IDT7205存储数量的呢?我在IDT7205存储数据时根据不同的采样时钟频率设置了不同的延时时间,在此时间内能存入多于700个数据即可。延时结束后即将IDT7205的存储数据读入ATmega16。