0~18V/2A数控直流稳压电源:从指标、拓扑到调试全记录
数控直流稳压电源这个题目光是毕业设计和DIY圈子里一年到头就能翻出好几版类似的方案但绝大多数资料停在三张电路图加一段单片机控制逻辑的水准。真正把精度、纹波、散热、限流这些“软指标”做明白的并不多。我最近完整做了一台0~18V/2A的小功率数控直流稳压电源从指标定义、拓扑选择、硬件打样到软件调试走了一整轮踩了不少坑也把一些教材上不会细说的经验理顺了。这篇就围绕这套设计把思路、计算和排错过程完整记录下来适合正在做类似专题的学生也适合想把桌面电源做得更“数控化”的电子爱好者。1. 指标怎么定先回答三个问题再画电路很多人拿到这类题目第一件事就是找芯片、画原理图结果指标和拓扑互相打架做到一半发现散热压不住、精度达不到最后只能缩水交差。我的习惯是先花半天把指标钉死尤其是电压范围、最大电流和电源给电方式这三个问题。1.1 电压、电流范围不是拍脑袋而是散热和成本的平衡我给自己定的目标是输出电压0~18V连续可调输出电流0~2A电压设定分辨率1mV电流显示分辨率1mA空载时实际电压与设定值偏差不超过±5mV带载后在满量程范围内稳压精度不低于±0.5%。纹波要求比较严希望满载时纹波控制在5mVrms以内。为什么是18V/2A而不是常见的30V/3A因为“小功率”这三个字就意味着成本和散热有上限。假设输入电压取24V输出最低设为1V负载电流2A那调整管上的压差就是23V功耗高达46W。45W以上的热量要在一台桌面仪表里散掉必须上大散热器加风扇体积和噪音立刻膨胀。而把电压上限压到18V输入用18~19V的适配器最恶劣工况下调整管承受约17V×2A34W的功耗虽然也不小但用一块合适散热器加低速风扇就能压住整机还能保持书本大小。所以如果你也想做类似项目我建议先写一张需求表把“最大输出电压”“最大输出电流”“最小输出电压”“允许的纹波”“散热方式”五栏填满再动电路。这五个参数直接决定你用线性方案还是开关方案决定调整管要不要并联也决定PCB该铺多大铜皮。1.2 数控到底“数控”了什么先搞清楚分工一套数控电源里单片机的任务不是直接输出功率而是负责三件事给定电压、测量实际输出、做保护。真正承担稳压的是模拟闭环。这也是我后来重新调整设计才想明白的点——如果只靠单片机给DAC一个固定值然后不管反馈负载一变化电压就会跌出去如果完全靠模拟环路则难以精确设定电压也做不到数字显示和校准。合理的分工是模拟反馈负责瞬态响应和纹波抑制数字部分负责静态精度和用户交互。单片机通过DAC给出目标电压运放和调整管构成的线性稳压环路易跟着这个目标走ADC实时回采输出发现偏差后数字环路再微调DAC码值把稳态误差吃掉。这套“模拟为主、数字校准”的结构是我这台设备稳定性的核心后面第四部分还会详细说。2. 拓扑选择为什么小功率场景下我坚持用线性调整现在很多方案一上来就推Buck电路理由是效率高、发热小、体积小。这没有错但放在桌面型小功率数控电源上性价比和调试成本并没有想象中那么美好。2.1 开关电源留给新手最麻烦的几个难题我试过用Buck做前级基本电路很快跑通可真要把它做成闭环可调、低纹波、负载瞬态不振荡的数控电源难度是线性方案的数倍电感选型要考虑饱和电流续流二极管要考虑反向恢复环路补偿零极点要对着示波器反复凑参数输出纹波还经常带着高频尖刺。对小功率场景来说Buck节省的那几十瓦热量远不够弥补它在噪音和调试复杂度上付出的代价。再说数控开关电源若要在宽范围输出电压下保持稳定控制环路的增益变化范围很大补偿参数几乎不可能一个定值打天下。这也就是为什么很多商业可调电源采用“开关预稳压线性后级”两级结构而不是直接用Buck做最终输出。我最后决定的拓扑非常朴素外部18V适配器作为前端后级全部用线性调整单片机只管“软控制”。省下来的精力全部投入到精度和保护功能的打磨上。2.2 我这套系统的整体架构全机可拆成四大块彼此之间的信号流向很清晰前端电源使用输出18V/3A的成品适配器。选适配器而不是自己搭变压器整流滤波是出于安全和省事考虑也可以避免在文档里引入高压市电操作的细节。线性调整级由误差放大器、调整管、取样电阻和基准电压构成。这是整个电源的心脏所有负载瞬态都由这一级顶住。数字控制板单片机采集按键和旋转编码器驱动OLED屏幕通过SPI接口控制DAC芯片用ADC采集输出电压和电流实现闭环校准与显示。保护电路包括输出限流、短路保护和上电防冲击。这部分我一开始没重视结果烧了两次调整管才老老实实补上。这种架构的优点在于前后级可以独立调试先单独跑模拟稳压板用固定电阻设定电压确认它能在负载变化时稳住再接上单片机控制DAC看电压是否按设定变化最后才联调显示和保护逻辑。任何一步出问题都能快速缩小排查范围。3. 硬件上最容易翻车的三处计算与选型硬件设计部分网上能抄到完整原理图的方案太多了但能讲清楚“为什么这么选”的很少。这里挑我实际画板时反复核算的三个环节展开这三处错一处整机性能都会差一个档次。3.1 调整管的功耗和散热估算调整管是整个线路上发热最集中的器件计算最大功耗时要用最恶劣工况输入最高电压输出最低电压电流最大。以我的设计为例输入18V最低输出电压约1.2V最大输出电流2A那么调整管压降约16.8V耗散功率约33.6W。注意空载时功耗低得多设计散热器时必须按满载低电压来校核。用热阻估算一下假设环境温度35℃调整管允许的结温尽量控制在100℃以下那么整个热通道从结到空气的热阻不能超过(100-35)/33.6≈1.9℃/W。这个数字意味着单靠TO-220封装加普通散热片是不够的更别说有些型号的热阻本身就到40℃/W以上。我实际的解决方式是使用两只TO-220封装的调整管并联均流配合一块截面积足够的铝散热器再加一个5V低速风扇实测满载运行半小时外壳温升约25℃可接受。并联调整管时最好在各自的发射极或源极串联小阻值均衡电阻否则电流容易全部涌向参数偏小的那一只。如果你想把电压上限做到30V建议不要只堆管子和散热片而是先在前面加一个分段预稳压把送给调整管的输入电压控制在“目标电压3~5V”的范围附近。否则效率始终上不去整机功耗和温升都会变得很难看。3.2 电压给定链路DAC比PWM滤波好用得多数控部分最关键的信号链是单片机如何生成一个稳定、低噪声、可分辨到毫伏级的电压目标。最省钱的做法是PWM加RC低通滤波把几百kHz的方波滤成直流。但我实测下来它的局限性非常明显想要1mV分辨率12位PWM配合分压几乎不够用想要纹波低RC时间常数就得做大动态响应又变慢而且PWM由单片机时钟生成开关频率纹波很容易串到输出。做直流稳压电源时这些噪声解决起来相当费劲。我的选择是SPI接口的12位DAC型号用的是很常见的MCP4921直接输出0~2.048V的基准电压再由运放同相放大到0~18V的目标范围。DAC的参考电压用外部精密基准源提供不用芯片内部的电源电压这样温度漂移和噪声改善都非常明显。放大倍数取18V/2.048V≈8.8实际电路里我用两节电阻精密分压配合低温漂运放实现16倍以内的任意增益最后把输出校准到目标电压上。这里有一个容易被忽略的细节DAC输出经过运放放大后不要直接驱动调整管最好先经过一级电压跟随器或缓冲级再接到误差放大器的给定端。否则DAC输出阻抗和数字馈通噪声会直接影响稳压环路的基准点。我第一版图省事直接连过去结果输出电压在小数点后第三位不停跳后来加了一级缓冲才稳定下来。3.3 采样电路分压电阻和低侧电流采样的地线陷阱输出电压采样用高阻分压把0~18V降到ADC可测的0~3.3V。我选了100kΩ对20kΩ的分压网络并在ADC引脚并联一个0.1µF电容做滤波。这里要注意分压电阻阻值太高时ADC内部的采样开关充电电流会在电阻上产生误差所以通常要加一个电压跟随器做阻抗变换阻值太低又会额外消耗输出电流。实际选型时我取分压网络总阻值120kΩ左右配合跟随器测得很稳。电流采样我用的是低侧0.05Ω采样电阻配合专用电流检测放大器放大50倍再送入ADC。这是一个经典的低成本做法但有一个坑低侧采样会抬高“地”的电位如果放大器的地参考点选错了电流显示会完全失真严重时还会影响稳压环路。我最终的布线原则是所有功率地、信号地和数字地在电源输出端单点汇合电流采样放大器的输入脚必须紧贴采样电阻两端走线尽量短。这个布局调整做完之后电流显示从“肉眼可见地跳”变成了“偶尔最后一位跳”效果立竿见影。4. 软件层怎么实现闭环校准与限流硬件环路把电压稳住了但那只是“模拟稳压”距离“数控”还差一个数字大脑。软件部分最核心的逻辑有三个数字校正环路、两点校准、限流保护。4.1 一个简单的增量式数字校正环路我一开始天真地以为DAC码值算对了输出电压就自动对。结果是DAC本身的偏移和增益误差、运放的失调电压、分压电阻的精度、加上温度变化累积误差轻轻松松超过100mV。尤其在小电压档比如设定1V时误差占比会非常大。所以我在单片机里加了一个缓慢的增量式PID校正。基本逻辑是ADC不断回采输出电压与目标电压比较把误差累积起来然后微调DAC输出码值。模拟环路已经在硬件层面稳住了瞬态数字PID只需要慢慢补静态误差因此参数不需要激进重点是防止积分饱和。参考我的简化代码逻辑static int16_t integral_cnt; // 防止积分饱和用 static uint16_t dac_code 2048; float error target_voltage - measured_voltage; integral_value error; if (integral_value MAX_INTEGRAL) integral_value MAX_INTEGRAL; if (integral_value -MAX_INTEGRAL) integral_value -MAX_INTEGRAL; float adjust KP * error KI * integral_value; int16_t delta (int16_t)adjust; dac_code delta; if (dac_code 4095) dac_code 4095; if (dac_code 0) dac_code 0;实际使用时我把KP取0.2KI取0.01左右每100ms计算一次。这样既不会让输出产生可察觉的振荡又能在两三秒内把稳态误差校到几毫伏。注意这个循环本质上是低频慢校正千万别把PID输出周期缩短到和ADC采样周期一样否则会和硬件环路发生奇怪的交互输出反而开始抖动。4.2 两点校准让最低和最高电压都准确由于DAC和分压采样都存在增益误差光靠数字PID只能缩小白差但无法保证全量程都准。我在出厂设置里烧进了两点校准用户进入校准状态后依次设置0.5V和18V两个点用外部万用表读取真实电压单片机记录校准值并计算线性修正系数。实际校准公式就是直线标定gain (v_real_high - v_real_low) / (v_set_high - v_set_low); offset v_real_low - gain * v_set_low; target_compensated target * gain offset;之后所有设定电压都先经过这条直线变换再折算成DAC码值实际显示值也从ADC回采重新标定。这套方法比逐点查表简单对线性度好的信号链足够用。如果要求更高的精度可以把0.5V到18V分成低、中、高三个区间分别做三点校准但一般桌面使用两点就够了。4.3 限流与上电防冲击逻辑传统的模拟限流可以用运放搭但数字方案里我更倾向于“设定电流值加软件比较”的混合方式硬件上有一个紧急电流比较器一旦电流超过最大设计值1.1倍直接切断调整管驱动作为硬保护软件上则每次ADC采完电流之后和用户设定的限流点比较如果超限就慢慢减小DAC码值等效回缩输出电压。这样的好处是短路时不会瞬间剧烈打火又能迅速切断。另外一个容易忽略的细节是上电防冲击。许多线性电源开机瞬间误差放大器会因为给定电压突变而给调整管一个全驱动信号输出电容突冲负载上可能瞬间出现一个大电流尖峰。我的做法是单片机启动后延迟500ms先把DAC输出置为0然后以每100ms升高0.2V左右的速率慢慢爬升到目标电压。这个软启动逻辑非常便宜却避免了大量启动瞬间损坏负载的风险。5. 实测排错记录三次排查让我把电路吃透软件和硬件都联调之后我以为可以顺利收工结果测试阶段连续碰到三个问题每个都让我排查了大半天。记录下来算是给后来者一份参考。5.1 现象一按设定上调电压调整管瞬间烫手却没有输出第一次上电我把目标电压从1V调到3V负载接的是10Ω电阻结果电流上不去调整管温度却很快升高。用万用表逐级测发现DAC输出是正常的运放输出也随着设定变化但调整管的输出端始终只到1V左右。反复检查原理图才发现我犯了一个低级错误运放作为电压跟随器驱动调整管的基极但调整管的集电极接在输入端发射极接输出端这种接法没问题问题是误差放大器反馈采样点的地和负载回路的地相隔太远导致反馈电压叠加了一大段地线压降运放误以为自己已经达到目标电压实际输出却还差得远。排查的过程很简单断开调整管基极把控制回路和功率回路完全分开测试用外部稳压源直接给定电压才发现是反馈参考点错位。把采样线改成从输出端根部短距离飞线到运放反相输入端之后问题立刻消失。这个教训让我彻底明白了“反馈采样点必须在负载端取电压不能在电路板另一端绕一大圈再回来”的道理。5.2 现象二输出纹波超标示波器看到的就是不干净硬件能正常调压之后我用示波器看输出纹波发现除了低频纹波外还有一个幅度约20mV的随机噪声叠加在上面。理论上线性电源不该这么脏。我先怀疑适配器前端滤波不足又怀疑DAC输出噪声后来直接把DAC从控制板上拔掉改为外部可调电阻临时给定电压纹波还是存在。最后用排除法定位到PCB地线布局上数字地和功率地没有做单点分隔单片机按键扫描和OLED刷屏时产生的数字地噪声直接通过地线串入了功率地ADC采样分压点也受到干扰。解决方法是把地线重新分割数字部分形成一个独立的地岛只在电源输出端子附近单点汇合同时在调整管基极驱动线上加了一个很小的RC限制高频自激。改版后纹波降到3mV左右用示波器看基本是平直的。5.3 现象三电流显示跳动短则几十毫秒长则持续跳电流读数不稳定一开始怀疑采样放大器问题用示波器抓采样电阻两端波形发现信号里叠加了一个大约几kHz的毛刺和单片机主频同频。根源是ADC采样在DAC刷新和OLED刷屏的窗口内进行数字毛刺通过寄生电容耦合进了采样线。解决方法有两个一是软件上避开刷新窗口在DAC更新完成后再延时50µs去采样二是用滑动平均值把连续32次采样取平均作为显示值。这两招加上之前的地线分割电流显示最终稳定到了最后一位偶尔跳动。三个问题全部解决后我做了几组负载测试数据如下设定电压负载电流实测电压偏差5.000V0.0A5.001V1mV5.000V1.0A4.994V-6mV12.000V0.0A12.003V3mV12.000V1.5A11.991V-9mV18.000V2.0A17.976V-24mV满载时18V偏差到24mV绝对值不小但相对精度仍在0.15%左右满足我在第一部分写的指标。如果想要进一步压缩负载调整率可以改用开尔文四线采样或把取样反馈点进一步贴近负载端这个属于后续优化空间。6. 从样机走向顺手工具还差哪些细节整机调好之后我其实还做了几处体验层面的收尾这些细节不写进功能指标但直接影响你能不能长期用它。一是面板上增加了一个编码器旋钮设定电压不再靠按键一格一格抠而是旋一下10mV、按一下切换0.1V步进手感接近商用仪器。二是在输出端并联了一个泄放电阻加继电器关机时把滤波电容上残留的电放掉避免拔负载时被残余电压咬一口。三是把限流提示做到屏幕上触发保护时显示“CC”状态而不是默默无输出否则排查故障时会以为机器坏了。如果这个项目面向正式产品方向推进我会把线性前级换成带抽头的环形变压器加继电器切换把预稳压做到位让调整管功耗显著降下来或者引入数字电位器控制的Buck预稳压段。但对多数小功率桌面需求单级线性调整加数控校准已经是精度、成本和复杂度最平衡的形态。每次调板时看着设定值稳稳落在期望电压上我会觉得一开始把指标和拓扑想清楚的时间花得太值了。