Files

58 lines
1.5 KiB
C++

#ifndef PIDCONTROLLER_H
#define PIDCONTROLLER_H
#include <algorithm> // 用于 std::clamp
enum PIDMode
{
POSITION, // 位置式 PID
INCREMENTAL // 增量式 PID
};
class PIDController
{
public:
// 构造函数,初始化 PID 参数
PIDController(double kp, double ki, double kd, double target, PIDMode mode = POSITION,
double output_limit = 100.0, double integral_limit = 100.0);
// 更新 PID 控制器
double update(double measured_value);
// 设置新的目标值
void setTarget(double target);
// 设置 PID 参数
void setPID(double kp, double ki, double kd);
// 设置 PID 控制模式(位置式或增量式)
void setMode(PIDMode mode);
// 设置输出和积分的限幅值
void setLimits(double output_limit, double integral_limit);
private:
// 位置式 PID 实现
double positionPID(double error);
// 增量式 PID 实现
double incrementalPID(double error);
double kp_; // 比例增益
double ki_; // 积分增益
double kd_; // 微分增益
double target_; // 目标值
double prev_error_; // 前一次误差
double prev_prev_error_; // 前两次误差 (用于增量式)
double integral_; // 积分项
double prev_output_; // 前一次的控制器输出 (用于增量式)
PIDMode mode_; // 控制模式 (位置式或增量式)
double output_limit_; // 输出限幅
double integral_limit_; // 积分限幅
};
#endif // PIDCONTROLLER_H