108 lines
2.6 KiB
C
108 lines
2.6 KiB
C
|
/**
|
|||
|
****************************(C) COPYRIGHT 2016 DJI****************************
|
|||
|
* @file pid.c/h
|
|||
|
* @brief pidʵ<EFBFBD>ֺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>PID<EFBFBD><EFBFBD><EFBFBD>㺯<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @note
|
|||
|
* @history
|
|||
|
* Version Date Author Modification
|
|||
|
* V1.0.0 Dec-26-2018 RM 1. <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*
|
|||
|
@verbatim
|
|||
|
==============================================================================
|
|||
|
|
|||
|
==============================================================================
|
|||
|
@endverbatim
|
|||
|
****************************(C) COPYRIGHT 2016 DJI****************************
|
|||
|
*/
|
|||
|
#ifndef PID_H
|
|||
|
#define PID_H
|
|||
|
|
|||
|
#ifdef __cplusplus
|
|||
|
extern "C"{
|
|||
|
#endif
|
|||
|
|
|||
|
#include "struct_typedef.h"
|
|||
|
enum PID_MODE
|
|||
|
{
|
|||
|
PID_POSITION = 0,
|
|||
|
PID_DELTA
|
|||
|
};
|
|||
|
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
uint8_t mode;
|
|||
|
//PID <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
fp32 Kp;
|
|||
|
fp32 Ki;
|
|||
|
fp32 Kd;
|
|||
|
|
|||
|
fp32 max_out; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
fp32 max_iout; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
fp32 set;
|
|||
|
fp32 fdb;
|
|||
|
|
|||
|
fp32 out;
|
|||
|
fp32 Pout;
|
|||
|
fp32 Iout;
|
|||
|
fp32 Dout;
|
|||
|
fp32 Dbuf[3]; //<><CEA2><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD> 1<><31>һ<EFBFBD><D2BB> 2<><32><EFBFBD>ϴ<EFBFBD>
|
|||
|
fp32 error[3]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD> 1<><31>һ<EFBFBD><D2BB> 2<><32><EFBFBD>ϴ<EFBFBD>
|
|||
|
|
|||
|
} pid_type_def;
|
|||
|
/**
|
|||
|
* @brief pid struct data init
|
|||
|
* @param[out] pid: PID struct data point
|
|||
|
* @param[in] mode: PID_POSITION: normal pid
|
|||
|
* PID_DELTA: delta pid
|
|||
|
* @param[in] PID: 0: kp, 1: ki, 2:kd
|
|||
|
* @param[in] max_out: pid max out
|
|||
|
* @param[in] max_iout: pid max iout
|
|||
|
* @retval none
|
|||
|
*/
|
|||
|
/**
|
|||
|
* @brief pid struct data init
|
|||
|
* @param[out] pid: PID<EFBFBD>ṹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
|
|||
|
* @param[in] mode: PID_POSITION:<EFBFBD><EFBFBD>ͨPID
|
|||
|
* PID_DELTA: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>PID
|
|||
|
* @param[in] PID: 0: kp, 1: ki, 2:kd
|
|||
|
* @param[in] max_out: pid<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param[in] max_iout: pid<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @retval none
|
|||
|
*/
|
|||
|
extern void PID_init(pid_type_def *pid, uint8_t mode, const fp32 PID[3], fp32 max_out, fp32 max_iout);
|
|||
|
|
|||
|
/**
|
|||
|
* @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<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param[out] pid: PID<EFBFBD>ṹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
|
|||
|
* @param[in] ref: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param[in] set: <EFBFBD>趨ֵ
|
|||
|
* @retval pid<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
extern fp32 PID_calc(pid_type_def *pid, fp32 ref, fp32 set);
|
|||
|
|
|||
|
/**
|
|||
|
* @brief pid out clear
|
|||
|
* @param[out] pid: PID struct data point
|
|||
|
* @retval none
|
|||
|
*/
|
|||
|
/**
|
|||
|
* @brief pid <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param[out] pid: PID<EFBFBD>ṹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
|
|||
|
* @retval none
|
|||
|
*/
|
|||
|
extern void PID_clear(pid_type_def *pid);
|
|||
|
|
|||
|
#ifdef __cplusplus
|
|||
|
}
|
|||
|
#endif
|
|||
|
|
|||
|
#endif
|