Mohamed Abdelrahman
/
PIDControl
PID Feedback Control
AmpPID_Pot.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 | #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 | } |