基于PLC与SVG的10KV动态无功补偿控制:链式H桥与傅立叶算法
发布时间:2026/9/18 11:32:00 作者:尧图编辑部 阅读量:1,286

简介这份毕业设计文档围绕基于PLC的10KV动态无功补偿控制系统SVG展开面向电气工程、自动化方向的本科生与相关工程技术人员可用于课程设计、毕业设计选题及无功补偿技术入门参考。资源共1个doc文件压缩包约752KB内容包含摘要、关键词、目录及各章节正文从课题背景、链式H桥逆变器结构到IGBT变流模块设计均有系统论述。文档重点阐述了SVG通过充电电阻预充电、接触器短接并网、主控制器根据母线电压电流计算无功电流并生成IGBT驱动信号的完整工作流程并分析了逆变器输出与电网无功电流幅值相等、相位相反的补偿原理。读者可从中获取SVG系统结构、PLC控制策略、功率单元级联方式及电能质量改善效果的完整分析思路亦可作为论文写作与方案设计的参考资料。目前已有88人学习关注。1. 从10KV母线无功倒送说起这套PLCSVG方案解决什么轧钢厂配电室里10KV母线的功率因数在0.7到0.95之间来回跳电容柜接触器一天动作上百次烧了好几个。传统TSC补偿在冲击性负载面前就是这种表现——要么过补要么欠补响应速度跟不上。这份基于PLC的10KV动态无功补偿控制系统SVG文档核心是用链式H桥逆变器替代机械投切电容器用西门子S7-200做控制器把无功补偿从“有级”推到“无级”。它适合两类人电气工程专业的毕业生需要一份从拓扑到程序的完整参考现场做配电自动化的工程师想搞懂SVG的充电时序和IGBT驱动逻辑但不想啃几百页器件手册。文档里最值钱的部分不是绪论而是第二章的测量算法和第四章的投切流程。2. SVG链式H桥拓扑与PLC选型从器件到I/O分配2.1 链式逆变器的电压叠加逻辑2.1.1 两电平H桥级联的数学关系SVG的核心是电压型桥式电路直流侧电容储能交流侧通过连接电抗器并入电网。文档里用的方案是每相多个两电平H桥模块串联也就是链式结构。10KV线电压峰值约14.14kV每个H桥模块输出三电平Udc、0、-Udc所以每相需要N个模块串联来承受这个电压。N的计算取决于单模块直流母线电压和冗余度。假设每个模块的直流母线电压Udc取800V考虑1.2倍裕量单模块耐压按960V算14.14kV除以960V约等于15所以每相至少15个模块。常见做法是每相16个或18个留出冗余。级联后的输出相电压是各个模块输出电压的瞬时和用PWM移相载波就能逼近正弦波。每相模块数直流母线电压输出相电压峰值适用线电压12800V9.6kV6.6kV16800V12.8kV10kV18800V14.4kV10kV带冗余链式结构比二极管钳位多电平更容易扩展因为每个H桥模块独立损坏一个可以旁路不影响其他模块。缺点是需要的独立直流电源多每个模块都要有隔离的驱动和供电。文档里没有展开模块旁路逻辑但现场调试时这是必选项。2.1.2 连接电抗器与充电电阻的参数计算连接电抗器的作用是滤除PWM谐波同时限制短路电流。电抗器的电感量按纹波电流设计L (Udc × m) / (8 × fsw × ΔI)其中m是调制比fsw是开关频率ΔI是纹波电流。开关频率越高电感量越小但开关损耗越大。10KV SVG常用的开关频率在1kHz到3kHz之间取2kHz比较平衡。充电电阻的选取要保证预充电时间在1到3秒同时限制冲击电流。公式R Udc / I_charge充电时间常数τ R × C。下面用Python算一个例子。# 计算连接电抗器和充电电阻 Udc 800 # 单个模块直流母线电压 V m 0.9 # 调制比 fsw 2000 # 开关频率 Hz delta_I 0.2 * 100 # 纹波电流假设额定电流100A取20% L (Udc * m) / (8 * fsw * delta_I) print(f连接电抗器电感量: {L*1000:.2f} mH) C 4700e-6 # 直流侧电容 4700uF Udc_target 800 # 充电目标电压 V I_charge_max 5 # 最大充电电流 A R Udc_target / I_charge_max tau R * C t_charge 5 * tau # 5个时间常数达到99%以上 print(f充电电阻: {R:.1f} Ω, 充电时间: {t_charge:.2f} s)代码逻辑第一段算电抗器按20%纹波电流设计保证电流连续第二段算充电电阻把充电电流限制在5A以内4700uF电容用160Ω电阻时间常数约0.75秒5个τ约3.75秒实际充电到800V需要约3秒。参数说明如果电容容值更大需要减小电阻或延长预充电时间纹波电流取额定电流的15%到25%比较常见。充电电阻的功率要按峰值电流的平方乘以电阻再乘以占空比来选短时工作制可以选小功率但热容大的线绕电阻。2.2 S7-200 CPU226的I/O资源与扩展西门子S7-200 CPU226自带24点数字量输入、16点数字量输出最多扩展7个模块。对于SVG控制需要采集三相电压、三相电流至少6路模拟量输入。CPU226本身没有模拟量输入必须外扩EM231或EM235。EM231是4路12位模拟量输入输入范围0到10V或0到5V。三相电压和三相电流共6路需要两个EM231。如果还要测直流母线电压再加一个。数字量输出用来控制充电接触器、主接触器、故障指示灯等。PWM信号如果由PLC直接生成CPU226没有高速PWM输出通常外扩EM253位置模块或用CPLD。常见做法是PLC负责计算无功电流指令通过RS485把指令发给FPGA或DSP由后者生成PWM。地址功能类型AIW0A相电压模拟输入AIW2A相电流模拟输入AIW4B相电压模拟输入AIW6B相电流模拟输入AIW8C相电压模拟输入AIW10C相电流模拟输入AIW12直流母线电压模拟输入Q0.0充电接触器数字输出Q0.1主接触器数字输出Q0.2PWM使能数字输出Q0.3故障报警数字输出模拟量输入模块的分辨率是12位对应0到32000的整数。电压互感器和电流互感器的二次侧信号要经过调理电路变成0到5V再接入EM231。注意EM231的输入阻抗较低信号源内阻要小于100Ω否则精度下降。如果现场电磁干扰强模拟量电缆要用屏蔽双绞线屏蔽层单端接地。2.3 投切方式的选择原则文档里提到集中补偿、分散补偿和集中与分散结合。对于10KV系统负载主要是变压器和电动机无功需求集中采用集中补偿比较合理。补偿容量按变压器容量的20%到30%估算。如果负载波动大比如轧钢机就要用SVG做动态补偿固定电容器做基础补偿。固定电容器分组投切每组容量按无功缺额的1/3到1/5配置避免投切振荡。SVG的容量要能覆盖最大无功波动通常取固定电容器的50%到100%。这种混合补偿方式既经济又能满足动态响应。3. 电网参数测量交流采样与傅立叶算法在PLC上的落地3.1 交流采样 vs 直流采样为什么选交流采样文档第二章提到了两种采样方式。直流采样是把交流信号整流滤波成0到5V直流算法简单但实时性差无法测相位而SVG必须知道电压和电流的相位差才能算无功。交流采样直接对交流信号采样保留相位信息配合傅立叶算法能分离基波和谐波。在10KV系统里谐波源多用交流采样是唯一选择。但交流采样对A/D速度和PLC运算能力要求高。S7-200的模拟量输入转换时间约几十微秒配合CPU226的1ms定时中断可以做到每周波64点采样。采样率设为3200Hz50Hz信号每周期64点满足DFT要求。项目直流采样交流采样相位信息丢失保留谐波影响无法分离可分离硬件成本较高较低实时性差好适用场景保护测量与控制3.1.1 抗混叠滤波器的设计交流采样前要加抗混叠滤波器否则高频噪声会混入基波。S7-200的EM231没有内置抗混叠滤波器需要外部加RC低通。截止频率取采样率的一半以下比如采样率3200Hz截止频率取1kHz。RC滤波器的一阶电路截止频率fc 1/(2πRC)。假设R取1kΩC取0.1μFfc约1591Hz略高可以取1.5kΩ和0.1μFfc约1061Hz。注意RC滤波器会引入相位延迟在计算功率因数时要补偿这个延迟。补偿方法是把电流采样值整体后移一个固定的采样点数移点数等于延迟时间乘以采样率。3.2 傅立叶算法求基波幅值与相位3.2.1 DFT的定点数实现傅立叶算法DFT是电力系统测量的常用方法。对一个周期信号采样N点基波实部和虚部为Re (2/N) × Σ x(k) × cos(2πk/N)Im (2/N) × Σ x(k) × sin(2πk/N)。然后幅值 sqrt(Re² Im²)相位 atan2(Im, Re)。在S7-200里浮点运算慢通常用定点数。把cos和sin表预先存到V区用查表法。采样值x(k)是0到32000的整数乘以cos表Q15格式-32768到32767累加后右移15位得到实部。累加过程中要用双整数防止溢出。N取64累加64次最大值为32000×32767×64约6.7×10^10超过32位有符号整数范围所以每加几次就要移位或者用浮点。实际工程中S7-200做64点DFT有点吃力常见做法是送数据到上位机或DSP算。import numpy as np # 模拟含3次、5次谐波的电压电流 fs 3200 # 采样率 Hz f0 50 # 基波频率 N 64 # 采样点数 t np.arange(N) / fs # 电压基波幅值 100V3次谐波 10V5次谐波 5V v 100*np.sin(2*np.pi*f0*t) 10*np.sin(2*np.pi*3*f0*t) 5*np.sin(2*np.pi*5*f0*t) # 电流基波幅值 50A相位滞后30度加3次谐波 i 50*np.sin(2*np.pi*f0*t - np.pi/6) 8*np.sin(2*np.pi*3*f0*t) def dft(x): k np.arange(N) Re (2/N) * np.sum(x * np.cos(2*np.pi*k/N)) Im (2/N) * np.sum(x * np.sin(2*np.pi*k/N)) return Re, Im, np.sqrt(Re**2 Im**2), np.arctan2(Im, Re) Re_v, Im_v, Vm, phi_v dft(v) Re_i, Im_i, Im_i_mag, phi_i dft(i) print(f电压基波幅值: {Vm:.2f} V, 相位: {np.degrees(phi_v):.2f}°) print(f电流基波幅值: {Im_i_mag:.2f} A, 相位: {np.degrees(phi_i):.2f}°) print(f功率因数角: {np.degrees(phi_v - phi_i):.2f}°)代码逻辑构造了含有3次和5次谐波的电压电流用DFT提取基波。结果会显示电压幅值100V电流幅值50A相位差30°和设定一致。参数说明N取64点采样率3200Hz正好是每周期64点50Hz。在S7-200里N取64查表法算cos和sin累加用双整数每16次移位一次避免溢出。注意电网频率偏移时采样点数和实际周期不匹配会产生频谱泄漏。解决办法是用锁相环跟踪频率动态调整采样点数或采样率。3.2.2 功率因数与无功功率的计算得到电压和电流的基波实部虚部后有功功率P (Vre × Ire Vim × Iim) / 2无功功率Q (Vim × Ire - Vre × Iim) / 2。功率因数cosφ P / sqrt(P² Q²)。在S7-200里用双整数乘法和除法实现。注意电压和电流的实部虚部都是Q15格式乘积是Q30累加后除以2再右移15位得到实际值。实际工程中还要乘以电压互感器和电流互感器的变比以及AD的满量程系数。这些系数存到V区方便现场校准。4. 无功补偿控制策略从功率因数投切到无功功率闭环4.1 功率因数控制的两次误动作轻载振荡与重载欠补文档2.4节详细分析了功率因数控制的缺陷。以功率因数作为投切判据在轻载时一个电容器组的容量可能大于负载所需的无功投入后功率因数超前于是切除切除后又不够形成振荡。重载时虽然功率因数达到0.9但无功功率绝对值很大功率因数控制不会继续投入导致欠补。表格对比了两种控制方式。场景功率因数控制无功功率控制轻载投切振荡按无功缺额投入不振荡重载欠补缺多少补多少控制量cosφQ检测量一致性间接直接无功功率控制以系统中的无功功率为被控制对象检测量与控制目标一致能够真正实现无功功率缺多少补多少。但无功功率控制需要计算无功功率对测量精度要求高。如果DFT算法有误差无功功率计算会偏离实际值。常见做法是加一个死区比如无功缺额小于5%额定容量时不动作避免频繁调节。4.2 无功功率闭环控制的PLC梯形图实现4.2.1 PI调节器的参数整定无功功率控制的核心是计算系统需要的无功功率Q_ref与SVG实际输出的Q_act比较误差经过PI调节器生成无功电流指令。在S7-200里可以用梯形图实现。PI调节器的比例系数Kp决定响应速度积分系数Ki消除稳态误差。Kp一般取0.5到2Ki取0.01到0.1具体要结合系统短路容量调整。短路容量大的系统Kp可以取大一点响应快短路容量小的系统Kp取小一点避免振荡。整定方法先把Ki设为0逐渐增大Kp直到系统出现等幅振荡记录此时的Kp为临界增益Ku振荡周期为Tu。然后取Kp 0.45KuKi 0.54Ku/Tu。这是Ziegler-Nichols方法适合电流环。// 无功功率闭环控制梯形图逻辑伪代码 // 网络1读取母线电压、电流的DFT结果 // 网络2计算Q_ref Q_load - Q_cap // 网络3Q_err Q_ref - Q_act // 网络4PI调节器输出I_q_ref // 网络5将I_q_ref限幅后转换为PWM指令逻辑说明Q_load由负载电流和电压计算得出Q_cap是已投入的固定电容器组容量。误差经过PI调节输出I_q_ref是SVG需要输出的无功电流幅值。参数说明限幅环节防止指令超过IGBT的额定电流。S7-200的PI调节可以用PID指令块但需要把采样时间设为定时中断周期比如1ms或2ms。注意PID指令块输出的是0到1的归一化值要乘以量程系数才能得到实际电流指令。4.2.2 固定电容器与SVG的协调控制固定电容器分组投切SVG做动态细调。控制逻辑先根据无功缺额的大小决定投入几组固定电容器剩下的无功缺额由SVG补偿。固定电容器的投切要有延时比如每组间隔5秒避免频繁动作。SVG的响应时间在10ms以内可以快速跟踪。如果无功缺额超过SVG容量先投入固定电容器等稳定后再由SVG调节。如果无功缺额反向容性先切除固定电容器再由SVG吸收无功。这种协调控制可以最大化利用SVG的动态范围。4.3 投切时序与充电接触器逻辑SVG启动时序很关键。文档里提到先通过充电电阻对直流侧电容充电到预定值然后闭合充电接触器短接电阻再并网。如果顺序错了比如先并网再充电直流侧电容电压为零交流侧直接加10KV会炸IGBT。下面的时序表给出了每个阶段的PLC输出状态。阶段充电接触器主接触器PWM使能直流母线电压预充电断开断开禁止0 → 800V短接电阻闭合断开禁止800V并网运行闭合闭合允许800V ±5%故障断开断开禁止放电在PLC里预充电阶段要监测直流母线电压用模拟量输入读回。当电压达到设定值的90%时输出Q0.0闭合充电接触器。延时100ms后再闭合主接触器Q0.1。PWM使能信号要等主接触器反馈信号确认后才输出。如果充电超时比如3秒内没达到阈值立即断开充电接触器并报警。常见做法是加一个硬件比较器作为后备防止PLC死机导致过充。故障时先封锁PWM再断开主接触器最后断开充电接触器让电容通过放电电阻泄放能量。5. 进阶技巧用PLC高速计数器做同步采样与故障录波5.1 高速计数器生成采样时钟S7-200 CPU226有6个高速计数器最高频率20kHz。可以用HSC0工作在模式0对内部PTO输出计数或者外部晶振分频。把采样率设为3200Hz每周期64点可以配置HSC0的预置值。当计数值达到预置值时触发中断在中断里启动A/D转换。这样采样和电网频率同步DFT结果更准。如果电网频率在49.5到50.5Hz之间波动同步采样能把频谱泄漏降到最低。配置HSC0的步骤在STEP 7-Micro/WIN里打开高速计数器向导选择HSC0模式0预置值设为3200使能中断。中断程序里调用A/D转换读取EM231的模拟量输入存入V区。5.2 故障录波的数据结构当检测到过流或直流母线欠压时需要记录故障前后的波形。在PLC的数据块里开辟一个环形缓冲区比如存储4个周波的采样值每通道64点共6通道。每个采样点占2字节需要768字节。S7-200的V区可以满足。用指针寻址每次中断写入一个点指针循环。故障触发后停止写入把数据通过自由口通信上传到上位机。下面是一个简单的录波触发代码片段。// 故障触发录波 IF Fault THEN // 停止写指针设置录波完成标志 Record_Done : TRUE; // 计算故障前数据起始地址 Start_Addr : Current_Ptr - PRE_TRIGGER_POINTS * 2; IF Start_Addr Buffer_Start THEN Start_Addr : Start_Addr Buffer_Size; END_IF; END_IF;逻辑说明Fault变量来自保护逻辑当它为真时记录当前指针并向前推PRE_TRIGGER_POINTS个点作为起始地址实现故障前录波。参数说明PRE_TRIGGER_POINTS一般取2个周波的数据比如128点。Buffer_Size是整个环形缓冲区的大小。注意环形缓冲区的地址计算要考虑回绕用模运算或者条件判断。录波数据上传时用自由口通信协议波特率设为115200每帧发送一个通道的64个点加上帧头和校验。5.3 用上位机验证补偿效果把PLC采集的电压电流数据通过RS485送到上位机用Python画波形和功率因数曲线。一个简单的验证方法是在负载突变时看SVG输出电流的响应时间是否小于20ms稳态后功率因数是否在0.98以上。如果响应慢检查PI参数和采样周期如果稳态误差大检查DFT的直流分量抑制。把这份文档里的算法和实际录波对比能发现很多论文里没写的细节比如电网频率偏移对DFT的影响以及IGBT死区对无功电流的畸变。现场调试时用示波器同时看电网电压和SVG输出电流调整锁相环的带宽让相位跟踪更稳。本文还有配套的精品资源点击获取