elmagnificoam 发表于 2014-3-4 21:27:47

PID调节问题

我借鉴网上的PID程序 下面这个是源程序我知道
#define Err_max 45
#define Err_min -45
#define PID_Kp      1.2
#define PID_Ki      0.7
#define PID_Kd      0.5
这几个参数是可以调整的 但不知道调整的原则是什么求问!
对于计算增量的函数是否也可以调整呢? 但调整的原则是什么呢?我模拟测试的结果是曲线非常震荡 要不就是不震荡 但永远达不到预期的目标 怎么解决 求问?


头文件:
#define Err_max 45
#define Err_min -45
#define PID_Kp      1.2
#define PID_Ki      0.7
#define PID_Kd      0.5

typedef struct PID
{
float    SetPoint;
floatProportion;
floatIntegral;
floatDerivative;
float    LastError;
float    PrevError;
} PID;
static PID sPID;
static PID *sptr;


函数文件:
static PID sPID;
static PID *sptr=&sPID;
void PID_Init(void)
{
sptr->LastError = 0; //Error[-1]
sptr->PrevError = 0; //Error[-2]
sptr->Proportion = PID_Kp;
sptr->Integral = PID_Ki;
sptr->Derivative = PID_Kd;
sptr->SetPoint = 0;
}
float IncPIDCalc(float NextPoint)
{
float iError, iIncpid;
iError = sptr->SetPoint - NextPoint;
if(iError>Err_max)
{
    iError=Err_max;
}
if(iError<Err_min)
{
    iError=Err_min;
}
iIncpid = sptr->Proportion * iError //E
            - sptr->Integral * sptr->LastError //E
            + sptr->Derivative * sptr->PrevError; //E
sptr->PrevError = sptr->LastError;
sptr->LastError = iError;
return iIncpid;
}

lc125253647 发表于 2014-3-4 22:25:53

微分量用角速度代替构成角速度环,角度环只用PI控制,调节顺序是先调节角速度环,使其阻尼效果显著但不至于振荡即可。在调节角度环PI参数,有了角速度环的阻尼作用调节角度环的PI就轻而易举了。。。。

elmagnificoam 发表于 2014-3-6 16:54:09

lc125253647 发表于 2014-3-4 22:25
微分量用角速度代替构成角速度环,角度环只用PI控制,调节顺序是先调节角速度环,使其阻尼效果显著但不至于 ...

你的意思是先调节D 看模拟图像不振荡再调接P和I? 是这样吗?

lc125253647 发表于 2014-3-7 16:57:03

elmagnificoam 发表于 2014-3-6 16:54
你的意思是先调节D 看模拟图像不振荡再调接P和I? 是这样吗?

恩恩 用角速度做为分量产生阻尼效应 加速收敛 所以要先调节微分量参数 使其在干扰下迅速稳定 即使不在平衡位置也不要紧 只要稳定即可

elmagnificoam 发表于 2014-3-10 17:30:04

谢谢 谢谢谢谢谢谢谢谢
页: [1]
查看完整版本: PID调节问题