/** ****************************(C) COPYRIGHT 2016 DJI**************************** * @file pid.c/h * @brief pidʵ�ֺ�����������ʼ����PID���㺯���� * @note * @history * Version Date Author Modification * V1.0.0 Dec-26-2018 RM 1. ��� * @verbatim ============================================================================== ============================================================================== @endverbatim ****************************(C) COPYRIGHT 2016 DJI**************************** */ #ifndef PID_H #define PID_H #include "struct_typedef.h" enum PID_MODE { PID_POSITION = 0, PID_DELTA }; /* PID���� */ typedef struct { float p; float i; float d; float i_limit; float out_limit; float d_cutoff_freq; float f;// 前馈增益系数 } pid_param_t; typedef struct { uint8_t mode; const pid_param_t *param; fp32 set; fp32 fdb; fp32 out; fp32 Pout; fp32 Iout; fp32 Dout; fp32 Dbuf[3]; fp32 error[3]; fp32 Fout; } pid_type_def; /** * @brief pid struct data init * @param[out] pid: PID�ṹ����ָ�� * @param[in] mode: PID_POSITION:��ͨPID * PID_DELTA: ���PID * @param[in] PID: 0: kp, 1: ki, 2:kd 3: i_limit 4: out_limit 5: d_cutoff_freq * @retval none */ extern int8_t PID_init(pid_type_def *pid, uint8_t mode, const pid_param_t *param); /** * @brief pid calculate * @param[out] pid: PID struct data point * @param[in] ref: feedback data * @param[in] set: set point * @retval pid out */ /** * @brief pid���� * @param[out] pid: PID�ṹ����ָ�� * @param[in] ref: �������� * @param[in] set: �趨ֵ * @retval pid��� */ extern fp32 PID_calc(pid_type_def *pid, fp32 ref, fp32 set); extern fp32 PID_feedforward(pid_type_def *pid, fp32 ref, fp32 set); /** * @brief pid out clear * @param[out] pid: PID struct data point * @retval none */ /** * @brief pid ������ * @param[out] pid: PID�ṹ����ָ�� * @retval none */ extern void PID_clear(pid_type_def *pid); #endif