Classical Control

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
RANDON
Date:
Wed Nov 20 16:40:47 2013 +0000
Commit message:
Classic

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 031c505c5d69 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Nov 20 16:40:47 2013 +0000
@@ -0,0 +1,80 @@
+#include "mbed.h"
+
+Timer     t;
+ 
+AnalogIn   ain_v1(p20);
+AnalogIn   ain_v2(p19);
+AnalogOut  aout(p18);
+
+int main()
+{
+  float t1,   t2;
+  float V1,   V1scaled;
+  float V2,   V2scaled;
+  float Cmbed;
+  
+  float Cout, Cout1, Cout2;
+  float e, e1, e2;
+  float V2Ref;
+  float controlfreq, delaytime;
+  
+  // Initialize variables
+  Cout1  = 0.0;
+  Cout2  = 0.0;
+  e1     = 0.0;
+  e2     = 0.0;
+  
+  // Starts timer
+  t.start();
+  while(t.read()<10.0)
+  {
+  
+  t1 = t.read();                // Gets elapsed time from when t.start() was done. 
+ 
+  // Sense
+  V1scaled = ain_v1.read()*3.3; // 0.0<ain.read()<1.0. Normalized voltage. / Multiple by 3.3 to get voltage.   
+  V1 = (V1scaled-1.65)*6.06;    // Re-calculate actual V1(t) voltage.
+      
+  V2scaled = ain_v2.read()*3.3; // 0.0<ain.read()<1.0. Normalized voltage. Multiple by 3.3 to get voltage.   
+  V2 = (V2scaled-1.65)*6.06;    // Re-calculate actual V1(t) voltage.
+  
+  // Decide
+  
+ // Reference voltage
+ V2Ref = 2.0; // (V)
+
+ // Error signal
+ e = V2Ref-V2; // (V)
+
+ // Commanded voltage (V)
+ Cout = (1.948051948051948)*Cout1+(-0.948051948051948)*Cout2+(0.00746223086813)*e+(-0.008291367631262)*e1+(0.002211031368337)*e2;
+ //Cout =(1.96078)*Cout1+(-0.96078)*Cout2+(0.01027)*e+(-0.01539)*e1+(0.00571)*e2;
+
+ // Age variables
+ Cout2 = Cout1;
+ Cout1 = Cout;
+ e2    = e1;
+ e1    = e;
+ 
+  // Actuate
+  Cmbed = Cout/6.06+1.65; // Scale to 0<Cmbed<3.3
+  
+  // Saturate Cmbed for safety
+  if(Cmbed>3.3)
+    Cmbed = 3.3;
+  if(Cmbed<0.0)
+    Cmbed = 0.0;
+  
+  // Cmbed = 1.65;        // Must be between 0<Cmbed<3.3
+  aout.write(Cmbed/3.3);  // 0<aout<1. Normalized voltage
+  t2 = t.read();
+  
+  controlfreq = 100;
+    
+  //log variable for plotting
+  
+   printf("v1 = %.4f, v2 = %.4f, Cmbed = %.4f, Cout = %f\n\r",V1,V2,Cmbed,Cout);
+   delaytime =(1/(controlfreq)-(t2-t1)); // Make routine run at 0.01 (sec)
+   wait(delaytime);
+   }
+}
diff -r 000000000000 -r 031c505c5d69 mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Wed Nov 20 16:40:47 2013 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/a9913a65894f
\ No newline at end of file