第一次提交
This commit is contained in:
46
app/app_pid.h
Normal file
46
app/app_pid.h
Normal file
@@ -0,0 +1,46 @@
|
||||
#ifndef PID_H
|
||||
#define PID_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
// 防止除零和其他误差的极小值
|
||||
#define EPSILON 1e-5f
|
||||
#define SIGMA EPSILON
|
||||
|
||||
#include "app_config.h"
|
||||
|
||||
// PID 控制模式
|
||||
typedef enum {
|
||||
PID_MODE_DERIVATIVE_NONE = 0, // PI 控制器模式,无微分项
|
||||
PID_MODE_DERIVATIVE_CALC, // 根据当前误差计算微分项
|
||||
PID_MODE_DERIVATIVE_CALC_NO_SP, // 根据当前值计算微分项,忽略设定值
|
||||
PID_MODE_DERIVATIVE_SET // 使用外部提供的微分项值
|
||||
} pid_mode_t;
|
||||
|
||||
// PID 控制器结构体
|
||||
typedef struct {
|
||||
pid_mode_t mode; // 控制模式
|
||||
float dt_min; // 最小时间间隔
|
||||
float kp; // 比例系数
|
||||
float ki; // 积分系数
|
||||
float kd; // 微分系数
|
||||
float integral; // 积分累积值
|
||||
float integral_limit; // 积分限幅
|
||||
float output_limit; // 输出限幅
|
||||
float error_previous; // 上一次的误差值
|
||||
float last_output; // 上一次的输出值
|
||||
} PID_t;
|
||||
|
||||
// 函数声明
|
||||
void initializePid(PID_t *pid, pid_mode_t mode, float dtMin);
|
||||
int32_t setPidParameters(PID_t *pid, float kp, float ki, float kd, float integralLimit, float outputLimit);
|
||||
float calculatePidOutput(PID_t *pid, float sp, float val, float val_dot, float dt);
|
||||
void resetPidIntegral(PID_t *pid);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // PID_H
|
||||
Reference in New Issue
Block a user