简介:这份文档面向电子工程、自动化控制方向的学生与硬件爱好者,系统讲解数控稳压电源的电路原理与实现方法,适合课程设计、毕业设计或电源类项目参考。资源为单个doc文档,压缩包约487KB,内容围绕STC89C51单片机主控方案展开,涵盖TLC5615数模转换、OPA2107与IRF9Z24N构成的负反馈恒压输出、电位器反馈调节、键盘输入控制及LCD1602或数码管显示等模块,并配有整流滤波、晶振复位、过流检测与蜂鸣器报警等完整电路说明。文中还给出数码管版与液晶版总体电路图,采用网络标号标注电气连接,便于对照理解各功能单元。目前已有507人学习,读者可借此掌握数控电源从供电、控制到显示与保护的完整设计思路,为动手搭建与调试提供参考。
1. 从一份“数控电源电路原理讲解”文档说起:它到底能帮你解决什么
如果你正在做单片机课程设计、电子竞赛赛前练手,或者单纯想搞一台能按键调压、带过流保护的小功率直流稳压电源,那这份《数控电源电路原理讲解》文档大概率能让你少走一礼拜弯路。它讲的不是那种只给个框图就让你自己悟的“概述”,而是把 STC89C51 主控、TLC5615 串行 DAC、OPA2107 运放加 IRF9Z24N 构成的负反馈功率级、TL431 基准、数码管或 LCD1602 显示、独立按键扫描、过流检测与蜂鸣器报警这一整条链路拆开揉碎讲了一遍。文档里甚至保留了完整的网络标号电路图,数码管版和液晶版都有,带短路保护的完整版也单独标注了。换句话说,它是一份可以直接照着搭板子、写程序、调参数的实战资料,而不是那种看完还得自己猜元件值的“原理性介绍”。适合谁?适合已经学过 51 单片机基础、能看懂简单运放电路、手里有万用表和示波器的电子类学生或初级工程师。如果你连 7805 和 7812 的区别都还没搞清,建议先补一下线性稳压的基础再回来,否则后面 MOS 管反馈那一段会看得比较吃力。
2. 数控稳压电源的闭环架构:从 DAC 到 MOS 管到底怎么稳住的
2.1 为什么选 TLC5615 而不是并行 DAC
这份文档的核心思路是用单片机控制 DAC 输出电压,再通过运放和 MOS 管把这个电压“放大”成带负载能力的电源输出。选 TLC5615 的理由很实在:10 位分辨率、串行接口、单 5V 供电、直接电压输出,而且只需要三根线(时钟、片选、数据)就能和单片机通信。对于 STC89C51 这种 IO 口不算富裕的芯片来说,串行 DAC 比并行 DAC(比如 DAC0832)省太多引脚了。文档里明确写了 P33 接时钟、P32 接片选、P34 接数据,这个引脚分配在写程序时直接照抄就行。TLC5615 的输出电压公式是:
Vout = 2 × Vrefin × N / 1024
其中 Vrefin 是 6 脚参考电压,N 是写入的 10 位数据(0 到 1023),乘 2 是因为芯片内部有 2 倍增益。当参考电压给 2.5V 时,理论最大输出就是 5V。这个公式决定了你程序里按键每加一档,实际输出电压跳多少。比如 N 加 1,输出变化约 4.88mV,10 位分辨率下这个步进已经够用了。
2.2 TL431 加 OPA2107 跟随器:基准电压为什么不能省
文档里用 TL431 产生 2.5V 基准,再用 OPA2107 做电压跟随器送到 TLC5615 的参考端。这一步很多人会偷懒,直接用电阻分压给参考电压,结果发现输出飘得厉害。TL431 的典型动态阻抗只有 0.2Ω,比稳压二极管稳得多,但它的输出阻抗再低,直接驱动 DAC 的参考端仍然可能被拉低。加一级运放跟随器的作用就是把基准源的输出阻抗降到接近零,保证 TLC5615 的 Vrefin 在转换过程中纹丝不动。文档里写得很清楚:“用 OPA2107 作为跟随器,减小 2.5V 基准电源的阻抗,再送入 TLC5615 参考电压端。” 这句话看着简单,但实际调试时如果你省掉这个跟随器,会发现 DAC 输出和理论值差个几十毫伏,而且随负载变化。
2.3 MOS 管负反馈环路:输出电压到底怎么算
TLC5615 的输出送到 OPA2107 的反相端,OPA2107 的输出驱动 IRF9Z24N(文档里也写成 F9Z24N,是 P 沟道 MOS 管)的栅极,MOS 管的漏极接电源输入,源极作为输出。输出端用 RW1(10K 电位器)分压,取一部分反馈到 OPA2107 的同相端,构成负反馈。文档给出的输出电压公式是:
Vo = Vin × (RW / RWL)
其中 Vin 是 OPA2107 同相端输入的 DAC 电压,RW 是电位器总阻值,RWL 是电位器下部分电阻。这个公式说明输出电压和 DAC 输出是线性关系,比例由电位器分压比决定。实际搭电路时,RW1 的调节直接决定输出范围。比如你希望 DAC 输出 0 到 5V 时,电源输出 0 到 12V,那分压比就要设成 12/5 左右。但注意,这个比例不能无限大,因为 MOS 管和运放都有供电电压限制,文档里也提醒了交流供电不要超过 20V,直流不要超过 35V,主要就是受后级运放耐压、TL431 耐压和 7812 耐压值限制。
2.4 供电与保护链路:7812 为什么必须加在 7805 前面
文档里的供电部分写得很细:P2 接线柱输入,D1 到 D4 四个 IN4007 整流,C6 滤波。整流滤波后电压送到 7812,再由 7812 输出给 7805。这里的关键是 7805 的耐压值只有 15V,如果输入电压超过 15V,7805 很容易过热甚至击穿。加一级 7812 先把电压稳到 12V,再给 7805,就安全多了。这个细节在很多简化版电路里会被省掉,但实际做出来连续工作半小时就能摸到 7805 烫手。文档里还提到 7812 主要为保护 7805,这个设计思路值得保留。过流检测部分用 R11 做电流检测电阻,把电流转成电压,经过 U4A 反相放大,再和 2.5V 比较,超过就输出低电平给单片机,单片机控制 TLC5615 输出归零,同时蜂鸣器报警。这个保护逻辑在程序里就是一个中断或轮询判断,后面写代码时会具体说。
3. 照着文档搭环境:从电路图到最小系统的落地步骤
3.1 先分清数码管版和液晶版,别拿错图
文档里给了两套总体电路图,一套是数码管显示版,一套是液晶版。数码管版用四位一体共阳数码管,P24 到 P27 做位选,通过 8550 三极管驱动,P0 口直接接数码管段选。液晶版用 LCD1602,P0 口接数据线,P25 到 P27 接控制线,还加了一个 3K 的电位器调对比度。两套图的单片机最小系统、DAC 部分、MOS 放大部分、过流保护部分基本一致,区别只在显示和按键引脚分配。如果你手头只有数码管,就照数码管版搭;如果要用 LCD1602,注意液晶版的 P0 口接了 8 位排阻做上拉,因为 LCD1602 的数据线需要上拉,而数码管版不需要。文档里特别写了“数码管的阴极端直接接单片机的 P0 口,而不需上拉电阻”,原因是 STC89C51 的 P0 口作为输入时相当于数码管作为上拉,这个细节在液晶版里就不适用了。
3.2 单片机最小系统:复位和晶振的元件值别乱改
文档里的复位电路是 C1(10uF)和 R2(10K)构成上电复位,K2 做手动复位。晶振是 Y1(12MHz)配 C2、C3(30pF)。这两个值不要随便改。12MHz 晶振配 30pF 负载电容是 51 单片机的经典组合,换成 11.0592MHz 虽然串口波特率更准,但这份设计里没用串口,12MHz 能让定时器扫描按键和刷新显示更快。C1 用 10uF 是为了保证上电时 RST 脚有足够长的高电平时间,让单片机完成复位。如果你手头只有 22pF 电容,也能用,但可能起振慢一点。按键部分用独立按键,K1 到 K5 分别接 P10 到 P14,按键弹起时 P20 到 P23 是弱上拉高电平,按下时对应 IO 变低。文档里说“按键选用独立按键,扫描时间短,使程序更简单且扫描时间更短,从而提高稳定性”,这个选择是对的,矩阵键盘虽然省 IO,但扫描逻辑复杂,对这份设计的按键数量来说没必要。
3.3 焊接顺序和上电检查:先低压后高压
拿到板子后,我一般会按这个顺序焊:先焊单片机座、晶振、复位电路、按键,然后焊 7805 和 7812 及其滤波电容,再焊 TLC5615、TL431、OPA2107 和 MOS 管,最后焊数码管或 LCD 和蜂鸣器。焊完先不插单片机,用万用表测 7805 输出是不是 5V,7812 输出是不是 12V。确认无误后插上单片机,写一个最简单的按键扫描加数码管显示程序,看按键能不能正常响应。这一步过了再焊 DAC 和 MOS 部分,否则一旦高压部分有问题,可能把单片机一起带走。文档里没有写焊接顺序,但这是实际调试时比较稳妥的做法。
3.4 关键元件参数表:照着买不会错
| 元件 | 型号/参数 | 作用 | 注意点 |
|---|---|---|---|
| 单片机 | STC89C51 | 主控 | 兼容 STC89C52、AT89S52 等 |
| DAC | TLC5615 | 数模转换 | 10 位串行,需 2.5V 基准 |
| 基准源 | TL431 | 产生 2.5V | 配两个电阻设定输出 |
| 运放 | OPA2107 | 跟随器和比较器 | 也可用 LM358 替代,但精度略低 |
| MOS 管 | IRF9Z24N | 功率输出 | P 沟道,注意散热 |
| 稳压 | 7812 + 7805 | 供电 | 7812 保护 7805 |
| 显示 | 四位共阳数码管或 LCD1602 | 人机界面 | 数码管需 8550 驱动 |
| 检流电阻 | R11(文档未标具体值) | 过流检测 | 根据最大电流选,一般 0.1Ω 到 1Ω |
4. 程序怎么写:按键扫描、DAC 驱动和过流保护的代码骨架
4.1 TLC5615 驱动函数:三根线怎么发数据
TLC5615 的时序是 16 位数据帧,前 10 位是有效数据,后面补 0。文档里给了逻辑时序图,但没给代码。下面这个函数是常见写法,引脚对应文档里的 P33(时钟)、P32(片选)、P34(数据):
// TLC5615 驱动,引脚定义按文档:P33=SCLK, P32=CS, P34=DIN sbit DAC_SCLK = P3^3; sbit DAC_CS = P3^2; sbit DAC_DIN = P3^4; void TLC5615_Write(unsigned int dat) { unsigned char i; dat &= 0x03FF; // 只取低 10 位,防止越界 DAC_CS = 0; // 片选拉低,开始传输 for(i = 0; i < 10; i++) // 先发 10 位数据,高位在前 { DAC_SCLK = 0; if(dat & 0x0200) // 判断最高位 DAC_DIN = 1; else DAC_DIN = 0; DAC_SCLK = 1; // 上升沿写入 dat <<= 1; } // 后面补 0,TLC5615 要求 16 个时钟周期 for(i = 0; i < 6; i++) { DAC_SCLK = 0; DAC_DIN = 0; DAC_SCLK = 1; } DAC_CS = 1; // 片选拉高,锁存输出 }逻辑说明:TLC5615 在片选拉低后,每个时钟上升沿采样数据线。先发 10 位有效数据,再发 6 个 0 补满 16 位。片选拉高时,DAC 更新输出。参数说明:dat 的范围是 0 到 1023,对应输出电压 0 到 5V(参考 2.5V 时)。如果你发现输出反了或者不动,先检查片选和时钟的极性,TLC5615 对时序比较敏感,线太长或者没有屏蔽容易受干扰。
4.2 按键扫描与电压步进:怎么让按键调压不跳变
文档里按键接 P10 到 P14,独立按键,按下为低电平。下面这个扫描函数做了 20ms 消抖,并且支持长按连续调整:
// 按键扫描,返回键值,0 表示无按键 unsigned char Key_Scan(void) { static unsigned char key_up = 1; // 按键松开标志 unsigned char key_val = 0; if(key_up && (P1_0 == 0 || P1_1 == 0 || P1_2 == 0 || P1_3 == 0 || P1_4 == 0)) { Delay_ms(20); // 消抖 key_up = 0; if(P1_0 == 0) key_val = 1; // K1 加 if(P1_1 == 0) key_val = 2; // K2 减 if(P1_2 == 0) key_val = 3; // K3 确认 if(P1_3 == 0) key_val = 4; // K4 设置 if(P1_4 == 0) key_val = 5; // K5 报警复位 } else if(P1_0 == 1 && P1_1 == 1 && P1_2 == 1 && P1_3 == 1 && P1_4 == 1) { key_up = 1; } return key_val; }逻辑说明:key_up 变量保证一次按下只响应一次,松开后才允许下一次。消抖时间 20ms 是经验值,太小会误触发,太大反应迟钝。参数说明:P1_0 到 P1_4 对应文档里的 K1 到 K5。实际调压时,每次按键让 DAC 数据加 1 或减 1,对应输出变化约 4.88mV。如果觉得步进太小,可以改成加 10 或减 10,但注意不要超过 1023。
4.3 过流保护逻辑:比较器输出怎么接进单片机
文档里过流检测的输出送到单片机,但没写具体接哪个引脚。根据电路图,U4B 的输出应该接一个 IO 口,比如 P35 或 P36。程序里可以轮询这个引脚,一旦检测到低电平(过流),立即把 DAC 输出设为 0,并置报警标志:
sbit OC_FLAG = P3^5; // 过流检测输入,按实际接线修改 sbit BEEP = P3^6; // 蜂鸣器控制,P36 void Check_OverCurrent(void) { if(OC_FLAG == 0) // 过流时比较器输出低 { Delay_ms(5); // 简单消抖,防止误触发 if(OC_FLAG == 0) { TLC5615_Write(0); // 切断输出 BEEP = 0; // 蜂鸣器响,P36 低电平导通 8550 while(OC_FLAG == 0); // 等待过流消失,或按 K5 复位 BEEP = 1; // 关蜂鸣器 } } }逻辑说明:过流时比较器输出低电平,单片机检测到后立即把 DAC 写 0,输出电压归零,同时蜂鸣器报警。参数说明:BEEP 接 P36,文档里写“当 P36 为高时,三极管不导通,为低时三极管导通蜂鸣器响”,所以 BEEP=0 是响,BEEP=1 是停。OC_FLAG 的引脚根据实际接线改,文档里没明确标,但一般用 P35 或 P37 这种空闲 IO。
5. 避坑与排查:调不出来的时候先看这几个地方
5.1 输出电压不随按键变化,DAC 输出始终为 0 或 5V
现象:按键按下后数码管显示的数字变了,但万用表测输出端电压不动,或者直接跳到最大。原因:TLC5615 的片选或时钟引脚接错,或者程序里引脚定义和实际接线不一致。文档里写的是 P33 时钟、P32 片选、P34 数据,但有人焊板子时习惯把 P30 和 P31 当串口用,结果占用了。解决:先用万用表测 TLC5615 的 7 脚电压,按键时看有没有变化。如果没有,检查 P32、P33、P34 到 DAC 的连线,以及程序里的 sbit 定义。另外确认 TLC5615 的 6 脚参考电压是不是 2.5V,如果参考电压是 0,输出永远是 0。
5.2 输出带负载就掉压,空载正常
现象:空载时输出电压很准,接上负载(比如 100Ω 电阻)后电压明显下降。原因:MOS 管 IRF9Z24N 的导通电阻不够低,或者散热不够导致温度升高后参数漂移。文档里选的 IRF9Z24N 是 P 沟道 MOS,导通电阻在几十毫欧级别,但如果你的负载电流超过 1A,压降和发热都会很明显。解决:先确认负载电流有没有超过设计值。如果确实需要更大电流,换导通电阻更低的 MOS 管,或者加散热片。另外检查 RW1 电位器的分压比是不是设得太高,导致运放输出已经饱和,没有调节余量。
5.3 过流保护误触发,一上电就报警
现象:刚上电还没接负载,蜂鸣器就响,输出被切断。原因:过流检测的比较器阈值设得太低,或者 R11 检流电阻取值太大,导致静态电流就被判定为过流。文档里 U4B 和 2.5V 比较,如果 U4A 的放大倍数太大,很小的电流就会让输出超过 2.5V。解决:先测 U4A 输出端的静态电压,正常应该接近 0V。如果偏高,检查 R11 的阻值,一般取 0.1Ω 到 0.5Ω 比较合适。另外确认 2.5V 基准是不是准的,TL431 的电阻分压有没有算错。
5.4 数码管显示闪烁或亮度不均
现象:数码管某一位特别暗,或者整体闪烁。原因:文档里数码管用 8550 三极管驱动位选,P24 到 P27 输出低电平时导通。如果限流电阻 R51 选得太大,亮度就不够;如果扫描频率太低,就会闪烁。文档里 R51 选 220Ω,这个值对应 5V 供电是合适的。解决:先确认 R51 是不是 220Ω,如果用了 1K 以上,换小。然后检查程序里的扫描频率,一般每位数码管点亮 1ms 左右,四位数码管刷新率就是 250Hz,人眼看不到闪烁。如果用了延时函数导致刷新太慢,把显示刷新放到定时器中断里。
5.5 7812 或 7805 发热严重
现象:上电几分钟后 7812 或 7805 烫手,甚至输出不稳。原因:输入电压太高,或者负载电流太大。文档里提醒交流供电不要超过 20V,直流不要超过 35V,但即使在这个范围内,如果输入是 20V 交流,整流滤波后峰值接近 28V,7812 上的压降就有 16V,乘以电流就是很大的功耗。解决:如果输入电压确实高,在 7812 前面加一个功率电阻分压,或者换开关电源方案。另外确认 7805 后面的负载有没有短路,单片机和其他芯片的供电电流一般不大,但如果数码管限流电阻太小,总电流也会上去。
6. 进阶玩法:把固定输出改成可编程步进电源
这份文档给的是基础版数控电源,按键直接调 DAC 数据,输出步进固定。实际用的时候,我习惯把输出电压做成可编程的步进模式,比如按一下加 0.1V,长按连续加,并且把设定值和实测值都显示在 LCD1602 上。具体做法是在程序里维护一个电压设定值变量v_set,单位是毫伏,按键修改这个变量,然后根据公式反算出 DAC 数据:
// 根据设定电压计算 DAC 数据,Vref=2.5V,输出范围 0-5V unsigned int Voltage_To_DAC(unsigned int mv) { // Vout = 2 * 2.5 * N / 1024 = 5 * N / 1024 // 所以 N = mv * 1024 / 5000 unsigned long tmp; if(mv > 5000) mv = 5000; // 限幅 tmp = (unsigned long)mv * 1024 / 5000; return (unsigned int)tmp; }这个函数把设定电压(毫伏)转成 DAC 数据,步进可以设成 100mV,按键一次加 100,长按连续加。显示的时候再把 DAC 数据反算回电压显示。注意这里算的是 DAC 输出端的电压,实际电源输出端还要乘以电位器分压比的倒数。如果你希望显示的是电源实际输出,就在这个基础上再乘一个系数。另外,过流保护触发后,除了切断输出和报警,还可以在 LCD 上显示“过流保护”字样,提醒用户检查负载。这些扩展都不难,核心的 DAC 驱动和反馈环路文档里已经讲透了,剩下的就是按自己的需求加逻辑。
从那以后我每次做电源类项目,都会先把基准电压和反馈分压比算清楚再动手焊板子,不然调到最后发现输出范围不对,返工特别麻烦。希望这份拆解能帮到你。
本文还有配套的精品资源,点击获取