Rotork Research Team / Mbed 2 deprecated TFM_Encoder

Dependencies:   mbed QEI

Revision:
7:b8de1529c7fc
Parent:
6:f7028034aabb
Child:
8:2e690f407ec6
--- a/main.cpp	Thu Nov 15 15:57:10 2018 +0000
+++ b/main.cpp	Mon Nov 19 11:14:28 2018 +0000
@@ -13,6 +13,7 @@
 void Ph41 (void);
 void GetChar (void);
 void RPM (void);
+void VelocityLoop (void);
 
 Serial pc(USBTX, USBRX); // tx, rx - set up the Terraterm input from mbed
 
@@ -20,10 +21,10 @@
 
 Timer t;
 
-DigitalOut      Phase1                 (p21);         //Pin and LED set up                   
-DigitalOut      Phase2                 (p22);
-DigitalOut      Phase3                 (p23);
-DigitalOut      Phase4                 (p24);
+PwmOut      Phase1       (p21);         //Pin and LED set up                   
+PwmOut      Phase2       (p22);
+PwmOut      Phase3       (p23);
+PwmOut      Phase4       (p24);
 
 AnalogOut Aout(p18);
 
@@ -44,21 +45,30 @@
 int TimePerRev = 0;
 int RPS = 0;
 int rpm = 0;
+int SetPoint = 250;
+int z = 80;
 
 char c;
 
-float x=0.05;       //x=time of square wave when 1 phase energised, 
-float y=0.02;       //y=time of square wave when 2 phases energised
+float duty   =   1;
+float diff = 0.0;
+float x=0.1;       //x=time of square wave when 1 phase energised, 
+float y=0.04;        //y=time of square wave when 2 phases energised
 
 int main(void) 
 {   
     pc.baud(230400);        //Set fastest baud rate
+    Phase1.period(0.000001);
+    Phase2.period(0.000001);
+    Phase3.period(0.000001);
+    Phase4.period(0.000001);
     StepCW();
     Initialisation();
     wait(0.1);
     t.start();
   
-    while(wheel.getRevolutions()==0)
+  
+    while(wheel.getRevolutions()<2)
     { 
         switch(StateA)
         {
@@ -96,20 +106,22 @@
     { 
         while((led1 == 0) && (led2 == 0))
         {
-            Phase1 = 0;                              
-            Phase2 = 0;                 
-            Phase3 = 0;                   
-            Phase4 = 0; 
-            GetChar();
+            Aout = 0;
+            Phase1.write(0);
+            Phase2.write(0);
+            Phase3.write(0);
+            Phase4.write(0);
+            GetChar();            
             //StateB = wheel.getPulses()%16;
             //StateC = (800+wheel.getPulses()+StateA+AdjCW)%16;
             //pc.printf("StateA= %i, StateB= %i, StateC= %i, Pulses = %i\n\r", StateA, StateB, StateC, wheel.getPulses());
             //pc.printf("0 StateB= %i, Pulses= %i, Revs= %i\r", StateB,wheel.getPulses(),wheel.getRevolutions());
         }
-        while((wheel.getRevolutions()>0) && (wheel.getPulses()>0) && (led1==1))
+        while((wheel.getRevolutions()>1) && (wheel.getPulses()>0) && (led1==1))
         {
             GetChar();
             StateB = (wheel.getPulses()+StateA+AdjCW)%16;
+            //pc.printf("rpm = %i, Whoop = %i\n\r", rpm, wheel.getWhoop());
             //pc.printf("StateB= %i\n\r", StateB);
             //pc.printf("1 StateB= %i, Pulses= %i, Revs= %i\r", StateB,wheel.getPulses(),wheel.getRevolutions());
             
@@ -134,13 +146,14 @@
                 default:break; 
             } 
         
-            if(wheel.getYay()==1)
+            if(wheel.getWhoop()==1)
             {
                 RPM();
+                //VelocityLoop();
             }  
         }
     
-        while(wheel.getRevolutions()>0 && wheel.getPulses()<1 && (led1==1))
+        while(wheel.getRevolutions()>1 && wheel.getPulses()<1 && (led1==1))
         {
             GetChar();
             StateB = (800+wheel.getPulses()+StateA+AdjCW)%16;
@@ -168,12 +181,13 @@
                 default:break; 
             } 
         
-            if(wheel.getYay()==1)
+            if(wheel.getWhoop()==1)
             {
                 RPM();
+                //VelocityLoop();
             }  
         }
-        while((wheel.getRevolutions()>0) && (wheel.getPulses()>0) && (led2==1))
+        while((wheel.getRevolutions()>1) && (wheel.getPulses()>0) && (led2==1))
         {
             GetChar();
             //StateB = (800+wheel.getPulses())%16; 
@@ -201,12 +215,13 @@
                 default:break; 
             } 
             
-            if(wheel.getYay()==1)
+            if(wheel.getWhoop()==1)
             {
                 RPM();
+                //VelocityLoop();
             }
         }
-        while((wheel.getRevolutions()>0) && (wheel.getPulses()<1) && (led2==1))
+        while((wheel.getRevolutions()>1) && (wheel.getPulses()<1) && (led2==1))
         {
             GetChar();
             StateB = (800+wheel.getPulses()+StateA+AdjACW)%16;
@@ -232,9 +247,10 @@
                 case 0:Ph1();break;
                 default:break; 
             } 
-           if(wheel.getYay()==1)
+           if(wheel.getWhoop()==1)
             {
                 RPM();
+                //VelocityLoop();
             }    
         }
     }
@@ -261,69 +277,85 @@
 
 void Ph1(void)
 {
-        Phase1 = 1;                         
-        Phase2 = Phase3 = Phase4 = 0;
+        Phase1.write(duty);
+        Phase2.write(0);
+        Phase3.write(0);
+        Phase4.write(0);                         
         //wait(x);
         //pc.printf("Phase 1 = %i\n\r", wheel.getPulses());   
 }
 
 void Ph12 (void)
 {
-        Phase1 = Phase2 = 1;
-        Phase3 = Phase4 = 0;
+        Phase1.write(duty);
+        Phase2.write(duty);
+        Phase3.write(0);
+        Phase4.write(0);
         //wait(y);
 }
 
 void Ph2(void)
 {
-        Phase2 = 1;
-        Phase1 = Phase3 = Phase4 = 0;
+        Phase1.write(0);
+        Phase2.write(duty);
+        Phase3.write(0);
+        Phase4.write(0);
         //wait(x);
         //pc.printf("Phase 2 = %i\n\r", wheel.getPulses());
 }
 
 void Ph23 (void)
 {
-        Phase2 = Phase3 = 1;
-        Phase4 = Phase1 = 0;
+        Phase1.write(0);
+        Phase2.write(duty);
+        Phase3.write(duty);
+        Phase4.write(0);
         //wait(y);
 }
 
 void Ph3(void)
 {
-        Phase3 = 1;
-        Phase1 = Phase2 = Phase4 = 0;
+        Phase1.write(0);
+        Phase2.write(0);
+        Phase3.write(duty);
+        Phase4.write(0);
         //wait(x);
         //pc.printf("Phase 3 = %i\n\r", wheel.getPulses());
 }
 void Ph34 (void)
 {
-        Phase3 = Phase4 = 1;
-        Phase1 = Phase2 = 0;
+        Phase1.write(0);
+        Phase2.write(0);
+        Phase3.write(duty);
+        Phase4.write(duty);
         //wait(y);
 }
 
 void Ph4(void)
 {
-        Phase4 = 1;
-        Phase1 = Phase2 = Phase3 = 0;
+        Phase1.write(0);
+        Phase2.write(0);
+        Phase3.write(0);
+        Phase4.write(duty);
         //wait(x);
         //pc.printf("Phase 4 = %i\n\r", wheel.getPulses());
 }
 
 void Ph41 (void)
 {
-        Phase4 = Phase1 = 1;
-        Phase2 = Phase3 = 0;
+        Phase1.write(duty);
+        Phase2.write(0);
+        Phase3.write(0);
+        Phase4.write(duty);
         //wait(y);
 }
 
 void Initialisation (void)
 {
-    Phase1 = 0;                              
-    Phase2 = 0;                 
-    Phase3 = 0;                   
-    Phase4 = 0;  
+    Phase1.write(0);
+    Phase2.write(0);
+    Phase3.write(0);
+    Phase4.write(0);
     led1 = 0;
     led2 = 0;
     led3 = 0;
@@ -345,19 +377,46 @@
                 led1 = 0;
                 led2 = !led2 ;
             }
+            if(c == 'q')  
+            {
+                SetPoint=SetPoint+10;         
+            }
+            if(c == 'a')  
+            {
+                SetPoint=SetPoint-10;
+                //if (Setpoint <100)
+                       //{
+                          // SetPoint = 100;
+                       // }
+            }
         }
 }
 
 void RPM (void)
 {
-    wheel.ResetYay();
+    wheel.ResetWhoop();
     TimePerClick = (t.read_us());  
     t.reset();
-    TimePerRev = TimePerClick * 800;
+    TimePerRev = TimePerClick * (800/z);
     TimePerRev = TimePerRev / 1000;
     RPS = 10000000 / TimePerRev;
     rpm = (RPS * 60)/10000;
-    Aout=((0.30303*rpm)/1000);               // for 500 rpm (0.3030*500/1000)*3.3V = 0.500V
-    //pc.printf("rpm = %d\n\r", rpm);
+    Aout=((0.298*rpm)/1000);               // for 500 rpm (0.30303*500/1000)*3.3V = 0.500V   
+    //pc.printf("rpm = %i\n\r", rpm);
     //pc.printf("StateA= %i, StateB= %i, StateC= %i, Pulses = %i\n\r", StateA, StateB, StateC, wheel.getPulses());
+}
+
+void VelocityLoop (void)
+{
+   diff = SetPoint - rpm;
+   duty = duty + (diff*0.00005); 
+   if (duty > 0.9)
+   {
+       duty = 0.9;
+    }
+    if (duty <0.1)
+   {
+       duty = 0.1;
+    }
+    pc.printf("duty = %f, SetPoint = %i, rpm = %i\n\r", duty, SetPoint, rpm);    
 }
\ No newline at end of file