主题中讨论的其他器件: C2000WARE-MOTORCONTROL-SDK
我正在开发使用 TMS320F28062F 的3.7kW 额定功率 VFD 的机密定制硬件。 应用是使用提供的 Instaspin 实验室开发的、该实验室能够正常运行 SPMSM 电机、我遇到了 IPMSM 类型电机的问题、在此类电机的振动频率下、电机经常振动。 请告诉我是否需要任何进一步的具体信息。 请建议解决方案。
Samir
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
我正在开发使用 TMS320F28062F 的3.7kW 额定功率 VFD 的机密定制硬件。 应用是使用提供的 Instaspin 实验室开发的、该实验室能够正常运行 SPMSM 电机、我遇到了 IPMSM 类型电机的问题、在此类电机的振动频率下、电机经常振动。 请告诉我是否需要任何进一步的具体信息。 请建议解决方案。
Samir
您的电机似乎是极高凸极比 IPM 电机。 您必须添加一个函数来实现此类电机的 d 轴和 q 轴电流去耦、并且您可能需要根据速度和负载调整 Id 参考值、而不是保持 SPM 的 ID 始终为零。 您可以尝试搜索一些相关的论文并添加这两个功能。
对于 ID 参考控制、您可以参阅电机控制 SDK 中的示例实验13 (MTPA)、但没有去耦控制示例。
C2000WARE-MOTORCONTROL-SDK: http://www.ti.com/tool/C2000WARE-MOTORCONTROL-SDK
尊敬的 Yanming
我知道这是一个凸极高的电机、为了利用磁力扭矩和磁阻、需要实施 MTPA。 因此、我已经在 SPRACF3和实验13代码的帮助下在我的代码中实现了 MTPA。 我已附上以下代码片段、但问题仍然存在。
内联 void CTRL_runOnLine_User (CTRL_Handle handle、const HAL_AdcData_t * pAdcData、HAL_PwmData_t * pPwmData){
CTRL_Obj * obj =(CTRL_Obj *) handle;
_IQ ange_pu;
_vec2 phasor
;_IQ _gi_gi_mgi_mgi_mp_mpu = 0.0
(CTRL_Oq_mpu
);_mpu (r_mpu)_mq_mq_mq_mrgu =_mrgu (r_mpu)
//对电压
clark_run (obj->clarkeHandle_V、&pAdcData->V、CTRL_getVab_in_addr (handle)运行 Clarke 变换;
//运行估算器
EST_run (obj->estHandle、CTRL_getIab_in_addr (handle)、CTRL_getVab_in_adr (handle)、CTRL_getVab_getDCD_in (handle)、getDCD->DPCle);getHandle->DPCle (handle)
//生成电机电角
Angle_pu = EST_getAngle_pu (obj->estHandle);
//计算正弦/余弦相量
CTRL_computePhasor (angle_pu、&phasor);
//在 Park 变换中设置相量 park_setPhasor
(obj->parkHandle、phore_pu、&phasor);//在
适当的 podr
(ctrl
)中设置相位控制器(ctramp_ref);getctramp_tramp_tramp_ref = getcr (obj_traffle);(obj_ref);(got_ref)
_IQ fbackValue = EST_getFm_PU (obj->estHandle);
_IQ outMax = TRAJ_getIntValue (obj->trajHandle_spdMax);
_IQ outMin =-outMax;
//重置速度计数
CTRL_resetCounter_speed (handle);
PID_setMinHandle (obj->pidle->poutMax;pode_outIdspd in、pidle_outIdspd
refValue
*、fbackValue、CTRL_getSpd_out_addr (handle);#ifdef MTPA float GIS _ref_float;GIS _ref_float =_IQtoF (_IQmpy (CTRL_getSpd_out_pu (handle)、_IQ (user_full _scale_current_a)));* Diff (r_rg_params (rg_rg_rg_g_params (rg_g_g_g_flat_g_g_g_g_rf)*)+ vrfloat (rg_rg_g_g_rfloat)* rf (rg_rg_rg_rg_g_rg_g_g_rfloat = rf)(rg_rg_rg_rg_g_g_g_rfloat (rg_g_g_g_g_g_g_g_rfloat)(r /(4 * g_Diff _LQ_LD);
float g_IQ_Ref =(float)(sqrt (gios_ref_float * gis_ref_float)-(g_Id_Ref * g_ID_Ref));fg_mTPA_ref
= gp_gp_g_g_g_gp_g_rq = gp_gp_gp_g_g_g_g_g_g_g_g_g_g_g_g_g_g_g_g_g_g_g_g_rq (g_g_g_g_g_g_g_r_g_g_g_g_g_g_r_g_g_g_g_g_g_r_g_g_g_r_g_g_g_g_g_g_g_g_g_r_g_g_g_g_g_g_g_g_r_g_
_iq outMin、 outMax;
//读取最大电压矢量以设置电流控制器的适当限制
_IQ maxVsMag = CTRL_getMaxVsMag_pu (handle);
//重置当前计数
CTRL_resetCounter_Current (handle);
//
//配置并运行 ID 控制器
//计算 Kp 增益
//调整 Kp 而不是输出以防止饱和问题
(如果(CTRL_getFlag_enableDcBusComp (handle)){
KP_ID =_IQmpy (KP_ID、EST_Value getOneOverDcBus_pu (obj->estHandle)));
}
PID_setKp (
gpu (gpu)+ tid_trap (gpu);#tid_mpu (gpu)+ tid_mand_de+参考
#refValue
= TRAJ_getIntValue (obj->trajHandle_ID)+ CTRL_getid_ref_pu (handle);
#endif
//更新 ID 参考值
EST_updateId_ref_pu (Value->estHandle、&obj);
//获取反馈值 fbackHandle = CTRL_getId_ref_pu (
最大
值);最大值设置为最小值和最大值
//运行 ID PID 控制
器 PID_run (obj->pidHandle_ID、refValue、fbackValue、CTRL_getVd_out_addr (handle));
//*******
//配置并运行 IQ 控制器
//计算 Kp 增益
//调整 Kp 而不是输出以防止饱和问题
(如果(CTRL_getFlag_enableDcBusComp (handle)){
Kp_IQ =_IQmpy (Kp_IQ、EST_getValue OneOverDcBus_pu (obj->estHandle)));
}
PID_setKp (
gpu (gpu)
= gIdeQpu (gpu);(如果为#def_ref)、则为 gpu (gpu);
#endif
}
else{
//获取 IQ 参考值
refValue = CTRL_getIq_ref_pu (handle);
}
//获取反馈值
fbackValue = CTRL_getIq_in_pu (handle);
//设置 Id 控制器输出的最小值和最大值
outMax =_sqrt (_IQmag、max_out_pu
);
//设置最小
值和最大值 outmpu (max_outmag);
//运行 IQ PID 控制器
PID_run (obj->pidHandle_IQ、refComp、fbackValue、CTRL_getVq_out_addr (handle));
}
{
_iq angleComp_pu;
//补偿角度延迟
angleComp_pu = CTRL_angleDelayComp (handle、angle_pu);
//计算 Phark_orefork
或 getPhasphr&tract_or_orePhasphoreed/ePhasphoreedr&tract/ePhasphorePhasphorePhas/ephorephorephorephorephorephorephorephorephorephoreed/ephorephorephorephorephorephorephorephoreed/ephorephorephorephorephoreed/ephorephoreed/
//运行空间矢量发生器(SVGEN)模块
SVGEN_RUN (obj->svgenHandle、CTRL_getVab_out_addr (handle)、&(pPwmData->TABC);
return;
}// CTRL_runOnLine_User()函数的末尾
谢谢、此致
Samir
您能否发布电机的一些相电流波形来显示问题? 电机以多快的速度运行? 和电机上的任何负载?
您是否尝试使用图形工具和数据记录来检查转子角度和反馈速度? 如果不是、您可以参考 lab01b 和 lab01c 来使用此图形工具。
如果可能、您是否尝试使用 TI EVM 板来识别和运行电机? 并将测试结果与您自己的电路板进行比较? 请确保电流和电压感应信号在您自己的电路板上足够好。
您好、Yanming、
感谢所有建议。
我已经尝试使用实验1b 中建议的数据记录方法在图形工具中绘制反馈速度(单次时间0)、反馈角(单次时间1)和电机电流(单次时间2)。 下面是代码实现。
已经在 main.c 中定义了缓冲区
#define DATA_LOG_SIZE 1000
uint16_t datalogbuff0[data_log_size];
float dataalog1[data_log_size];
float datalogbuff2[data_log_size];
#pragma DATA_SECTION (dataalog0、"graph_data");
#pragma DATA_SECTION (dataalog1、"graph_data");
#pragma DATA_SECTION (dataalog2、"graph_data");
中断
buffalog0[cntr]=(uint16_t)(_IQtoF (gMotorVars.Speed_KRPM)* 1000);
dataalog1[cntr]=_IQtoF (gMotorVars.est_angle_pu);
dataalog2[cntr]=_IQtoF (gAdcData.I.value[0]);
此外、我还附加了在调试模式下运行时的图形工具视频。 在您将看到的视频中、定制 GUI 用于命令参考速度、该速度也用于监控少数参数。 首先、电机以80Hz 的频率启动、之后的频率以2Hz 到5Hz 的阶跃增加。 在大约88Hz 的频率下、电机振动并停止(视频中的时间01:48)。 从图表数据中、您可以观察到、在此频率下、电机电流振幅开始振荡、因此反馈速度的纹波会增加。
以下是对您的问题的直接回答
您能否发布电机的一些相电流波形来显示问题? 电机以多快的速度运行? 和电机上的任何负载?
您将在视频中找到电流波形、单次时间-2选项卡用于输出电流。 直至88Hz 电机正常运行。 电机连接到潜水泵。
您是否尝试使用图形工具和数据记录来检查转子角度和反馈速度? 如果不是、您可以参考 lab01b 和 lab01c 来使用此图形工具。
是的、已附加视频。
如果可能、您是否尝试使用 TI EVM 板来识别和运行电机? 并将测试结果与您自己的电路板进行比较? 请确保电流和电压感应信号在您自己的电路板上足够好。
不、我目前为止还没有使用任何 EVM 板来运行或识别电机。 电流和电压感应很好。 由于使用相同的驱动器、我能够以类似的额定功率运行 SPM 电机、频率高达120Hz、3.8Kw、8.5A。
请告诉我是否需要任何其他数据。
谢谢、此致
Samir
您好 Samir、
由于无法支持视频、您能否直接发布一些捕获的电流波形? 您是否有电机的电感与电流曲线? 如果不是、您可能会要求电机制造商提供此数据、以查看电感是否随电流的增加而发生很大变化。 如果是、您必须根据规格动态更改电机参数。 实验13中的示例。 实验13中的电感表仅供参考、您应根据规格设置电感表。 电流。
在满载条件下测试电机期间、您是否遇到振动? 或者电机上没有负载的情况下、是否会直接连接到泵?
您好、Yanming
由于无法支持视频、您能否直接发布一些捕获的电流波形?
正在以另一种格式附加视频。 同时附上视频的屏幕截图、以防此时视频也无法正常工作。
1:
2:
3:
视频:
e2e.ti.com/.../Screen-Recording-Converted.mp4
您是否有电机的电感与电流曲线?
不、我现在没有电感与电流数据。 我已经要求制造商提供相同的信息。 我有了它后、将与您分享。
如果不是、您可能会要求电机制造商提供此数据、以查看电感是否随电流的增加而发生很大变化。 如果是、您必须根据规格动态更改电机参数。 实验13中的示例。 实验13中的电感表仅供参考、您应根据规格设置电感表。 电流。
这里的批次是什么意思? 允许有多大的变化?
在满载条件下测试电机期间、您是否遇到振动? 或者电机上没有负载的情况下、是否会直接连接到泵?
所有这三种情况下都存在振动、即仅电机不带泵、泵不带负载、泵满载。 但在每种情况下、振动开始时的频率阈值不同、直到该阈值频率为止、所有情况下的振动都可以忽略不计。
此致
Samir
我认为上图中的转子角度不正确。 您可以尝试使用速度 PI 控制器的较低 Kp&Ki 来实现高速、并对电流控制器进行调优。
您是否有电机的详细规格? 电机的额定频率、电流和电压是多少?
是否可以增加直流总线电压以以相同的频率和负载运行电机以查看发生了什么情况? 请检查"gMotorVars.Vs"是否等于或接近 USER_MAX_VS_MAG_PU。
//按单位读取 Vd 和 Vq 矢量
gMotorVars.Vd = CTRL_getVd_out_pu (ctrlHandle);
gMotorVars.VQ = CTRL_getVq_out_pu (ctrlHandle);
//计算向量 vs 以标么值表示
gMotorVars.vs =_IQsqrt (_IQmpy (gMotorVars.vd、gMotorVars.vd)+_IQmpy (gMotorVars.VQ、gMotorVars.VQ));