/* ################################################################### ** This component module is generated by Processor Expert. Do not modify it. ** Filename : McuPidFloat.h ** CDE edition : Community ** Project : FRDM-K64F_Generator ** Processor : MK64FN1M0VLL12 ** Component : PID_Float ** Version : Component 01.007, Driver 01.00, CPU db: 3.00.000 ** Compiler : GNU C Compiler ** Date/Time : 2020-08-14, 06:24, # CodeGen: 679 ** Abstract : ** ** Settings : ** Contents : ** Control - void McuPidFloat_Control(float error, void* *u); ** Reset - void McuPidFloat_Reset(void); ** Set_K - void McuPidFloat_Set_K(float k); ** Set_Ti - void McuPidFloat_Set_Ti(float t); ** Set_Td - void McuPidFloat_Set_Td(float t); ** ** * (c) Copyright Carlos Alvarez, 2013-2020 ** * For non-commercial use only. ** * Web: https://mcuoneclipse.com ** * SourceForge: https://sourceforge.net/projects/mcuoneclipse ** * Git: https://github.com/ErichStyger/McuOnEclipse_PEx ** * All rights reserved. ** ###################################################################*/ /*! ** @file McuPidFloat.h ** @version 01.00 ** @brief ** */ /*! ** @addtogroup McuPidFloat_module McuPidFloat module documentation ** @{ */ /* MODULE McuPidFloat. */ #include "McuPidFloat.h" #define K_VAL 0.1 /* Constante proporcional */ #define TI_VAL 100 /* Tiempo integrativo */ #define TD_VAL 0 /* Tiempo derivativo */ #define T_VAL 0.01 /* Período de control */ #define U_MIN 0 /* Valor de salida mínimo */ #define U_MAX 65000 /* Valor de salida máximo */ #define U_CHG_MAX 0 /* Cambio máximo en cada ciclo de control */ /* Coeficientes del control PID */ #define K1 (McuPidFloat_K*(1+(McuPidFloat_Td/T_VAL))) #define K2 (-McuPidFloat_K*(1+((2*McuPidFloat_Td)/T_VAL)-(T_VAL/McuPidFloat_Ti))) #define K3 (McuPidFloat_K*(McuPidFloat_Td/T_VAL)) /* Variable para la constante proporcional */ static float McuPidFloat_K = K_VAL; /* Variable para el tiempo integrativo */ static float McuPidFloat_Ti = TI_VAL; /* Variable para el tiempo derivativo */ static float McuPidFloat_Td = TD_VAL; /* Variable que almacena los errores */ float McuPidFloat_error[2] = {0.0, 0.0}; /* ** =================================================================== ** Method : Set_Td (component PID_Float) ** ** Description : ** Change the Td parameter. ** Parameters : ** NAME - DESCRIPTION ** t - New Td value. ** Returns : Nothing ** =================================================================== */ void McuPidFloat_Set_Td(float t) { if(t < 0) { return; } McuPidFloat_Td = t; } /* ** =================================================================== ** Method : Set_Ti (component PID_Float) ** ** Description : ** Change the Ti parameter. ** Parameters : ** NAME - DESCRIPTION ** t - New Ti value. ** Returns : Nothing ** =================================================================== */ void McuPidFloat_Set_Ti(float t) { if (t <= 0) { return; } McuPidFloat_Ti = t; } /* ** =================================================================== ** Method : Set_K (component PID_Float) ** ** Description : ** Change the K parameter. ** Parameters : ** NAME - DESCRIPTION ** k - New K value. ** Returns : Nothing ** =================================================================== */ void McuPidFloat_Set_K(float k) { if(k < 0) { return; } McuPidFloat_K = k; } /* ** =================================================================== ** Method : Reset (component PID_Float) ** ** Description : ** Reset the PID. ** Parameters : None ** Returns : Nothing ** =================================================================== */ void McuPidFloat_Reset(void) { McuPidFloat_error[0] = 0.0; McuPidFloat_error[1] = 0.0; } /* ** =================================================================== ** Method : Control (component PID_Float) ** ** Description : ** Control function. Must be called every T time. ** Parameters : ** NAME - DESCRIPTION ** error - Error signal. (Reference - ** SystemOutput). ** * u - Pointer to the control variable. ** Returns : Nothing ** =================================================================== */ #ifdef __HIWARE__ #pragma MESSAGE DISABLE C5900 #pragma MESSAGE DISABLE C5917 #endif void McuPidFloat_Control(float error, uint16_t *u) { float ut = 0.0; ut = (float) *u; ut += K1 * error; ut += K2 * McuPidFloat_error[0]; ut += K3 * McuPidFloat_error[1]; McuPidFloat_error[1] = McuPidFloat_error[0]; McuPidFloat_error[0] = error; if (ut > U_MAX) { *u = (uint16_t) U_MAX; } else if (ut < U_MIN) { *u = (uint16_t) U_MIN; } else { *u = (uint16_t) ut; } } #ifdef __HIWARE__ #pragma MESSAGE DISABLE C5919 #endif /* END McuPidFloat. */ /*! ** @} */