PID控制算法(二)

(BIlibili借鉴)PID参数整定连接:Webpack App (rossning92.github.io)

C++的基本程序代码:

借鉴链接:PID超详细教程——PID原理+串级PID+C代码+在线仿真调参-CSDN博客

#include <iostream>

using namespace std;

struct _pid{
    float SetSpeed; //定义设定值
    float ActualSpeed; //定义实际值
    float err; //定义偏差值
    float err_last; //定义上一个偏差值
    float Kp,Ki,Kd; //定义比例、积分、微分系数
    float voltage; //定义电压值(控制执行器的变量)
    float integral; //定义积分值
}pid;

void PID_init(){
    printf("PID_init begin \n");
    pid.SetSpeed=0.0;
    pid.ActualSpeed=0.0;
    pid.err=0.0;
    pid.err_last=0.0;
    pid.voltage=0.0;
    pid.integral=0.0;
    pid.Kp=0.2;
    pid.Ki=0.015;
    pid.Kd=0.2;
    printf("PID_init end \n");
}

float PID_realize(float speed){
    pid.SetSpeed=speed;
    pid.err=pid.SetSpeed-pid.ActualSpeed;
    pid.integral+=pid.err;
    pid.voltage=pid.Kp*pid.err+pid.Ki*pid.integral+pid.Kd*(pid.err-pid.err_last);
    pid.err_last=pid.err;
    pid.ActualSpeed=pid.voltage*1.0;
    return pid.ActualSpeed;
}

int run_pid(){
    printf("System begin \n");
    PID_init();
    int count=0;
    while(count<1000) {
        float actual_speed=PID_realize(280.0);
        printf("count is: %d, actual_speed is: %f\n", count, actual_speed);
        count++;
    }
    return 0;
}

int main(int argc, char const *argv[])
{
    run_pid();
    return 0;
}

以上核心部分为PID_relalize函数,PID_out实际上也就是比例部分、积分部分和微分部分三个之和的输出叠加。

PID_out = Kp*pid.err + Ki*Σerr + Kd*(pid.err-pid.err_last);

另外上述代码是根据提前确定好的值通过PID算法使之不断靠近,如何实现在代码运行时通过设定不同值来实现PID算法的问题还在解决中……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值