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 #include "mbed.h"
mmohamed 0:7e0c2b0edbc8 3 #include "PID.h"
mmohamed 0:7e0c2b0edbc8 4 #include "time.h"
mmohamed 0:7e0c2b0edbc8 5 #define RATE 0.01
mmohamed 0:7e0c2b0edbc8 6
mmohamed 0:7e0c2b0edbc8 7 // PID Tuning Parameters
mmohamed 0:7e0c2b0edbc8 8
mmohamed 0:7e0c2b0edbc8 9 AnalogIn kp_pin(p15);
mmohamed 0:7e0c2b0edbc8 10 AnalogIn ti_pin(p16);
mmohamed 0:7e0c2b0edbc8 11 AnalogIn td_pin(p17);
mmohamed 0:7e0c2b0edbc8 12
mmohamed 0:7e0c2b0edbc8 13 AnalogIn pv_amp(p19);
mmohamed 0:7e0c2b0edbc8 14 AnalogOut Aout(p18);
mmohamed 0:7e0c2b0edbc8 15
mmohamed 0:7e0c2b0edbc8 16 DigitalOut led_1(LED1);
mmohamed 0:7e0c2b0edbc8 17 DigitalOut led_2(LED2);
mmohamed 0:7e0c2b0edbc8 18 Timer t;
mmohamed 0:7e0c2b0edbc8 19
mmohamed 0:7e0c2b0edbc8 20 LocalFileSystem local("local");
mmohamed 0:7e0c2b0edbc8 21
mmohamed 0:7e0c2b0edbc8 22 float amp = 1.5; // Desired voltage at the variable attenuator corresponding to -10 dB
mmohamed 0:7e0c2b0edbc8 23 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 24 float input_scaling_factor = amp/amp_detector;
mmohamed 0:7e0c2b0edbc8 25 float scaled_input;
mmohamed 0:7e0c2b0edbc8 26
mmohamed 0:7e0c2b0edbc8 27 float Kp = kp_pin.read()*10; // values from 0.0 to 10.0
mmohamed 0:7e0c2b0edbc8 28 float Ti = ti_pin.read()*1000; // values from 0.0 to 1000.0
mmohamed 0:7e0c2b0edbc8 29 float Td = td_pin.read(); // values from 0.0 to 1.0
mmohamed 0:7e0c2b0edbc8 30
mmohamed 0:7e0c2b0edbc8 31 PID controller_amp(Kp, Ti, Td, RATE);
mmohamed 0:7e0c2b0edbc8 32
mmohamed 0:7e0c2b0edbc8 33
mmohamed 0:7e0c2b0edbc8 34 int main() {
mmohamed 0:7e0c2b0edbc8 35
mmohamed 0:7e0c2b0edbc8 36 //Analog input from 0.0 to 3.3 V
mmohamed 0:7e0c2b0edbc8 37 controller_amp.setInputLimits(0.0, 3.3);
mmohamed 0:7e0c2b0edbc8 38
mmohamed 0:7e0c2b0edbc8 39 //Pwm output from 0.0 to 3.3 V
mmohamed 0:7e0c2b0edbc8 40 controller_amp.setOutputLimits(0.0, 1.0);
mmohamed 0:7e0c2b0edbc8 41
mmohamed 0:7e0c2b0edbc8 42 //If there's a bias.
mmohamed 0:7e0c2b0edbc8 43 controller_amp.setBias(0.0);
mmohamed 0:7e0c2b0edbc8 44 controller_amp.setMode(0);
mmohamed 0:7e0c2b0edbc8 45
mmohamed 0:7e0c2b0edbc8 46 controller_amp.setSetPoint(0.0);
mmohamed 0:7e0c2b0edbc8 47 led_1 = 1;
mmohamed 0:7e0c2b0edbc8 48 t.start();
mmohamed 0:7e0c2b0edbc8 49
mmohamed 0:7e0c2b0edbc8 50 FILE *fp = fopen("/local/PID.txt", "w"); // Open "out.txt" on the local file system for writing
mmohamed 0:7e0c2b0edbc8 51
mmohamed 0:7e0c2b0edbc8 52 // while(t.read() <= 5.0){
mmohamed 0:7e0c2b0edbc8 53 while (1){
mmohamed 0:7e0c2b0edbc8 54
mmohamed 0:7e0c2b0edbc8 55 controller_amp.setSetPoint(amp);
mmohamed 0:7e0c2b0edbc8 56 led_2 = 1;
mmohamed 0:7e0c2b0edbc8 57
mmohamed 0:7e0c2b0edbc8 58 //Update the process variable.
mmohamed 0:7e0c2b0edbc8 59 scaled_input = pv_amp.read() * input_scaling_factor;
mmohamed 0:7e0c2b0edbc8 60 controller_amp.setProcessValue(scaled_input);
mmohamed 0:7e0c2b0edbc8 61
mmohamed 0:7e0c2b0edbc8 62 //Set the new output.
mmohamed 0:7e0c2b0edbc8 63 Aout = controller_amp.compute();
mmohamed 0:7e0c2b0edbc8 64
mmohamed 0:7e0c2b0edbc8 65 // fprintf(fp, "%f\t%f\t%f\n", Kp, Ti, Td);
mmohamed 0:7e0c2b0edbc8 66
mmohamed 0:7e0c2b0edbc8 67 //Wait for another loop calculation.
mmohamed 0:7e0c2b0edbc8 68 wait(RATE);
mmohamed 0:7e0c2b0edbc8 69 }
mmohamed 0:7e0c2b0edbc8 70 // fclose(fp);
mmohamed 0:7e0c2b0edbc8 71 // led_1 = 0;
mmohamed 0:7e0c2b0edbc8 72 // led_2 = 0;
mmohamed 0:7e0c2b0edbc8 73
mmohamed 0:7e0c2b0edbc8 74 }