☰
基于GD32F330的三相四桥臂逆变电源:引脚分配与控制环设计
2026/10/15 8:48:22 网站建设 项目流程

简介:面向电力电子与三相逆变电源设计人员,这份基于GD32F330微控制器的三相四桥臂逆变电源设计方案,系统说明了从拓扑结构到数字化控制的完整实现路径。内容涵盖三相四线电网充电、推挽升压DC/DC、三相四桥臂逆变主电路,以及基于GD32F330RBT6的PWM引脚分配、AD采样通道分配和控制策略,适合正在用国产芯片设计数字电源的工程师参考。资源为单个PDF文档,大小185KB,以图文表格形式呈现系统结构图、引脚分配表和关键控制要点,便于快速查阅。目前已有532人学习下载,整体内容虽精炼,但覆盖DC/DC单电压环控制、三相独立电压外环电流内环、软件锁相、电池管理与多重保护等实用细节,可作为三相四桥臂逆变电源项目的前期方案借鉴。

1. 一颗 GD32F330 吞下三相四桥臂逆变电源:从引脚到环路的完整答案

做逆变电源的工程师都清楚,三相四桥臂只比三桥臂多了一个桥臂,但换来的是不平衡负载下的电压稳定度和一条真正的中线电流通路。这套基于 GD32F330RBT6 的设计,把推挽升压 DC/DC、三相四桥臂逆变、软件锁相、充电管理、串口在线升级全部压进一颗 M4 内核的国产芯片,10 路 PWM、15 路 ADC 的引脚分配一眼能看懂,控制参数也直接给到位:DC/DC 跑 100kHz 单电压环,三相桥臂跑 19.2kHz 电压外环加电流内环,N 相开环配合三次谐波注入。对做小功率 UPS、离网储能、车载逆变电源的人,这套方案的价值在取舍:哪些功能值得占一颗芯片,哪些坑要靠硬件兜底。下面按复现顺序,从拓扑一路拆到调试现场。

2. 系统结构与核心选型:为什么是四桥臂

2.1 从市电到电池再到三相输出:拓扑串联的因果关系

按功率流向上拆,这套系统是五段串联:三相四线市电输入 → 充电电路 → 电池 → 推挽升压 DC/DC → 三相四桥臂逆变 → 三相四线输出。市电正常时,充电电路给电池充电,控制板同时管着充电电流和电池电压;停电之后电池放电,经过推挽升压到母线电压,再由四桥臂逆变器生成三相电压。注意这个输出是三相四线制,中性线由 N 相桥臂主动驱动,不是三桥臂方案那样把中线接到母线中点或者干脆悬空。中线一旦悬空,单相负载和三相不平衡负载一接,相电压畸变率立刻上去,四桥臂的意义就是提供一路独立的 N 相 PWM,主动控制中线电位来抵消不平衡电流造成的电压偏移。

DC/DC 用推挽拓扑,原边两个开关管轮流导通,变压器双向励磁,适合电池这种低电压大电流输入升到几百伏母线。为什么不直接做 BOOST:电池电压只有几十伏,母线电压几百伏,升压比很大,BOOST 在这种低压大电流输入的场合电感损耗和开关管应力都不划算;推挽可以用变压器变比把升压比摊薄,原边电流应力由两个管子分担,磁芯选型也灵活。反激拓扑则更适合小功率的辅助电源,在这个功率等级下推挽是更常见的选择。控制板上,DCDC 和逆变器全部采用数字控制,意味着环路参数、保护时序、PWM 分配这三件事都要在代码里自己负责,没有模拟电路的电阻电容可以事后调。

充电电路这一段容易被忽略,但它和 DC/DC 共用同一颗芯片的 ADC 资源:电池电压在 PC0,充电电流在 PC1。控制板还要做电池未接检测、容量计算、低压保护、过充保护、充电器故障检测,这些慢回路和高频控制环路跑在同一个芯片里,采样调度上必须区分快慢。母线电压和电感电流进高频中断,电池电压充电电流放在慢速任务里轮询,不要让充电逻辑去抢 19.2kHz 中断的时间片。

2.2 单颗 M4 扛全部控制环:任务的实时性与优先级

这颗芯片要扛的实时任务,按频率从高到低排:DC/DC 电压环 100kHz,逆变器 R/S/T 三相电压外环加电流内环 19.2kHz,软件锁相与逆变控制同周期更新相位,然后是充电管理、容量计算、低压过充保护这类慢任务,最外围是串口通讯和串口 IAP。

100kHz 的控制周期只有 10us,M4 在 10us 里做完一个单电压环加 ADC 转换和 DMA 搬运,完全来得及,因为单电压环本身只是几行加减乘除。真正吃时间是逆变双环:19.2kHz 的周期约 52us,每个周期要完成三相电压环计算、三相电流环计算、三次谐波注入和 PWM 占空比更新,52us 对 M4 来说余量足够,前提是环路代码别出现浮点除法这种拖后腿的操作,尽量用定点或者便宜乘加。选 19.2kHz 而不是 20kHz,常见考虑是避开人耳听觉上限,也避免和 100kHz 的 DC/DC 之间产生低频拍频干扰采样。

任务优先级上,我的习惯是逆变控制优先级高于 DC/DC 电压环,锁相放在逆变控制中断里做,充电管理和保护标志处理落回主循环。两个高频中断嵌套是必然的,所以 DC/DC 中断里只做采样、算 PI、更新占空比三件事,任何调试打印都不要放进高频中断。这个分层做不好,后期加串口在线升级时中断响应时间会变得不可控,这是设计阶段就要留出的余量。

3. 引脚资源分配:10 路 PWM 与 15 路 ADC

3.1 PWM:TIMER0 扛三相,TIMER15 管 N 相

系统需要 1 组 DC/DC 驱动和 4 组逆变驱动,合计 10 路 PWM。引脚分配如下:

Pin应用功能定时器通道
PC6DC/DC PWM1TIMER2_CH0
PC7DC/DC PWM2TIMER2_CH1
PA8R 相上管TIMER0_CH0
PB13R 相下管TIMER0_CH0_ON
PA9S 相上管TIMER0_CH1
PB14S 相下管TIMER0_CH1_ON
PA10T 相上管TIMER0_CH2
PB15T 相下管TIMER0_CH2_ON
PB8N 相上管TIMER15_CH0
PN8N 相下管TIMER15_CH0_ON

这个表最值得琢磨的是带 ON 后缀的通道。在 GD32F330 上,高级定时器的互补输出通道命名就是带上 ON 后缀,它是主通道的反相输出,由定时器的 DTCFG 寄存器统一控制死区。R/S/T 三相的上下管分别挂在 TIMER0 的 CH0/CH1/CH2 和对应互补通道上,三个桥臂死区设置一致;N 相单独挂在 TIMER15 的 CH0 和 CH0_ON 上。这样布置的好处:三相全桥共用同一个定时器,三相关于载波的相位关系天然同步,不需要软件去对齐三组定时器;N 相单独用一个定时器,调试时可以单独调整 N 相载波和相位,不影响三相。

很多人第一次移植时会忽略 AFIO 引脚复用配置。PA8/PA9/PA10 在数据手册上确实是 TIMER0_CH0~CH2 的输出位,但芯片上电后引脚默认是 GPIO,必须在初始化时把复用功能切换到定时器输出,否则示波器量 PA8 一辈子都是空波形。R 相下管放 PB13 不是随手定的,是芯片的互补通道映射表决定的,CH0N 物理上就映射到 PB13,软件挪不了,只能按表配。

死区配置是这个设计里第一个必须认真对待的参数。TIMER0 的 DTCFG 寄存器配置单位是系统时钟周期的整数倍,具体数值要看原厂参考手册里 DTCFG 的位段定义,不同分频配置下单位宽度不一样。我一般先把死区保守给到 500ns 到 1us,示波器确认互补波形没有交叠再往小调。推挽 DC/DC 的 PC6/PC7 是 TIMER2 的两个独立通道,没有 ON 后缀,说明这两个管子不是一个桥臂的互补输出,两路占空比要软件分别写 CCR,推挽变压器的伏秒平衡也必须软件周期校准,磁偏保护不能省。初始化代码给一个示意:

// TIMER0 三相桥臂 PWM 初始化(R/S/T 共用一个高级定时器) timer0_deadtime_cfg(TIMER0, DTCFG_DTCFG(400)); // 死区约 0.5us,具体值按系统时钟算 timer0_chi_output_enable(TIMER0, CH0 | CH1 | CH2); // 先使能主通道 timer0_chx_output_enable(TIMER0, CH0N | CH1N | CH2N); // 再使能互补通道 timer0_primary_output_enable(TIMER0); // 最后开 MOEN 主输出

逻辑说明:先配死区再使能输出,顺序反了会有一段上下管同时导通的窗口。CH0N 这类互补通道的使能位和主通道是分开的,只开主通道不开互补通道,下管 PWM 根本没输出,这是调试时最容易误判芯片坏掉的原因。参数说明:DTCFG_DTCFG(400) 的数值不是通用写法,系统时钟不同、分频配置不同,实际死区时间完全不同,必须查原厂参考手册确认单位后重新计算,不要照抄。

3.2 ADC:15 路采样怎么接进 DMA

系统一共采集 15 个模拟量,引脚和采样对象对应关系:

Pin采样对象Pin采样对象
PA0R 相输出电压PB0T 相市电电压
PA1S 相输出电压PB1母线电压
PA2T 相输出电压PC0电池电压
PA3R 相电感电流PC1充电电流
PA4S 相电感电流PC2散热器温度
PA5T 相电感电流PC4参数 1
PA6R 相市电电压PC5参数 2
PA7S 相市电电压

15 路采样如果靠 CPU 一个一个查询 ADC 状态,19.2kHz 中断里根本没时间干别的。常规做法是用 ADC 规则通道组加 DMA:把所有通道排进规则序列,DMA 把转换结果连续搬进数组,中断里直接读对应下标。通道顺序编排上有讲究,我把高频控制量放前面:PA0~PA5 的输出电压和电感电流排规则序列前 6 个,市电电压放中间,温度和参数放最后。这样中断里读 adc_buf[0] 就是 R 相电压,adc_buf[3] 就是 R 相电感电流,下标固定,不会因为后面加通道导致控制代码读错位置。

触发源要特别留意:电流内环对采样时刻敏感,电感电流不是恒定值,PWM 周期中点采样得到的才是电流平均值,起点或终点采样会把开关纹波直接采进来。所以用定时器触发 ADC,让 ADC 在 PWM 中央对齐点自动启动一轮转换,电压环和电流环拿到的反馈量在统计意义上是平均值,环路才不会去跟踪纹波。

// ADC 规则通道扫描 + DMA 循环搬运 adc_regular_channel_config(ADC0, 0, ADC_CHANNEL_0, ADC_SAMPLETIME_55); // PA0 输出电压 adc_regular_channel_config(ADC0, 1, ADC_CHANNEL_1, ADC_SAMPLETIME_55); // PA1 S相电压 // ... 其余通道按规划顺序配置到下标 2~14 adc_external_trigger_config(ADC0, ADC_EXTERNAL_TRIGGER_MODE_RAISING); // 定时器上升沿触发 dma_transfer_config(DMA0, DMA_CH0, &ADC0->RDATA, adc_buf, 16, DMA_PERIPHERAL_TO_MEMORY); dma_circulation_enable(DMA0, DMA_CH0);

逻辑说明:规则通道序列按顺序转换,结果统一进 DMA 缓冲区,中断里直接拿 adc_buf 数组对应下标,不再查询转换完成标志。参数说明:ADC_SAMPLETIME_55 表示采样周期取一档较长的值,电源采样信号源阻抗高,采样时间短了采样电容充不满,转换值系统性偏低,这是模拟量不准的隐蔽来源;DMA 缓冲区给 16 是留余量,实际 15 路够用,多出来的一路可以放温度或者参数 2 做校验。

4. 控制策略:DC/DC 单环与逆变双环的参数边界

4.1 DC/DC 推挽升压:100kHz 单电压环

DC/DC 这一级把电池电压升到母线电压,控制策略是单电压环:反馈量是母线电压(PB1 采样),给定是目标母线电压,误差进 PI,PI 输出折算成推挽两个管子的占空比。100kHz 周期 10us,PI 计算和 ADC 转换在 10us 内完成没有压力,所以不需要加电流内环,省一路采样和一路 PI,整定工作量下降不少。代价是动态响应差一些,电池电压跳变时母线会有明显过冲,靠电压环慢慢拉回来。这个取舍对后备式系统是划算的——电池电压变化本来就慢,市电掉电瞬间才是大扰动,那个扰动由逆变级的双环去扛。

推挽拓扑对占空比有硬限制:第一,两个管子各自占空比必须小于 50%;第二,两路 PWM 的占空比要尽量对称,否则变压器铁芯单向偏磁,电流一路飙升直到炸管。原文 PC6/PC7 是 TIMER2 的两个独立通道,没有硬件互补,所以这两点在软件里必须强制做:占空比限幅函数先夹住上限,再对两路 CCR 做偏差校准。

// DC/DC 电压环,100kHz 中断里执行 float bus_v_fb = adc_buf[9]; // PB1 母线电压反馈 float err = bus_v_ref - bus_v_fb; float duty = pid_update(&dc_pid, err); // PI 输出 duty = clamp(duty, 0.05f, 0.45f); // 推挽占空比硬限幅,必须 <50% uint32_t ccr1 = (uint32_t)(duty * timer2_arr); uint32_t ccr2 = (uint32_t)(duty * timer2_arr); ccr2 += comp_offset; // 软件补偿两管压降差异 timer2_ch0_cfg(TIMER2, ccr1); timer2_ch1_cfg(TIMER2, ccr2);

逻辑说明:反馈量从 DMA 缓冲区按第三章设定下标取,母线电压在 adc_buf[9]。占空比限幅是推挽的第一道安全线,限幅之后再算 CCR,任何异常情况下芯片都不会输出超 50% 占空比。参数说明:0.05 下限是为了维持最小励磁时间,0.45 上限留出死区和变压器复位时间;comp_offset 是调试时手工补偿两管导通压降差异的存储值,先把输出调稳定再谈自动校准。

4.2 三相双环控制:电压外环给指令,电流内环出占空比

逆变器 R/S/T 三相是三个独立的电压外环加电流内环,三相完全独立运行。电压外环反馈相输出电压(PA0/PA1/PA2),给定是目标正弦波,外环 PI 输出作为电流内环指令;电流内环反馈相电感电流(PA3/PA4/PA5),内环 PI 输出直接作为该相 PWM 占空比。控制频率和开关频率都是 19.2kHz。

为什么要串这个内环:电感电流是快变量,电压是慢变量。只做单电压环时,负载突变引起的电压变化要等好几个开关周期才能被抑制;电流内环可以一个周期内把电流校正到指令值,电压环只需缓慢给出电流指令,系统由二阶降阶,相位裕度好做得多。整定顺序的经验是:先断开电压环,给电流环一个固定指令,把电流环 PI 调到阶跃响应不过冲;再接上电压环,电压环带宽设成电流环的十分之一到五分之一,避免两个环互相打架。电流环快,电压环慢,电压环给慢变量指令,电流环负责快跟踪。

// R 相电压外环 + 电流内环,19.2kHz 中断里执行 float v_err = v_ref_r - adc_buf[0]; // 电压给定减输出电压反馈 float i_ref = pid_update(&v_pid_r, v_err); // 外环输出电流指令 float i_err = i_ref - adc_buf[3]; // 电流指令减电感电流反馈 float duty = pid_update(&i_pid_r, i_err); // 内环输出占空比 duty = clamp(duty, 0.05f, 0.95f); timer0_ch0_cfg(TIMER0, (uint32_t)(duty * (timer0_arr - 1)));

逻辑说明:v_ref_r 是 R 相目标正弦波,由软件锁相输出的相位在正弦表或正余弦函数里生成,S/T 两相相位各偏移 120 度。adc_buf[0] 和 adc_buf[3] 分别对应该相电压和电流反馈。参数说明:PI 限幅放在内环输出而不是外环输出,防止电压外环饱和时把电流指令给到离谱值;逆变上下管是硬件互补带死区的,占空比上限可以推到接近满调制,不像推挽那样被 50% 卡住。

4.3 N 相开环与三次谐波注入:母线利用率的取舍

N 相桥臂解决的是中线电流问题。三相四线带不平衡负载时,三相电流和不等于零,这些电流必须走中线回路,N 相桥臂就是这条回路的开关。原文把 N 相设计成开环:N 相不参与电压电流反馈,而是直接输出一个和三相调制波同频的调制信号,把逆变器中点电位主动抬到合适位置,让不平衡负载造成的中点偏移被抵消掉。

配套的三次谐波注入是一种提高母线利用率的调制方式,思路来自那篇经典的基于三次谐波注入法的三相四桥臂逆变电源论文。原理不复杂:三相调制波互差 120 度,直接和三角载波比较时,相电压最大只能到母线电压的一半左右;如果在三相调制波上同时叠加一个三倍频的零序分量,三相波形的峰值会被削低,相当于把母线利用率往上推,工程上一般可以做到约 15% 的提升。代价是输出相电压里会带三次谐波分量,对三相三线负载没有影响,因为线电压里三次谐波相互抵消;但对三相四线负载,N 相必须能把三次谐波电流吸收掉,这就是 N 相桥臂和三次谐波注入必须放在一起用的原因——只注入不建 N 相通路,谐波电流没地方去,母线电容先发热。

N 相开环的调制波给定可以直接说:把 R/S/T 三相调制波的平均值取负号,就是 N 相要补的零序量。调试时先让 N 相开环跑,带对称负载看中线电流是否接近零,再逐步加不平衡负载,观察三相电压平衡度。

4.4 软件锁相:CMSIS 正余弦函数在电网检测里的用法

电网检测用的是市电电压(PA6/PA7/PB0),目的是在停电切换和需要同步的场景里让逆变输出和市电保持相位一致。原文明确用了 CMSIS 库里的正余弦函数,对应到实际就是 CMSIS-DSP 的 arm_sin_f32 和 arm_cos_f32,查表加插值,速度比标准库快不少,在 19.2kHz 中断里每个周期都要生成三相正弦指令,函数调用开销不能忽略。

软件锁相的常见做法是同步旋转坐标系锁相:三相市电电压做 Clarke 变换到 αβ 轴,再用当前锁相角做 Park 变换,得到 d 轴和 q 轴分量,锁相目标是让 q 轴分量为零。q 轴误差进 PI,PI 输出作为频率修正量叠加到额定角频率上,再积分出相位。这个结构里有个容易忽略的细节:市电电压幅值波动时,Park 变换出来的 q 轴分量跟着波动,同样的相位误差在小电压下换算出的 q 值更小,PI 增益表现会漂移。所以进 Park 之前先把三相电压归一化到单位幅值,或者把 q 轴误差除以当前幅值,锁相在电网电压跌落时才不会失锁。

// 软件锁相:Clarke + Park + PI 频率修正,19.2kHz 中断里执行 alpha = U_VECTOR * (va - 0.5f * (vb + vc)); // U_VECTOR 为幅值归一化系数 beta = U_VECTOR * (0.866f * (vb - vc)); vd = arm_cos_f32(theta) * alpha + arm_sin_f32(theta) * beta; vq = -arm_sin_f32(theta) * alpha + arm_cos_f32(theta) * beta; w_offset = pid_update(&pll_pi, vq); // q 轴误差归零,输出频率修正 w = 2.0f * PI * 50.0f + w_offset; // 额定频率叠加修正量 theta += w * Ts; // 相位积分 if (theta > 2.0f * PI) theta -= 2.0f * PI;

逻辑说明:va/vb/vc 是经过归一化的市电电压,把三相电压幅值折算到单位值附近,锁相环增益不随电网电压波动。vq 作为误差量进 PI,PI 输出修正频率,theta 积分后同时送给三相正弦指令生成。参数说明:PI 输出限幅放在频率修正量上,比如限制在 2Hz 以内,避免电网异常时相位飞转;Ts 是 1/19200,锁相和逆变控制同周期,两个量共用同一时间基准,没有异步误差。

5. 调试避坑记录:直通、采样噪声、锁相失锁与掉参数

5.1 上下桥臂直通:死区寄存器不是默认能用的

现象:R 相输出正常,S/T 两相一使能互补输出,母线电流立刻飙升,示波器看到上下管栅极波形交界处有窄尖峰交叠。 原因:DTCFG 死区寄存器不显式配置,互补通道边沿之间没有插入死区;初始化顺序又先开了 MOEN 再配死区,中间有一段上下管同时导通的窗口。另外死区单位是可配的,不是固定 1us 一格,写了个 400 以为是 400ns,实际可能只有几十纳秒。 解决:初始化顺序固定为先配分频和死区,再使能各通道输出,最后开 MOEN。死区值上功率级之前用示波器实测,从最窄一档往上加,确认两个波形之间存在明确空白间隔。从那以后我每次上功率之前都先量一次死区,这个习惯救过不止一次。

5.2 ADC 采到锯齿波:采样时刻才是元凶

现象:电流内环投入后输出波形带锯齿,频率和开关频率一致,PI 参数怎么调都压不下去,带宽一提系统就振荡。 原因:ADC 在 PWM 周期任意时刻触发,功率管开关瞬间的电感电流纹波被采进来,反馈信号里混着高频分量。电流内环比电压环敏感得多,它把纹波当真实误差去跟踪,环路就在纹波频率附近发抖。 解决:把 ADC 触发源改成定时器触发,选中央对齐 PWM 模式,让 ADC 在 PWM 周期中点启动转换;再配合 DMA 循环搬运和一阶滤波,开关纹波基本被滤掉。采样时间不够长的通道读数偏低这个坑也顺手查一遍,模拟量不准的很多来源都在采样电路。

5.3 Flash 模拟 EEPROM 掉参数:磨损均衡要做

现象:系统跑了一段时间,参数 1、参数 2 偶发变成全 F,重新上电又正常,看起来像随机丢数据。 原因:EEPROM 模拟用的是固定扇区,每次都写同一片地址,擦写寿命一到写操作就失效,读出来就是擦除后的全 F。掉参数不在写入时刻暴露,而是扇区擦除失败之后,上电加载时读到了半擦半写的状态。 解决:EEPROM 模拟必须做扇区轮换和双备份。写入时先写备份区,校验通过再更新主区;每次写新偏移,扇区写满整体搬移到下一扇区,再擦旧扇区。这个逻辑放到中断外执行,防止写入过程中断造成主备份都不一致。调试串口里把参数校验值打印出来,比上电报错更能定位哪个扇区先坏的。

5.4 软件锁相失锁:幅值没归一化是主因

现象:市电正常时锁相稳定,电网电压降个 15% 或频率跳变时,相位开始缓慢漂移,输出和市电相位差越来越大。 原因:Park 变换出来的 q 轴误差正比于电网电压幅值,幅值跌落后误差变小,PI 反应看起来变慢,其实不是 PI 变了,是误差的标尺变了。频率跳变时锁相环带宽又不足,q 轴来不及收敛。 解决:进 Clarke 之前把三相市电电压归一化到单位幅值,锁相环增益变成和电压幅值无关的量;PI 输出频率修正量加限幅,防止相位飞转;锁相带宽按 10~20Hz 整定,市电频率偏移 0.5Hz 以内都能在一个周期内拉回来。

5.5 过流保护慢半拍:硬件比较器兜底

现象:输出短路瞬间,软件过流标志已经置位,但 PWM 关断动作比故障滞后了快两个控制周期,功率管已经热了。 原因:19.2kHz 中断里跑完电压环电流环再到保护判断,保护执行时刻天然滞后于故障时刻。软件能在 52us 内关断已经是极限,但短路电流按微秒上升,等软件介入波形已经飞了。 解决:常规做法是过流比较器接到硬件级联关断,电流采样电阻信号进比较器,比较器输出接定时器刹车输入,硬件在一个时钟周期内封 PWM。软件保护作为恢复和提示逻辑:记录故障类型、发串口告警、控制合闸时序。四桥臂这种功率回路,保护必须分层,软件负责策略,硬件负责速度。

6. 从样机到稳定运行:调试顺序与验证技巧

复现这套方案,调试顺序比调参技巧更重要,顺序错了,波形烧穿了都不知道是哪一环出的问题。我习惯按五个阶段走:先不上功率级裸调 PWM,再调 DC/DC,然后逆变开环,再合双环,最后做保护逻辑和锁相切换验证。

第一阶段断开功率级,只给控制板供电,示波器量全部 10 路 PWM。验证三个点:死区有没有、占空比限幅有没有生效、N 相 PWM 和三相 PWM 的频率相位关系对不对。N 相和三相不在同一个定时器上,频率配置一致但相位差需要软件对齐,示波器上直接量 PB8 和 PA8 的上升沿差即可。

第二阶段只接 DC/DC,电池用可调电源代替,母线接假负载。先开环给一个小占空比,确认母线电压按变比上升,再合电压环,从 50V 母线开始逐级往上拉,每步记录纹波和过冲。DC/DC 不稳之前不要碰逆变,母线都在哆嗦,后面的双环调了也白调。

第三阶段逆变开环:三相输出给固定占空比,N 相也开环,不带负载看相电压波形。这一步能暴露的多数是死区和采样噪声问题,对应第五章的坑。开环波形干净了,双环才有意义。

第四阶段先后台电流环,再前台电压环。电流环给一个固定正弦指令,看电感电流是否正弦;电压环给定按软件锁相生成的相位,相位每周期更新一次,电压指令随之更新。两个环的带宽按第四章的顺序整定,不要一上来两个 PI 一起调,翻车以后根本分不清是哪个环在振荡。

最后验证保护和锁相:输出接可切换负载,把不平衡负载加到额定的一半,示波器量三相电压平衡度,看 N 相电流波形;再模拟市电掉电,观察切换时间和输出电压跌落幅度。串口打印在这个阶段是最给力的调试工具,把母线电压、三相电流、锁相角、故障标志按周期组帧发出来,配合示波器能快速定位逻辑时序问题。

这套设计我前后复现过两轮,最大的体会是四桥臂的坑大多不在算法,而在工程细节:死区时间、采样时刻、引脚复用、Flash 磨损,哪一环偷懒都会在几个月后以奇怪的方式还回来。从那以后我每次调四桥臂都强制走一遍「先量 PWM 再上功率、先开环再闭环、先硬件保护再软件保护」的顺序,配合串口把关键变量打印出来留档,出问题就有后悔药。这套 GD32F330 的引脚和环路参数可以直接照着搭,把第五章的坑提前避开,剩下就是耐心调参的活。希望帮到你。

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询