1. PMSM矢量控制(FOC)软件栈概述
永磁同步电机(PMSM)的磁场定向控制(FOC)是工业驱动领域的核心技术之一。这套基于TI TMS320F28335的完整解决方案,从底层寄存器操作到上层控制算法全部自主实现,摒弃了常见的TI宏模块和IQmath库,使得代码具有极高的可移植性和可理解性。整个系统采用三环控制结构(电流环、速度环、位置环),配合多对极旋变作为位置传感器,实现了精确的电机控制。
特别提示:本方案所有代码均经过量产验证,不同于常见的开发板演示程序,其稳定性和可靠性已达到工业级水准。
2. 硬件架构与信号链设计
2.1 核心硬件组成
系统采用双板结构:驱动板负责功率转换和保护,控制板处理算法和通信。关键元件包括:
- 主控芯片:TMS320F28335 @150MHz
- 位置传感器:AD2S1210旋变解码芯片
- 电流检测:霍尔传感器+12位ADC
- 功率模块:IPM智能功率模块
- 通信接口:隔离CAN和串口
2.2 信号处理链路
信号流向遵循典型FOC架构:
- 三相电流通过霍尔传感器采样,经ADC转换为数字量
- 旋变信号通过SPI接口传输转子位置信息
- 控制算法处理后生成PWM波形
- PWM驱动功率模块输出三相电压
关键信号参数:
- PWM频率:8kHz(中心对称模式)
- ADC采样率:与PWM同步,8kHz
- 电流检测分辨率:12位(0.025A/bit)
- 位置检测分辨率:16位(0.0055°)
3. 软件架构解析
3.1 分层设计
软件采用五层架构:
- 驱动层:直接操作外设寄存器
- 数学层:实现Clarke/Park变换和SVPWM
- 控制层:三环PID算法
- 应用层:指令解析和通信
- 调度层:实时任务管理
3.2 实时调度机制
系统采用125μs固定周期中断作为时间基准,通过软件计数器实现多级任务调度:
| 任务周期 | 执行内容 |
|---|---|
| 125μs | 电流采样、FOC算法、PWM更新 |
| 1ms | 速度环计算 |
| 2ms | 位置环计算 |
| 10ms | 故障检测、状态上报 |
4. 核心算法实现
4.1 电流采样与处理
c复制// 电流采样值处理
IPhase.Iunew = AdcRegs.ADCRESULT0 >> 4; // 12位转16位
IPhase.Iu = (IPhase.Iu1 - IPhase.Iuoffset) * 0.0007273; // 标幺化
关键点:
- ADC结果右移4位扩展为16位
- 减去偏置后进行标幺化处理(25A对应1pu)
- 第三相电流通过基尔霍夫定律计算得出
4.2 坐标变换实现
c复制// Clarke变换
Ia = Iu;
Ib = (Iv - Iw) * 0.57735027f; // 1/√3
// Park变换
Id = Ia * COS_elec + Ib * SIN_elec;
Iq = Ib * COS_elec - Ia * SIN_elec;
注意事项:
- 使用预计算的三角函数值提高效率
- 电角度θ来自旋变解码结果
- 变换后的dq轴电流用于PI调节器
5. 控制环路设计
5.1 电流环实现
c复制// d轴PI计算
err = IdRef - Id;
Integral += Ki * err;
Integral = saturate(Integral, ±Limit);
Ud = Kp * err + Integral;
调试要点:
- 带宽设计为1.2kHz
- 输出限幅防止积分饱和
- 125μs执行周期确保动态响应
5.2 速度/位置环设计
速度环特性:
- 1ms控制周期
- 输出限幅±0.99pu
- 带宽120Hz
位置环特性:
- 2ms控制周期
- 带宽20Hz
- 支持阶跃和跟踪模式
6. SVPWM生成
c复制// 扇区判断和占空比计算
sector = N; // 6扇区判断
Ta = 0.5f + (Ualpha - Ubeta);
Tb = 0.5f + Ubeta;
Tc = 0.5f - (Ualpha + Ubeta);
关键参数:
- 死区时间:2μs(通过DBRED/DBFED寄存器设置)
- PWM载波:8kHz中心对称
- 电压利用率:比SPWM提高15%
7. 通信系统设计
7.1 串口通信协议
帧格式:14字节
code复制[Head1][Data1...Data12][Check]
支持三种模式:
- 0xCC:正常运行模式
- 0x55:测试模式
- 0xBB:参数调节模式
7.2 CAN通信实现
采用29位扩展ID:
- 高16位:指令码
- 低16位:数据
典型指令:
- 0x4D4F0000:电机启动
- 0x4D460000:电机停止
8. 故障保护机制
系统实现多级保护:
| 故障类型 | 检测方式 | 响应时间 | 恢复方式 |
|---|---|---|---|
| 过流 | 硬件比较器 | <1μs | 硬件复位 |
| 过压/欠压 | 软件检测 | 1ms | 自动恢复 |
| 旋变故障 | SPI通信检测 | 10ms | 重新初始化 |
| 通信超时 | 看门狗计时 | 100ms | 软复位 |
9. 调试方法与技巧
9.1 旋变零位校准
- 机械对齐d轴
- 读取RotorAngle值
- 填入ElecThetaOffset
- 重新编译程序
9.2 电流环快速整定
通过上位机BB帧实时调节:
- 先设Ki=0,增大Kp至出现轻微振荡
- 逐步增加Ki,观察阶跃响应
- 最终目标:快速响应且无超调
9.3 死区补偿
根据实际IGBT特性:
- 测量开关延迟时间
- 计算最小死区需求
- 设置DBRED/DBFED寄存器
- 验证互补波形质量
10. 性能优化建议
- CLA协处理器:将电流环移植到CLA可降低CPU负载
- Q格式优化:合理选择Q格式提高运算精度
- ADC采样同步:精确对齐PWM周期中点采样
- 预计算表格:三角函数和SVPWM参数预计算
- DMA传输:通信数据使用DMA减少CPU中断
11. 移植指导
移植到新硬件需修改:
- GPIO引脚定义(GPIOInit.c)
- 电流传感器参数(GetIPhase()中的0.0007273系数)
- 位置接口(旋变/编码器/QEP)
- PWM参数(频率、死区时间)
- 时钟配置(150MHz或其他频率)
12. 实测性能指标
经过优化调试后达到:
| 指标 | 数值 | 测试条件 |
|---|---|---|
| 电流环带宽 | 1.2kHz | -3dB点 |
| 速度环带宽 | 120Hz | 空载 |
| 位置精度 | ±0.1° | 静态 |
| 效率 | 95% | 额定负载 |
| CPU占用率 | 42% | 全功能运行 |
这套代码经过精心设计和反复验证,无论是作为学习参考还是产品开发基础,都能提供可靠的支撑。通过理解每个模块的实现原理和调试方法,开发者可以快速构建自己的高性能PMSM驱动系统。