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.

lab05a电流环pid参数整定



使用28027launchpad和Drv8305EVM,运行lab05a,在手册中看了电流环pid参数整定策略。

问下电流环的pid参数提前计算值,在哪个函数文件中执行的。下面是ctrl.c中的函数,但这个配置值与最终运行电流环,在变量窗口值不同。

也就是说下面的配置值不是最终的pid参数,那最终的运行时的pid参数在哪里计算完成?

// set the default Id PID controller parameters
Kp = _IQ(0.1);
Ki = _IQ(pUserParams->ctrlPeriod_sec/0.004);
Kd = _IQ(0.0);
outMin = _IQ(-0.95);
outMax = _IQ(0.95);

PID_setGains(obj->pidHandle_Id,Kp,Ki,Kd);
PID_setUi(obj->pidHandle_Id,_IQ(0.0));
PID_setMinMax(obj->pidHandle_Id,outMin,outMax);
CTRL_setGains(handle,CTRL_Type_PID_Id,Kp,Ki,Kd);

  • 最终更新控制PID参数是由函数updateKpKiGains完成,通过变量gMotorVars.Kp_spd将值传递进去进行控制.

  • 我的意思是电流环的计算值

    Kp = L*bandwidth 

    bandwidth = 2*pi*currentctrlFreq/20

    Ki = R/L

    我在程序里没有找到这样的计算过程啊,下面的配置值根本就不是计算的电流环参数啊

    Kp = _IQ(0.1);
    Ki = _IQ(pUserParams->ctrlPeriod_sec/0.004);

  • 电流环只是给了个比较通用的参数设定,以下实际电流环的PI参数计算是基于S域的理想模型,实际调试参数会跟理想模型也会有差异.

    Kp = L*bandwidth 

    bandwidth = 2*pi*currentctrlFreq/20

    Ki = R/L

  • 我在实际中闭环调试时,变量窗口中显示的电流环Kp和Ki的值,与我自己按下面公式计算值相同,说明电流环是按这个计算的。

    Kp = L*bandwidth 

    bandwidth = 2*pi*currentctrlFreq/20

    Ki = R/L

    但是在程序中,kp和ki值赋值却是下面的值,我不知道程序中哪里进行处理的,谢谢~

    // set the default Id PID controller parameters
    Kp = _IQ(0.1);
    Ki = _IQ(pUserParams->ctrlPeriod_sec/0.004);
    Kd = _IQ(0.0);
    outMin = _IQ(-0.95);
    outMax = _IQ(0.95);

    PID_setGains(obj->pidHandle_Id,Kp,Ki,Kd);
    PID_setUi(obj->pidHandle_Id,_IQ(0.0));
    PID_setMinMax(obj->pidHandle_Id,outMin,outMax);
    CTRL_setGains(handle,CTRL_Type_PID_Id,Kp,Ki,Kd);

  •     USER_calcPIgains(ctrlHandle);