简介:基于Matlab的晶闸管三相交流调压器仿真模型,面向计算机、电子信息工程及数学等专业学生,可直接服务于课程设计、期末大作业或毕业设计中有关电力电子变换、晶闸管触发控制与三相调压的环节,作为理解原理和起步仿真的参考资料。压缩包共157个文件,涵盖Simulink模型mdl、C语言源程序与头文件、mat数据文件,以及obj、mexw32等编译中间件;txt文本和bat批处理脚本分别承担说明文档与运行配置,整体仅475KB,结构清晰便于按需查阅。已有343人学习下载。借助这套模型与源码,读者可以直观观察三相交流调压器的触发角调节、输出电压/电流波形变化等关键过程,理清从触发脉冲生成到主电路工作的完整逻辑。资料提供可运行的基础框架,并保留较多的模块化接口,适合在此基础上自行修改参数、扩展功能或排查报错,尤其适合具备一定Matlab和电路基础、希望快速上手仿真的学习者。
1. 三相交流调压器仿真模型:难题不在画晶闸管,而在触发脉冲
拿到一个“基于Matlab实现晶闸管三相交流调压器仿真模型.rar”,先别急着解压,要判断这套仿真模型值不值,一眼看它是否包含完整的触发脉冲生成逻辑。三相交流调压器的Simulink模型通常不难画,无非是三相电源、晶闸管桥臂、阻感负载再加一台Powergui,真正的难点集中在控制角alpha怎么产生、双脉冲与宽脉冲怎么分配、以及负载变化时alpha能推到多少度而不失控。这篇文章面向要做电力电子课程设计、软启动器预研或者验证手写触发算法的工程师,从触发原理、拓扑选型、Simulink搭建到波形验证按一条完整路径走完,看完你能把模型从零搭起来,也能解释为什么alpha等于90度时输出波形会缺一块。
2. 三相交流调压器的触发原理与拓扑选择
2.1 晶闸管三相调压与直流调压的差别
三相交流调压器与整流器最大的差别在于输出电压没有直流滤波电感,晶闸管输出的每一段电压都被负载直接承受,波形是工频周期中被“切”剩下的片段。整流电路里晶闸管的控制角alpha决定直流平均电压,计算相对直观;交流调压器里alpha改变的则是输出电压有效值、基波分量和低次谐波分布,仿真中观察的往往是有效值曲线和FFT谱线,而不是平均值。
另一个容易忽略的地方是交流调压器的晶闸管在电流自然过零时关断。直流调压里换相电感和续流回路会对关断点做整形,交流调压器没有续流二极管,电流过零后的反向阻断完全靠晶闸管自身的阳极电压反向。这就是为什么仿真模型里晶闸管的关断时间、正向压降和最小维持电流参数会影响波形边界的精确度。Simulink里的Thrristor模型如果直接用默认参数,它表示的是一只理想程度较高的器件,但在alpha接近150度时,由于导通区间太窄,电流幅值很小,可能出现边界处导通与关断的抖动,这是模型问题而不是硬件问题。
与PMSM Simulink FOC仿真模型那种以逆变器PWM为驱动的思路不同,三相交流调压器没有载波,它的驱动信号是工频同步的方波脉冲,频率50Hz,每周期六只管子各触发一次,不存在高频斩波。因此仿真步长对触发时刻的影响比PWM模型更敏感,一个步长差一度,输出有效值就可能有明显偏差。这个特性在后面的求解器设置里会重点处理。
2.2 三相三线拓扑为什么必须用宽脉冲
三相交流调压器有几种拓扑,常见的是三相四线星形接法和三相三线星形接法。三相四线制下每相有独立的中性线回路,某一相晶闸管触发后与之串联的负载电流可以独立流通,各相工作互不牵扯,触发脉冲用窄脉冲(例如20度)就够了。三相三线制没有中性线,任意时刻必须至少有两只晶闸管同时导通,负载电流才能在一相与另一相之间构成回路。
这里有一个关键限制:三相三线晶闸管调压器在启动瞬间,如果触发脉冲宽度小于60度,可能出现某一相的晶闸管导通后,下一相触发信号到来前该相电流已经过零并关断,导致电路突然断流。为了保证从任意初始时刻启动都能建立电流回路,三相三线调压器的每只晶闸管触发脉冲宽度必须大于60度,或者采用双窄脉冲方式,在每只管子本应导通的区间发给它两个相距60度的窄脉冲。Simulink里实现宽脉冲比双脉冲简单,直接把Pulse Generator的脉宽设到70度左右即可,但这样每只晶闸管的触发角调节范围会被压缩;追求精确控制时更适合用双脉冲逻辑。
下表给出几种常见方案在Simulink里的适用性对比。
| 拓扑 | 中性线 | 所需脉冲宽度 | Simulink推荐实现 | 典型应用 |
|---|---|---|---|---|
| 三相四线Y接 | 有 | 窄脉冲即可 | Pulse Generator单脉冲 | 实验室教学模型 |
| 三相三线Y接 | 无 | 大于60度或双窄脉冲 | 宽脉冲70度或双脉冲逻辑 | 工业调压、软启动 |
| 三相三角形连接 | 无 | 大于60度 | 宽脉冲或双脉冲 | 大电流调压 |
实际搭建仿真模型时,我一般默认选择三相三线星形接法,不带中性线。原因有两个:一是它与工业中常见的三线供电环境一致,二是它能暴露出脉冲宽度不足导致的波形断续问题,这正好是检验触发逻辑是否正确的好手段。如果直接在Simulink里拉一个三相四线模型,触发脉冲写窄一点也能跑,反而掩盖了触发设计上的缺陷。
2.3 Simulink中搭建最小调压回路的器件选型
在Simulink里搭这个模型,不需要从零写晶闸管的特性方程。Simscape Electrical库的Specialized Power Systems子库中已经提供了现成的晶闸管模型和三相整流桥模块。最快的方式是直接放一个Universal Bridge,在参数对话框里把Number of Bridge Arms设为3,Power Electronic Device选Thyristor,这样六只晶闸管连同各自的缓冲电路就一次建好了,省去手动排列六只管子的麻烦。
不过UniversalBridge的参数对话框默认给出的Snubber电阻和电容值需要关注。默认值Rs=100欧姆、Cs=1e-6法拉对大多数仿真场景可用,但在研究谐波时,较大的缓冲电容会产生明显的额外电流尖峰,干扰FFT分析结果。我通常把Snubber改成Rs=10000欧姆、Cs=1e-9法拉,让缓冲支路的电流小到可以忽略,电压尖峰又仍然被限制在安全范围。
三相电源用Three-Phase Source模块,设置Phase-to-phase RMS Voltage为380V,频率50Hz,内部接线选择Y接。负载端如果有三相RLC负载模块最好,它可以分别设定有功功率P和感性无功功率QL,方便切换电阻负载与阻感负载场景。最后别忘了放一个Powergui模块,它负责求解电气网络的微分方程,是整个电路模型运行的调度核心。将Scope接到Universal Bridge的测量端口上,就能分别观察六只晶闸管的电流和三相输出电压。
3. 在Simulink里做带双脉冲触发的完整调压器
3.1 同步信号生成:相电压过零 vs PLL
晶闸管的触发角alpha必须以某一路电压的过零点为参考基准,否则每次周波里触发时刻都是漂移的。Simulink模型里生成同步基准常见有两种方法:一种是直接检测A相相电压的过零信号,另一种是通过PLL锁定电网相位。过零检测实现起来简单,但电压波形如果带谐波畸变,过零抖动会被直接带入触发角;PLL在这种场景下更稳定,因为它输出的是平滑的相位角。
对于50Hz固定频率的仿真,我一般直接用一个Clock模块乘以2pi50,把仿真时间换算成名义相位角wt。这种方式并不是真正的同步,因为电网相位和仿真绝对时间之间没有真实绑定,但可靠性很高——三相电源和触发逻辑运行在同一个仿真时钟域里,相位差完全由触发逻辑内部的加法运算决定,不会出现硬件里那种频率漂移。如果你之后要把触发算法部署到嵌入式设备,再在同步环节加上真实的过零或者PLL算法就好。
PLL方案对应的是Simscape Electrical里的PLL模块,输入三相电压,输出相位角。它的响应速度与控制器参数有关,仿真中需要等待大约两到三个工频周期,相位才能跟上,因此起始阶段波形会有一段暂态。这个暂态不影响稳态分析,但如果你直接从0秒开始截取波形观察FFT,就会看到一堆乱七八糟的频率成分,第四章节会说明该从哪里开始分析。
3.2 用MATLAB Function写6路触发脉冲
六只晶闸管的触发逻辑适合写成一个MATLAB Function模块,接受同步相位角和alpha作为输入,输出六路门极信号。这个方案比放置六个独立的Pulse Generator再手动设置delay要灵活得多,alpha可以在仿真运行过程中实时修改,方便做参数扫描。
下面这段代码实现的是双窄脉冲触发逻辑,每60度补发一个20度宽度的窄脉冲,保证三相三线拓扑下任意时刻至少两相导通。
function gates = thy_gate(alpha_deg, wt) % 双脉冲触发逻辑,输出六路门极信号 % alpha_deg = 触发角(度),以A相相电压过零点为参考 % wt = A相相电压的空间相位角(弧度),由2*pi*50*t计算得到 alpha = alpha_deg * pi / 180; pulsew = 20 * pi / 180; % 窄脉冲宽度 % 六路触发信号的基准相位: % A相上管0°,B相上管120°,C相上管240° % A相下管180°,B相下管300°,C相下管60° base = [0, 120, 240, 180, 300, 60] * pi / 180; gates = zeros(1, 6); for idx = 1:6 pha = mod(wt - base(idx), 2*pi); % 当前路相对相位 % 主触发:相位到达alpha时发出第一个窄脉冲 if pha >= alpha && pha < alpha + pulsew gates(idx) = 1; end % 补偿触发:主触发后60度处补发第二个窄脉冲 if pha >= alpha + pi/3 && pha < alpha + pi/3 + pulsew gates(idx) = 1; end end end这段代码的关键是把每只晶闸管的触发基准相位强制偏移到对应的相区间。A相上管的过零时刻是A相相电压正半周起点,B相上管与之差120度,A相下管对应A相相电压负半周起点,自然差180度。计算ph = mod(wt - base, 2*pi)之后,ph的取值范围就被映射到0到360度之间,后续只需要和alpha比较。
MATLAB Function模块在Simulink里的输入配置为两个:alpha_deg和wt。alpha_deg可以直接接一个Constant模块,也可以在运行中用信号线从工作区或旋钮控件拉进来。wt的生成方式前面已经提过,用Clock模块乘2pi50。输出gates是1x6向量,通过Demux模块拆成六路后分别接到Universal Bridge的六只晶闸管门极输入上。如果你用的是独立Thyristor模块而不是Universal Bridge,需要手动保证接线顺序和base向量一致。
3.3 从标量角到触发时刻的参数换算
不用MATLAB Function,改由Pulse Generator逐个生成触发脉冲时,需要把alpha角度换算成时间延迟。50Hz工频下,一个完整周期是20毫秒,折算下来每度电角度对应约55.56微秒。因此alpha=60度时,触发延迟为3.33毫秒。下表给出几个常见触发角的延迟值,注意这里的参考点是各相晶闸管的基准电压过零时刻。
| 触发角alpha(度) | 对应延迟(毫秒) | A相上管触发时刻 | B相上管触发时刻 |
|---|---|---|---|
| 0 | 0 | A相电压正半周起点 | 滞后A相120度,约6.67ms |
| 30 | 1.67 | 过零后1.67ms | 8.33ms |
| 60 | 3.33 | 过零后3.33ms | 10.00ms |
| 90 | 5.00 | 过零后5.00ms | 11.67ms |
| 120 | 6.67 | 过零后6.67ms | 13.33ms |
如果用线电压过零点作为同步参考,事情会多一步偏移修正。线电压uAB过零时刻比A相相电压过零提前30度电角度,因此以uAB过零为参考时,要在最终触发时刻上额外加上30度。很多人在这个细节上出错,仿真波形看起来上下半周不对称,实际上就是这个偏移没有处理对。
Pulse Generator方案不支持运行中连续改变triggering角,因为每个模块的Phase Delay一旦设置就固定了。需要连续扫描alpha的场合,建议还是回到3.2的MATLAB Function方式,把alpha作为外部信号输入,这样在Simulink里用斜坡信号就可以扫出整个调压范围。
4. 调参三板斧:触发角、负载特性、SNUBBER与谐波
4.1 电阻性负载触发角的有效值变化曲线
电阻性负载下,三相交流调压器的行为最容易理解。把负载设为纯有功功率,感性无功为零,然后让alpha从0度增加到150度,每一步等电路进入稳态后测量三相输出电压有效值。理论上,三相三线Y接电阻负载的调压范围大约从线电压全值一路降到接近零,alpha=150度时输出电压有效值已经很小了。
Simulink里测量有效值有两种常用方式。一种是在Universal Bridge输出端口后面接RMS模块,选择Fundamental频率50Hz,输出就是电压有效值随时间变化的曲线,稳态时读取该曲线平台段数值即可。另一种是直接导出Scope波形到工作区,再用Matlab的rms函数离线计算。我习惯前一种,因为可以在一次仿真里同步看波形和有效值,省掉二次处理的麻烦。
实际操作中要留意alpha=0度与alpha=180度的区别。alpha=0度时,晶闸管相当于二极管整流的全导通工况,输出完整正弦电压;alpha=180度时,触发时刻落在电压过零点处,晶闸管随即承受反向电压无法导通,输出为0。因此调压范围的有效边界是0到180度,但为了波形对称性和避免触发抖动,电阻负载建议只用0到150度,留30度余量。
| 触发角alpha(度) | 输出电压有效值(相对值) | 波形特征 |
|---|---|---|
| 0 | 约1.0 | 完整正弦 |
| 30 | 约0.96 | 出现轻微切角 |
| 60 | 约0.82 | 明显缺相角 |
| 90 | 约0.62 | 波形接近半波形状 |
| 120 | 约0.38 | 导通区间窄 |
| 150 | 约0.10 | 接近关断 |
上表数值是三相三线纯阻性负载下的典型结果,准确值跟实际负载阻值及电压等级没有关系,只和触发角相关。仿真中看到数值与表中偏差超过5%时,优先检查三相电压是否平衡、负载是否为纯阻性、以及脉冲宽度是否不足。
4.2 阻感性负载的电流断续与触发角回退
阻感性负载是工业现场最常见的工况,电机、变压器都算这一类。加入感性无功后,晶闸管电流过零点会滞后于电压过零点,负载功率因数角用phi表示。当触发角alpha小于phi时,电流波形保持连续,调压器可以稳定工作;当alpha超过phi后,电流出现断续,每周期里有一段电流为零的时间,负载端电压波形也跟着发生畸变。
Simulink里验证这个分界点很简单:将三相RLC负载的感性无功QL调到有功功率的30%左右,例如P=10kW、QL=3kvar,此时功率因数角约17度。alpha设20度时电流波形每周期连续;alpha设45度时电流波形每相可以看到明显的断流区间。把Scope的显示时间拉长到两个完整工频周期,观察电流包络线,会自动看到这个现象。
阻感负载下alpha能调到的上限比电阻负载小得多。alpha过大时,晶闸管关断前承受的di/dt和dv/dt都比较高,模型里虽然不会烧管子,但数值求解器容易在电流断续边界处触发步长骤减,仿真速度会突然慢得离谱。出现这种情况时,不是模型逻辑错误,而是触发角超过了负载功率因数角的边界,回调alpha后再仿真就恢复正常。这也是三相交流调压器用在电机负载上通常只做小范围降压启动、不做深度降压运行的原因。
如果想要扩大alpha的调节范围,可以在负载端并联一个阻性分流支路,提高等效功率因数,使电流过零时刻更接近电压过零时刻。这种做法在只做仿真验证时意义不大,但对于理解调压器的负载适配范围有帮助。
4.3 Powergui FFT与谐波分析参数设置
三相交流调压器的输出谐波非常丰富,低次谐波含量远高于PWM变流器。Simulink里做谐波分析的标准工具是Powergui模块中的FFT Analysis界面。打开Powergui后,选择FFT Analysis工具,在弹出的窗口里要指定分析信号和参数,缺省设置往往不能直接给出有用的谐波柱状图。
需要手动设置的参数有三个:Start Time设0.06到0.08秒之间,跳过启动暂态;Number of Cycles设为5个工频周期,对应0.1秒数据宽度,频率分辨率20Hz;Base Frequency设为50Hz。Display Style选择List relative to Fundamental,这样各次谐波以基波百分比形式输出,Thd数值一目了然。
alpha=60度时,FFT结果通常显示三次谐波约20%到30%,五次谐波约10%到15%,总谐波畸变率THD在30%到50%之间。随着alpha增大,THD大体上升,到alpha=120度后总畸变率反而可能下降,因为导通区太窄,基波与被测的各次谐波同时变小,相对比值不比中角度区大。这个现象是调压器固有的,不代表谐波能量真的降低,表达谐波污染水平时还要结合基波电压的绝对幅值一起分析。
对于三相三线无中性线拓扑,三次谐波在相电压中不会出现,因为三相同相的零序分量没有N线构成回路。如果仿真波形FFT里150Hz分量依然很大,几乎可以断定模型里接到了三相四线,或者负载端的接法中隐含了中性点通路。这是检验模型接线是否正确的好方法。
4.4 仿真步长和solver选择
三相交流调压器模型包含晶闸管这种开关器件,仿真求解器选择直接决定波形质量。连续模式求解器默认使用ode23tb,对刚性系统适应性好,但由于晶闸管导通与关断事件发生在步长内部,触发点会被插值算法平滑处理,波形的边缘看起来不尖锐。固定步长模式求解器例如ode3,则在设定的时间网格上强制捕捉触发点,波形缺角位置更接近理想物理过程。
步长选择的依据不是仿真总时间,而是触发角的精度要求。每度电角度对应55.56微秒,如果要求alpha设置误差不超过0.5度,最大步长就不能超过27.78微秒。综合考虑波形质量和仿真速度,我通常把最大步长设为20微秒,仿真时间0.2秒,一次运行大概需要几秒到十几秒,视计算机性能而定。
同步触发信号生成方式与求解器配置也要匹配。3.2代码里用Clock乘2pi50生成相位wt,在变步长求解器下,wt的变化是一段段折线,触发点落在步长内部时会有微小延迟。用固定步长之后,触发时刻与步长网格严格对齐,代码输出更稳定,这是做参数扫描时推荐固定步长的根本原因。
5. 落袋技巧:用双脉冲时序与FFT谱线验证调压器真的“调”了压
5.1 双脉冲信号的时间间隔测量
仿真模型搭建完成后,先不要急着看输出电压,第一步验证门极信号是否正确。把Scope接到MATLAB Function输出的某一路信号上,例如A相上管gates(1),把时间轴放大到20到40毫秒之间。正常情况下可以看到两个相距3.33毫秒的窄脉冲,第一个出现在alpha对应的时刻,第二个出现在alpha+60度对应的时刻,例如alpha=30度时主脉冲在1.67毫秒处,补脉冲在5.00毫秒处。
测量主脉冲与补脉冲的时间差可以用来核对alpha的换算是否正确。双脉冲间隔60度,理论时间间隔为60除以360再乘以20毫秒,即3.33毫秒。如果测量结果与理论值偏离超过一个步长,例如固定步长20微秒时偏差大于60微秒,多半是wt的生成频率不是50Hz,检查Clock模块后接的增益是否为2pi50而不是314.159,差别虽然小,但累积几毫秒就会可见。
同时检查同一相上下两只管子的脉冲间隔。A相上管与A相下管的触发基准相差180度,对应时间间隔10毫秒。观察Scope里两个脉冲序列,如果二者间隔不是10毫秒,而是9.x或10.x毫秒,说明base向量中的相位配置有错位,通常是下管基准多加了30度,或者上管基准少减了30度。
5.2 三线拓扑三次谐波的谱线特征
双脉冲时序正确之后,下一步跑一次完整的0.2秒仿真,打开Powergui的FFT分析窗口,选取0.1秒到0.15秒的波形数据,alpha以60度为例。理想的三相三线电阻负载结果中,50Hz基波谱线最高,100Hz分量应该几乎为零,150Hz分量也就是三次谐波在理想情况下为零,实际数值通常在0.1%到1%之间浮动,属于数值噪声,不影响结论。
如果150Hz分量超过5%,第一反查模型中性线接线,可能是三相三线电源仍然给负载或晶闸管模块提供了中性点通路。另一种可能是三相电压不平衡导致的非特征谐波,Simulink的Three-Phase Source默认输出理想三相对称电压,因此不平衡的可能性极小,除非手动修改了电源模块的单相参数。
FFT窗口里五至十一次谐波在alpha=60度时呈现典型的调压器分布:五、七、十一依次递减,到十三次以后基本衰减到1%以下。如果高次谐波直到三十次以上还保持明显幅值,说明波形边缘太陡,可能与晶闸管模块的缓冲电路参数有关,增大缓冲电阻到100千欧级别可以平滑这种边缘尖峰,再观察谱线是否收敛。
5.3 从仿真模型到实验台架的参数迁移
仿真跑通以后,要把控制逻辑移植到单片机或FPGA时,有三条参数需要保留。第一是同步基准的偏移角,仿真代码里base向量的六路相位偏移如果带30度修正,对应硬件方案中的电压采集和过零检测就必须保留同样的移相补偿,否则实际触发角与目标alpha偏差30度。第二是脉冲宽度,双脉冲的窄脉冲宽度在硬件里至少要覆盖晶闸管开通建立时间,常见的应用选15到30度电角度,仿真中的20度有参考意义,最终需要根据实际器件门极最小触发宽度调整。第三是alpha限幅,阻感负载下alpha上限按负载功率因数角限制在30到60度之间,仿真中超过边界只会波形畸变,硬件中则可能因为电流断续产生转矩脉动或谐振,保护逻辑里要额外加一道限幅。
调压器模型要做参数扫描时,可以用Simulink的Signal Editor模块把alpha做成随时间变化的斜坡信号,从0度线性升到150度再降回0度,一次仿真就能观察到电压有效值的滞回式变化路径。扫描结果里alpha上升与下降过程中相同角度对应的有效值略有差异,这是晶闸管电流断续期间存储的能量释放导致的自然滞后,将它用于后续的闭环控制参数整定,会让算法更贴近实际物理过程。
本文还有配套的精品资源,点击获取