3. 船用储能PCS软件架构与开发环境
船用储能PCS(Power Conversion System,储能变流器)的控制软件并不是一段“从上电跑到断电”的大循环,而是由多个层次协作完成:底层驱动负责与IGBT、采样芯片、继电器等硬件打交道;控制算法层完成锁相、坐标变换、电流环与电压环、功率指令跟踪;通信层承担与BMS、EMS、船舶能量管理系统的数据交互;保护层则在任何时刻监视过流、过压、过温、绝缘与通信异常,并在必要时封锁PWM。理解这四层的职责边界与调用关系,是后续能够独立编译、下载并调试一个最小控制工程的前提。
一、分层架构的职责划分
从工程实现角度看,PCS控制软件通常按“硬件抽象—实时控制—通信服务—安全保护”四个方向分层。底层驱动位于最靠近硬件的一层,包含ADC采样通道配置、PWM比较寄存器装载、GPIO与继电器控制、编码器或旋变接口、看门狗与时钟配置。这一层的代码与具体主控芯片(常见为DSP如TMS320F28379D,或ARM Cortex-M7配合FPGA)强相关,换芯片时主要改这一层。
控制算法层建立在驱动之上,是PCS的“大脑”。典型结构为:电网电压/电流采样 → 锁相环(PLL)获取相位与频率 → Clarke/Park变换 → 外环(功率环或电压环)给出电流指令 → 内环电流环经PI调节 → 反Park变换生成调制波 → SVPWM输出占空比。船用场景还要考虑船舶电网频率波动(如50Hz±5%)、发电机与岸电切换、孤岛与并网模式切换,因此算法层通常包含并网/离网双模式状态机。
通信层负责对外交互,常见协议包括Modbus RTU/TCP、CANopen、IEC 61850(部分船舶微网项目)以及厂商自定义的以太网协议。通信层一般运行在较低优先级任务中,通过共享内存或消息队列与控制算法交换数据,避免通信阻塞影响实时控制。保护层则贯穿各层:硬件比较器实现微秒级过流封波,软件保护任务实现毫秒级的过压、过温、绝缘监测与通信超时判断,两者形成“硬保护+软保护”的双重防线。
二、开发环境与工程配置
以DSP方案为例,主流开发环境为TI的Code Composer Studio(CCS)。新建工程时需要关注几个关键配置项:芯片型号与器件支持包版本必须一致,否则链接阶段会出现外设寄存器定义缺失;链接命令文件(.cmd)决定代码段与数据段在Flash/RAM中的分布,控制算法中的实时中断服务程序通常放在RAM中运行以提高速度,而参数表与通信缓冲区可放在Flash;中断向量表需要与硬件中断源一一对应,PWM周期中断、ADC转换完成中断、通信接收中断的优先级要合理分配。
工程配置中容易被忽视的是时钟树与ADC触发源。PCS的电流环通常要求与PWM载波同步采样,常见做法是用EPWM的周期中断或SOC信号触发ADC,使采样点固定在载波谷底或峰值,避开开关噪声。若ADC触发源配置错误,采样值会随占空比波动,表现为电流波形畸变,这类问题在调试初期非常常见。此外,PWM死区时间需根据所选IGBT模块的关断时间设定,船用大功率模块一般取2~4μs,死区过小会导致直通,过大则增加谐波与损耗。
三、最小控制工程的编译与下载
所谓“最小控制工程”,是指不追求完整功率闭环,只验证“采样—计算—输出—通信”这条主链路是否打通。一个可执行的示例流程如下(参数为教学示例,实际项目需按硬件手册调整):
- 建立工程骨架:新建CCS工程,选择目标芯片,添加驱动库与启动文件,配置系统时钟为200MHz,使能EPWM1、ADCINA0~A3、SCIA。
- 编写初始化函数:配置EPWM1为增减计数模式,载波频率10kHz,死区3μs;配置ADC为EPWM1 SOCA触发,采样窗口与载波谷底对齐;配置SCI为9600bps、8N1。
- 编写中断服务程序:在EPWM1周期中断中读取ADC结果,做标幺化处理,执行一个空载的Park变换与反变换,将结果写入EPWM比较寄存器,同时翻转一个GPIO用于示波器观测中断周期。
- 编译:执行Build,检查是否有警告与段溢出。若出现“.text does not fit”类错误,需调整.cmd文件中的代码段分配。
- 下载与运行:连接XDS100仿真器,加载.out文件,点击运行。用示波器观察GPIO翻转波形,周期应为100μs;通过串口助手发送查询帧,应能收到应答。
// 教学示例:EPWM1周期中断中的最小处理骨架
interrupt void epwm1_isr(void)
{
Uint16 rawA = AdcaResultRegs.ADCRESULT0; // A相电流采样
float iA = (rawA * 3.0f / 4095.0f - 1.5f) / 0.05f; // 示例标幺化
// 空载验证:仅做一次坐标变换往返
float alpha = iA;
float beta = 0.0f;
float d = alpha;
float q = beta;
EPwm1Regs.CMPA.bit.CMPA = (Uint16)(3000 + (Uint16)(d * 100.0f));
GpioDataRegs.GPBTOGGLE.bit.GPIO34 = 1; // 示波器观测用
EPwm1Regs.ETCLR.bit.INT = 1;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
}
下载完成后,判断最小工程是否成功的依据不是“灯亮了”,而是三个可观测点:GPIO翻转周期与设定中断周期一致,说明中断链路正常;串口查询有正确应答,说明通信层已通;示波器上PWM占空比随采样值变化且无异常跳变,说明采样与调制链路已通。三点都满足后,再逐步接入锁相环与电流环,把“最小工程”扩展为“闭环工程”。
四、分层架构带来的调试便利
分层架构的价值在排障时体现得最明显。若PWM无输出,先查驱动层的EPWM配置与GPIO使能,再查保护层是否已触发封波;若并网电流畸变,先确认ADC采样时刻是否与载波同步,再检查锁相环输出相位是否稳定;若上位机读不到数据,先确认通信层任务是否被高优先级中断长期抢占。把问题定位到某一层,再在该层内部逐项核对配置,比从头到尾通读代码效率高得多。船用PCS还多一层环境约束:船舶电网频率与电压波动范围、盐雾与振动对传感器的影响、发电机切换时的相位跳变,这些都需要在算法层与保护层中预留参数接口,而不是写死在代码里。
完成本节的最小工程后,读者应能说清四层各自负责什么、工程配置中哪几项最容易出错、以及如何用三个可观测点判断主链路是否打通。这些是后续接入真实功率回路与并网算法的基础。