资讯中心

从零DIY CRT示波器:用Arduino与LM317重塑模拟电子核心原理

📅 2026/8/19 4:31:47
从零DIY CRT示波器:用Arduino与LM317重塑模拟电子核心原理
1. 项目概述为什么我们要亲手做一台CRT示波器在数字示波器一统天下的今天提起“阴极射线管”示波器很多年轻工程师的第一反应可能是博物馆里的老古董。但当我决定动手DIY一台最简单的CRT示波器时我身边的几个老伙计眼睛都亮了。这不仅仅是为了怀旧更是一次对模拟电子技术根基的深度触摸。你想想现在你用的任何一块数字芯片其内部信号的验证、电源纹波的观察其基础原理都离不开模拟信号的采集与显示。而CRT示波器正是理解“电压如何变成屏幕上一条会动的线”最直观、最本质的教具。这个项目的核心目标非常明确用最少的元件、最低的成本搭建一个能显示波形的基础框架。它可能没有你实验室里那台带宽1GHz的示波器精准但它能让你彻底明白X轴扫描、Y轴偏转、Z轴辉度这些概念到底是怎么通过电路实现的。你会发现热搜词里的LM317不只是个稳压芯片在这里它可能是整个高压电源的“心脏”而Arduino也不仅仅是创客玩具它可以成为精准的时基信号发生器。当你亲手调出第一条扫描线看到第一个正弦波在略显昏黄的荧光屏上跳动时那种透过现象直达本质的成就感是操作任何现成设备都无法比拟的。这个项目适合所有对电子技术抱有好奇心的人无论是想夯实基础的学生还是想找回初心的老工程师都能从中获得纯粹的乐趣。2. 核心电路设计与思路拆解2.1 系统架构总览从信号到光点的旅程一台最简CRT示波器其核心任务是把一个随时间变化的电压信号转换成屏幕上一条二维的轨迹。这个过程可以分解为三个相互独立又紧密协作的子系统我把它称为“信号三部曲”。首先是Y轴放大器这是信号的“入口”。它的职责是将外部输入比如一个几伏的正弦波进行放大并转换成足以驱动CRT偏转板的电压。CRT的偏转灵敏度通常在几十伏每厘米这意味着要把1V的信号在屏幕上产生1cm的偏转就需要放大器提供几十倍的增益。这里的关键是带宽和线性度。一个设计不良的放大器会导致高频信号严重衰减或者波形失真。在简化设计中我们常使用高速运算放大器来构建但需要精心设计反馈网络和供电。其次是X轴时基电路这是示波器的“计时员”。它的核心是产生一个与时间严格成正比的锯齿波电压。想象一下你拿着一支笔在纸上从左向右匀速画线笔的横向移动就是由这个锯齿波控制的。当锯齿波电压从最低点线性上升到最高点时电子束就从屏幕最左端扫描到最右端然后迅速回扫对应锯齿波的快速下降沿开始下一次扫描。这个扫描频率必须稳定且可调才能“抓住”不同频率的信号。在纯模拟方案中这通常由恒流源对电容充电的电路实现而在我们的混合方案中可以用Arduino的DAC或PWM滤波来生成高线性度的锯齿波。最后是CRT驱动与高压电源这是整个系统的“能量心脏”和“执行末端”。CRT本身是一个高阻抗、高电压器件。阴极需要负高压如-1000V至-2000V来加速电子阳极有正高压偏转板则需要中等电压几十至几百伏来偏转电子束。此外还有灯丝电压、聚焦电压、辉度控制电压等。因此一个稳定、洁净且可调的高压电源是CRT正常工作的绝对前提。这正是LM317这类线性稳压器大显身手的地方通过搭配变压器和倍压整流电路我们可以从低压交流电中“变”出所需的各种高压。2.2 方案选型模拟的纯粹与数字的精准之权衡在动手前我们需要在“全模拟”和“数模混合”两条路径中做出选择这直接决定了项目的复杂度和最终效果。纯模拟方案的魅力在于其自包含性和理论上的无限带宽。整个信号通路从输入到显示完全由晶体管、运放、阻容元件构成。时基电路使用经典的恒流源充电如用晶体管或运放构成配合施密特触发器来产生锯齿波。这种方案的优点是电路行为完全可预测调试过程就是对模拟电子理论的一次彻底实践。但它的挑战也很大扫描线性度的校准非常依赖元件的精度和温度稳定性触发电路让扫描与信号同步的设计尤为复杂需要用到比较器、微分电路等对新手极不友好。数模混合方案则引入了像Arduino这样的微控制器作为“智能核心”。在这个架构下Arduino可以承担多项关键任务第一作为可编程的精密信号源通过其内置的定时器和PWM输出经低通滤波后生成线性度极佳的锯齿波扫描频率可以通过代码精确设定和调整。第二可以实现简单的数字触发通过ADC读取输入信号的峰值在代码中判断触发条件从而稳定波形。第三甚至可以扩展出简单的测量功能比如频率、峰峰值读数并通过串口或小屏幕显示。这个方案的优点是大大简化了模拟电路的复杂度将许多棘手的时序和逻辑问题转化为相对容易的编程问题可玩性和扩展性更强。对于大多数DIYer尤其是熟悉编程的爱好者我强烈推荐从混合方案入手。我最终选择了混合方案。核心考虑是我们的首要目标是“成功点亮并看到波形”而不是复刻一台工业级仪器。Arduino的引入能让我们绕过模拟触发电路这个最大的“拦路虎”快速进入正反馈循环先获得成就感再逐步深入优化模拟前端。2.3 核心器件选型解析CRT、高压与放大CRT管的选择是整个项目的起点也是最大的不确定因素。你不可能去市场上买一个新的示波器CRT我们的来源通常是废旧设备拆机。老式示波器、雷达显示器、甚至一些古老的视频终端都是潜在的“器官捐献者”。选择时要重点关注几个参数屏幕尺寸3到5英寸比较适合桌面DIY、偏转方式静电偏转还是电磁偏转静电偏转电压高但电路相对简单电磁偏转需要驱动线圈我们通常选静电式、管脚定义和所需的各极电压。务必在拆解前尽可能查找该型号的Datasheet或维修手册。如果没有就需要通过测量和实验来“反推”用万用表测量灯丝电阻通常几欧姆给灯丝加上额定电压常见6.3V或12V然后用可调高压电源缓慢施加阳极电压观察屏幕是否有光点出现。这是一个高风险步骤必须极其小心高压电击高压电源生成是安全与稳定的核心。我们的目标是产生两组主要高压一是CRT阳极所需的正高压1kV至2kV二是阴极所需的负高压-1kV至-2kV。直接使用220V市电通过变压器升压再整流滤波是最危险的绝不推荐。一个相对安全的方案是使用一个现成的12V转220V的车载逆变器模块作为初级振荡源然后接一个小功率的高压包例如从旧电视机或显示器上拆下的进行升压。高压包输出的是高频高压交流电经过倍压整流电路通常用高压二极管和高压瓷片电容搭建后得到我们所需的直流高压。这里就轮到LM317登场了。它主要不是用来直接产生高压而是为高压生成电路提供精准、稳定的低压供电并实现电压调节。例如我们可以用LM317搭建一个可调的12V-24V直流稳压电源为逆变器模块供电。通过调节LM317的输出电压就能间接地、线性地控制逆变器输出的交流电压幅度从而最终实现对CRT阳极高压的精细调节。同理也可以用另一片LM317为聚焦极、辉度控制等需要中压几百伏的电路提供可调的基准电压。LM317的稳定性和可调性使得我们能够安全、可控地“唤醒”CRT。Y轴放大器的选型决定了示波器的带宽和保真度。对于入门级DIY带宽目标可以定在100kHz-1MHz。高速电压反馈型运放是不错的选择例如经典的AD811、LM6171等。它们需要±12V或±15V的双电源供电。设计时增益不宜设置过高例如20-50倍重点要设计好输入衰减网络如1:1 10:1的可切换衰减并加入直流偏移调节电路以便将波形上下移动。放大器的输出级要能提供足够的电流以快速驱动CRT偏转板本质是一个电容负载因此可能需要一个简单的晶体管射极跟随器作为缓冲。3. 核心模块电路详解与搭建3.1 高压电源模块安全第一稳字当头高压部分是整个项目中最需要敬畏心的环节。我设计的核心思路是“低压控制高压模块化隔离搭建”。电路拓扑我采用了一个推挽式自激振荡电路作为起点由两个TIP41C功率三极管、一个铁氧体磁芯变压器和少量电阻电容构成。这个电路可以将12V直流电转换为高频约20-50kHz交流电。之所以选择自激振荡而非专用IC驱动是因为它简单可靠元件易得。这个振荡器的12V供电正是由一片LM317提供的可调稳压电源输入来自一个15V的直流适配器。通过旋转LM317调整端的电位器我可以在8V到14V之间平滑地改变供电电压从而控制振荡强度。振荡器输出的高频交流电被送入一个黑白电视机行输出变压器高压包的初级。高压包的次级会输出数千伏的高频高压交流电。这里必须使用专门的高压硅堆和高压瓷片电容耐压需在10kV以上搭建一个四倍压整流电路。倍压整流的好处是可以用耐压较低的元件获得较高的直流电压并且对变压器的匝数比要求降低。整流滤波后的直流高压通过一个超大阻值的分压电阻网络例如一串100MΩ的电阻进行采样采样后的低压信号送回给一个运放构成的误差放大器与LM317提供的基准电压进行比较形成一个粗略的闭环反馈以稳定最终的高压输出。所有高压部分必须用绝缘硅胶仔细灌封并放置在远离其他电路的区域。重要安全警告调试高压部分时务必遵守“单手操作”原则脚下垫绝缘胶垫。使用带高压探头的万用表测量。每次通电前都要用放电棒对高压电容进行放电。最好制作一个带有指示灯和急停开关的隔离电源箱。3.2 Y轴与X轴驱动电路让电子束听话Y轴放大器电路我选择了两级架构。第一级是同相输入放大器使用一颗AD811高速运放增益设置为20倍。输入前端是一个由精密电阻和继电器或模拟开关构成的×1/×10衰减网络允许测量较大幅度的信号。第二级是一个直流偏移调节电路本质上是一个加法器将放大后的信号与一个可调的直流电压由电位器分压产生相加从而实现波形在屏幕垂直方向上的平移。最后输出级是一个由互补晶体管如2N3904和2N3906构成的甲类射极跟随器提供低输出阻抗确保能快速驱动CRT的Y偏转板电容。所有运放和晶体管都需要优质的±12V电源并加上充分的去耦电容0.1uF瓷片电容并联10uF钽电容紧贴芯片电源脚。X轴时基电路在混合方案中得以简化。我使用Arduino Uno的其中一个PWM引脚如D9通过analogWrite()函数输出一个占空比线性变化的PWM信号。例如用代码控制占空比从0逐步增加到255再快速归零循环往复。这个PWM信号含有大量高频谐波不能直接使用。我设计了一个二阶有源低通滤波器使用一颗普通的LM358运放即可截止频率设置在1kHz左右将PWM方波平滑成一个线性度相当不错的锯齿波电压。这个锯齿波电压再经过一个类似Y轴的输出缓冲级直接驱动CRT的X偏转板。扫描频率完全由Arduino代码中的delay()或定时器中断间隔控制调整起来非常方便。3.3 Arduino控制核心数字大脑的软硬件协同硬件连接上Arduino承担了指挥中枢的角色。除了上述的产生锯齿波PWM输出到低通滤波器我还利用其模拟输入口A0来采样输入信号用于实现简单的同步触发。具体接法是Y轴放大器在缓冲输出后用电阻分压网络将信号幅度衰减到Arduino ADC可接受的0-5V范围然后送入A0。软件逻辑是混合方案的灵魂。代码主要包含几个部分锯齿波生成使用定时器中断在中断服务程序里递增一个变量并输出对应的PWM值实现精确的时序控制。触发检测在主循环中不断读取A0的ADC值并保存上一个值。当检测到“本次值大于触发电平且上次值小于触发电平”上升沿触发时就启动一次扫描过程。扫描与显示同步一旦触发条件满足就执行一次完整的锯齿波输出周期同时可以在高级版本中将触发点前后的ADC数据存入数组用于后续处理或简单测量。// 简化的核心逻辑片段 int triggerLevel 512; // 2.5V作为触发电平 int lastADC 0; int currentADC 0; bool scanning false; void setup() { // 初始化PWM引脚、ADC等 } void loop() { currentADC analogRead(A0); // 上升沿触发检测 if (!scanning lastADC triggerLevel currentADC triggerLevel) { scanning true; startSawtoothScan(); // 执行一次扫描函数 scanning false; } lastADC currentADC; } void startSawtoothScan() { for (int i 0; i 256; i) { analogWrite(SAWTOOTH_PIN, i); // 输出锯齿波 delayMicroseconds(10); // 控制扫描速度 // 此处可以同时采样并存储Y轴数据如果做数字存储功能 } analogWrite(SAWTOOTH_PIN, 0); // 快速回扫 }通过这样的软硬件结合我们用一个成本低廉的单片机就替代了传统模拟示波器中复杂的时基发生器和触发电路大大降低了入门门槛。4. 整机集成、调试与校准实战4.1 机械结构与安全装配CRT示波器不是一块电路板而是一个机电一体化的设备。结构设计首要考虑安全和电磁屏蔽。我使用一个旧的金属仪器机箱作为外壳它能提供良好的接地和屏蔽。前面板安装CRT开孔尺寸要略小于CRT面板用绝缘垫圈固定。所有高压部分高压包、倍压整流堆被单独安置在一个用亚克力板或电木制作的绝缘小盒子里然后整体固定在机箱后部与低压电路板保持至少10厘米的距离。低压电路板包含Arduino、运放、电源稳压等安装在机箱底部。连接线材的选择至关重要。高压线必须使用专用的高压硅胶线耐压值要远高于实际工作电压例如用20kV的线用于2kV的电路。走线要简短、避免锐角弯折并尽量悬空不要贴近金属机箱或其他线缆。低压信号线特别是Y轴输入线要使用屏蔽线屏蔽层在信号输入端单点接地以防止工频干扰。电源部分我为高压振荡、模拟电路±12V、数字电路Arduino的5V分别提供了独立的绕组或稳压模块并在入口处加装了保险丝和电源开关。机箱外壳必须可靠接入大地。4.2 上电调试流程从无声到有光调试必须遵循严格的顺序切忌所有电路一次性通电。第一步低压电源测试。断开所有负载单独测试LM317等稳压电路确保其输出准确、稳定、无振荡。然后为Arduino、运放等数字和模拟低压部分上电用万用表测量各点电压是否正常Arduino程序能否跑起来。第二步高压模块单独测试极度危险。将高压模块的输出端悬空不接CRT在高压输出端接一个高压探头连接到数字万用表。通过调节LM317的电压缓慢升高逆变器供电电压观察万用表读数是否平滑上升并能达到预期值如1.5kV。同时用氖泡或高压验电笔靠近输出端检查是否有高压输出。测试完毕后务必用放电棒对高压电容彻底放电。第三步CRT初步点亮。确保高压已放电连接CRT的灯丝引脚加上额定电压如6.3V此时应能看到灯丝微红。然后在严格安全防护下连接阳极高压和阴极高压。聚焦极和栅极先暂时接地或接一个可调的分压中点。缓慢升高阳极电压同时用绝缘起子调节聚焦电压此时屏幕上应该出现一个模糊的光斑。调节聚焦电压使光斑尽可能缩小成一个清晰的小点。如果没有任何光点立即断电放电检查各极电压是否正确、管座接触是否良好、CRT是否已失效。第四步偏转系统调试。先调试X轴。将Arduino产生的锯齿波接入X偏转板此时应该能看到光点从左到右匀速移动形成一条水平亮线。调节锯齿波的幅度和直流偏移使亮线长度适中并位于屏幕水平中央。然后调试Y轴。将一个已知的小信号如1Vpp 1kHz的正弦波从信号发生器发出接入Y轴输入端调节Y轴放大器的增益和偏移使屏幕上出现一条竖直的亮线并且其长度与输入电压成正比。4.3 波形显示与同步校准当X轴扫描线和Y轴信号线都能独立控制后就可以尝试显示波形了。将X轴锯齿波和Y轴信号同时接入对应的偏转板。此时你很可能看到一堆杂乱无章的亮线或者波形在屏幕上横向滚动无法稳定。这是因为扫描X轴与信号Y轴不同步。这时就需要启用Arduino的触发功能。将Y轴信号经过衰减后接入Arduino的A0口。在代码中设置一个合适的触发电平通常为信号的平均值或中间值。当Arduino检测到信号超过此电平时才启动一次完整的锯齿波扫描。这样每一次扫描都从信号的相同相位点开始多次扫描叠加波形就能稳定显示在屏幕上了。校准工作主要包括扫描时间校准输入一个已知频率的信号如1kHz调整Arduino代码中的扫描延迟参数使屏幕上恰好显示一个完整的周期。这样就可以推算出当前扫描一格假设屏幕有刻度所代表的时间。垂直灵敏度校准输入一个已知幅度的直流或交流电压如1.0V DC调整Y轴放大器的增益使光点偏转指定的格数如1格从而确定每格对应的电压值。线性度检查输入一个三角波或锯齿波观察屏幕上显示的波形是否笔直检查X轴和Y轴放大器的线性度。5. 常见问题、故障排查与进阶优化5.1 典型问题速查与解决方案在调试过程中你会遇到各种各样的问题。下面这个表格总结了我踩过的一些坑和解决办法现象可能原因排查步骤与解决方案屏幕无光点1. 高压未正常产生。2. CRT灯丝未通电或损坏。3. 阴极/阳极电压接反或缺失。4. 栅极电压过负完全截止电子束。1. 用高压表验电检查高压模块。2. 目视检查灯丝是否微红测量灯丝电压。3. 对照管脚图用万用表测量各极电压。4. 将栅极暂时接地或接可调正电压试试。光点暗淡或太亮1. 辉度栅极电压不合适。2. 阳极高压偏低。3. 荧光粉老化。1. 调整栅极相对于阴极的电压通常负压越深越暗。2. 适当提高阳极高压。3. 老化无法修复可尝试提高高压但需注意安全。光点散焦1. 聚焦电压未调节。2. 阳极高压不稳定或纹波大。3. 外界磁场干扰。1. 仔细调节聚焦电位器找到最清晰点。2. 检查高压滤波电容加大容量或使用更优质的电容。3. 远离变压器、扬声器等磁性物体。扫描线非线性1. X轴锯齿波线性度差。2. X轴放大器输出电流不足驱动能力差。1. 检查Arduino PWM低通滤波器的设计提高滤波阶数或调整参数。2. 在X轴驱动输出级增加晶体管电流放大。波形幅度小1. Y轴放大器增益不足。2. 输入信号衰减过大。3. 偏转板灵敏度低。1. 检查并增大Y轴运放的反馈电阻比例。2. 检查输入衰减档位是否在×1档。3. 适当提高偏转板的驱动电压需在放大器输出范围内。波形不稳定、滚动1. 未触发或触发设置不当。2. 扫描频率与信号频率不成整数倍关系。3. 电源纹波干扰。1. 检查Arduino触发代码调整触发电平确保触发模式正确上升沿/下降沿。2. 微调Arduino扫描频率或使用信号发生器的同步输出功能如果支持。3. 为各电源级增加LC滤波模拟和数字地单点连接。有严重干扰或重影1. 接地不良形成地环路。2. 信号线未屏蔽。3. 高压部分对信号产生耦合干扰。1. 确保整机有良好、单点接地的地线系统。2. 更换为屏蔽线屏蔽层正确接地。3. 加强高压部分的物理隔离和屏蔽高压线远离信号线。5.2 性能提升与功能扩展思路当基础波形能稳定显示后你可以考虑以下进阶玩法1. 提升带宽与性能Y轴放大器升级将通用运放更换为真正的电流反馈型运放如THS3091其压摆率和带宽更高能更好地驱动容性负载。电源优化为模拟电路部分设计独立的、低噪声的线性电源使用稳压精度更高的芯片如LT3045并大量使用钽电容和瓷片电容进行去耦。输入保护增加输入过压保护电路如使用背对背的稳压管和快速熔断保险丝防止误接高压烧毁前端。2. 增加实用功能数字存储示波器DSO功能利用Arduino的ADC在触发时快速采样一段波形数据存入数组然后在扫描过程中将这些数据通过DAC或PWM滤波还原出来。这样就能实现单次触发和波形冻结功能。自动测量在代码中增加算法对采样到的波形数据进行处理计算并显示频率、周期、峰峰值、平均值等参数可以通过外接一个小OLED屏幕来显示。双踪显示增加一路Y轴放大器和一个模拟开关如CD4052由Arduino控制快速切换两路信号的显示实现交替扫描近似双踪效果。3. 探索纯模拟的终极挑战 如果你追求极致的模拟乐趣可以尝试完全抛弃Arduino设计一个纯模拟的触发扫描电路。这需要用到电压比较器来检测触发沿用密勒积分电路产生高线性度的锯齿波用电子开关控制扫描的释抑时间。这是对模拟电路设计能力的终极考验但成功后对示波器原理的理解将无比透彻。制作这台简易CRT示波器的过程就像一次电子技术的考古与重建。它强迫你跳出“黑盒”思维去关注每一个电压、每一道波形背后的物理本质。调试过程中当干扰出现时你需要判断是接地问题、电源问题还是耦合问题当波形失真时你需要分析是放大器压摆率不足还是扫描非线性。这些技能恰恰是使用现成数字仪器时最容易退化的。最终当那个带着些许噪点、辉光柔和的波形稳定地躺在屏幕上时你收获的不仅是一件作品更是一段与电子流动直接对话的深刻体验。