大功率半导体激光器ADuC812恒流源数字PI闭环设计

大功率半导体激光器ADuC812恒流源数字PI闭环设计 简介这是一份面向大功率半导体激光器驱动电源设计的技术文献适合电子工程、电力电子及激光应用方向的研发人员与高年级学生参考。内容围绕ADuC812微控制器展开针对大功率激光器注入电流大、易受电流冲击的问题采用大功率MOSFET作为调整管并以霍尔电流传感器构成非接触式闭环反馈实现050A输出电流的线性控制稳流精度达到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%高可达百 kHz0.1~20A散热大PWM 开关80%~92%0.5%~2%低几 kHz1~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 mV0.5 W1.25 V大电流、噪声可控10 mΩ100 mV1.0 W2.5 V通用50 mΩ500 mV5.0 W12.5 V小电流、高精度功率管选型看三点线性区安全工作区、热阻和跨导。线性区工作的 MOSFET 要查 SOA 曲线很多管子标称电流很大但在几十伏压差下线性区 SOA 急剧缩水。热阻 θjc 决定散热器需求跨导决定环路增益。下面这段脚本可以在画图前把关键数字先估一遍。# 线性恒流级压差、功耗与结温快速估算 def linear_stage(vbus, vf, iout, rsense, theta_ja, t_amb25): vsense iout * rsense # 采样电阻压降 vdrop vbus - vf - vsense # 调整管压差 p_mos vdrop * iout # 调整管功耗 t_j t_amb p_mos * theta_ja # 估算结温 return dict(vsensevsense, vdropvdrop, p_mosp_mos, t_jt_j) print(linear_stage(vbus5.0, vf2.0, iout10, rsense0.01, theta_ja1.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 到 5VVth 在 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直到稳态误差落进允许范围。参考经验值如下表实际要以你的环路增益和采样延迟为准。KPKI响应特征0.30.02慢无过冲稳态误差大0.80.05较快过冲约 5%收敛1.50.15快过冲 15%接近振荡2.50.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 的积分项定期清零一次防止缓慢累积的积分偏置把设定值带偏这是纯模拟环里没有、数字环里才需要注意的一个细节。本文还有配套的精品资源点击获取