2. 电机参数辨识与识别结果分析
任务目标
本案例使用TI InstaSPIN-FOC方案内置的电机参数辨识功能,在无外部负载条件下对一台永磁同步电机(PMSM)进行在线辨识,获取定子电阻Rs、d/q轴电感Ld/Lq、转子磁链λm等参数,并通过对比辨识结果与电机铭牌/制造商数据表参数,分析辨识值的准确性及误差来源。
环境与依赖
- 硬件:TI LaunchPad(如LAUNCHXL-F28069M)+ BOOSTXL-DRV8301电机驱动板,或TI InstaSPIN兼容的任意MCU+驱动组合
- 电机:一台PMSM(本案例以某款额定参数已知的电机为例,实际参数见下文输入数据)
- 软件:CCS(Code Composer Studio)或UniFlash,MotorWare或C2000Ware中的InstaSPIN例程工程
- 关键文件:
user.h(电机参数宏定义)、proj_lab10.c(辨识例程主文件)
实现原理与步骤
InstaSPIN-FOC的辨识流程分为两个阶段:静态辨识(向电机注入直流电压,通过电流响应计算Rs)和动态辨识(向电机注入高频旋转电压矢量,通过电流幅值/相位响应计算Ld、Lq和λm)。辨识完成后,结果写入motorParams结构体,供后续FOC运行使用。
- 在
user.h中配置电机额定参数(作为辨识初值)和辨识使能位 - 编译并烧录
proj_lab10例程 - 通过CCS的Expression窗口或波形观测
motorParams结构体中的辨识结果 - 记录辨识值,与制造商数据表对比,计算误差百分比
关键完整代码
以下为user.h中与本案例直接相关的电机参数配置代码(以某款额定参数已知的PMSM为例):
// user.h - 电机参数辨识相关配置
#define USER_MOTOR_TYPE MOTOR_Type_PM
#define USER_MOTOR_Rs (0.36f) // 制造商标称定子电阻 (Ohm)
#define USER_MOTOR_Ls_d (0.00035f) // 制造商标称d轴电感 (H)
#define USER_MOTOR_Ls_q (0.00035f) // 制造商标称q轴电感 (H)
#define USER_MOTOR_RATED_FLUX (0.0315f) // 制造商标称转子磁链 (V/Hz)
#define USER_MOTOR_POLE_PAIRS (4) // 极对数
#define USER_MOTOR_MAX_CURRENT (8.0f) // 峰值相电流 (A)
#define USER_MOTOR_MAX_SPEED (6000.0f) // 最大电转速 (RPM)
#define USER_MOTOR_FLUX_EST_FREQ_Hz (10.0f) // 辨识注入频率
// 辨识使能 - 置1启用辨识,置0跳过辨识直接使用上述参数
#define USER_MOTOR_IDENTIFICATION (1)
以下为proj_lab10.c中启动辨识并读取结果的核心代码片段:
// proj_lab10.c - 辨识主流程(节选)
#include "main.h"
// 全局辨识结果结构体
volatile MOTOR_Params_t motorParams;
void main(void)
{
// ... 初始化外设、ADC、PWM等(由例程框架提供) ...
// 启动辨识流程
EST_runIdentification(&estHandle, USER_MOTOR_IDENTIFICATION);
// 等待辨识完成(由状态机自动切换,此处轮询标志位)
while (EST_isMotorIdentified(&estHandle) == false)
{
// 辨识期间需保持电机无外部负载,且母线电压稳定
}
// 辨识完成后读取参数
motorParams.Rs = EST_getRs_Ohm(&estHandle);
motorParams.Ls_d = EST_getLs_d_H(&estHandle);
motorParams.Ls_q = EST_getLs_q_H(&estHandle);
motorParams.Flux = EST_getFlux_VpHz(&estHandle);
// 将辨识结果写入FOC控制器参数
CTRL_setMotorParams(&ctrlHandle, &motorParams);
// 主循环:正常运行FOC
for (;;)
{
// ... FOC控制主循环 ...
}
}
运行与验证方法
- 接线与准备:将电机三相线接入DRV8301输出端,确保母线电容已放电,电机轴可自由旋转(不连接任何负载或联轴器)。
- 编译烧录:在CCS中导入
proj_lab10工程,确认USER_MOTOR_IDENTIFICATION为1,编译并烧录至MCU。 - 启动辨识:给驱动板上电,通过CCS的Resume按钮运行程序。辨识过程约需5~15秒,期间电机会发出轻微高频啸叫并缓慢转动,属正常现象。
- 读取结果:在CCS的Expression窗口中添加
motorParams.Rs、motorParams.Ls_d、motorParams.Ls_q、motorParams.Flux,辨识完成后记录数值。 - 准确性判定:将辨识值与制造商数据表参数对比,计算相对误差。判定标准:Rs误差≤10%,Ld/Lq误差≤15%,λm误差≤10%为通过。若误差超限,检查母线电压是否稳定、电机是否完全无载、辨识期间是否触碰电机轴。
预期输出示例
以下为基于上述制造商标称值,在理想无载条件下辨识后应得到的典型结果范围(非实测数据,仅作参考):
motorParams.Rs ≈ 0.33 ~ 0.39 Ohm (标称0.36)
motorParams.Ls_d ≈ 0.32 ~ 0.38 mH (标称0.35 mH)
motorParams.Ls_q ≈ 0.32 ~ 0.38 mH (标称0.35 mH)
motorParams.Flux ≈ 0.029 ~ 0.034 V/Hz(标称0.0315)
误差来源与注意事项
- 温度影响:辨识时绕组温度不同会导致Rs偏差,铜线电阻温度系数约0.4%/°C,若电机刚从高负载状态冷却,需等待热平衡后再辨识。
- 饱和效应:辨识注入电流幅值由
USER_MOTOR_MAX_CURRENT决定,若电流过小,电感辨识值偏大(未进入饱和区);若电流过大,磁链辨识值偏小(饱和削弱)。建议注入电流为额定电流的20%~50%。 - 逆变器非线性:死区时间和管压降会导致低速小电流时辨识误差增大,InstaSPIN内部有补偿算法,但极端情况下仍可能影响结果。
- 极对数错误:若
USER_MOTOR_POLE_PAIRS配置错误,辨识结果将完全不可用,务必先确认电机极对数。