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(部分船舶微网项目)以及厂商自定义的以太网协议。通信层一般运行在较低优先级任务中,通过共享内存或消息队列与控制算法交换数据,避免通信阻塞影响实时控制。保护层则贯穿各层:硬件比较器实现微秒级过流封波,软件保护任务实现毫秒级的过压、过温、绝缘监测与通信超时判断,两者形成“硬保护+软保护”的双重防线。

船用储能PCS控制软件分层架构 保护层(硬保护 + 软保护) 比较器过流封波 · 过压/欠压 · 过温 · 绝缘监测 · 通信超时 · 看门狗 贯穿各层 通信层 Modbus RTU/TCP CANopen · IEC 61850 与BMS/EMS数据交互 低优先级任务 · 消息队列 控制算法层 PLL锁相 → Clarke/Park变换 功率外环 → 电流内环PI 反Park → SVPWM调制 并网/离网双模式状态机 底层驱动层 ADC采样配置 PWM寄存器装载 GPIO/继电器控制 时钟 · 看门狗 被控硬件对象 IGBT功率模块 · 直流母线电容 · 滤波电感 · 电压/电流传感器 · 接触器与预充回路 · 船舶电网/储能电池 采样反馈 封波/停机指令 开发环境与工程配置要点 IDE:CCS(DSP)/ Keil MDK(ARM) · 编译器版本与芯片支持包需匹配 工程配置:时钟树、ADC触发源、PWM死区、链接命令文件(.cmd)、中断向量表 下载调试:JTAG/XDS100仿真器 · 目标配置文件(.ccxml) · 编译产物 .out/.hex

二、开发环境与工程配置

以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,死区过小会导致直通,过大则增加谐波与损耗。

三、最小控制工程的编译与下载

所谓“最小控制工程”,是指不追求完整功率闭环,只验证“采样—计算—输出—通信”这条主链路是否打通。一个可执行的示例流程如下(参数为教学示例,实际项目需按硬件手册调整):

  1. 建立工程骨架:新建CCS工程,选择目标芯片,添加驱动库与启动文件,配置系统时钟为200MHz,使能EPWM1、ADCINA0~A3、SCIA。
  2. 编写初始化函数:配置EPWM1为增减计数模式,载波频率10kHz,死区3μs;配置ADC为EPWM1 SOCA触发,采样窗口与载波谷底对齐;配置SCI为9600bps、8N1。
  3. 编写中断服务程序:在EPWM1周期中断中读取ADC结果,做标幺化处理,执行一个空载的Park变换与反变换,将结果写入EPWM比较寄存器,同时翻转一个GPIO用于示波器观测中断周期。
  4. 编译:执行Build,检查是否有警告与段溢出。若出现“.text does not fit”类错误,需调整.cmd文件中的代码段分配。
  5. 下载与运行:连接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持续输出。

四、分层架构带来的调试便利

分层架构的价值在排障时体现得最明显。若PWM无输出,先查驱动层的EPWM配置与GPIO使能,再查保护层是否已触发封波;若并网电流畸变,先确认ADC采样时刻是否与载波同步,再检查锁相环输出相位是否稳定;若上位机读不到数据,先确认通信层任务是否被高优先级中断长期抢占。把问题定位到某一层,再在该层内部逐项核对配置,比从头到尾通读代码效率高得多。船用PCS还多一层环境约束:船舶电网频率与电压波动范围、盐雾与振动对传感器的影响、发电机切换时的相位跳变,这些都需要在算法层与保护层中预留参数接口,而不是写死在代码里。

完成本节的最小工程后,读者应能说清四层各自负责什么、工程配置中哪几项最容易出错、以及如何用三个可观测点判断主链路是否打通。这些是后续接入真实功率回路与并网算法的基础。