简介:这是一份电子设计大赛参赛作品文档,围绕简易数控直流稳压电源的完整设计与实现展开,适合参加电子设计竞赛或学习数控电源、单片机控制的学生与爱好者参考。文档详细介绍了项目背景、技术选型、总体思路与具体实施方案,包括电源电路、显示电路、控制电路和数模转换电路的构成,以及输出电压0~9.9V、步进0.1V、纹波不大于10mV等关键指标,并给出了基本要求、发挥部分与扩展方向,涉及AT89C51单片机与DAC1232的硬件连接、运放反馈稳压等实现细节。包内共1个doc文件,整体大小631KB,属于文档类资料,便于阅读、打印和二次修改。已有429人学习下载。读者从中可获取赛题分析思路、系统框图、方案对比和调试要点,对理解单片机在直流稳压电源中的应用具有直接帮助。 电赛拿到“简易数控直流稳压电源”这类题,第一反应千万别是“不就是个电源嘛”。数控直流稳压电源是每年电子设计大赛和课程设计里出场率极高的题目,看起来人人都能做,但能不能稳定输出、精度够不够、带载跌不跌、现场演示会不会翻车,完全不是一回事。这篇内容我按自己当年从原理图到实测的完整过程来写,把方案选型、硬件链路、软件逻辑、调试验证和现场经验都拆开讲清楚,适合正在备赛电赛、做课程设计,或者单纯想把手头“手动调电位器电源”升级成“按键设定电源”的读者。
1. 先把题目读透:指标拆解与方案取舍
这类题目的核心指标通常很直白:输出电压范围(常见0-9.9V或0-15V)、步进精度(常见0.1V)、最大输出电流(从500mA到2A不等)、电压稳定度、纹波大小。有些人拿到题就开始画板子,我不建议这么做。我第一步是做一张需求拆解表,把每一个指标转化成具体的电路约束,再倒推选型。
比如0-9.9V、0.1V步进这个要求,意味着数字控制量至少有100个可分辨的档位。如果用一个数字电位器(比如X9C103)来做反馈电阻,它内部只有100个抽头,换算到整个输出电压范围正好是0.1V一档,看起来很“够用”。但实际用的时候你会发现档位之间是非线性的、温漂大、抽头切换时有毛刺,而且100档对应100个离散电阻值,想精准落在每一档0.1V基本靠运气。我在新手阶段试过这条路,最后的效果只能说“能动”,和“能比赛”差得很远。
另一条常见路线是单片机PWM输出加RC低通滤波产生一个模拟基准电压,再送给稳压电路做控制。这条路成本很低,很多作品也确实这么做。但PWM经过二阶滤波后依然会有残余纹波,基准电压里一旦有几十毫伏的毛刺,输出端就会被放大,局部放大后可能变成几百毫伏的纹波。而电赛评委用示波器看纹波是常规动作,这一下就会丢分。
我个人最终选择的是“单片机+DAC+误差放大器+调整管”的线性方案。DAC用I2C接口的12位芯片,比如MCP4725,它的LSB在3.3V基准下大约0.8mV,控制0.1V步进完全有余量。整个结构本质是做一个高精度的可调LDO:DAC输出作为设定电压,误差放大器把设定值和输出采样值做差,差值驱动调整管,让输出电压自动逼近设定值。这个方案输出纹波低、精度高、调试路径清晰,而且每一个节点电压都可以用万用表单独量出来,非常利于排查问题。
2. 硬件链路逐级拆解:DAC、误差放大器与调整管的配合
2.1 基准与DAC:精细电压从哪来
DAC部分最难的不是I2C通信,而是基准电压。MCP4725内部没有高精度基准,它的满量程输出直接跟随VDD。如果直接把单片机的3.3V拉过来当VDD,DAC输出就会跟着数字电源的纹波一起抖。我的做法是单独用一颗低压差基准芯片(比如REF3025或者TL431搭的2.5V基准)给DAC供电,模拟部分和数字部分在PCB上单点汇地。这一步做完,输出纹波能明显好一截。
DAC输出范围也需要提前设计。如果基准是2.5V,DAC满量程就是2.5V,而你要输出9.9V,这中间就需要一个放大环节。常见做法是先把输出电压用电阻分压成1/4,再送进误差放大器和DAC比较。比如输出9.9V时,采样点就是2.475V,刚好落在DAC基准范围内。这样设计的好处是DAC全量程都被用上,控制分辨率最高,而不是只用其中一小段。
顺带说一个容易踩的坑:DAC输出端的缓冲和滤波。很多DAC数据手册建议输出加一个运放跟随器再做缓冲,但MCP4725本身内部有输出缓冲,外部再加一级RC低通就足够了。RC的截止频率不用太低,足够滤掉DAC刷新产生的阶梯毛刺就行,一般用几百欧串联加100nF并联,截止频率在几kHz量级,不影响环路响应速度。
2.2 误差放大器与调整管:如何把小信号放大成输出功率
误差放大器是整个电源的核心比较器。正输入端接DAC输出的设定电压,负输入端接输出电压的分压采样,输出端驱动调整管。当输出电压低于设定值时,采样电压低于DAC电压,运放输出拉高,调整管导通加深,输出电压上升;反之则输出拉低。这是一个标准的负反馈系统。
运放选型上,我推荐偏置电流小、增益带宽积足够的精密运放,比如OP07或者OPA2277。普通LM358也能工作,但它的输入失调电压最大能到7mV,在采样分压比1/4的电路里被放大4倍,输出误差可能接近30mV,这对0.1V步进来说虽不致命,但会让标定变得麻烦。如果想让每一档电压都稳稳落在目标附近,精密运放省心得多。
调整管的选择要看输出电流和功耗。以0-9.9V、1A输出来算,输入通常用12V适配器,当输出2V时调整管上压差是10V,功耗就是10W。这个热耗绝不轻松,必须加散热片,必要时用TO-220封装的MOS管配合铝散热器。如果用三极管,还要考虑基极驱动电流是否够——误差放大器输出能力有限,大电流三极管放大倍数又不够,这时候更适合用MOS管,栅极只需要电压驱动。
不过MOS管还有一个坑:开启电压。IRF540这类常见管的VGS(th)可能在2-4V,如果单片机供电只有3.3V、运放输出摆幅也接近电源轨,很可能出现DAC设定9V时输出却只能到7V的情况。我的解决办法是给误差放大器的电源用单独一级12V供电,并在运放输出和MOS管栅极之间加一个图腾柱推挽驱动,栅极电压就能被抬到接近12V,彻底打开管子。这一步在做方案时就要想到,不能等到实测发现输出上不去再返工。
2.3 采样反馈与保护电路:不能省的几颗电阻
采样分压电阻的选择直接影响精度。分压比对的是“输出电压范围/基准电压范围”,如果DAC基准是2.5V、输出电压上限是10V,分压比就是1/4。取值上电流不能太小,否则运放偏置电流会引入误差;但也不能太大,否则分压电阻本身发热会影响稳定性。通常取10k/30k或者15k/45k这个量级,误差尽量选1%薄膜电阻,关键分压点可以并联一个小电容做频率补偿,防止环路自激。
保护电路我在早期版本里省过,后来发现省不得。一个是在输出端并联一个极性保护二极管,防止外部反接电压倒灌;另一个是用采样电阻(比如0.1欧姆)加电流检测运放做限流比较,电流超过设定值时由MCU把DAC拉到零或者关断调整管。比赛现场经常出现“输出线被接反”或者“负载短路”的情况,有保护电路至少不会当着评委的面烧管子。
3. 软件怎么写,才配得上“数控”两个字
3.1 按键与显示的状态机
“数控”的精髓在交互:按键设定电压、数码管或者OLED显示设定值和实测值。我的设计是三个按键:短按进入设定模式,左/右选择调节位,加/减调整数值,长按确认退出。如果用编码器也可以,但按键方案在比赛现场更好解释,逻辑直接。
按键最烦人的是抖动和误触。硬件上加10k上拉和100nF电容,软件里再做一个20ms消抖,基本能解决。状态机大概就三四个状态:正常运行、设定模式、输出关闭。运行模式下数码管第一行显示实测电压,第二行显示设定值;进入设定模式后,设定值最后一位闪烁,表示正在调节位。这里我建议把“输出使能”做成显式逻辑,而不是一上电就直接输出设定电压。上电瞬间DAC可能输出不确定值,先让DAC输出0,再让用户按确认键开启输出,防止给负载一个意外的电压冲击。
核心状态机代码逻辑大概是:
typedef enum { RUN_MODE, SET_MODE, OUTPUT_OFF } sys_state_t; void key_scan(void) { static uint8_t filter_cnt = 0; uint8_t key_now = read_key(); if (key_now == key_last) { if (++filter_cnt >= KEY_DEBOUNCE_MS / 10) { process_key_event(key_now); filter_cnt = 0; } } else { filter_cnt = 0; key_last = key_now; } }3.2 ADC回采与误差校正
只靠DAC开环输出电压,精度上限取决于基准和电阻网络误差。我之前实测发现,设定5V时输出可能只有4.93V,这个偏差对比赛来说不够好看。解决办法是加入ADC回采校正:输出端的分压信号不只为误差放大器服务,同时也接到单片机的ADC引脚,MCU实时读取实际输出电压,通过软件调整DAC码值,让实测值逼近设定值。
校正算法不用做成复杂PID,电源系统本身就是负反馈稳定系统,软件只需要做“查表+线性拟合”。具体做法是标定时让DAC输出几个已知码值,用万用表记录对应的实际输出电压,拟合出一条“目标电压→DAC码”的曲线,存到EEPROM或者Flash里。运行时每设定一个新的目标电压,就查表得到初始DAC码,再根据ADC回采结果做微调,每次调整一个LSB,直到实测与目标误差小于0.02V。
ADC回采同样要处理噪声。单片机内部ADC本身有量化噪声,输出线上又难免有些纹波,所以我在软件里做了一阶滑动滤波,取最近8次采样的平均值。这个滤波器不会拖慢响应速度,但对消除数码管最后一位跳动特别有效。最容易忽略的是ADC参考电压,如果VREF接的是3.3V电源而3.3V本身不干净,那ADC测出来的数值本身就不可信。我后来把ADC参考单独用REF3025提供,校正效果才真正稳定下来。
3.3 软启动与掉电保存
软启动这在比赛演示中是加分项。直接上电到设定电压,再好的线性电源也可能在输出端产生一个过冲,接单片机或者传感器负载时很不好。我的做法是上电后以20ms为一个步进,把DAC码从0线性增加到目标值,整个过程大概200-300ms完成。负载看到的是一段平滑的斜坡而不是一个阶跃,过冲几乎消失。
掉电保存更偏人性化体验。单片机有低电压检测功能,当检测到供电电压掉到阈值以下,在电压还没完全消失前,把当前的设定电压写入EEPROM。下次上电直接恢复上次设定值。这个功能在题面上可能只是一句话,但现场演示时评委常会问“还记不记得上次设定的电压”,有这功能就直接变成技术亮点了。
4. 实测调试图:把电压值调到“准”的过程
4.1 空载与带载实测数据对比
实测是电赛作品最关键的一环。我搭好板子后先不接MCU,用DAC模块手动给几个电压,用万用表量输出端,确认硬件链路工作正常。然后接上MCU跑完整程序,记录不同设定值下的空载和带载数据。下面是我当时实测的一小段记录,负载用的是10欧姆功率电阻,输出电流约0.5A-1A:
| 设定电压(V) | 空载实测(V) | 带载实测(V) | 带载偏差(mV) |
|---|---|---|---|
| 1.0 | 1.003 | 0.998 | -2 |
| 3.3 | 3.312 | 3.301 | -11 |
| 5.0 | 5.006 | 4.992 | -8 |
| 7.5 | 7.508 | 7.491 | -9 |
| 9.9 | 9.902 | 9.884 | -16 |
这个问题在于,带载时输出电压普遍比设定值低了一点,尤其是9.9V档,掉了16mV。原因主要有两个:一是采样点在输出端,但采样点到实际负载端子之间还有导线电阻,负载电流在这个电阻上产生压降;二是误差放大器的负反馈增益有限,无法完全抵消线损。解决办法是开尔文接法:采样线单独从负载端子引出,不走大电流路径。我在PCB上把采样点改到输出端子根部,带载偏差立刻缩小到10mV以内。
4.2 输出振荡、示数跳动等问题定位
调试中遇到最多的问题就是输出端自激振荡。症状是示波器上看到几十kHz到几百kHz的正弦波叠加在直流上,轻则纹波超标,重则整个系统啸叫。原因是反馈环路相位裕度不够。我当时的解决套路是:在误差放大器反相输入端到输出端之间并联一个100pF到1nF的反馈电容,把环路增益在高频段压下去。如果振荡频率很低(几kHz),优先检查是不是电源线太长、地线环太大;如果振荡频率很高,先检查运放的补偿电容。
另一个高频现象是数码管显示值最后两位来回跳。硬件上没有明显问题,根因往往是ADC采样窗口恰好落在开关电源适配器的开关纹波上,每次采样点相位不同,结果就跳。软件滑动平均能压掉大部分,但如果还跳,就把采样触发改成定时器驱动,固定每次都在同一个相位点,或者把平均次数加大到16次。实测下来“定时采样+16次平均”基本能把跳动抑制在±1个显示单位内。
还有一个很隐蔽的问题:示波器探头地线夹太长。很多人在测输出纹波时看到很大噪声,其实是探头地线像天线一样捡到了周围的电磁干扰,而不是电源本身纹波大。正确做法是用接地弹簧短接探头尖端和地环,紧贴输出端子测量。这个细节在电赛现场写测试报告时非常加分,因为好的测试方法和好的电路同样重要。
5. 画PCB时最容易牺牲性能的环节
数控电源的PCB布局和普通数字电路不一样,它是典型的数模混合电路。如果布局不好,再好的原理图也白搭。我第一版PCB就是吃了这个亏,数字地和模拟地大面积铺铜铺到一块,DAC输出纹波大得离谱。
我的经验是:PCB上把功能分区局,从左到右依次是电源输入区、调整管功率区、误差放大采样区、单片机数字区。功率地、模拟地、数字地在电源输入端的滤波电容负极单点汇合,形成星形接地,不要让功率电流流经模拟地平面。DAC和运放周围的地铜皮要单独连接到采样点附近的地,避免数字噪声串进来。
走线方面,输出大电流路径尽量短而宽,至少2mm以上,并且和采样线分开走,避免共用一段铜箔。采样线用细线从输出端子根部引出,必要时加一个100欧姆串联电阻到运放输入端,防止布线耦合进来的噪声。我在第二版PCB上把这些全改了以后,空载纹波从原来的50mV降到了8mV左右,这个改善比换任何芯片都明显。
6. 赛前实测清单与调试顺序
备赛到了最后几天,不要随意加功能,而是把现有功能逐条验证一遍。我的习惯是列一个测试清单,按顺序执行,每通过一项就打勾:
- 上电后DAC输出是否为0,数码管显示是否正常初始化。
- 设定1.0V、5.0V、9.9V三档,空载实测误差是否在±20mV以内。
- 接入10欧姆负载,实测带载后压降是否在允许范围内。
- 用示波器测满量程输出时纹波,峰值是否小于30mV。
- 快速按加减键连续变化,观察是否存在按键漏检或电压跳变异常。
- 断开负载,再切换到最小电压,确认输出无过冲。
- 连续工作30分钟后,摸散热片温度,确认不会烫手。
- 关闭输入电源再上电,确认能恢复到上次设定值。
这个清单里每一项背后都有意义,不只是“测一下好使”这么简单。效率最高的调试顺序是先不通MCU,用直流稳压电源单独给运放部分供15V,手拧一个电位器模拟DAC电压,确认从电位器电压到输出端的放大关系正确;再接MCU,先不使能输出,先量DAC输出电压对不对;最后才把整个环路闭合。这样每一级都能独立定位问题,避免“全接上后发现输出不对,但不知道是哪一级出错”的窘境。
7. 演示心态与临场应变的小经验
比赛现场和实验室不一样,环境不理想,电压会波动,评委还会上手按键操作。我的建议是提前把操作流程练成肌肉记忆:演示时先展示空载电压精度,再带载展示带载能力,然后再现场演示按键设定不同电压,最后让评委自己试一下设置和复位功能。这个过程不超过3分钟,但能把作品所有的技术点都带出来。
还有就是数据记录要留一份纸质版。评委很可能会问“这里设定5.00V,实际为什么是5.01V”,你现场翻开测试记录表,指着一行行数据解释这是DAC分辨率、ADC量化噪声、采样电阻误差共同作用的结果,比自己现编更有说服力。最后再补一句“我在采样端用的是开尔文接法,所以带载偏差控制在10mV以内”,评委基本就能认可你这个作品是真的从头做到尾的。
按这套思路做下来,一台0-9.9V、0.1V步进、实测带载误差小于0.02V的数控直流稳压电源就能稳定复现。整个过程没有特别高深的技术,但每一步都建立在“想清楚为什么要这么做”的基础上,这也是电赛真正想训练的能力。
本文还有配套的精品资源,点击获取