news 2026/10/27 23:44:46

基于STM32的DCM模式BUCK变换器:硬件设计到PI调参实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于STM32的DCM模式BUCK变换器:硬件设计到PI调参实战

简介:面向STM32单片机毕设与课程设计场景的完整DCM模式BUCK变换器设计工程,适合电子、嵌入式方向学生参考实现降压变换器的闭环控制。压缩包共227个文件,包含60个.h头文件与55个.c源码文件,覆盖STM32初始化配置、定时器PWM生成、ADC电压采样、PID控制算法等核心逻辑;另附原理图与PCB工程文件(schdoc/pcbdoc)、芯片封装库以及PDF、Markdown说明文档,还有工程配置、调试日志和README,便于按模块研读与二次开发。包体约32.62MB,已有153人学习浏览。整套资料从硬件选型、电路布局到固件实现均有体现:硬件侧涵盖开关管驱动、电感电容选型及反馈检测电路;软件侧可直接对照STM32外设驱动代码,理解DCM断续模式下输出电压与占空比、开关频率的关系,掌握其稳态分析与控制策略。同时提供可编译的工程文件和辅助脚本,能帮助快速复现实验环境,适合课程答辩、毕设冲刺及电源变换入门者深度练习。

1. 基于STM32的DCM模式BUCK变换器:一半时间焊板子,一半时间调PI

看到“基于STM32的DCM模式BUCK变换器”这个题目,大多数人以为它是个电源硬件题,做起来才发现时间全花在软件上。它要做的事很具体:用STM32输出PWM驱动一只MOS管,电感和二极管、电容组成降压电路,ADC实时采样输出电压,数字PI调节占空比,让电压在负载变化时稳在目标值。DCM是电感电流断续模式,每个开关周期电感能量都放空,轻载效率高、动态响应直接,因此在课程作业和毕设里出镜率很高。适合谁:想做数字电源方向的本科生,想在课设里一次打通STM32定时器、ADC、中断的嵌入式学生,以及刚开始接触开关电源控制的工程师。这里不讲解压包内容,只把做这个方向真正的功夫——电路参数、采样点、PI调参和调试手段——讲透。

2. DCM模式下的BUCK主电路与STM32控制分工:电感临界值、采样点与外设分配

DCM这个模式看着只是电感电流断流,但正是这一点改变了整个控制设计的前提。CCM下BUCK是二阶系统,控制到输出的小信号传递函数带有右半平面零点,数字补偿做起来别扭;DCM下电感电流在每个周期末归零,输出对占空比的响应退化成近似一阶系统,没有右半平面零点,理论上更容易伺候。代价是控制增益不固定,会随输入电压和负载跑。毕设里不需要把传递函数推导到多深,但得知道“增益会变”这件事,后面调PI才不会对着示波器发呆。

2.1 DCM的三个工作阶段:为什么这个模式适合数字控制

一个开关周期内,DCM-BUCK拆成三段看。第一阶段,开关管导通,输入电源通过电感和负载通路,电感电流从零线性上升,斜率近似为(Vin-Vout)/L。第二阶段,开关管关断,续流二极管导通,电感电流从峰值线性下降,降到零为止,斜率为-Vout/L。第三阶段,二极管也截止,电感电流保持为零,负载完全靠输出电容供电,开关节点电压回落到近似Vout。前两个阶段完成能量传递,第三个阶段只是让系统喘口气。

这个三阶段划分直接决定控制设计。好的一面是DCM下没有CCM那个讨厌的右半平面零点,环路相位裕度好凑,用简单的PI就能压住。不好的一面是,三角形电流在一个周期内传递的能量与占空比的平方近似成正比,控制增益天然非线性;负载越轻,等效增益变化越明显。毕设做DCM通常把负载范围限定得窄一点,比如0.2A到1A,设计时让最低负载也落在DCM区间,这样PI整定只需在有限几个工作点上验证。

另一个实际现象:DCM第三阶段,开关节点SW波形会有振铃。这是电感寄生电容、绕组分布电容和二极管结电容一起谐振出来的,幅值可以到几伏。振铃本身不致命,但它会污染ADC采样。很多第一次做这个项目的人把采样放在PWM周期任意时刻,读回来的电压乱跳,最后发现根子在这里。所以软件上的采样触发必须和PWM硬件同步,第3章会专门讲怎么绑。

2.2 电感、电容与开关频率计算:保证整个负载范围都断续

DCM和CCM的分界电感公式是:Lcrit=(1-D)×R/(2×f)。D是稳态占空比,R是等效负载电阻Vout/Iout,f是开关频率。电感小于这个值,就工作在DCM。

拿毕设最常见的指标算一遍:输入12V,输出5V,输出电流范围0.2A到1A,开关频率定为50kHz。占空比D≈5/12=0.42,满载1A时R=5Ω,Lcrit=5×0.58/(2×50000)=29μH;轻载0.2A时R=25Ω,Lcrit=145μH。想在整个负载范围保持DCM,看最苛刻的点——满载时最容易滑进CCM,所以电感要取小于29μH的值。实际取22μH,满载留了余量,轻载更不会断流。

电感定了以后,峰值电流按压差算:Ipk=(Vin-Vout)/L×D×T=(12-5)/22μ×0.42×20μ≈2.67A。MOS管按两倍裕量选,耐压30V以上、电流5A以上,常见型号IRLR2905、AO4406A都够。续流二极管务必用肖特基,SS54这类即可,普通快恢复管的反向恢复电荷在DCM下会变成明显损耗和额外振铃,实测效率能差出好几个点。

输出电容纹波在这个阶段主要由放电决定,粗算ΔV≈Iout×T/C。1A、20μs、470μF,纹波约43mV。如果指标要20mV,就得加大电容或提高频率后重新折中。开关频率、电感、电容三者互相牵制,建议先定频率,再算电感,最后用电容补纹波。

项目取值依据
输入电压12V常见毕设输入
输出电压5V控制目标
负载范围0.2~1ADCM工作区间
开关频率50kHz分辨率和噪声的折中
电感22μH满载Lcrit=29μH取小
输出电容470μF纹波约43mV
续流二极管SS54肖特基降低反向恢复损耗
MOS管IRLR2905Vds>30V,Id>5A

2.3 STM32在环路中的分工:PWM、ADC触发和中断优先级一张表格理清

闭环回路的实时路径是:TIM1生成PWM,占空比由PI决定;TIM1的触发信号同步启动ADC采样;ADC转换完成后进入中断,在中断里读取反馈、执行PI计算、更新下一次PWM脉冲;主循环只负责显示、按键和状态切换,不参与环路计算。这样的架构保证控制周期严格等于PWM周期,不会因为主循环里某段代码跑久了而抖动。

外设分配可以按下面这张表落地。TIM1_CH1做PWM输出,中心对齐模式;TRGO触发ADC;一路ADC通道采集输出电压分压值;两路DAC留作调试信号;另留一个GPIO接硬件过流比较器的输出,做快速保护。

外设引脚/资源作用
TIM1_CH1PA8PWM输出,中心对齐模式
TIM1 TRGO内部触发ADC启动采样
ADC1_IN5PA5输出电压分压后采样
DAC1 / DAC2PA4 / PA5调试输出,第5章用
GPIO EXTIPB0过流比较器,快速关断

中断优先级必须明确:ADC转换完成中断的优先级高于串口调试和系统tick。环路周期被串口阻塞几十微秒,输出就跟着抖几十微秒,示波器上看到的是开关周期忽长忽短,排查起来非常绕。如果上了FreeRTOS,PI计算别放在线程里,放在中断里做完,只通过标志位把结果交给主循环。调度延迟对数字电源的环路来说是灾难,宁可在主循环里少做点事,也别让环路等任务切换。

3. 用STM32把DCM-BUCK闭环跑起来:中心对齐PWM、ADC触发采样与PI控制代码

这一章用标准库写法描述,寄存器思路可以直接搬。代码分三段:TIM1配置、ADC加DMA采样与滤波、PI控制器与占空比更新。每个代码块后面说清为什么这样写、参数怎么改、失败时重点看哪里。

3.1 先配置TIM1:中心对齐PWM和TRGO触发ADC为什么是绝配

中心对齐模式下,计数器从0升到ARR再降回0,PWM输出关于周期中心对称。Update事件发生在计数器到达ARR或归零时,对应的是PWM周期内开关动作已经结束、电感电流回到零附近的时刻。在DCM-BUCK里,这个时刻正好落在第三阶段,ADC在这里触发,采样到的开关节点相对干净,能避开续流二极管反向恢复带来的毛刺。所以TIM1的配置不只是出个PWM,它还决定了整条采样链路的质量。

/* 时钟使能:TIM1、GPIOA、ADC1一起打开 */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC1, ENABLE); /* PA8复用推挽输出,用于TIM1_CH1 */ GPIO_InitTypeDef gi; gi.GPIO_Pin = GPIO_Pin_8; gi.GPIO_Mode = GPIO_Mode_AF_PP; gi.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &gi); /* 中心对齐模式1,ARR=719 */ TIM_TimeBaseInitTypeDef tb; tb.TIM_Prescaler = 0; tb.TIM_CounterMode = TIM_CounterMode_CenterAligned1; tb.TIM_Period = 719; tb.TIM_ClockDivision = 0; TIM_TimeBaseInit(TIM1, &tb); /* PWM模式2,初始比较值180,占空比25% */ TIM_OCInitTypeDef oc; oc.TIM_OCMode = TIM_OCMode_PWM2; oc.TIM_Pulse = 180; oc.TIM_OutputState = TIM_OutputState_Enable; oc.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init(TIM1, &oc); /* 用Update事件作为TRGO,触发ADC采样 */ TIM_SelectOutputTrigger(TIM1, TIM_TRGOSource_Update); /* 主输出使能,启动定时器 */ TIM_CtrlPWMOutputs(TIM1, ENABLE); TIM_Cmd(TIM1, ENABLE);

逻辑说明:TIM1挂在APB2上,计数时钟72MHz。中心对齐模式下完整PWM周期是2×(ARR+1)个计数时钟,所以ARR=719时开关频率为72M/(2×720)=50kHz。Pulse=180意味着比较值占720个计数的25%,对应一个偏保守的初始占空比,环路跑起来以后这个值会被PI接管。PWM模式2的输出极性是电平反相,配合中心对齐模式1,波形在周期中间完成翻转,实测电磁噪声比边沿对齐模式更小。

预分频这里尽量保持为0,用ARR调频率。如果把预分频设成1,计数时钟变36MHz,要达到同样50kHz,ARR变成359,占空比量化步进直接翻倍,PWM分辨率变差。这个细节很多人初始化时随手写个分频,直到输出静差调不下去才回头找原因。要降低开关频率来提升分辨率,正确做法是保持PSC=0,把ARR加大,比如ARR=1799对应20kHz,占空比细分提高到1800级,约等于11bit分辨率。

3.2 采样部分:ADC外部触发加DMA滤波,把毛刺压下去

ADC由TIM1 TRGO硬件触发,每次PWM周期启动一次规则转换,DMA把结果循环搬进内存。CPU不需要盯着转换完成标志,只在PI要读数据时从数组里取。配置代码:

/* ADC1独立模式,单通道,关闭连续转换,外部触发选TIM1_TRGO */ ADC_InitTypeDef ai; ai.ADC_Mode = ADC_Mode_Independent; ai.ADC_ScanConvMode = DISABLE; ai.ADC_ContinuousConvMode = DISABLE; ai.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_TRGO; ai.ADC_DataAlign = ADC_DataAlign_Right; ai.ADC_NbrOfChannel = 1; ADC_Init(ADC1, &ai); /* 通道5,采样时间7.5周期 */ ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 1, ADC_SampleTime_7Cycles5); ADC_ExternalTrigConvCmd(ADC1, ENABLE); ADC_DMACmd(ADC1, ENABLE); /* DMA1通道1,外设地址为ADC1数据寄存器,循环模式 */ DMA_InitTypeDef di; di.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->DR; di.DMA_MemoryBaseAddr = (uint32_t)adc_buf; di.DMA_DIR = DMA_DIR_PeripheralSRC; di.DMA_BufferSize = ADC_BUF_LEN; di.DMA_PeripheralInc = DMA_PeripheralInc_Disable; di.DMA_MemoryInc = DMA_MemoryInc_Enable; di.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; di.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; di.DMA_Mode = DMA_Mode_Circular; di.DMA_Priority = DMA_Priority_High; di.DMA_M2M = DMA_M2M_Disable; DMA_Init(DMA1_Channel1, &di); DMA_Cmd(DMA1_Channel1, ENABLE);

滤波函数用一个8样本的环形缓冲,去掉最大最小再平均:

#define ADC_BUF_LEN 8 volatile uint16_t adc_buf[ADC_BUF_LEN]; uint16_t get_feedback_mv(void) { uint32_t sum = 0; uint16_t minv = 0xFFFF, maxv = 0; for (int i = 0; i < ADC_BUF_LEN; i++) { sum += adc_buf[i]; if (adc_buf[i] < minv) minv = adc_buf[i]; if (adc_buf[i] > maxv) maxv = adc_buf[i]; } sum -= minv + maxv; uint16_t avg = (uint16_t)(sum / (ADC_BUF_LEN - 2)); return (uint16_t)((uint32_t)avg * 3300 / 4095); }

逻辑说明:DMA循环模式下,ADC每完成一次转换,结果自动写入数组中下一个位置,写满8个再回到开头。滤波函数做的事是掐头去尾,把最大的毛刺和最小的异常值丢弃,剩下的6个样本平均。这个策略比单纯滑动平均更能抑制开关振铃和偶然尖峰,代价是引入约160微秒的延迟,等价于一个几千赫兹的低通,环路带宽必须压在它下面。

分压电阻网络要注意输入阻抗。常见的10k和4.7k分压,输出5V分到3.3V以内,等效源阻抗约3k,7.5周期采样时间够用。如果分压电阻取到100k量级,采样时间要提到13.5周期甚至更长,或者并联一个nF级电容做电荷缓冲。还有一个隐蔽问题:ADC基准就是VDDA,电源纹波太脏,VDDA抖动会直接变成采样误差。PCB上VDDA和VSSA引脚要用磁珠或小电感隔离,旁边放一个10uF和100nF,别图省事直接接电源。

3.3 数字PI的写法:占空比限幅、积分抗饱和与DCM增益补偿

位置式PI在数字电源里够用,关键是积分限幅和输出限幅必须一起做,否则上电瞬间积分冲到高位,输出电压要振荡好几轮才能拉回来。实现如下:

typedef struct { float kp; float ki; float integral; float out_max; float out_min; } Pid_t; /* 位置式PI,输出为0~1的占空比值 */ float pid_run(Pid_t *p, float ref, float fb) { float err = ref - fb; p->integral += p->ki * err; if (p->integral > p->out_max) p->integral = p->out_max; if (p->integral < p->out_min) p->integral = p->out_min; float out = p->kp * err + p->integral; if (out > p->out_max) out = p->out_max; if (out < p->out_min) out = p->out_min; return out; } /* 初值:Kp=0.2,Ki=0.03,占空比范围5%~90% */ Pid_t pi = { .kp = 0.2f, .ki = 0.03f, .integral = 0.2f, .out_max = 0.90f, .out_min = 0.05f }; /* 在ADC采样完成后调用,ref和fb单位都是mV */ float duty = pid_run(&pi, 5000.0f, get_feedback_mv()); /* 更新PWM比较值,ARR+1=720 */ TIM_SetCompare1(TIM1, (uint16_t)(duty * 720.0f));

逻辑说明:积分项累加的是毫伏级别的误差,Ki的量纲要跟着反馈量走。初值把integral设成0.2,意思是上电时不等反馈建立就先给20%占空比,启动反应快,又不会直接顶到满占空比。输出限幅0.9和0.05是保护:低于5%占空比会让电路在DCM和CCM边界附近滑动,高于90%会让电感峰值电流过大。这个双限幅同时作用于积分和输出,是抗积分饱和最简单的落地写法。

DCM下还必须处理控制增益随输入电压漂移的问题。同样一组Kp和Ki,12V输入下输出5V稳得很,换到24V输入可能就开始低频振荡。常见做法是在PI输出上乘一个归一化系数:duty_final = duty × (Vout_rated / Vin_measured)。这个乘法本质是输入电压前馈,让环路直流增益不随母线电压变化。Vin_measured可以靠另一路ADC分压采样,也可以只在代码里用常量表示设计输入电压,省一路采样但工作点变化时表现会差。

参数整定顺序建议:先把Ki设成0,只留Kp,从0.1开始加,加到输出出现轻微临界振荡,然后取当前值一半作为工作点Kp。再恢复Ki,从0.01慢慢涨,每次加完都做一次空载到满载阶跃,观察恢复时间和超调。DCM的增益会随负载变化,所以阶跃测试不能只测一个点,至少轻载、半载、满载三个工作点各跑一遍。

4. DCM-BUCK调试避坑:五个看到过的翻车现场与修复思路

数字电源比模拟电源多一个“黑匣子”问题:你以为ADC读的是输出电压,其实它读的是振铃;你以为PI参数不对,其实是PWM分辨率不够。下面五条是这个项目里最常踩的坑,每条按现象、原因、解决展开。

4.1 采样值乱跳,纹波呈锯齿状

现象:示波器看输出电压只有几十毫伏纹波,但ADC读回来的反馈跳几百毫伏,PI输出跟着抖,输出电压反而出现锯齿状波动。

原因:采样点落在开关节点振铃上,或者落在续流二极管反向恢复时段。DCM第三阶段SW节点振铃幅值能到几伏,ADC刚好在振铃峰值触发,读数自然离谱。

解决:先确认ADC是TIM1 TRGO触发,不是软件轮询。软件轮询无法和PWM保持同步,必须改成硬件触发。第二步把采样时刻往周期中间挪,中心对齐模式下Update正好在计数顶点,一般落在振铃衰减后的平稳区。第三步,如果还有毛刺,在ADC输入分压后再并一个几nF的电容,和分压电阻组成低通,截止频率放在几十kHz,别压到环路带宽附近。

4.2 负载切换时电感啸叫

现象:空载到1A来回切换,电感发出吱吱声,输出有轻微波动。用电流探头看电感电流,波形在断续和连续之间来回游移。

原因:负载超出DCM设计范围,电感电流不再归零,系统从DCM单极点变成CCM双极点加右半平面零点,原PI相位裕度不够,占空比在边界反复调整,产生音频段的可闻噪声。另一个常见诱因是占空比下限设太低,轻载时PI把占空比压到极限附近,一点扰动就滑到CCM。

解决:先核对设计边界,满载时Lcrit是否留够余量。2.2节算出来满载Lcrit是29μH,取22μH就是为了给满载DCM留裕量。如果负载范围确实超了,要么重算电感,要么在软件里做DCM和CCM的增益切换。毕设里最务实的办法是限制负载范围并在设计说明里写清楚,避免验收时被人拿2A负载挑战。

4.3 PI参数在5V输出稳,改到12V就振荡

现象:输入电压从12V改成24V,输出目标不变,同样的Kp和Ki突然压不住,输出电压出现几十赫兹到几百赫兹的低频波动。

原因:DCM下控制到输出的直流增益不是常数,近似正比于输入电压。Vin翻倍,环路增益跟着翻倍,相位裕度掉下来,临界振荡自然出现。这是原理带来的行为,不是代码写错。

解决:加上文说的输入电压前馈,duty乘以Vin_rated/Vin。实现时多用一路ADC通道采集输入电压分压,每轮控制循环顺带更新。如果不想多花钱,只按设计输入电压做常数补偿,也能改善一半。演示时用开关切换输入电压,这个前馈效果在示波器上一眼能看出来,适合写进答辩材料。

4.4 上电瞬间MOS烧坏

现象:一上电就听见响声,MOS管和保险丝一起坏掉。换上器件再上电,还是同样结局。

原因:上电瞬间输出电容电压为零,反馈误差最大,PI输出直接顶到占空比上限。MCU的ADC基准还没建立时,采样可能一直读到零,环路认为自己离目标很远,继续加大占空比,电感峰值电流冲到十几安,MOS直接过流击穿。

解决:软件上必须做软启动。上电后占空比从一个很低的值按步进爬升,比如每10ms增加0.5%,同时把PI积分初始化为当前占空比而不是零,避免积分从零追导致过冲。硬件上在低边加采样电阻和比较器,比较器输出接到TIM1的BKIN刹车引脚,电流超过阈值立即把PWM打到无效电平。刹车引脚是定时器硬件行为,比外部中断快一个数量级,能在单个PWM周期内完成保护,这个脚值得为它留一个GPIO。

4.5 输出与目标总有0.02V静差,占空比在小数位跳动

现象:闭环看起来在工作,但输出电压和目标始终差20mV左右,示波器看占空比在几个离散值之间来回跳,输出有很弱的极限环。

原因:PWM分辨率不够。50kHz时ARR=719,占空比最小步进是1/720,约1.4%,折算到输出电压就是70mV。反馈误差小于一个量化步进时,PI无论怎么算,占空比都落不进能消除误差的那一格,系统就在相邻两格之间循环。

解决:优先提高PWM分辨率,把开关频率降到20kHz,ARR加到1799,分辨率约11bit,输出步进降到2.8mV左右。如果必须保留50kHz,就做软件dither,把占空比的小数部分按超帧累积,每攒够一个整数步就插入一个加1的周期:

/* duty_permille是千分比占空比,范围50~900 */ static uint32_t frac = 0; uint16_t pulse_main = (uint16_t)((uint32_t)duty_permille * 720 / 1000); /* 余数累积,满1000则多一个PWM周期补偿 */ frac += ((uint32_t)duty_permille * 720) % 1000; if (frac >= 1000) { frac -= 1000; pulse_main += 1; } TIM_SetCompare1(TIM1, pulse_main);

逻辑说明:这个dither用1000个PWM周期做超帧,每周期不足1的余数攒着,攒够就多出一个比较值,等效分辨率从720细分提升到720000。代价是开关频率附近多了一点边带频谱,但超帧时间远小于环路时间常数,闭环影响可以忽略。实际调试时这个“占空比跳格”问题很隐蔽,建议先查分辨率再动PI,否则你会把极限环当成噪声调上一整天。

5. 把PI输出“晒”到示波器:DCM-BUCK调试中一个不被注意的技巧

调数字电源最怕黑匣子。你只能看到输入输出电压电流,环路内部在干什么完全不知道。一个低成本做法:用STM32自带的DAC当示波器通道,把关键变量实时映射成电压,普通示波器就能直观看到PI在追什么、限幅有没有顶到、积分有没有饱和。

5.1 用一个DAC输出内部变量

STM32F103有两个12位DAC,足够同时看两个量。我用通道1输出占空比,通道2输出误差。每128个PWM周期刷新一次,避免DAC写入太频繁影响ADC采样时序。

static uint32_t dbg_cnt; void debug_dump_task(float ref_mv, float fb_mv, float duty) { if ((++dbg_cnt & 0x7F) != 0) return; /* 128周期刷新一次 */ /* 通道1:占空比,映射到0~3.3V */ float d = duty; if (d < 0) d = 0; if (d > 1) d = 1; DAC_SetChannel1Data(DAC_Align_12b_R, (uint16_t)(d * 4095)); /* 通道2:误差,正负500mV映射到0~3.3V */ float e = (ref_mv - fb_mv) / 500.0f; if (e < 0) e = 0; if (e > 1) e = 1; DAC_SetChannel2Data(DAC_Align_12b_R, (uint16_t)(e * 4095)); }

逻辑说明:DAC输出直接接示波器探头即可,不用加运放。占空比通道看的是驱动信号在怎么变化,误差通道看的是PI正在追的方向。如果两个通道都在振荡,说明环路相位裕度不够;如果占空比顶着上限,说明抗饱和或软启动有问题。这类判断比盯着输出波形猜快得多,尤其是采样时刻不对、占空比跳格这类问题,DAC上一眼就能看出来。

5.2 验证DCM-BUCK的三种波形记录法

课程设计答辩和毕设验收时,拿得出手的数据有三组。第一组是稳态波形,PWM、SW节点、电感电流、输出电压四路同时记录,重点看电感电流是否真断流,SW振铃是否被抑制,输出电压纹波是否在指标内。第二组是阶跃响应,用电子负载或一只MOS管切换电阻负载,记录输出电压的跌落、恢复时间和超调量。恢复时间在几百微秒内对这个功率等级就算合格,响应太慢说明Ki偏保守,来回振荡说明Kp偏大。第三组是效率曲线,从10%负载到满载扫几个点,DCM的优势在轻载效率,曲线画出来如果轻载最高、满载下降,就很好地把DCM的特点表达出来了。测量输入功率时注意电流表引线尽量短,线束电感会造成读数跳动。

我自己第一次做这个项目的教训是:一开始所有时间都花在PI参数上,后来才发现采样时刻才是最大的坑。现在做任何数字电源,都会先把采样点、PWM分辨率、软启动这三件事钉死,再回头整定参数。这个思路对你应该也有用,希望帮到你。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/27 23:44:08

AI判分器从0分到100分:一次提示注入误判的质检复盘

做了两年AI判分器的质量保障&#xff0c;我见过不少离谱的评分&#xff0c;但最让我刷新认知的&#xff0c;是某天质检样本里冒出的这个案例&#xff1a;同样一篇作文&#xff0c;机器给分0&#xff0c;三位资深评卷员一致给了满分100。整整差出100分&#xff0c;而且不是幻觉&…

作者头像 李华
网站建设 2026/10/27 23:44:02

DeepSeek Harness桌面端架构解析:Electron+Node+Python三层本地化部署

1. 这不是“又一个桌面版”&#xff0c;而是 DeepSeek Harness 的一次架构转向最近刷到好几条消息&#xff0c;说“DeepSeek Harness 出了桌面端”&#xff0c;点进去一看&#xff0c;截图里是熟悉的 UI&#xff0c;但地址栏赫然写着localhost:3000——这显然不是传统意义的原生…

作者头像 李华
网站建设 2026/10/27 23:43:38

AI判分器质检复盘:从0分到100分的极端偏差排查与修复

我前阵子给一个 AI 判分器做质检&#xff0c;遇到一个很极端的 case&#xff1a;满分 100 分的论述题&#xff0c;AI 判分器给出 0 分&#xff0c;负责复核的老师给出 100 分&#xff0c;两边整整差出来一个满分。做算法评测这些年&#xff0c;这种案例不常见&#xff0c;但每遇…

作者头像 李华
网站建设 2026/10/27 23:42:47

35道Rust并发锁实测:最贵大模型竟被便宜6倍对手碾压?

1. 先交代一下这次测试的来龙去脉最近圈子里一直有人在传 gpt-6-sol、claude-opus-5.5、grok-4.7 这些新版本号&#xff0c;说是编程能力又上了一个台阶&#xff0c;价格也一个比一个离谱。我看了下报价&#xff0c;最贵的和最低的能差出 6 倍&#xff0c;心里就犯嘀咕&#xf…

作者头像 李华
网站建设 2026/10/27 23:40:55

武汉AICA数智创新公开课:工业视觉与数字孪生实战解析

1. 项目背景与活动概述 上周在武汉光谷举办的"AICA数智创新公开课"活动&#xff0c;堪称今年华中地区最硬核的技术沙龙之一。作为全程参与的活动执行者&#xff0c;我想从幕后视角还原这场活动的完整运作逻辑——这绝不仅是一次普通的技术分享会&#xff0c;而是融合…

作者头像 李华
网站建设 2026/10/27 23:39:43

HarmonyOS元服务开发指南:轻量化应用实践

1. HarmonyOS元服务开发概述在移动应用生态快速发展的今天&#xff0c;用户对应用体验的要求越来越高。传统应用需要下载安装才能使用的模式&#xff0c;已经无法满足用户对即时性、轻量化的需求。HarmonyOS元服务&#xff08;Atomic Service&#xff09;正是针对这一痛点提出的…

作者头像 李华