当前位置: 首页> 游戏> 评测 > PID控制算法(三)

PID控制算法(三)

时间:2025/7/12 6:34:14来源:https://blog.csdn.net/m0_59708799/article/details/142250873 浏览次数:0次
#include <stdio.h>
#include <stdlib.h>// 定义PID结构体
typedef struct {float SetSpeed;float ActualSpeed;float err;float integral;float vo_out;float err_last;float Kp;float Ki;float Kd;
} PID;// 函数声明
void PID_init(PID *pid);
float PID_realize(PID *pid, float Setparameter);// 函数定义
void PID_init(PID *pid) {// 初始化PID参数pid->Kp=0.2;pid->Ki=0.015;pid->Kd=0.2;pid->SetSpeed = 0.0;pid->ActualSpeed = 0.0;pid->vo_out = 0.0;pid->integral = 0.0;pid->err = 0.0;pid->err_last = 0.0;
}      float PID_realize(PID *pid, float Setparameter) {pid->SetSpeed = Setparameter;pid->err = pid->SetSpeed - pid->ActualSpeed;pid->integral = pid->integral + pid->err; // 积分误差积累pid->vo_out = pid->Kp * pid->err + pid->Ki * pid->integral + pid->Kd * (pid->err - pid->err_last);pid->err_last = pid->err; // 误差更新pid->ActualSpeed = pid->vo_out; // 将输出值赋给实际值return pid->ActualSpeed;
}int main() {PID myPID; // 创建PID控制器实例// 初始化PID参数PID_init(&myPID);float Setparameter;printf("Enter the set parameter: ");scanf("%f", &Setparameter); // 读取用户输入的目标参数int count=0;while(count<1000){myPID.ActualSpeed = PID_realize(&myPID, Setparameter); // 调用PID控制函数printf("count is: %d, actual_speed is: %f\n", count, myPID.ActualSpeed);count++;}return 0;
}

通过输入值通过PID算法计算,固定次数(可调),但Kp、Ki、Kd三个参数此时固定。

关键字:PID控制算法(三)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: