Mohamed Abdelrahman
/
PIDControl
PID Feedback Control
plot_rise_time.cpp@0:7e0c2b0edbc8, 2019-11-19 (annotated)
- Committer:
- mmohamed
- Date:
- Tue Nov 19 20:46:36 2019 +0000
- Revision:
- 0:7e0c2b0edbc8
PID;
Who changed what in which revision?
User | Revision | Line number | New 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 |