“自抗扰控制器”初探之InstaSPIN-MOTION

对于马达控制,标准的PI速度控制器具有许多内在缺陷:

1)需要调节多个参数,这些参数又相互依赖,从而可能存在多组参数解,参数需要通过大量试验才能确定,参数整定较为困难;

2)一组PI参数对应的转速和负载运行范围非常小,需要针对不同的转速和负载点,设置不同的PI参数。


TI的InstaSPIN-MOTION内部集成了SpinTAC控制器,可以解决上述问题。SpinTAC使用了自抗扰控制器(ADRC,Active Disturbance Rejection Control),自抗扰控制器能够对系统扰动进行实时估算并补偿,其所要整定的参数只有一个即带宽,一旦整定,控制器可以工作在较宽的转速和负载范围内。

“自抗扰控制器”初探之InstaSPIN-MOTION_第1张图片


观察TI提供的Demo程序,可以发现,ADC中断中,在FOC运行之前运行了SpinTAC控制。

// Run the SpinTAC Components
if(stCnt++ >= ISR_TICKS_PER_SPINTAC_TICK) 
{
  ST_runVelCtl(stHandle, ctrlHandle);
  stCnt = 1;
}

// run the controller
CTRL_run(ctrlHandle,halHandle,&gAdcData,&gPwmData);

进入ST_runVelCtl()函数,可以发现其输出就是转矩参考值,即Iq参考值,作为q轴电流PI调节器的输入。

void ST_runVelCtl(ST_Handle handle, CTRL_Handle ctrlHandle)
{
  _iq speedFeedback, iqReference;
  ST_Obj *stObj = (ST_Obj *)handle;
  CTRL_Obj *ctrlObj = (CTRL_Obj *)ctrlHandle;

  // Get the mechanical speed in pu
  speedFeedback = EST_getFm_pu(ctrlObj->estHandle);

  // Run the SpinTAC Controller
  // Note that the library internal ramp generator is used to set the speed reference
  STVELCTL_setVelocityReference(stObj->velCtlHandle, TRAJ_getIntValue(ctrlObj->trajHandle_spd));
  STVELCTL_setAccelerationReference(stObj->velCtlHandle, _IQ(0.0)); 
  STVELCTL_setVelocityFeedback(stObj->velCtlHandle, speedFeedback);
  STVELCTL_run(stObj->velCtlHandle);

  // select SpinTAC Velocity Controller
  iqReference = STVELCTL_getTorqueReference(stObj->velCtlHandle);
  
  // Set the Iq reference that came out of SpinTAC Velocity Control
  CTRL_setIq_ref_pu(ctrlHandle, iqReference);
}

参考文献:《InstaSPIN Projects and Labs User’s Guide》,TI文档。

你可能感兴趣的:(电机控制)