From 5eb5f16065eeab6ac0c571ccebba23e3b338fe40 Mon Sep 17 00:00:00 2001 From: Philip Salmony <34550389+pms67@users.noreply.github.com> Date: Fri, 22 May 2020 14:29:48 +0200 Subject: [PATCH] Initial commit. --- PID_Test.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 PID_Test.c diff --git a/PID_Test.c b/PID_Test.c new file mode 100644 index 0000000..5d20da9 --- /dev/null +++ b/PID_Test.c @@ -0,0 +1,61 @@ +#include +#include + +#include "PID.h" + +/* Controller parameters */ +#define PID_KP 2.0f +#define PID_KI 0.5f +#define PID_KD 0.25f + +#define PID_TAU 0.01f + +#define PID_LIM_MIN -10.0f +#define PID_LIM_MAX 10.0f + +#define SAMPLE_TIME_S 0.01f + +/* Maximum run-time of simulation */ +#define SIMULATION_TIME_MAX 4.0f + +/* Simulated dynamical system (first order) */ +float TestSystem_Update(float inp); + +int main() +{ + /* Initialise PID controller */ + PIDController pid = { PID_KP, PID_KI, PID_KD, + PID_TAU, + PID_LIM_MIN, PID_LIM_MAX, + SAMPLE_TIME_S }; + + PIDController_Init(&pid); + + /* Simulate response using test system */ + float setpoint = 1.0f; + + printf("Time (s)\tSystem Output\tControllerOutput\r\n"); + for (float t = 0.0f; t <= SIMULATION_TIME_MAX; t += SAMPLE_TIME_S) { + + /* Get measurement from system */ + float measurement = TestSystem_Update(pid.out); + + /* Compute new control signal */ + PIDController_Update(&pid, setpoint, measurement); + + printf("%f\t%f\t%f\r\n", t, measurement, pid.out); + + } + + return 0; +} + +float TestSystem_Update(float inp) { + + static float output = 0.0f; + static const float alpha = 0.02f; + + output = (SAMPLE_TIME_S * inp + output) / (1.0f + alpha * SAMPLE_TIME_S); + + return output; +}