关于PID的调试

专家PID依赖经验与规则的制定,同样也依赖调参。专家PID使用时多用于电机环。

if (pid->errABS < sErr) {
    //小偏差 较小误差, 调小比例
    pid->outPut = offineK * pid->outPut;
} else if (pid->errABS > lErr) {
    //大偏差
    //串联BangBang-PID
    pid->outPut = (pid->errNow > 0) ? (9500) : (-9500);
} else {
    //正常偏差
    if ((pid->errNow * (pid->errNow - pid->errLast) > 0 && pid->errLast * (pid->errLast - pid->errLastLast) > 0) || (pid->errNow - pid->errLast) == 0) {
        //偏差在朝向偏差绝对值增大的方向变化(偏差越来越大), 或者偏差一直为某一固定值
        if (pid->errABS > midErr) {
            //控制器实施较强的控制作用
            pid->outPut = onlineK * pid->outPut;
        } else {
            //但是偏差绝对值本身并不是很大
            pid->outPut = pid->outPut + 0;
        }
    } else if(pid->errNow * (pid->errNow - pid->errLast) < 0 && (pid->errNow - pid->errLast) * (pid->errLast - pid->errLastLast) > 0 || (pid->errNow == 0 && pid->errLast == 0) {
        //偏差的绝对值向减小的方向变化,或者已经达到平衡状态
        //此时可以保持控制器输出不变
    } else if(pid->errNow * (pid->errNow - pid->errLast) < 0 && ((pid->errNow - pid->errLast) * (pid->errLast - pid->errLastLast) < 0)) {
        //偏差处于极值极限状态
        if (pid->errABS > midErr) {
            pid->outPut = onlineK * pid->outPut;
        } else {
            //但是偏差绝对值本身并不是很大
            pid->outPut = pid->outPut + 0;
        }
    } else {
        //正常情况
        pid->outPut = pid->outPut + 0;
    }
}

这是一套较为完整的专家PID,根据实际使用时的情况可以随意删减规则,如为了实际应用时减小静差则不使用小偏差弱调节,为了更为稳定不串联BangBang-PID等,较为依赖经验。

引用于:智能车常规 PID 以及改进式 PID - ittuann

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值