PID Feedback Control

Dependencies:   mbed PID

Revision:
0:7e0c2b0edbc8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/AmpPID_Pot.cpp	Tue Nov 19 20:46:36 2019 +0000
@@ -0,0 +1,74 @@
+
+#include "mbed.h"
+#include "PID.h"
+#include "time.h"
+#define RATE 0.01
+
+// PID Tuning Parameters
+
+AnalogIn kp_pin(p15);
+AnalogIn ti_pin(p16);
+AnalogIn td_pin(p17);
+
+AnalogIn pv_amp(p19);
+AnalogOut Aout(p18);
+
+DigitalOut led_1(LED1);
+DigitalOut led_2(LED2);
+Timer t;
+
+LocalFileSystem local("local");
+
+float amp = 1.5; // Desired voltage at the variable attenuator corresponding to -10 dB 
+float amp_detector = 1.686; // Desired voltage at the output of the detector with VA set at -10 dB and input power = 5 dBm
+float input_scaling_factor = amp/amp_detector;
+float scaled_input;
+
+float Kp = kp_pin.read()*10;     // values from 0.0 to 10.0
+float Ti = ti_pin.read()*1000;      // values from 0.0 to 1000.0
+float Td = td_pin.read();    // values from 0.0 to 1.0
+
+PID controller_amp(Kp, Ti, Td, RATE);
+
+
+int main() {
+
+  //Analog input from 0.0 to 3.3 V
+  controller_amp.setInputLimits(0.0, 3.3);
+  
+  //Pwm output from 0.0 to 3.3 V
+  controller_amp.setOutputLimits(0.0, 1.0);
+  
+  //If there's a bias.
+  controller_amp.setBias(0.0);
+  controller_amp.setMode(0);
+  
+  controller_amp.setSetPoint(0.0);
+  led_1 = 1;
+  t.start();
+
+ FILE *fp = fopen("/local/PID.txt", "w");  // Open "out.txt" on the local file system for writing
+
+ // while(t.read() <= 5.0){
+  while (1){
+    
+    controller_amp.setSetPoint(amp);
+    led_2 = 1;
+   
+    //Update the process variable.
+    scaled_input = pv_amp.read() * input_scaling_factor;
+    controller_amp.setProcessValue(scaled_input);
+    
+    //Set the new output.
+    Aout = controller_amp.compute();
+
+ //   fprintf(fp, "%f\t%f\t%f\n", Kp, Ti, Td);
+
+    //Wait for another loop calculation.
+    wait(RATE);
+  }
+ // fclose(fp);
+//  led_1 = 0; 
+ // led_2 = 0;
+
+}
\ No newline at end of file