Joe Miller / Mbed 2 deprecated V8SolenoidEngine

Dependencies:   mbed

Revision:
0:0d0af930b49a
diff -r 000000000000 -r 0d0af930b49a main_working1.cpp.txt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main_working1.cpp.txt	Tue Mar 17 04:29:11 2015 +0000
@@ -0,0 +1,184 @@
+// Revision 4 PWM Added ----- WORK IN PROGRESS
+
+#include "mbed.h"
+
+ 
+#define EncRes      256
+#define DefaultGap  1
+#define Quad0       0
+#define Quad1       EncRes/4
+#define Quad2       EncRes/2
+#define Quad3       Quad1 + Quad2
+#define Quad4       EncRes
+#define Quad5       EncRes + Quad1
+
+
+#define OPENLOOP    0
+#define CLOSEDLOOP  1
+#define MODE        CLOSEDLOOP
+
+//Ticker DebugDisplay;
+//Serial pc(PTE0, PTE1);
+
+DigitalOut LEDR(PTB18);
+DigitalOut Cyl_1(PTD1);
+DigitalOut Cyl_2(PTD3);
+DigitalOut Cyl_3(PTD2);
+DigitalOut Cyl_4(PTD0);
+DigitalOut Cyl_5(PTD5);
+DigitalOut Cyl_6(PTA13);
+DigitalOut Cyl_7(PTC9);
+DigitalOut Cyl_8(PTC8);
+
+// User Rotary Encoder definition
+/*
+PwmOut          LEDRed(PTA5);
+PwmOut          LEDGreen(PTA4);
+PwmOut          LEDBlue(PTA12);
+InterruptIn     UserEnc1A(PTD4);
+DigitalIn       UserEnc1B(PTA12);
+DigitalIn       PB1(PTC3); */
+DigitalOut      ANODE(PTC6);
+DigitalOut      COMMON(PTC5);
+
+//---------------------------
+
+InterruptIn  CrankAngleEncA(PTA1);
+DigitalIn    CrankAngleEncB(PTC0);
+
+
+Timer t;
+
+char CylinderFired = 0;
+uint8_t CrankAngle, CrankAngleChange;
+uint8_t Gap = DefaultGap;
+float Throttle;
+// Max Speed is currently about 15RPS, 923RPM, 65ms/rev, 254uS/Encoder pulse
+// 1000us interval = 3.9RPS.   0.5RPS = 7813uS encoder pulse interval 
+uint16_t TargetInterval = 400; 
+int elapseTime;
+
+#define PWMPeriod 1000
+#define DefaultPWMPercent 0.5
+
+//Throttle = DefaultPWMPercent;
+//Cyl_1.period_us = PWMPeriod ; Cyl_1 = Throttle;
+//Cyl_2.period_us = PWMPeriod ; Cyl_2 = Throttle;
+//Cyl_3.period_us = PWMPeriod ; Cyl_3 = Throttle;
+//Cyl_4.period_us = PWMPeriod ; Cyl_4 = Throttle;
+//Cyl_5.period_us = PWMPeriod ; Cyl_5 = Throttle;
+//Cyl_6.period_us = PWMPeriod ; Cyl_6 = Throttle;
+//Cyl_7.period_us = PWMPeriod ; Cyl_7 = Throttle;
+//Cyl_8.period_us = PWMPeriod ; Cyl_8 = Throttle;
+
+/*
+void UserEnc1_pulse(void)
+{
+        if (UserEnc1B && (TargetInterval < 8000)) 
+            TargetInterval += 100;
+        else if (TargetInterval > 200)
+            TargetInterval -= 100;              
+     
+}
+*/
+
+void CrankAngleEnc_pulse(void)
+{
+    if (CrankAngleEncB)
+        CrankAngle++;
+    else 
+        CrankAngle--;
+   //elapseTime = t.read_us(); t.reset();     
+   CrankAngleChange = true;         
+}
+
+
+//void DispUpdate(void) {
+//   pc.printf("%d : %d : %d\n\r",CrankAngle,CylindersFired1,CylindersFired2);}
+
+int main() {
+    ANODE = 1 ; COMMON = 0;
+    LEDR = 0;
+    CrankAngleChange = true;
+//    pc.baud(57600);
+ //   pc.printf("V8-Solenoid Engine...........");
+  
+   
+    Cyl_1 = 0; Cyl_2 = 0; Cyl_3 = 0; Cyl_4 = 0; 
+    Cyl_5 = 0; Cyl_6 = 1; Cyl_7 = 0; Cyl_8 = 0; 
+    wait_ms(500);
+    Cyl_2 = 1; Cyl_5 = 1;Cyl_6 = 0;
+    wait_ms(1000);
+    CrankAngle = 0;
+    Cyl_2 = 0; Cyl_5 = 0;
+   
+//   DebugDisplay.attach(&DispUpdate,2.0);
+    CrankAngleEncA.rise(&CrankAngleEnc_pulse);
+//    UserEnc1A.rise(&UserEnc1_pulse);
+
+//    pc.printf("Initialized!\n");
+
+    while(true) {
+
+        if(CrankAngleChange){
+
+            // Pair#2     270 deg to 90 deg   
+//            if      ( (CrankAngle < ((int8_t)Quad1-Gap-Taper) )  ||  ( (CrankAngle<(Quad5-Gap-Taper)) && (CrankAngle>(Quad3+Gap)) ) )
+            if      ( (CrankAngle < (Quad1-Gap))  ||  (CrankAngle>(Quad3+Gap)) ) {
+                Cyl_1 = 0; Cyl_4 = 0;
+                Cyl_7 = 1; Cyl_6 = 1;
+            }
+                
+            //Pair#4 90 deg to 270   
+            else if ((CrankAngle>(Quad1+Gap))  &&  (CrankAngle<(Quad3-Gap)))  {
+                Cyl_7 = 0; Cyl_6 = 0;
+                Cyl_4 = 1; Cyl_1 = 1;
+            }            
+            else {  
+                Cyl_1 = 0; 
+                Cyl_4 = 0;
+                Cyl_6 = 0; 
+                Cyl_7 = 0;
+            }
+            
+                
+            //Pair#3 0-180 deg
+            if      ((CrankAngle>Gap)   &&   (CrankAngle<(Quad2-Gap))) {    
+                Cyl_2 = 0; Cyl_5 = 0;
+                Cyl_8 = 1; Cyl_3 = 1;
+            }
+            // Pair#1 180-360 deg    
+            else if ((CrankAngle>(Quad2+Gap))   &&   (CrankAngle<(Quad4-Gap))) {
+                Cyl_3 = 0; Cyl_8 = 0;
+                Cyl_2 = 1; Cyl_5 = 1;
+            }             
+            else {
+                Cyl_3 = 0; 
+                Cyl_8 = 0;
+                Cyl_2 = 0; 
+                Cyl_5 = 0;
+            }
+               
+            CrankAngleChange = false;
+              
+            // Speed Control Section        
+        
+            if (MODE == CLOSEDLOOP) {
+/*                       
+                Error = TargetInterval - elapseTime;
+                ErrorPrime = Error - PreviousError;
+                CompensationSignal = pGain*Error + dGain*ErrorPrime;
+                PreviousError = Error;
+*/
+            }
+            else {
+
+                Throttle = TargetInterval;
+            
+            } 
+        }  //if crankAngleChange     
+      
+
+    }//main loop - while(true)
+}//main
+