初始提交:龙芯2K0300智能车卖家Demo完整代码
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
#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
|
||||
Reference in New Issue
Block a user