PID Feedback Control

Dependencies:   mbed PID

Committer:
mmohamed
Date:
Tue Nov 19 20:46:36 2019 +0000
Revision:
0:7e0c2b0edbc8
PID;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mmohamed 0:7e0c2b0edbc8 1 /*
mmohamed 0:7e0c2b0edbc8 2
mmohamed 0:7e0c2b0edbc8 3 #include "PID.h"
mmohamed 0:7e0c2b0edbc8 4 #include "mbed.h"
mmohamed 0:7e0c2b0edbc8 5 #include "time.h"
mmohamed 0:7e0c2b0edbc8 6 #define RATE 0.0001
mmohamed 0:7e0c2b0edbc8 7
mmohamed 0:7e0c2b0edbc8 8 PID controller_amp(1.45, 10000.0, 0.0, RATE);
mmohamed 0:7e0c2b0edbc8 9
mmohamed 0:7e0c2b0edbc8 10 LocalFileSystem local("local"); // Create the local filesystem under the name "local"
mmohamed 0:7e0c2b0edbc8 11 AnalogIn in(p16);
mmohamed 0:7e0c2b0edbc8 12 //PwmOut out(p26);
mmohamed 0:7e0c2b0edbc8 13 AnalogOut out(p18);
mmohamed 0:7e0c2b0edbc8 14
mmohamed 0:7e0c2b0edbc8 15 DigitalOut led_1(LED1);
mmohamed 0:7e0c2b0edbc8 16 DigitalOut led_2(LED2);
mmohamed 0:7e0c2b0edbc8 17 Timer t;
mmohamed 0:7e0c2b0edbc8 18
mmohamed 0:7e0c2b0edbc8 19 float amp = 1.5; // Desired voltage at the variable attenuator corresponding to -10 dB
mmohamed 0:7e0c2b0edbc8 20 float amp_detector = 1.686; // Desired voltage at the output of the detector with VA set at -10 dB and input power = 5 dBm
mmohamed 0:7e0c2b0edbc8 21 float input_scaling_factor = amp/amp_detector;
mmohamed 0:7e0c2b0edbc8 22 float scaling_factor;
mmohamed 0:7e0c2b0edbc8 23
mmohamed 0:7e0c2b0edbc8 24
mmohamed 0:7e0c2b0edbc8 25 int main() {
mmohamed 0:7e0c2b0edbc8 26
mmohamed 0:7e0c2b0edbc8 27 //Analog input from 0.0 to 3.3 V
mmohamed 0:7e0c2b0edbc8 28 controller_amp.setInputLimits(0.0, 3.3);
mmohamed 0:7e0c2b0edbc8 29
mmohamed 0:7e0c2b0edbc8 30 //Pwm output from 0.0 to 3.3 V
mmohamed 0:7e0c2b0edbc8 31 controller_amp.setOutputLimits(0.0, 1.0);
mmohamed 0:7e0c2b0edbc8 32
mmohamed 0:7e0c2b0edbc8 33 //If there's a bias.
mmohamed 0:7e0c2b0edbc8 34 controller_amp.setBias(0.0);
mmohamed 0:7e0c2b0edbc8 35 controller_amp.setMode(0);
mmohamed 0:7e0c2b0edbc8 36
mmohamed 0:7e0c2b0edbc8 37 controller_amp.setSetPoint(0.0);
mmohamed 0:7e0c2b0edbc8 38 t.start();
mmohamed 0:7e0c2b0edbc8 39
mmohamed 0:7e0c2b0edbc8 40 FILE *fp = fopen("/local/rise_PID.txt", "w"); // Open "out.txt" on the local file system for writing
mmohamed 0:7e0c2b0edbc8 41
mmohamed 0:7e0c2b0edbc8 42 while(t.read() <= 2.0){
mmohamed 0:7e0c2b0edbc8 43 fprintf(fp, "%f\t%f\t%f\n", t.read(), in.read()*3.3, out.read()*3.3);
mmohamed 0:7e0c2b0edbc8 44 led_1 = 1;
mmohamed 0:7e0c2b0edbc8 45 if (t.read() >= 1.0){
mmohamed 0:7e0c2b0edbc8 46 led_2 = 1;
mmohamed 0:7e0c2b0edbc8 47 controller_amp.setSetPoint(amp);
mmohamed 0:7e0c2b0edbc8 48 scaling_factor = in.read() * input_scaling_factor;
mmohamed 0:7e0c2b0edbc8 49 controller_amp.setProcessValue(scaling_factor);
mmohamed 0:7e0c2b0edbc8 50 out = controller_amp.compute();
mmohamed 0:7e0c2b0edbc8 51 }
mmohamed 0:7e0c2b0edbc8 52 wait(RATE);
mmohamed 0:7e0c2b0edbc8 53 }
mmohamed 0:7e0c2b0edbc8 54 fclose(fp);
mmohamed 0:7e0c2b0edbc8 55 led_1 = 0;
mmohamed 0:7e0c2b0edbc8 56 led_2 = 0;
mmohamed 0:7e0c2b0edbc8 57 }
mmohamed 0:7e0c2b0edbc8 58 */
mmohamed 0:7e0c2b0edbc8 59
mmohamed 0:7e0c2b0edbc8 60