initial commit
This commit is contained in:
175
3rd-part/PID-Library/pid.h
Normal file
175
3rd-part/PID-Library/pid.h
Normal file
@@ -0,0 +1,175 @@
|
||||
/*
|
||||
------------------------------------------------------------------------------
|
||||
~ File : pid.h
|
||||
~ Author : Majid Derhambakhsh
|
||||
~ Version: V1.0.0
|
||||
~ Created: 02/11/2021 03:43:00 AM
|
||||
~ Brief :
|
||||
~ Support:
|
||||
E-Mail : Majid.do16@gmail.com (subject : Embedded Library Support)
|
||||
|
||||
Github : https://github.com/Majid-Derhambakhsh
|
||||
------------------------------------------------------------------------------
|
||||
~ Description:
|
||||
|
||||
~ Attention :
|
||||
|
||||
~ Changes :
|
||||
------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef __PID_H_
|
||||
#define __PID_H_
|
||||
|
||||
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Include ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
|
||||
// #include "zf_common_headfile.h"
|
||||
|
||||
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Defines ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
|
||||
/* ------------------------ Library ------------------------ */
|
||||
#define _PID_LIBRARY_VERSION 1.0.0
|
||||
|
||||
/* ------------------------ Public ------------------------- */
|
||||
#define _PID_8BIT_PWM_MAX UINT8_MAX
|
||||
#define _PID_SAMPLE_TIME_MS_DEF 100
|
||||
|
||||
#ifndef _FALSE
|
||||
|
||||
#define _FALSE 0
|
||||
|
||||
#endif
|
||||
|
||||
#ifndef _TRUE
|
||||
|
||||
#define _TRUE 1
|
||||
|
||||
#endif
|
||||
|
||||
/* ---------------------- By compiler ---------------------- */
|
||||
#ifndef GetTime
|
||||
|
||||
/* ---------------------- By compiler ---------------------- */
|
||||
|
||||
#ifdef __CODEVISIONAVR__ /* Check compiler */
|
||||
|
||||
#define GetTime() 0
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
#elif defined(__GNUC__) /* Check compiler */
|
||||
|
||||
#define GetTime() 0
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
|
||||
#else
|
||||
#endif /* __CODEVISIONAVR__ */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
#endif
|
||||
|
||||
/* --------------------------------------------------------- */
|
||||
|
||||
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Types ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
|
||||
/* PID Mode */
|
||||
typedef enum
|
||||
{
|
||||
|
||||
_PID_MODE_MANUAL = 0,
|
||||
_PID_MODE_AUTOMATIC = 1
|
||||
|
||||
}PIDMode_TypeDef;
|
||||
|
||||
/* PID P On x */
|
||||
typedef enum
|
||||
{
|
||||
|
||||
_PID_P_ON_M = 0, /* Proportional on Measurement */
|
||||
_PID_P_ON_E = 1
|
||||
|
||||
}PIDPON_TypeDef;
|
||||
|
||||
/* PID Control direction */
|
||||
typedef enum
|
||||
{
|
||||
|
||||
_PID_CD_DIRECT = 0,
|
||||
_PID_CD_REVERSE = 1
|
||||
|
||||
}PIDCD_TypeDef;
|
||||
|
||||
/* PID Structure */
|
||||
typedef struct
|
||||
{
|
||||
|
||||
PIDPON_TypeDef POnE;
|
||||
PIDMode_TypeDef InAuto;
|
||||
|
||||
PIDPON_TypeDef POn;
|
||||
PIDCD_TypeDef ControllerDirection;
|
||||
|
||||
uint32_t LastTime;
|
||||
uint32_t SampleTime;
|
||||
|
||||
float DispKp;
|
||||
float DispKi;
|
||||
float DispKd;
|
||||
|
||||
float Kp;
|
||||
float Ki;
|
||||
float Kd;
|
||||
|
||||
float *MyInput;
|
||||
float *MyOutput;
|
||||
float *MySetpoint;
|
||||
|
||||
float OutputSum;
|
||||
float LastInput;
|
||||
|
||||
float OutMin;
|
||||
float OutMax;
|
||||
|
||||
}PID_TypeDef;
|
||||
|
||||
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Variables ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
|
||||
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Enum ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
|
||||
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Struct ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
|
||||
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Class ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
|
||||
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Prototype ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
|
||||
/* :::::::::::::: Init ::::::::::::: */
|
||||
void PID_Init(PID_TypeDef *uPID);
|
||||
void PID(PID_TypeDef *uPID, float *Input, float *Output, float *Setpoint, float Kp, float Ki, float Kd, PIDPON_TypeDef POn, PIDCD_TypeDef ControllerDirection);
|
||||
void PID2(PID_TypeDef *uPID, float *Input, float *Output, float *Setpoint, float Kp, float Ki, float Kd, PIDCD_TypeDef ControllerDirection);
|
||||
|
||||
/* ::::::::::: Computing ::::::::::: */
|
||||
uint8_t PID_Compute(PID_TypeDef *uPID);
|
||||
|
||||
/* ::::::::::: PID Mode :::::::::::: */
|
||||
void PID_SetMode(PID_TypeDef *uPID, PIDMode_TypeDef Mode);
|
||||
PIDMode_TypeDef PID_GetMode(PID_TypeDef *uPID);
|
||||
|
||||
/* :::::::::: PID Limits ::::::::::: */
|
||||
void PID_SetOutputLimits(PID_TypeDef *uPID, float Min, float Max);
|
||||
|
||||
/* :::::::::: PID Tunings :::::::::: */
|
||||
void PID_SetTunings(PID_TypeDef *uPID, float Kp, float Ki, float Kd);
|
||||
void PID_SetTunings2(PID_TypeDef *uPID, float Kp, float Ki, float Kd, PIDPON_TypeDef POn);
|
||||
|
||||
/* ::::::::: PID Direction ::::::::: */
|
||||
void PID_SetControllerDirection(PID_TypeDef *uPID, PIDCD_TypeDef Direction);
|
||||
PIDCD_TypeDef PID_GetDirection(PID_TypeDef *uPID);
|
||||
|
||||
/* ::::::::: PID Sampling :::::::::: */
|
||||
void PID_SetSampleTime(PID_TypeDef *uPID, int32_t NewSampleTime);
|
||||
|
||||
/* ::::::: Get Tunings Param ::::::: */
|
||||
float PID_GetKp(PID_TypeDef *uPID);
|
||||
float PID_GetKi(PID_TypeDef *uPID);
|
||||
float PID_GetKd(PID_TypeDef *uPID);
|
||||
|
||||
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ End of the program ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
|
||||
|
||||
#endif /* __PID_H_ */
|
||||
Reference in New Issue
Block a user