PID 算法实现
PID 控制器核心逻辑:
c
复制代码
typedef struct {
float Kp; // 比例系数
float Ki; // 积分系数
float Kd; // 微分系数
float prev_error;
float integral;
} PIDController;
void PID_Init(PIDController *pid, float Kp, float Ki, float Kd) {
pid->Kp = Kp;
pid->Ki = Ki;
pid->Kd = Kd;
pid->prev_error = 0.0f;
pid->integral = 0.0f;
}
float PID_Compute(PIDController *pid, float setpoint, float measured, float dt) {
float error = setpoint - measured;
pid->integral += error * dt;
float derivative = (error - pid->prev_error) / dt;
float output = pid->Kp * error + pid->Ki * pid->integral + pid->Kd * derivative;
pid->prev_error = error;
return output;
}
调用 PID 控制器:
c
复制代码
PIDController motor_pid;
PID_Init(&motor_pid, 1.0f, 0.5f, 0.1f);
float control_signal = PID_Compute(&motor_pid, target_speed, actual_speed, dt);
SetMotorPWM(control_signal);
|