4. 电流闭环控制与力矩控制实现
任务目标
本案例基于InstaSPIN-FOC方案,在LaunchPad+BOOSTXL-DRV8301硬件上完成电流闭环配置,实现力矩控制模式。通过给定iQRef电流指令,使电机输出与指令成正比的电磁力矩,并验证电流环跟踪性能。
硬件与软件环境
- 硬件:LAUNCHXL-F28069M + BOOSTXL-DRV8301 + 低压永磁同步电机(如HPMSM套件)
- 软件:CCS 6.2+,MotorWare SDK(含InstaSPIN-FOC库)
- 关键工程:
proj_lab10(力矩模式示例,基于lab02电流环)
实现原理
InstaSPIN-FOC通过估算转子角度实现磁场定向。电流环在d/q同步旋转坐标系下运行:iDRef通常置0(表贴式PMSM),iQRef与电磁力矩成正比(Te = 1.5·p·λ_f·iq)。本案例将速度环输出断开,直接给定iQRef,使系统工作于纯力矩模式。
关键完整代码
在proj_lab10.c的主循环中,核心配置与力矩指令给定如下:
// 力矩模式配置:禁用速度环,直接给定电流指令
void torqueMode_Init(void)
{
// 清除速度环积分与输出
gSpeedCtrl.Out = 0;
gSpeedCtrl.IntegratorOut = 0;
// 将速度环输出旁路,力矩指令直接写入电流环
gCurrentCtrl.Out = 0; // 确保电流环初始输出为零
}
// 主循环中每ISR执行一次(频率10kHz)
void torqueMode_Update(float iqRef)
{
// 电流环d轴指令:表贴式PMSM置0
gCurrentCtrl.IqRef = iqRef; // 力矩指令(A)
gCurrentCtrl.IdRef = 0.0f; // d轴电流指令为0
// 使能电流环PI控制器
gCurrentCtrl.En = 1;
}
// 在main()中调用示例:给定1.0A力矩电流
void main(void)
{
// ... 初始化代码(省略,与lab10一致) ...
torqueMode_Init();
for(;;)
{
// 每ISR周期更新力矩指令
torqueMode_Update(1.0f); // 持续输出1A电流对应力矩
// 监控变量:gCurrentCtrl.IqFbk(实际q轴电流)
// 通过CCS Graph观察IqFbk是否稳定跟踪IqRef
}
}
关键配置说明:
- 电流环PI参数在
user.h中通过USER_PI_CURRENT_KP和USER_PI_CURRENT_KI定义,lab10默认值适用于大多数低压PMSM。 - 必须确保
gMotorVars.Flag_enableSys置1使能系统,且电机已完成识别(lab02或lab05e)。 - 力矩模式下速度环输出被旁路,
gSpeedCtrl.Out不参与电流环指令计算。
运行与验证方法
- 编译并烧录
proj_lab10工程,连接电机与驱动板。 - 在CCS中打开Expression窗口,添加
gCurrentCtrl.IqRef和gCurrentCtrl.IqFbk变量。 - 运行程序,电机应静止(无速度指令),但输出恒定力矩(堵转或带负载)。
- 使用CCS Graph工具观察
IqFbk波形:
| 验证项 | 通过条件 |
|---|---|
| 电流跟踪 | IqFbk在0.5s内稳定至IqRef±5%范围内,无振荡 |
| 力矩输出 | 电机轴输出力矩与IqRef成正比(可用测功机或手感受堵转力矩) |
| d轴电流 | IdFbk保持在0A附近(±0.05A内) |
常见问题
- 电流振荡:降低电流环KP或增加KI,检查母线电压是否足够。
- 电机不转但无力矩:确认已使能PWM输出(
gMotorVars.Flag_enableSys=1),且转子初始位置已正确估算。 - IqFbk持续为0:检查电流采样是否正常,确认DRV8301的电流放大增益配置与
user.h一致。
通过以上配置,系统即工作于纯力矩模式,电流指令iQRef直接控制电机输出力矩,满足案例目标要求。