EW306 Motor Position Control with SVFB

Dependencies:   mbed mbedWSEsbc

Revision:
1:d1a8fb968a8e
Parent:
0:76487bb2de87
Child:
2:a5d160c21ec4
--- a/main.cpp	Tue Mar 07 14:44:39 2017 +0000
+++ b/main.cpp	Wed Apr 10 02:40:42 2019 +0000
@@ -2,11 +2,17 @@
 #include "mbedWSEsbc.h"
 
 #define PI 3.14159
-#define LOG_FREQ 2.0
-#define CTRL_FREQ 200.0
+#define LOG_FREQ 100.0
+#define CTRL_FREQ 100.0
 
 
 DigitalOut myled(LED1);
+float tstop = 180;   //initialize stop time
+float dc = 0;      //initialize dc variable
+float dt = 1/CTRL_FREQ; // set control loop sample time
+float enc;
+float ang;
+
 
 int main()
 {
@@ -18,13 +24,11 @@
     wait(.2);   //delay at beginning for voltage settle purposes
     t.start();  // Set up timer
 
-    pc.printf("Quanser Twin Tank Control Data Aquisition Program\r\n");
+    pc.printf("Quanser DC Motor Control Data Aquisition Program\r\n");
 
     t.reset(); // zero timer
     float sampT = t.read();
-    float tstop = 180;   //initialize stop time
-    float dc = 0;      //initialize dc variable
-    float dt = 1/CTRL_FREQ; // set control loop sample time
+
 
     while(1) {
 
@@ -64,14 +68,15 @@
                 run_ctrl = false;
             }
 
- 
-
             if(run_flag) {
 
-                //Prime the pump for a few seconds
-                mot_control(1,-1.0);
                 wait(1);
                 t.reset();
+                //Pendulum Posiiton when code starts will be the reference position
+                LS7366_write_DTR(1,0);    //zero encoder channel 1      
+                LS7366_reset_counter(1); 
+                LS7366_write_DTR(2,0);    //zero encoder channel 1    
+                LS7366_reset_counter(2);  
                 log_timer = 0;
                 while(t.read() < tstop) {
 
@@ -81,28 +86,24 @@
                         break;
                     }
 
-                    // read analog to digital chip for presssure sensors
-                    float tank2 = read_max1270_volts(0, 1, 1);   //chan, range, bipol
-                    float tank1 = read_max1270_volts(1, 1, 1);
-
-                    //Logic to exit loop if tank gets too full
-                    if(tank1 > 4.1 || tank2 > 4.1) { 
-                        pc.printf("%.2f, %.3f, %.3f, %.3f\r\n", t.read(),tank1,tank2,dc);
-                        break;
-                    }
-
-                    //Convert Voltage to Height
+                    // Read Encoder
+                    // Read encoder
+                    float enc = (float)LS7366_read_counter(2);
+                    
+                    // Convert from counts to radians
+                    ang = 2*PI*enc/1024;
+                    
+                    // Estimate States
 
 
                     if(run_ctrl) { //If controller is active
-                        
-
+                      
                         // Control Law Goes Here
-                                                
-                        
+                                                                        
                         //Convert flow rate to duty cycle;
 
-                    }else{ // if open loop test
+                    }else{ // if open loop test                       
+
                         
                     }
                     
@@ -117,14 +118,15 @@
 
                     //Set the new output.
 
-                    mot_control(1, -dc); // negative value required due to polarity of pump motor
+                    mot_control(1, -dc); // negative value required due to polarity of motor
 
 
                     if( (t.read()- log_timer) >= (1.0/LOG_FREQ)) { //If log sample time has passed since last write
-                        pc.printf("%.2f, %.3f, %.3f, %.3f\r\n", t.read(),tank1,tank2,dc); //write data to scren
+                        pc.printf("%.3f, %.3f, %.3f\r\n", t.read(),ang,dc); //write data to scren
                         log_timer = t.read();
                     }
 
+
                     led3=!led3;  //Flash Led to Indicate program is running
                     wait(dt);   //Wait for sample time of loop frequency
                 }  // while t < tstop