This repository has been archived on 2020-06-14. You can view files and clone it, but cannot push or open issues or pull requests.

81 lines
3.0 KiB
C

/**************************************************************************
* NAME: pid.h *
* AUTHOR: Johan Gärtner *
*
* PURPOSE: This file contains pid functions *
* INFORMATION: pidUAV is the final pid controller which only takes *
* pidProfile_t as input. pidProfile_t will be updated and *
* contains all the information about the current state of *
* the pid. *
* GLOBAL VARIABLES: *
* Variable Type Description *
* -------- ---- ----------- *
*
* **************************************************************************/
#ifndef FLIGHT_PID_H_
#define FLIGHT_PID_H_
#include<stdio.h>
#include<stdint.h>
#include "Flight/filter.h"
#define XYZ_AXIS_COUNT 3 /*The maximum number of DOF that belongings to the PID*/
#define PID_ID_GYRO 0
#define PID_ID_ACCELEROMETER 1
#define PID_ID_COMPASS 2
#define PID_ID_BAROMETER 3
#define PID_COUNT 4
#define THROTTLE 0 /*Index terms to the PID*/
/*Enum of index to different profiles*/
typedef enum {
ROLL = 0,
PITCH,
YAW
} RollPitchYaw;
/*Struct that belongs to a certain PID controller*/
typedef struct pidProfile_s {
bool pidEnabled;
uint8_t ID_profile; /*ID of a certain PID, shall be referenced to a certain sensor*/
uint8_t P[XYZ_AXIS_COUNT]; /*PID value*/
uint8_t I[XYZ_AXIS_COUNT]; /*PID value*/
uint8_t D[XYZ_AXIS_COUNT]; /*PID value*/
uint16_t dterm_lpf; /*Cut of frequency for derivative (delta) term of the PID to the low pass filter, recommended settings 80 - 90 hz (same as clean flight)*/
uint16_t pterm_yaw_lpf; /*Cut of frequency for PTerm of the PID for yaw axis (low pass filter), recommended settings? (same as clean flight)*/
int16_t yaw_p_limit; /*The max and minimum output value of the PTerm of yaw axis*/
int16_t pid_out_limit; /*PID output limit*/
uint8_t PIDweight[XYZ_AXIS_COUNT]; /*Used for TPA, should be 100 when default*/
float PID_Out[XYZ_AXIS_COUNT]; /*PID out values from a certain controller*/
} pidProfile_t;
/*Array of all pid profiles of the system*/
extern pidProfile_t PidProfile[PID_COUNT];
/*Is set in motor mix and used in pidUAVcore and mix */
bool motorLimitReached;
/**************************************************************************
* BRIEF: Initializes PID profiles *
* INFORMATION: *
**************************************************************************/
void pidInit();
/**************************************************************************
* BRIEF: Runs a certain PID Controller *
* INFORMATION: *
**************************************************************************/
void pidRun(uint8_t ID);
void pidEproom(void);
#endif /* FLIGHT_PID_H_ */