简介:这是一份面向大功率半导体激光器驱动电源设计的技术文献,适合电子工程、电力电子及激光应用方向的研发人员与高年级学生参考。内容围绕ADuC812微控制器展开,针对大功率激光器注入电流大、易受电流冲击的问题,采用大功率MOSFET作为调整管,并以霍尔电流传感器构成非接触式闭环反馈,实现0~50A输出电流的线性控制,稳流精度达到0.1A。文中还给出过流保护电路与软件中值滤波算法,用于提升抗冲击能力和工作稳定性,并通过与大功率半导体激光器的联调测试验证性能指标。包内为1个PDF文件,约224KB,涵盖系统框图、硬件设计、软件流程与测试分析,可作为恒流源方案设计、器件选型及电路调试的参考。目前已有103人学习,适合需要快速理解数控恒流源实现思路的读者。
1. 大功率半导体激光器为什么非恒流不可,ADuC812 顶在哪
先给一个反直觉结论:给大功率半导体激光器接一个高精度恒压源,比接一个粗糙的恒流源更容易烧管。它的正向压降有约 -2mV/℃ 的负温度系数,恒压驱动时结温一升、压降一降,电流立刻增大,结温再升,这条正反馈链在毫秒级就能把电流推到灾变光学损伤阈值以上,所以驱动目标只有一个:锁住电流。
恒流源电路要同时满足输出几十安培、纹波低、负载短时不失控、长期温漂可控这几个矛盾要求。传统分立运放搭模拟闭环再外挂 ADC 的做法,走线一多,基准和地弹就难对齐。ADuC812 把 8052 内核、8 通道 12 位 ADC 和两路 12 位电压输出 DAC 集成在单芯片,正好承担设定、回读、保护、通信四件事:DAC 给电流设定基准,ADC 差分读回采样电阻压降,UART 下指令并上报状态,看门狗兜底。这套结构适合实验室激光器驱动、泵浦源恒流供电这类要软件可编程电流曲线的场景。
2. 恒流源电路拓扑怎么选:线性、开关与混合的取舍
2.1 先算压差预算,再谈用哪种拓扑
大功率半导体激光器的恒流源设计电路,第一步不是画图,是算散热。线性恒流级里,调整管承受的压差等于母线电压减去激光器正向压降、再减去采样电阻上的压降,这个压差乘以输出电流就是管子上的功耗,全部变成热。
举个例子,输出 10A,激光器正向压降 2.0V,采样电阻 10mΩ 上压降 0.1V,母线取 5V,那么调整管压差就是 5 - 2.0 - 0.1 = 2.9V,功耗 29W。这个数字决定了你必须上多大的散热器,也决定了线性方案在电流继续往上走时是否还成立。
如果母线取 3.3V,压差降到 1.2V,功耗 12W,散热压力立刻小一半。所以选型第一件事是压低母线电压,让母线刚好覆盖「激光器最高压降 + 采样压降 + 调整管最小工作压差」。最小工作压差一般留 0.5V 到 1V,留太少会掉出恒流区,输出电流随负载漂移。
提示:母线电压不要按激光器标称压降算,要按最高工作结温下的最低压降算,否则高温时调整管压差被抬高,功耗和结温都会超预期。
2.2 线性、PWM 开关、线性加预稳压三种拓扑对比
常见做法有三种。纯线性:一颗功率 MOSFET 或达林顿管工作在线性区,响应快、纹波低、没有开关噪声,缺点是效率低、发热大。PWM 开关恒流:用 Buck 或同步整流拓扑,效率高,但输出纹波大、环路慢,激光器对这种电流纹波很敏感。混合方案:前级用开关电源做预稳压,把母线电压跟踪到激光器压降加最小压差,后级仍用线性管做精细恒流,兼顾效率和纹波。
| 拓扑 | 典型效率 | 输出电流纹波 | 环路带宽 | 适合电流 | 主要代价 |
|---|---|---|---|---|---|
| 纯线性 | 20%~50% | <0.1% | 高,可达百 kHz | 0.1~20A | 散热大 |
| PWM 开关 | 80%~92% | 0.5%~2% | 低,几 kHz | 1~100A | 纹波、EMI |
| 线性+预稳压 | 60%~80% | <0.1% | 高 | 1~50A | 控制复杂 |
对实验室激光器驱动、泵浦源这类电流不大但纹波要求高的场景,纯线性更常见;对几十安培的工业泵浦,混合方案更现实。选型时先把纹波指标摆出来,再决定效率能退让多少。
2.3 ADuC812 在环路里扮演什么角色
这里有个容易踩的坑:不要让 ADuC812 直接承担高速电流环。8052 内核跑几十兆指令,ADC 单次转换在微秒量级,做出来的数字环带宽通常只有几百赫兹到几 kHz,压不住激光器的动态。常见做法是把 ADuC812 放在「慢环」位置:DAC 输出一个稳定的设定电压,模拟误差放大器加调整管构成快环;ADC 回读采样电阻上的电压用于显示、校准和限流判定。
信号链是:DAC 输出 Vset → 误差放大器反相端接放大后的采样电压 → 输出驱动 MOSFET 栅极 → MOSFET 漏极串激光器和采样电阻 → 采样电压经仪表放大器放大后回误差放大器。模拟环负责微秒级稳定,ADuC812 负责设定、监控、软启动序列和串口通信,两边职责清晰,调试时不会互相甩锅。
2.4 采样电阻和功率管的选型依据
采样电阻阻值在信噪比和功耗之间取平衡。阻值大,采样电压高、好测,但功耗和压差都大;阻值小,功耗低,但采样信号容易被噪声淹没。常见范围是 5mΩ 到 100mΩ,大功率场景多用 5mΩ 到 20mΩ 的锰铜或四端子电阻。
| 采样电阻 | 10A 时压降 | 10A 时功耗 | 放大 25 倍后电压 | 适用场景 |
|---|---|---|---|---|
| 5 mΩ | 50 mV | 0.5 W | 1.25 V | 大电流、噪声可控 |
| 10 mΩ | 100 mV | 1.0 W | 2.5 V | 通用 |
| 50 mΩ | 500 mV | 5.0 W | 12.5 V | 小电流、高精度 |
功率管选型看三点:线性区安全工作区、热阻和跨导。线性区工作的 MOSFET 要查 SOA 曲线,很多管子标称电流很大,但在几十伏压差下线性区 SOA 急剧缩水。热阻 θjc 决定散热器需求,跨导决定环路增益。下面这段脚本可以在画图前把关键数字先估一遍。
# 线性恒流级压差、功耗与结温快速估算 def linear_stage(vbus, vf, iout, rsense, theta_ja, t_amb=25): vsense = iout * rsense # 采样电阻压降 vdrop = vbus - vf - vsense # 调整管压差 p_mos = vdrop * iout # 调整管功耗 t_j = t_amb + p_mos * theta_ja # 估算结温 return dict(vsense=vsense, vdrop=vdrop, p_mos=p_mos, t_j=t_j) print(linear_stage(vbus=5.0, vf=2.0, iout=10, rsense=0.01, theta_ja=1.5)) # {'vsense': 0.1, 'vdrop': 2.9, 'p_mos': 29.0, 't_j': 68.5}逻辑说明:函数按母线电压、激光器压降、输出电流、采样电阻、结到环境热阻依次算出采样压降、调整管压差、调整管功耗和估算结温。参数说明:theta_ja是从结到环境的热阻,含散热器和界面,取 1.5℃/W 时 29W 对应 43.5℃ 温升;vf要填高温下的最低值而不是常温标称值。结温估算只用于初筛,实测要用热像仪或贴片热电偶复核,误差常在 15% 以上。
3. ADuC812 的 DAC/ADC 与数字 PI 恒流闭环实现
3.1 片上资源与基准、时钟配置要点
ADuC812 的 ADC 是 8 通道 12 位逐次逼近型,DAC 是两路 12 位电压输出。DAC 输出摆幅取决于基准,内部基准或外部基准都可以,做恒流设定时更推荐外部低漂移基准,因为内部基准的温漂会直接变成电流设定漂移,而且是无法通过软件校正的。
时钟和转换时序要配好。ADC 转换时间由主时钟分频决定,采样速率越高,单次转换越快,但噪声也越大。对电流监控这种慢变量,不需要跑到满速,把采样率压在几 kHz 到几十 kHz,再配合多次平均,读数更稳。DAC 输出端要加缓冲:在 DAC 和误差放大器之间加一级运放跟随器,可以隔离 DAC 输出阻抗随码值变化带来的误差。
3.2 用 DAC 设定电流基准的初始化代码
/* aduc_laser.c - ADuC812 恒流源骨架,寄存器名以官方头文件为准 */ #include <aduc812.h> #define DAC_FS 4095 /* 12 位 DAC 满量程码 */ #define VREF_V 2.5f /* DAC 基准 2.5V */ #define GAIN_ERR 25.0f /* 仪表放大器对采样电压的增益 */ #define RSENSE_OHM 0.01f /* 采样电阻 10 mΩ */ /* 把目标电流(A)换算成要写进 DAC 的 12 位码 */ unsigned int current_to_code(float i_target) { float v_sense = i_target * RSENSE_OHM; /* 采样电阻上的压降 V */ float v_dac = v_sense * GAIN_ERR; /* 误差放大器比较端的设定电压 */ float code = v_dac / VREF_V * DAC_FS; if (code < 0.0f) code = 0.0f; if (code > DAC_FS) code = DAC_FS; return (unsigned int)(code + 0.5f); } void dac_set(unsigned int code) { DAC0L = code & 0xFF; /* 写低 8 位 */ DAC0H = (code >> 8) & 0x0F; /* 写高 4 位,触发更新 */ }逻辑说明:current_to_code先由输出电流和采样电阻算出采样压降,再乘以放大器增益得到 DAC 需要输出的设定电压,最后按基准折算成 12 位码。dac_set把码拆成高低两半写入寄存器,高字节写入时更新输出。参数说明:GAIN_ERR要和硬件上仪表放大器的实际增益一致,RSENSE_OHM用实际阻值而不是标称值,否则设定电流会有固定比例误差。VREF_V必须和实际基准源对应,用外部基准时按实测值填。
3.3 ADC 差分采样与电流换算
#define ADC_CH_DIFF 0x08 /* 差分通道编码示例,实际请对照手册 ADCCON2 位定义 */ float read_current(void) { unsigned int raw; ADCCON2 = ADC_CH_DIFF; /* 选差分输入对与增益 */ ADCCON1 = 0x40; /* 启动单次转换 */ while (!(ADCCON1 & 0x10)) { } /* 等待转换结束标志 */ raw = ((unsigned int)ADCDATAH << 4) | (ADCDATAL >> 4); /* 拼成 12 位 */ return (float)raw / 4096.0f * VREF_V / GAIN_ERR / RSENSE_OHM; }逻辑说明:read_current启动一次单次转换,轮询完成标志后把高低字节拼成 12 位码,再按基准、放大增益和采样电阻反推实际电流。用差分输入是为了抑制地和共模干扰,采样电阻两端直接进差分对效果最好。参数说明:ADC 满量程码是 4096 而不是 4095,换算时别用错,否则满量程附近会差半个 LSB;等待标志的循环在高电流场合建议加超时计数,避免转换异常时死等。
注意:采样电阻要四端子接法,电流端走大电流,测量端单独引出,否则焊点和走线的压降会被算进反馈,电流越大偏差越大。
3.4 数字 PI 调节器与限流判定
static float integ = 0.0f; #define KP 0.8f #define KI 0.05f #define INT_LIMIT 500.0f /* 设定期望电流、反馈实际电流,输出 DAC 码的修正量 */ float pi_step(float i_set, float i_fb) { float err = i_set - i_fb; integ += KI * err; /* 积分累加 */ if (integ > INT_LIMIT) integ = INT_LIMIT; /* 抗积分饱和 */ if (integ < -INT_LIMIT) integ = -INT_LIMIT; return KP * err + integ; }逻辑说明:误差是设定电流减反馈电流,比例项提供快速响应,积分项消除稳态误差。积分限幅防止长时间偏差导致积分饱和,恢复时输出过冲。参数说明:KP决定响应速度,太大引起振荡;KI决定稳态误差消除速度,太大会低频摆动。实际调试时先用纯比例,把KP加到略微振荡再退回一半,然后逐步加KI。
限流判定用一张阈值表:
| 参数 | 取值示例 | 触发动作 |
|---|---|---|
| 电流上限 | 设定值 × 1.1 | 立即把 DAC 码拉回 0 |
| 上升速率 | 0.5 A/ms | 软启动斜坡 |
| 采样电阻过压 | 采样压降 × 1.2 | 关断并置故障标志 |
| 通信超时 | 1 s 无指令 | 保持当前值或按配置关断 |
3.5 上位机设定与保护阈值下发
串口是 ADuC812 和上位机之间的常用通道。协议不用复杂,固定帧头、命令字、数据、校验就够。常见做法是把设定电流、斜坡时间、电流上限和故障复位做成四个命令字,主机周期下发,从机回一帧状态。
帧解析要有超时和长度校验,防止半包导致误动作。故障状态用锁存:一旦触发限流或过压,置一个锁存位,只有上位机显式发复位命令才清除,避免自动恢复反复冲击激光器。DAC 设定值下发后,先按斜坡逼近,再交给模拟环,数字环只在这种慢变过程中起作用,不要把 PI 直接用在高频扰动上。
4. 大功率级怎么落地:功率管、散热与软启动
4.1 MOSFET 在线性区的工作点怎么定
MOSFET 当恒流调整管,要让漏极电流由栅极电压控制、对漏源电压不敏感,也就是工作在饱和区,条件是 Vds > Vgs - Vth。大电流下 Vgs 可能被推到 4V 到 5V,Vth 在 2V 到 4V,这个差值可能超过 2V,意味着漏源压差必须留够,否则管子落进线性区(欧姆区),电流随负载变化,恒流能力直接丢。
设计时把这一条当硬约束:压差预算里先减掉 Vgs - Vth 的余量,再检查 SOA 曲线。SOA 上要按实际「漏源电压 × 电流 × 脉宽」去查,不能只看连续电流标称值。管子选低 Vth、大 SOA 的线性专用型号,普通开关管在线性区长时间工作很容易二次击穿。
4.2 采样电阻的开尔文连接与走线
采样电阻用四端子器件,电流端子和测量端子分开。PCB 上电流走线从电阻两端大铜皮进出,测量线从电阻焊盘内侧单独引出,两条细线等长、紧贴走,形成差分对。测量线不得穿过功率电流路径,否则会捡到走线上的磁场噪声。
增益级用仪表放大器或三运放结构,输入共模范围要覆盖采样电阻的共模电压。采样电阻靠近激光器负极,测量地最好单点接到功率地,避免大电流地回路和小信号地混在一起。滤波器在仪表放大器输入加 RC 低通,截止频率压在几十 kHz,能挡掉大部分开关噪声。
4.3 软启动、限流与关断保护
上电时不让电流一下跳到设定值。做法是让固件把设定码按斜坡递增,例如每 1ms 增加设定值的 1%,到目标值停下。斜坡期间 PI 环不介入或只做上限判定,避免积分项冲高。
关断保护要有三条冗余:软件限流、硬件比较器限流和保险丝。软件限流靠 ADuC812 的 ADC 读数判定,响应慢但灵活;硬件比较器直接拉低栅极驱动,响应在微秒级;保险丝是最后一道。故障时用继电器或 MOSFET 切断激光器回路,而不是只把 DAC 拉到零,因为调整管失效短路时 DAC 拉零不起作用。
4.4 散热设计与结温控制
散热器按功耗加 30% 余量选。界面用导热垫或导热硅脂,界面热阻控制在 0.2℃/W 以内。散热器上装 NTC,让 ADuC812 的 ADC 顺带读温度,超过阈值时降额或关断,形成热保护闭环。
连续工作时结温要压在最大结温的 70% 以内。29W 功耗配 1.5℃/W 的结到环境热阻,环境 40℃ 时结温约 83.5℃,离 150℃ 结温上限还有空间,但长期高结温会加速焊点疲劳,实际工程上更愿意把它压到 100℃ 以下。
4.5 上电联调顺序与示波器看点
联调按顺序来,别一上来就接激光器。第一步空载,用万用表测 DAC 输出随设定值变化是否线性;第二步接假负载电阻(功率要够),从小电流开始,测采样电阻压降和反馈是否一致;第三步加 PI,给设定值一个阶跃,看电流响应的上升时间和过冲;第四步才接激光器,起始电流设在阈值以下。
示波器看点:一是采样电阻上的纹波,用 AC 耦合、20MHz 带宽限制、弹簧地线测;二是栅极驱动波形,看有无振荡;三是母线电压跌落,大电流时母线塌陷会让调整管压差变化,进而影响恒流精度。
5. 精度与稳定性调优:PI 整定、纹波测量与温漂校准
5.1 PI 参数按阶跃响应整定
先把KI置零,KP从小往大加,每加一档给一次设定阶跃,看电流响应。出现等幅振荡的KP记为临界值,回退到它的 40% 到 50%,然后逐步加KI,直到稳态误差落进允许范围。参考经验值如下表,实际要以你的环路增益和采样延迟为准。
| KP | KI | 响应特征 |
|---|---|---|
| 0.3 | 0.02 | 慢,无过冲,稳态误差大 |
| 0.8 | 0.05 | 较快,过冲约 5%,收敛 |
| 1.5 | 0.15 | 快,过冲 15%,接近振荡 |
| 2.5 | 0.30 | 等幅振荡,不可用 |
整定在最大工作电流下做,因为跨导和环路增益随电流变化,小电流整好的参数到大电流可能振荡。若实在压不住,先降低 ADC 采样延迟,把平均值窗口减小,再看效果。
5.2 电流纹波的正确测量方式
纹波要在采样电阻两端测,不在负载两端测。示波器设 AC 耦合、20MHz 带宽限制、1mV/div 量程,用短地线弹簧而不是长鳄鱼夹,否则测到的是地环路噪声。测到的纹波电压除以采样电阻就是纹波电流。
如果纹波偏大,先看误差放大器的补偿电容是不是偏小,再看仪表放大器输出是否被电源纹波调制。ADuC812 的数字部分切换时会有电流尖峰,DAC 输出端加 RC 低通能挡住它耦合进设定电压。
5.3 温漂校准与多点标定
恒流源连续工作后机箱温度会上升,采样电阻和基准都会漂。做两点校准,分别在冷机和热机后测实际电流,把偏差拟合成线性修正系数写回设定值。
# 两点温漂校准:用两个温度点的实测电流修正设定码 def fit_calib(i_set, i_meas_t1, i_meas_t2): k = (i_meas_t2 - i_meas_t1) / (i_meas_t2 + i_meas_t1) # 相对漂移系数 # 修正后设定电流,抵消测量漂移 return i_set * (1.0 - k) print(fit_calib(10.0, 9.98, 10.04)) # 输出修正后的设定电流逻辑说明:函数按两个温度点的实测电流算出相对漂移系数,再反推到设定电流上。参数说明:两个实测电流要在同一设定值下采集,温度点相差越大拟合越准;系数写回固件后要重新验证,不要只信一次标定。
5.4 长期稳定性检查
正式用之前跑至少 8 小时连续老化,每小时记一次电流、采样电阻温度和结温。漂移超过 0.5% 就查是基准漂、采样电阻漂还是散热不足。长期运行把 PI 的积分项定期清零一次,防止缓慢累积的积分偏置把设定值带偏,这是纯模拟环里没有、数字环里才需要注意的一个细节。
本文还有配套的精品资源,点击获取