通过我的“蛊惑”,想必大家都想自制一台示波器玩玩,那就继续跟着我走吧!所有的电子设备都离不开硬件,首先让我来对它的硬件结构进行一下简述:
总体电路如系统框图所示(图 1),前面已讲过,为了提高性能本电路采用“双核”结构,两片 AVR 单片机协同工作,MCU1 用于控制和频率测量,MCU2 用于数据处理和显示 控制,两片单片机采用 SPI 总线通信。
信号从探头输入,进入程控放大(衰减)电路进行放大(衰减),再对被放大(衰减)的信号进行电平调整后送入高速 AD 转换器对信号进行采样,采样所得的数据存入 FIFO存储器中,当 FIFO 存满后通知 MCU2,MCU2 从 FIFO 存储器中读出数据进行处理,将波形显示在 LCD 模块上。时钟电路为高速AD 转换器和 FIFO 存储器提供从 600Hz~60MHz 的8 种不同的频率信号作为不同水平扫速时的采样时钟频率。从程控放大器输出的信号一路送入 AD 转换器,另一路送入整形电路对输入信号进行整形,作为测频率的待测信号送入MCU1 的 16 位计数器外部触发引脚 T1(PD5),进行频率测量,程控放大器的放大(衰减)倍数和时钟电路的输出频率均由 MCU1 控制。MCU1 将被测信号的频率、程控放大器的放大倍数和时钟电路的输出频率等数据通过 SPI 总线发送给 MCU2,MCU2 以这些数据作为频率、水平扫速、灵敏度和峰峰值计算、显示的依据。
下面就各个模块电路做以简单介绍。
1.程控放大电路和电源电路:
将程控放大电路与电源电路放在一块讲,是因为他们不仅有着密切的联系,而且还是做在一块电路板上的。
程控放大器的作用是对输入信号进行衰减或放大调整,使输出信号电压在 AD 转换器输入电压要求范围内,达到最好的测量与观察效果,所以程控放大器电路在规定带宽内的增益 一定要平坦,故对运算放大器的要求比较高,在本电路中我选用的是 NSC 公司生产的高速运算放大器 LM6172 双运放,带宽为 100MHz,转换速率 3000v/μs,每通道消耗电流 2.3mA,输出电流可达 50mA,完全满足本电路的要求,选择该芯片的另一个原因是价格,邮购价格为 8 元一片,相比 ADI,MAX 等公司几十元一片的高速运放芯片来说算是很廉价了,电源采用正负双电源供电,由于整个电路总的电源输入为单 8v,所以专门用一片 dc/dc 电路MC34063 为其构成了负压转换器再经稳压得到-5v 电压,+5v 通过对输入电压稳压得到。
程控放大器电路如图 1 所示,被测信号从 BNC 插孔输入,S0 继电器决定输入耦合方式,S0 吸合为直流偶和方式,S0 断开为交流耦合方式。信号通过交直流耦合选择开关后被送入由 R3~R5 和 C2~C4 组成的 X0.5/ X0.05 的衰减电路,衰减倍数由 S1 控制,当 S1 未吸合时接在“0”端,对应的衰减被数为 ,当 S1 吸合时接在“1”端,对应的衰减被数为,
C2、C3 对高频信号进行补偿。经过衰减的信号进入由高速运算放大器 U1A 组成的缓冲器缓冲,然后被送入由 U1B 组成的 X-0.8/ X-2/ X-4 的反相放大电路,放大倍数由 S2 和 S3 控制,当 S2、S3 均未吸合时对应的放大倍数为,当 S2 吸合 S3 未吸合对应的放大倍数为,当 S3 吸合则不用考虑 S2 的情况,但为降低功耗使 S2 断开,此时对应的放大倍数为。输出信号又通过 S4 选择是否经U2A 组成的同相放大器放大,当 S4 未吸合,则不经过同相放大,当 S4 吸合,则信号被放大倍,最后信号被送入由 U2B 组成的放大倍数为-1 倍的反相放大器来消掉由第一级反相放大器所带来的负号,与此同时 U3A 送来的反相基线电压由 U2B 反相后作为 AD 转换器的输入中点电压被叠加在被测信号上被送入 AD 转换器,因为 ADS830E 的模拟输入电压范围是 1.5V~3.5V,输入中点电压为 2.5V,所以基线电压应为 2.5V。调节可变电位器 Rw1 将调整基线电压的值,从而调整基线的位置。程控放大电路的放大倍数以及垂直,电压灵敏度与 S1~S4 的关系见表 1:
“L”代表继电器未吸合,“H”代表继电器吸合,确定继电器的常闭触点和常开触点很重要,因为继电器的吸合需要消耗一定电流,我选用的继电器型号为 TO2-5V,吸合电流为15mA。在常用的 3 个灵敏度上(0.5V/div,0.2V/div,0.1V/div)最多只有一个继电器吸合,继电器的驱动由 ULN2003 担任。这种由运算放大器构成组合程控放大器的思想也可用于别的放大电路,平时多总结积累电路模型对提高电路设计能力非常有帮助,这个电路你记下了吗?
电源电路为整个示波器提供能源,作用非常重要!电路见图 2 所示。
该示波器电路中供电分为数字和模拟两部分。为避免相互干扰,所以将数字部分的供电与模拟部分的供电分开,分别用独立的稳压电路,并用电感与电容做成的滤波器隔离。数字部分需要单+5V 电源,由一片 LM7805 对 8V 电源电压稳压得到。模拟部分主要是程控放大器电路和 AD 转换器的模拟输入电路,程控放大器电路需要 ± 5V 双电源,AD 转换电路的模拟部分需要+5V 的单电源,+5V 电压由 LM317T 对 8V 电源电压稳压得到,而-5V 电压专门用一片 DC/DC 芯片 MC34063 将+8V 转换成约-8.3V,DC/DC 输出电压由 R30 和 R31 决定,,
输出的负电压由负压稳压芯片 LM337 稳压得到-5V,为避免 DC/DC 电路对其他电路产生干扰,在其输入和输出端分别串联 L4 和 L5 进行隔离,在选择元件时蓄能电感 L3 选择磁罐封装带屏蔽的电感,使干扰降到最低。
2. 高速 AD 转换与 FIFO 存储电路
数字示波器中最重要的电路是 AD 转换电路,它的作用是将被测信号采样并转换成数字信号存入存储器,说它是数字示波器的咽喉一点也不为过,因为它直接决定着数字示波器所能测量的最高频率,根据乃奎斯特定理,采样频率至少是被测信号最高频率的 2 倍才能复现出被测信号。而在数字示波器中采样频率至少应该是被测信号频率的 5~8 倍才行,否则根本观察不到信号的波形。在本电路中我选用的 AD 转换芯片为 BB 公司的 8 位高速 AD 转换器ADS830E,官方资料给出的采样频率为 10kSa/s~60MSa/s, 通过实验发现转换速率在 1K 以下工作也很正常,所以本示波器的最低采样频率为 600Sa/s,要说明的一点是高速 AD 转换器一般都有高低端转换速率的限制,比如 TLC5540,8 位 AD 转换器,转换速率为5MSa/s~40MSa/s,我试过当转换频率降到 2M 以下时就不能正常工作,所以选择 AD 转换芯片时不仅要注意最高转换速率还要关注最低转换速率,否则可能导致电路无法正常工作。有朋友也许会问 8 位转换精度会不会有点太低?其实 8 位转换器对于示波器来说是够用的,就拿这个电路来说,我选用的 LCD 显示模块的分辨率为 320*240,垂直分辨率为 240 格,而 8为转换精度的分辨率为 256 格,比显示器的分辨率还高,所以绝对够用。还有就是价格及电路的设计,在最高采样率相同的情况下 10 位 AD 转换芯片的价格是 8 位 AD 转换芯片的几倍,而且位数的增加也使电路的复杂程度大大增加,将直接影响处理速度,导致屏幕刷新过慢,反而影响性能。所以本着够用的原则本示波器选用 60M 的 8 位 AD 转换芯片 ADS830E。
引脚排列见图 6。
AD 转换与 FIFO 存储电路见原理图 3,由程控放大电路调整后的信号分成两路,一路进入 AD 转换电路进行采样,采样所得的数据由 74LVC574 锁存缓冲后送入 FIFO 存储器。FIFO 存储器是一种双口的 SRAM,(FIFO:frist in frist out,即先进先出存储器)这种存储器没有地址线,随着写入或读取信号对数据地址指针进行递加或递减,来实现寻址。在 AD转换器与 MCU2 之间加入 FIFO 的作用是起到高速数据缓冲的作用,因为 AD 转换器的最高工作频率为 60MHz 远高于 MCU2 的工作频率,所以让FIFO 与 AD 转换器同步工作存储 AD转换器的转换输出数据。FIFO 存储器有 3 个标志位引脚,分别为 FF(满标志):当存储器存满后置位该标志,此时存储器忽略一切写数据操作。HF(半满标志):当存储器存满一半后置位该标志。EF(空标志):当存储器被读空时置位该标志,此时存储器忽略一切读数据操作。FIFO 存储器结构图见图 4。本电路中只用了该芯片的 FF 标志与 MCU2 的 PB3 相接,当 FIFO 存储器存满后 FF 引脚被拉高,通知 MCU2 进行数据读取,这时 MCU2 禁止 AD 转换器与 FIFO 存储器的时钟,FIFO 的控制权交给 MCU2,(其实 MCU2 只是禁止了 FIFO 存储器的写时钟,见图 3,时钟信号通过 U8C 组成的缓冲器后直接加给了 ADS830E,所以MCU2 不能禁止 AD 转换时钟,只能通过由与门 U8A 组成的时钟控制开关禁止或使能 FIFO存储器的时钟信号。因为实验中发现 AD 转换在启动后的几个时钟周期内的采样不可靠,所以就让 AD 转换器一直工作,通过控制 FIFO 存储器来控制 AD 采样。在 AD 转换电路与 FIFO存储器中加入 74LVC574 的目的是所存数据提高数据通道的稳定性。)当 MCU2 读完数据并完成软件触发后使能 AD 转换器与 FIFO 存储器时钟,继续读取新的数据,同时 MCU2 对读取的数据进行处理、显示。
这儿再将高速数模转换器ADS830E的工作简单介绍一下,ADS830E的时序如图5 所示,由图可知每个时钟周期进行一次数模转换,所以采样速率就是时钟频率,故可以很方便的通 过控制采样时钟来控制采样频率,当前输出的采样数据是 4 个时钟周期以前采样电压的值,也就是说从采样到输出有 4 个时钟周期的延迟,这对我们所要做的电路并不重要,所以我们可以简单的理解为输入一个时钟脉冲转换一次,时钟的脉冲的下降沿输出数据就行,应用非常方便。还有一点就是 ADS830E 的输入电压幅度是可以编程控制的,11 脚(RSEL)为控制引脚,当 11 脚置高电平时,ADS830E 的输入电压范围是 1.5V~3.5V,即 2Vpp。当 11 脚 置低电平时,输入电压范围是 2V~3V,即 1Vpp。进行程控放大器设计时要考虑这个问题,本电路选用 2Vpp 的输入电压范围。
3. 时钟产生电路
时钟产生电路为 AD 转换器提供一系列的采样时钟信号,分别为 600Hz、6kHz、60kHz、600kHz、3MHz、6MHz、30MHz 和 60MHz,共 8 种,分别对应着不同的水平水平扫速,由 MCU1 控制,控制关系见表 2。
时钟产生电路见图 7,基准时钟信号由一块 60MHz 的温度补偿型有源晶体模块提供,输出的 60MHz 信号一路直接作为 60MHz 采样时钟送入多路选择器 74F151,另一路被送入由 74F74 触发器组成的 2 分频器分频,得到 30MHz 的信号分为两路,一路送入多路选择器 74F151,另一路送入由 2-5-10 分频器 74LS390 组成的 5 分频器进行分频,得到 6MHz 信号,再分为两路,一路继续分频,另一路送入多路选择器 74F151,后面几级分频与以上相同。对60MHz 信号进行第一次二分频没有用 74LS390 中的 2 分频器,而单独使用了一片 74F74,是因为 74LS390 中的二分频器的最高输入频率为 40MHz,所以在其前面用了一级独立的二分频器。8 种时钟信号都被送入多路选择器,MUC1 通过对 74F151 的 S0、S1、S2 三根选通信号线进行控制来选择所需的采样频率。
4. MCU2 单片机显示处理电路
MCU2 选用 ATMEL 公司的 AVR 单片机 Mega32-16AI,与 51 单片机相比 AVR 单片机具有更高的工作频率与更高效率的硬件结构,51 单片机的指令周期是将晶体振荡器的振荡频率进行 12 分频后得到的,又有累加器 Acc 在高速执行指令时的瓶颈因素,而 AVR 单片机则不同,它的指令周期就是晶体振荡器的振荡周期,有 32 个类似与累加器 Acc 的寄存器直接和运算器相连,取址周期短,又可预取指令实现流水作业,故可高速执行指令。Mega32-16AI 的 ROM 容量为 32KB,RAM 为 2KB,32 个输入输出口,官方给出的最高速度为 16MHz,但在实际使用中工作在 18~20MHz 也很稳定,所以用该单片机做显示处理非常合适。在本电路中为了提高 LCD 显示器的屏幕刷新速率所以使其工作在 18MHz,实际使用中电路工作十分正常。
MCU2 电路见图 8 所示。PD0~PD7 与 LCD 显示器 8 位并行数据端相连,PC1~PC5 与LCD 显示器的控制端相连用于驱动 LCD 显示器(LCD 显示器资料见光盘),PC0 用于控制LCD 背光,PC0=0 有背光,PC0=1 无背光。PB4、PB5 与 PB7 作为 SPI 通信端口与 MCU1相连进行两个单片机之间的通信。PA0~PA7 与 FIFO 存储器的数据输出端 Q1~Q8 相连接,PB0~PB3 分别与 FIFO 存储器的使能(FIFO_EN)控制端、复位(FIFO_RES)控制端、读数据(FIFO_R)控制端和满标志(FIFO_FF)位相接。上电时,MCU2 通过 FIFO_RES 端口对 FIFO 存储器进行复位,复位后存储器的读写指针都指向 0,允许写数据,MCU2 通过FIFO_EN 端使能 FIFO 存储器,开始将 AD 转换器输出的数据写入存储器,当 FIFO 存储器写满数据后 FIFO_FF 位被拉高通知 MCU2 读取采样数据,MCU2 禁止 FIFO 存储器写入数据,然后从 FIFO 存储器中读数据,当数据读完并完成软件触发后使能 FIFO 存储器继续存储采样数据,然后从读取的数据中测出波形的峰峰值后将数据转换成波型与参数显示在LCD 显示器上,峰峰值的测量是通过对一屏显示数据进行比较取出最大值与最小值与当前垂直电压灵敏度作为系数计算出来的。SPI 通信通过中断的方式实现,MCU1 每次给 MCU2发送频率、水平扫速、垂直电压灵敏度等数据一共为 9 个字节,每发送一个字节 MCU2 中断一次将接收到的数据存到一个数组中,直到 9 个字节全部发送完毕 MCU2 才对接收到的数据进行处理显示。这样可以使 MCU2 在平时都工作在数据的处理和显示上,提高了数据的处理速度。
5. MCU1 单片机控制与信号整形电路
MCU1 同 MCU2 一样也选用 AVR 单片机,型号为 Mega8-16,工作频率为 16MHz,在电路中负责控制程控放大器和时钟发生电路并负责测量被测信号频率,将各种参数通过 SPI总线发送给 MCU2。
MCU1 电路见图 9, PC2~PC5 共 4 个 IO 口接 4 个轻触开关 S1~S4,S1、S2 是两个复用键,用于控制水平扫速与垂直电压灵敏度,功能通过 S4 切换,当前功能状态显示在显示器上,如果当前的控制功能为控制水平扫速则在显示器的右下边反显示“T”, 如果当前的控制功能为控制垂直电压灵敏度则在显示器的右下边反显示“V”,见照片。S3 是触发控制,当前状态显示在控制状态左边,箭头上升则自动触发,箭头向下则不触发。长按 S3 选择交直流偶和方式。该示波器现在只能实现基本功能,其他更多功能有待于广大爱好者共同努力。S0、S1、S2、S3、S4 共 5 个端口分别连接 PB4、PB0、PB1、PC0、PC1 用于垂直电压灵敏度控制,控制数据见“程控放大电路”中的表 1。PB2、PB3、PB5 作为 SPI 总线接口与 MCU2通信,为了防止下载程序时两芯片 SPI 口冲突所以在两单片机之间的 SPI 总线上串联 3 只1K 的电阻,实验证明此法非常有效,电路工作稳定。PD0~PD2 共 3 个 IO 口用于时钟控制,控制数据见“时钟产生电路”中的表 2。频率的测量使用了 16 位计数器,外部下降沿出发。程控放大器输出的信号送给由场效应管 Q1 和高频三级管 Q2 组成的高输入阻抗整形电路整形后再由 U17 触发器 74F74 进行 4 分频然后送入 MCU1 的 T1(PD5)脚进行计数测频,在低水平扫速时(5ms/div 和 50ms/div)为了保证测频精度侧频周期为 1s,在高水平扫速时(小于 5ms/div)测频周期为 0.25s。测频的原理是通过记录 1s 或 0.25s 内计数器记录的脉冲数来换算频率,测频定时由中断完成,每测完一次频率就向 MCU2 通过 SPI 总线发送一次数据,所以在高水平扫速时每秒向 MCU2 发送 4 次数据,而在低水平扫速时每秒向 MCU2 发送1次数据,能较好的保证参数显示的实时性。