Other Parts Discussed in Thread: CONTROLSUITE
器件型号: TMS320F2800137
Thread 中讨论的其他器件: controlSUITE
我将在 controlSUITE 中使用 HW 电机 Ctrl+PFC 套件 v2.1\HVPM_Sensored 驱动器用于我的电机控制应用。 由于标准 controlSUITE 代码不包含弱磁控制 (FWC)、因此我根据 TI 的通用电机控制 (UMC) 代码修改了 FWC 算法、并将其集成到 HVPM_Sensored 算法的控制环路中。 我希望确保我的实施方法与 TI 的架构兼容、感谢您对此进行的评估和反馈。
控制算法及其执行序列(在\HVPM_Sensored 中):
1. RC_MACRO (RC1)
2. rg_macro(rg1)
3. CLARKE_MACRO (clarke1)
4. PARK_MACRO (park1)
5. pi_macro (pi_spd)
6. FIELD_WEAKING () ←My Custom Implementation
7. pi_macro (pi_iq)
8. pi_macro (pi_id)
9. iPark_macro(ipark1)
10. QEP_MACRO (1、qep1)
11. SPEED_FR_MACRO (speed1)
12. svgendq_macro(svgen1)
13. PWM_MACRO (1、2、3、pwm1)
我添加了 FWC 算法:
//==========================================================================
// field_weaking ():
//==========================================================================
hvpm_isRef_A = hvpm_pi_spd.out;//来自速度控制器的总电流基准
if (hvpm_lsw == 2)//仅在闭环模式下运行
{
//--------------------------------------------------------------------------------
//步骤 1:电压幅度测量
//--------------------------------------------------------------------------------
//计算定子电压:Vs = sqrt (Vd^2 + Vq^2)
_iq Vd_sq =_iqmpy (hvpm_pi_id.out、hvpm_pi_id.out);
_iq Vq_sq =_iqmpy (hvpm_pi_iq.out、hvpm_pi_iq.out);
hvpm_vs_V =_iqsqrt (vd_sq + Vq_sq);
//基准电压(直流母线的 98%)
hvpm_VsRef_pu =_IQ (0.98 * USER_M1_MAX_VS_MAG_PU);// USER_M1_MAX_VS_MAG_PU = (0.66f)
//--------------------------------------------------------------------------------
//步骤 2:FWC 算法 — 角度计算
//--------------------------------------------------------------------------------
//根据用户标志启用/禁用 FWC
IF (hvpm_flagEnableFWC)
HVPM_FWC_ENABLE (hvpm_fwcHandle);
暴露
{
HVPM_FWC_DISABLE (hvpm_fwcHandle);
HVPM_FWC_resetUi (hvpm_fwcHandle);
}
//根据电压误差计算电流角度
//输入:限制 (Ref) 和实际 (FBK)
//输出:内部角度已更新
HVPM_FWC_computeCurrentAngle (hvpm_fwcHandle、hvpm_vs_vs_v、hvpm_VsRef_pu);
//--------------------------------------------------------------------------------
//步骤 3:当前分布
//--------------------------------------------------------------------------------
// A) 获取当前角度
hvpm_angleCurrent_rad = HVPM_FWC_getCurrentAngle_rad (hvpm_fwcHandle);
// B) 计算相量分量 (cos/Sin)
hvpm_fwc Phasor_Cos =_iqcos (hvpm_angleCurrent_rad);
hvpm_fwc Phasor_Sin =_iqsin (hvpm_angleCurrent_rad);
// C) 分配当前引用
// Id REF:总电流* cos(角度)
hvpm_pi_id.Ref =_IQmpy (hvpm_isRef_A、hvpm_fwc Phasor_Cos);
// IQ REF:总电流* Sin (Angle)
hvpm_pi_iq.Ref =_iqmpy (hvpm_isRef_A、hvpm_fwc Phasor_Sin);
}
暴露
{
//外部闭环 — 重置 FWC
HVPM_FWC_resetUi (hvpm_fwcHandle);
//在其他块中处理的 ID/IQ 参考管理
}
//==========================================================================
// FWC 块结束
通用电机控制 (UMC) FWC 算法:
如果定义 (MOTOR1_FWC)
else if(obj->counterSpeed ==1)
{
MATH_Vec2 fwcPhasor;
//获取当前角度
obj->angleCurrent_rad = obj->angleFWC_rad;
fwcPhasor.value[0]=__cos (obj->angleCurrent_rad);
fwcPhasor.value[1]=__sin (obj->angleCurrent_rad);
if (obj->flagEnableFWC == true)
{
obj->idq_out_A.value[0]= obj->IsRef_A * fwcPhasor.value[0];
}
obj->idq_out_A.value[1]= obj->IsRef_A * fwcPhasor.value[1];
}
else if(obj->counterSpeed ==2)
{
//
//计算输出和基准矢量电压
obj->vs_v =
__sqrt ((obj->Vdq_out_V.value[0]* obj->Vdq_out_V.value[0])+
(obj->Vdq_out_V.value[1]* obj->Vdq_out_V.value[1]);
obj->VsRef_V = obj->VsRef_pu * obj->adcData.VdcBus_V;
}
else if(obj->counterSpeed == 3)// FWC
{
if (obj->flagEnableFWC == true)
{
float32_t angleFWC;
pi_run (obj->piHandle_fwc、
obj->VsRef_v, obj->vs_V,(float32_t*)&angleFWC);
obj->angleFWC_rad = MATH_PI_OVER_Two - angleFWC;
}
暴露
{
pi_setUi (obj->piHandle_fwc、0.0f);
obj->angleFWC_rad = MATH_PI_OVER_TUNE;
}
}
我的问题和顾虑:
我使用:hvpm_pi_id.out 和 hvpm_pi_iq.out(PI 控制器输出)来获得 Vd 和 Vq
这是正确的等效项吗?
3) 控制回路中的放置:
在 pi_macro (pi_spd) 和 pi_macro (pi_iq/id) 之间插入 FWC 位置是否正确?
电压反馈源:我正在使用 hvpm_pi_id.out 和 hvpm_pi_iq.out(PI 控制器输出)计算这是否正确?
4) 电流角度分布逻辑:
数学方法 (Id = IsRef×cos、Iq = IsRef×Sin) 是否正确?
这是否可以在调整 d-q 分布时适当地保持恒定的电流幅度?
5) 代码逻辑错误:
我的实施中是否存在任何明显的错误或逻辑错误?
有任何改进或优化建议?