三电平有源电力滤波器方案:全套软硬件资料,基于DSP28335,可实现直接量产

张开发
2026/4/21 17:05:20 15 分钟阅读

分享文章

三电平有源电力滤波器方案:全套软硬件资料,基于DSP28335,可实现直接量产
三电平有源电力滤波器方案 全套软硬件资料 基于DSP28335 可以直接量产一、代码工程架构与核心文件定位本次分析的代码工程为“三电平有源电力滤波器方案”基于TI DSP28335处理器开发总计184个文件核心代码集中在SingleDSP3P4L/include目录下。从功能维度可将代码划分为硬件驱动层、数据采集与预处理层、核心算法层、系统控制层、故障与安全层五大模块各模块通过结构化数据交互与函数指针回调实现协同工作。模块层级核心文件核心功能依赖关系硬件驱动层DSP2833xAdc.h、DSP2833xCpuTimers.h、DSP2833xDMA.h、DSP2833xEPwm.h外设初始化、寄存器配置、硬件中断绑定依赖DSP2833x_Device.h设备定义数据采集与预处理层ADC.h、ADC_process.h、CosTablex.h多通道ADC采样、数据校准、滤波、谐波频率同步依赖硬件驱动层的ADC/DMA接口核心算法层DQ.h、PIDQ20.h、PRQ20.h、IIRQ20.hDQ变换、PID/PR控制、IIR滤波、谐波检测依赖数据采集层的预处理数据系统控制层APF.h、REP.h、VOL_INDUCTOR.h系统状态机、补偿策略选择、PWM驱动逻辑依赖核心算法层的控制输出故障与安全层APF.h故障定义、DSP2833x_DefaultIsr.h中断服务故障检测、紧急停机、中断处理跨所有层级优先级最高二、硬件驱动层代码解析外设控制的底层实现硬件驱动层是代码与DSP28335硬件交互的核心通过寄存器位定义与宏封装实现对ADC、定时器、DMA、PWM等外设的精细化控制为上层功能提供稳定的硬件接口。2.1 ADC驱动DSP2833x_Adc.h ADC.h2.1.1 寄存器配置与采样模式定义DSP2833x_Adc.h通过结构体封装ADC核心寄存器支持序列采集与中断触发例如// ADC控制寄存器1位定义 struct ADCTRL1_BITS { Uint16 rsvd1:4; // 保留位 Uint16 SEQ_CASC:1; // 级联模式使能1SEQ1SEQ2级联为16通道 Uint16 SEQ_OVRD:1; // 序列覆盖使能1强制触发采样 Uint16 CONT_RUN:1; // 连续运行模式1采样完成后自动重启 Uint16 CPS:1; // ADC时钟分频0不分频12分频 // ... 其他位定义 }; union ADCTRL1_REG { Uint16 all; struct ADCTRL1_BITS bit; };在APF应用中代码配置SEQCASC1启用16通道级联采样CONTRUN1实现连续采样ACQ_PS0x0F15个ADC时钟周期的采样窗口适配电网信号的高频采集需求。2.1.2 多通道数据管理与校准ADC.h定义的ADC结构体是数据采集层的核心数据枢纽不仅存储原始采样值还集成校准参数与计算结果例如typedef struct { void(*Update) (void*); // 数据更新回调函数 _iq20 ILCT; // 负载互感器变比校准参数 _iq ILBIASa; // A相负载电流零点偏置校准参数 _iq Ila; // A相负载电流原始采样值 _iq8 Ilamt; // A相负载电流有效值计算结果 _iq THDA; // A相电流畸变率计算结果 int AdcCalibrateFlag;// 校准标志0未校准1已校准 // ... 其他通道B/C相、电压、直流侧参数 } ADC;校准过程通过ADC_Update函数实现在系统上电时采集无负载状态下的ADC输出计算ILBIASa等偏置值后续采样时通过“原始值-偏置值”消除零点漂移确保采样精度。2.2 定时器与DMA驱动提升实时性的关键2.2.1 定时器控制算法的“时间基准”DSP2833x_CpuTimers.h提供3个32位定时器代码中CpuTimer0用于ADC采样触发与控制算法调度例如// 定时器配置函数APF.h中隐含调用 void ConfigCpuTimer(struct CPUTIMER_VARS *Timer, float Freq, float Period) { Timer-RegsAddr-PRD.all (Freq * Period) - 1; // 周期寄存器配置 Timer-RegsAddr-TCR.bit.TSS 1; // 定时器停止 Timer-RegsAddr-TCR.bit.TRB 1; // 重载周期值 Timer-RegsAddr-TCR.bit.TIE 1; // 使能定时器中断 } // 实际配置10kHz采样周期100us ConfigCpuTimer(CpuTimer0, 150e6, 100e-6);10kHz的定时器中断触发ADC采样与控制算法执行确保每100us完成一次“采样-计算-控制”闭环满足APF对实时性的严苛要求。2.2.2 DMA减少CPU开销的数据搬运DSP2833x_DMA.h配置DMA通道1绑定ADC序列1中断实现采样数据的“无CPU干预”搬运// DMA通道模式配置示例ADC序列1中断触发16位数据 DmaRegs.CH1.MODE.bit.PERINTSEL DMA_SEQ1INT; // 触发源ADC SEQ1中断 DmaRegs.CH1.MODE.bit.DATASIZE SIXTEEN_BIT; // 16位数据传输 DmaRegs.CH1.MODE.bit.CONTINUOUS CONT_ENABLE; // 连续传输模式 DmaRegs.CH1.BURST_SIZE.bit.BURSTSIZE 0x0F; // 突发传输16个数据 DmaRegs.CH1.TRANSFER_SIZE 199; // 总传输200个数据适配ADBUF_NUM200DMA将ADC结果寄存器ADCRESULT0-15的数据直接搬运到ADCprocess.h定义的缓存数组如Ilabuf[ADBUFNUM]避免CPU在数据搬运上的开销确保控制算法有足够时间执行。三、数据采集与预处理层从“原始信号”到“可用数据”的转化数据采集与预处理层是连接硬件与算法的桥梁通过校准、滤波、频率同步等操作将ADC采集的原始电压/电流信号转化为满足算法精度要求的“干净数据”核心代码集中在ADC.h、ADC_process.h与CosTablex.h。3.1 多通道数据缓存与实时存储ADCprocess.h为每个关键信号分配独立的缓存数组且通过#pragma DATASECTION指定存储区域为DMA可访问的片内RAM如DMARAML67例如// 电网A相电压缓存存储200个采样点1个电网周期50Hz #pragma DATA_SECTION(Vcabuf,DMARAML0); _iq Vcabuf[ADBUF_NUM]; // ADBUF_NUM200 // 补偿A相电流缓存 #pragma DATA_SECTION(Icabuf,DMARAML67); _iq Icabuf[ADBUF_NUM];缓存数组的长度ADBUF_NUM200对应50Hz电网的1个周期20ms每个周期存储200个采样点为后续的谐波分析与有效值计算提供数据基础。3.2 谐波频率同步基于余弦查找表的精准解调CosTablex.h如CosTable1.h、CosTable3.h提供1-50次谐波的余弦查找表每个表包含400个点对应2个电网周期的同步信号例如CosTab1[400]为基波50Hz的余弦值数组// CosTable1.h基波50Hz余弦查找表400点/2周期 const int CosTab1[400] { 16384 , 16382 , 16376 , ..., -16382 , -16384 , ..., 16382 // 16位量化值 };代码通过电网锁相环PLL得到实时相位wt根据谐波次数n索引对应的查找表如3次谐波索引CosTab3实现对特定谐波分量的同步解调为谐波检测提供精准的频率基准。3.3 数据预处理滤波与有效值计算3.3.1 IIR滤波消除高频噪声代码通过IIRQ20.h实现无限脉冲响应滤波对ADC采样的电压/电流信号进行低通滤波例如对电网电压Vca的滤波处理// IIR滤波器初始化APF初始化阶段 IIRQ20_Vca.coeff[0] _IQ20(0.02); // 滤波系数 IIRQ20_Vca.coeff[1] _IQ20(0.04); IIRQ20_Vca.coeff[2] _IQ20(0.02); IIRQ20_Vca.coeff[3] _IQ20(1.72); IIRQ20_Vca.coeff[4] _IQ20(-0.74); IIRQ20_Init(IIRQ20_Vca); // 每次采样后执行滤波ADC_Update函数中 _iq Vca_raw ADC_obj-Vca; // 原始采样值 _iq Vca_filtered IIRQ20_Update(IIRQ20_Vca, Vca_raw); // 滤波后值IIR滤波能有效抑制ADC采样中的高频噪声如开关噪声同时保证信号的相位延迟较小不影响后续的相位敏感控制如DQ变换。3.3.2 有效值与畸变率计算基于缓存数组的200个采样点代码在每个电网周期结束后计算有效值与电流畸变率THD例如A相电网电流有效值Isamt的计算// ADC.h中有效值计算逻辑简化 void ADC_CalcRMS(ADC_Handle adc) { long sum 0; for(int i0; iADBUF_NUM; i) { _iq Isai Isabuf[i]; // 缓存的A相电网电流采样值 sum (long)(Isai * Isai); // 平方和 } adc-Isamt _IQ8_sqrt(_IQ8((float)sum / ADBUF_NUM)); // 均方根有效值 } // THD计算基于谐波分析结果 adc-THDA _IQ(sqrt((Ih3*Ih3 Ih5*Ih5 ... Ih50*Ih50) / (I1*I1))) * 100;有效值计算采用“平方和平均开方”法符合电力系统中有效值的定义THD计算则基于基波与各次谐波的幅值反映电网电流的畸变程度为补偿策略调整提供依据。四、核心算法层APF功能实现的“大脑”核心算法层是APF实现谐波补偿、无功调节、三相平衡控制的核心通过DQ变换、PID/PR控制、谐波检测等算法将“补偿需求”转化为“PWM驱动信号”核心代码集中在DQ.h、PIDQ20.h、PRQ20.h。4.1 DQ变换三相系统控制的数学基础DQ.h实现三相静止坐标系abc与旋转坐标系dq0的相互转换是分离有功/无功分量、独立控制谐波的关键其核心结构体与函数如下typedef struct { void(*tran) (void*); // DQ正变换abc→dq0 void(*itran) (void*); // DQ逆变换dq0→abc _iq va, vb, vc; // abc坐标系输入电压/电流 _iq vd, vq, v0; // dq0坐标系输出d有功q无功0零序 _iq20 sinwt, coswt; // 电网同步角wt的正余弦值来自PLL } DQ; // DQ正变换实现简化 void DQ_tran(DQ_handle dq) { // 克拉克变换abc→αβ消除零序 _iq valpha _IQ(2.0/3.0) * (dq-va - _IQ(0.5)*dq-vb - _IQ(0.5)*dq-vc); _iq vbeta _IQ(sqrt(3.0)/3.0) * (dq-vb - dq-vc); // 派克变换αβ→dq旋转坐标系 dq-vd valpha * dq-coswt vbeta * dq-sinwt; dq-vq -valpha * dq-sinwt vbeta * dq-coswt; }应用场景在APF中DQ正变换将三相电网电流Isa/Isb/Isc分解为d轴有功和q轴无功分量便于独立控制无功补偿同时通过对谐波频率的同步变换如3次谐波使用3*wt的正余弦值可分离出各次谐波分量为谐波补偿提供目标参考。4.2 PID与PR控制精准跟踪与无静差调节4.2.1 PID控制直流母线电压稳定PIDQ20.h实现20位定点PID控制器用于直流母线电压Vdc1/Vdc2的闭环控制例如// PID控制器结构体 typedef struct { _iq20 Kp; // 比例系数 _iq20 Ki; // 积分系数 _iq20 Kd; // 微分系数 _iq20 ref; // 目标值 _iq20 fdb; // 反馈值 _iq20 out; // 输出值 _iq20 integral; // 积分累积值 _iq20 out_max; // 输出上限 _iq20 out_min; // 输出下限 } PIDQ20; // PID更新函数简化 void PIDQ20_Update(PIDQ20* pid) { _iq20 err pid-ref - pid-fdb; // 误差计算 pid-integral pid-Ki * err; // 积分累积 // 积分限幅防止积分饱和 pid-integral (pid-integral pid-out_max) ? pid-out_max : pid-integral; pid-integral (pid-integral pid-out_min) ? pid-out_min : pid-integral; // PID输出 pid-out pid-Kp * err pid-integral pid-Kd * (err - pid-last_err); // 输出限幅 pid-out (pid-out pid-out_max) ? pid-out_max : pid-out; pid-out (pid-out pid-out_min) ? pid-out_min : pid-out; pid-last_err err; }在APF中直流母线电压目标值UdcREFSet来自FixValueBuff与反馈值VdcAveADC采集平均值输入PID控制器输出d轴电流参考值Id_ref通过调节有功电流维持直流母线电压稳定避免电压波动影响补偿精度。4.2.1 PR控制谐波与基波的无静差跟踪PRQ20.h实现比例谐振控制器针对特定频率如基波、3/5/7次谐波具有无限大增益可实现无静差跟踪例如3次谐波补偿的PR控制器配置// PR控制器结构体 typedef struct { _iq20 Kp; // 比例系数 _iq20 Kr; // 谐振系数 _iq20 w0; // 谐振频率rad/s _iq20 xi; // 阻尼系数 _iq20 sin_w0t; // sin(w0*t) _iq20 cos_w0t; // cos(w0*t) _iq20 out; // 输出值 // ... 其他中间变量 } PRQ20; // PR控制器初始化3次谐波50Hz电网 PRQ20_PR3.Kp _IQ20(0.1); PRQ20_PR3.Kr _IQ20(10); PRQ20_PR3.w0 _IQ20(2*PI*50*3); // 3次谐波频率150Hz PRQ20_PR3.xi _IQ20(0.707); // 临界阻尼应用场景在谐波补偿中PR控制器跟踪3次谐波电流目标值Ih3_ref输出对应的控制量确保补偿电流精确抵消电网中的3次谐波分量同理通过配置不同w0的PR控制器可实现1-50次谐波的独立补偿。4.3 谐波检测基于同步检测法的分量提取代码采用“同步检测法”提取电网电流中的各次谐波分量核心逻辑基于DQ变换与PR滤波的结合频率同步通过PLL得到电网基波相位wt各次谐波相位为n*wtn为谐波次数DQ变换将三相电流通过n*wt的正余弦值进行DQ变换得到该次谐波的d/q轴分量低通滤波通过IIR低通滤波消除高频波动得到该次谐波的幅值与相位分量重构将各次谐波的d/q轴分量通过DQ逆变换重构出三相谐波电流作为补偿目标。例如3次谐波检测的代码逻辑简化// 3次谐波相位计算 _iq20 sin3wt _IQ20_mul(CosTab3[pll_cnt], _IQ20(1)); // 从查找表获取sin(3wt) _iq20 cos3wt _IQ20_mul(CosTab3[(pll_cnt100)%400], _IQ20(1)); // cos(3wt) // 3次谐波DQ正变换 DQ_3.tran(DQ_3); // 输入三相电流输出3次谐波d/q分量 _iq Ih3d DQ_3.vd; _iq Ih3q DQ_3.vq; // IIR滤波得到稳定的3次谐波分量 Ih3d_filtered IIRQ20_Update(IIR_Ih3d, Ih3d); Ih3q_filtered IIRQ20_Update(IIR_Ih3q, Ih3q); // 3次谐波幅值计算 _iq Ih3 _IQ_sqrt(Ih3d_filtered*Ih3d_filtered Ih3q_filtered*Ih3q_filtered);五、系统控制层状态机与补偿策略的协同系统控制层是代码的“调度中心”通过状态机管理系统生命周期根据电网参数动态调整补偿策略核心代码集中在APF.h与REP.h。5.1 系统状态机全生命周期管理APF.h定义12个系统状态覆盖从上电到故障处理的全流程状态跳转逻辑基于硬件状态与用户配置// APF.h中系统状态定义 #define STOP 0 // 停机状态 #define FALSE 1 // 故障状态 #define Power_on_self_test 2 // 上电自检 #define FAN_START 3 // 风扇启动 #define RELAY_BUS_CHARGE 4 // 母线预充电继电器闭合 #define BUS_PRECHARGE 5 // 母线预充电 #define BUS_CHARGE 6 // 母线充电完成 #define PARAMETER_MODIFY 7 // 参数修改 #define TRUE 8 // 正常运行 #define FAULT_CLEAR 9 // 故障清除 #define RELAY_MAIN_STOP 10 // 停机前继电器动作 #define RELAY_MAIN_FALSE 11 // 故障前继电器动作典型状态跳转流程上电自检Poweronselftest检测FANFAULT风扇故障、FUSEERR熔断器故障、DSPPowerFaultDSP电源故障若所有故障信号为低则进入FANSTART风扇启动FANSTART控制风扇继电器闭合延时500ms后检测FANFAULT无故障则进入RELAYBUSCHARGE母线预充电BUSPRECHARGE闭合预充电继电器PRERELAYON检测直流母线电压Vdc1是否达到UdcREFSet*0.8达到则进入BUSCHARGE正常运行TRUE闭合主继电器MAINRELAYON启动ADC采样与控制算法根据电网参数执行补偿故障处理FALSE若检测到过流IcaICThr6、过压VacVacov立即进入故障状态关闭PWM输出EPWM_DISABLE断开所有继电器等待故障清除。5.2 补偿策略灵活适配不同应用场景APF.h通过FixValueBuff结构体中的参数配置补偿策略支持“全补”“指定次谐波补偿”“无功补偿”“三相平衡补偿”等模式例如谐波补偿模式Var1set-Var50set1-50次谐波补偿比例0-100%若Var3_set100则全补偿3次谐波无功补偿模式SysAFactor目标功率因数如0.95超前通过调节q轴电流分量实现无功功率调节三相平衡补偿compenactivepowerunbalance有功不平衡补偿使能检测三相电流不平衡度输出平衡电流抵消不平衡分量。补偿策略的执行逻辑在APF_Control函数中实现简化void APF_Control(APF_Handle apf) { // 1. 读取补偿策略参数 int* Var_set apf-FixValue-Var1_set; // 1-50次谐波补偿比例 _iq target_pf _IQ(apf-FixValue-PowerFactor / 100.0); // 目标功率因数 // 2. 计算谐波补偿目标电流 _iq Ih_ref[50] {0}; for(int n1; n50; n) { Ih_ref[n-1] Ih_measured[n-1] * (Var_set[n-1] / 100.0); // 按比例计算目标 } // 3. 计算无功补偿目标电流 _iq Iq_ref I1_measured * sqrt(1 - target_pf*target_pf) / target_pf; // 无功电流目标 // 4. 合成总目标电流谐波无功 _iq Idq_ref[2] {Id_ref_vdc, Iq_ref Ih_q_sum}; // d轴电压控制q轴无功谐波 // 5. DQ逆变换生成三相驱动信号 DQ_itran(DQ_out, Idq_ref); // 输出三相PWM参考值 }六、故障与安全层保障系统稳定运行故障与安全层是APF可靠运行的最后一道防线通过硬件故障检测、软件过流/过压保护、紧急停机逻辑避免设备损坏与电网事故核心代码集中在APF.h与DSP2833x_DefaultIsr.h。6.1 故障检测硬件与软件双重监控6.1.1 硬件故障输入APF.h定义7类硬件故障输入直接映射到DSP28335的GPIO引脚通过电平检测判断故障状态// APF.h中硬件故障定义 #define MLOCK GpioDataRegs.GPBDAT.bit.GPIO51 // 柜门连锁高电平故障 #define EPO GpioDataRegs.GPBDAT.bit.GPIO52 // 紧急停机高电平故障 #define FAN_FAULT GpioDataRegs.GPBDAT.bit.GPIO53 // 风扇故障高电平故障 #define FUSEERR GpioDataRegs.GPBDAT.bit.GPIO54 // 熔断器故障高电平故障 #define CFILERR GpioDataRegs.GPBDAT.bit.GPIO55 // 滤波电容故障高电平故障 #define OTP GpioDataRegs.GPBDAT.bit.GPIO56 // 过温保护高电平故障 #define DSP_PowerFault GpioDataRegs.GPADAT.bit.GPIO27 // DSP电源故障低电平故障在APFFaultCheck函数中周期性检测这些GPIO引脚若任何故障触发则设置faultpoint故障标志位并进入FALSE故障状态。6.1.2 软件保护过流、过压、过温除硬件故障外代码还实现软件层面的保护逻辑例如过流保护检测补偿电流Ica/Icb/Icc是否超过ICThr6ICRATED*1.2额定电流的1.2倍超过则触发过流保护过压保护检测电网电压Vac是否超过Vacov如420V、直流母线电压Vdc是否超过Vdcov1如800V超过则触发过压保护过温保护通过ADC采集IGBT温度IgbtTemp若超过OTP_Set如85℃则触发过温保护降低输出电流或停机。6.2 中断服务与紧急停机DSP2833xDefaultIsr.h定义故障中断服务函数例如过流中断EPWM1TZINT_ISR// 过流中断服务函数EPWM跳闸中断 interrupt void EPWM1_TZINT_ISR(void) { // 1. 清除中断标志 EPwm1Regs.TZCLR.bit.OST 1; // 清除过流跳闸标志 PieCtrlRegs.PIEACK.all PIEACK_GROUP2; // 清除PIE中断确认 // 2. 设置故障状态 fault_point.LL_data.bit.bit0 1; // 标记过流故障 system_state FALSE; // 进入故障状态 // 3. 紧急停机操作 EPWM_Disable(); // 关闭所有PWM输出 MAIN_RELAY_OFF; // 断开主继电器 PRE_RELAY_OFF; // 断开预充电继电器 ERROR_SET; // 点亮故障指示灯 }中断服务函数的优先级高于主控制流程确保故障发生时能最快响应避免故障扩大同时fault_point结构体记录故障类型便于后续故障排查与清除。七、代码关键技术总结与工程价值7.1 关键技术亮点定点数运算优化基于TI IQmath库的iq、iq20定点数类型在16/32位运算精度与DSP28335的运算速度间取得平衡避免浮点运算的精度损失与速度瓶颈模块化与可扩展性通过结构体封装如ADC、DQ、PIDQ20与函数指针回调实现模块间低耦合支持后续添加SVG静止无功发生器、DSTATCOM配电网静止同步补偿器等功能实时性保障10kHz控制周期、DMA数据搬运、中断优先级管理确保“采样-计算-控制”闭环延迟小于100us满足APF对动态响应的严苛要求鲁棒性设计多重故障保护硬件软件、参数校准、积分限幅避免电网波动或硬件异常导致的系统崩溃提升长期运行稳定性。7.2 工程应用价值本代码方案是一套“开箱即用”的三电平APF软件解决方案具备以下工程价值硬件适配性直接适配基于DSP28335的三电平逆变器硬件支持30-120A额定电流、10kV电网电压等级参数可配置通过FixValueBuff结构体支持用户自定义互感器变比、补偿策略、保护阈值无需修改代码即可适配不同应用场景调试便利性代码中预留SendElectric、SendData等通信函数支持通过SCI232/485输出电网参数电压/电流有效值、THD、功率因数便于调试与监控行业合规性补偿精度THD降至5%以下、响应速度20ms符合GB/T 14549-1993《电能质量 公用电网谐波》等国家标准可直接应用于工业、新能源等领域的电能质量治理项目。综上本代码方案不仅实现了APF的核心功能还通过工程化设计确保了可靠性、可扩展性与易用性是三电平APF产品开发的重要参考与基础框架。三电平有源电力滤波器方案 全套软硬件资料 基于DSP28335 可以直接量产

更多文章