University of Texas Solar Vehicles Team / Mbed 2 deprecated motor-control

Dependencies:   mbed

Revision:
5:f55622eacb87
Parent:
4:7d027ceba0a0
Child:
6:e7c29e46ad6c
--- a/main.cpp	Sat Nov 09 20:30:32 2019 +0000
+++ b/main.cpp	Mon Nov 11 19:37:48 2019 +0000
@@ -39,9 +39,14 @@
 #define MOTOR_TEMPERATURE 0x90D
 #define DC_BUS_AMP_HOURS 0x90E
 #define ODOMETER 0x90F
+
+#define DASH_Forward      0x580  // DASH Forward Motor ID 
+#define DASH_Cruise_Set   0x581  // DASH Brake ID 
+#define DASH_Cruise       0x582  // DASH Brake ID 
+#define DASH_Regen        0x583  // DASH Regen ID 
  
 CAN can1(PD_0,PD_1,125000); // can1 is car CAN  (Rx, Tx, speed)
-CAN can2(PB_5,PB_6,50000); // can2 is motor controller CAN  (Rx, Tx, speed)
+CAN can2(PB_5,PB_6, 100000); // can2 is motor controller CAN  (Rx, Tx, speed)
 Serial pc(USBTX, USBRX);
  
 AnalogIn ain(PB_0);
@@ -57,8 +62,17 @@
  
 #define MAX_VELOCITY 100 // motor velocity in m/s
 #define MAX_CURRENT 1.0 // desired motor current as percentage of max current
- 
-int main() {
+void Dumb1(){
+    
+    while(1){
+        pc.printf("This is Thread \n\r");
+        }
+    
+    }
+
+int main() {  
+    Thread dumb(Dumb1);
+    
   float current = MAX_CURRENT;
   float velocity = MAX_VELOCITY;
   float bus_current = MAX_CURRENT;
@@ -88,6 +102,10 @@
   float motorTemp;
   float DCBusAmpHours;
   float odometerValue;
+  int forward;
+  int cruiseSet;
+  int cruise;
+  float regen;
  
   //char const * serial = "0002173";
   // can1.frequency(500000);
@@ -103,8 +121,17 @@
   char rdata7[8];
   char rdata8[8];
   char rdata9[8];
+  
+  char ddata[8];
+  char ddata1[8];
+  char ddata2[8];
+  char ddata3[8];
+  
+  float zero = 0; 
  
   CANMessage msg;
+  CANMessage msg2;
+  
   dummy = 0;
   alive = 0;
  
@@ -197,7 +224,80 @@
 //    }
 //       
 //   }
-   
+
+    if(can1.read(msg2)) {
+        if(msg2.id == DASH_Forward) {
+          for(int i = 0; i < msg2.len; i++) {
+          ddata[i] = msg2.data[i];
+          }
+          
+          float ddatafloat = *((float*) &ddata);
+          int ddatabit = ceil(ddatafloat);
+
+          
+          if(ddatabit == 2147483647) {
+              forward = 1;
+          } else forward = 0;
+          
+          pc.printf("ddatabit: %d", ddatabit);
+          pc.printf("forward: %d \n", forward);
+
+        
+        }
+        
+        else if(msg2.id == DASH_Cruise_Set) {
+            for(int i = 0; i < msg2.len; i++) {
+                ddata1[i] = msg2.data[i];
+            }
+            
+            float ddatafloat1 = *((float*) &ddata1);
+            int ddatabit1 = ceil(ddatafloat1);
+
+            if(ddatabit1 == 2147483647) {
+                cruiseSet = 1;
+            } else cruiseSet = 0;
+            
+            pc.printf("ddatabit1: %d", ddatabit1);
+            pc.printf("cruise set: %d \n", cruiseSet);
+
+            
+        }
+        
+        else if(msg2.id == DASH_Cruise) {
+            for(int i = 0; i < msg2.len; i++) {
+                ddata2[i] = msg2.data[i];
+            }
+            
+            float ddatafloat2 = *((float*) &ddata2);
+            int ddatabit2 = ceil(ddatafloat2);
+            
+            if(ddatabit2 == 2147483647) {
+                cruise = 1;
+            } else cruise = 0;
+            
+            pc.printf("ddatabit2: %d", ddatabit2);
+            pc.printf("cruise: %d \n", cruise);
+
+        }
+        
+        else if(msg2.id == DASH_Regen) {
+            for(int i = 0; i < msg2.len; i++) {
+                ddata3[i] = msg2.data[i];
+            }
+            pc.printf("regen ddata: %f", ddata3);
+            
+            urxdata.rcvdata[3] = ddata3[3];
+            urxdata.rcvdata[2] = ddata3[2];
+            urxdata.rcvdata[1] = ddata3[1];
+            urxdata.rcvdata[0] = ddata3[0];
+            regen = urxdata.rxdata;
+            
+            pc.printf("here in regen \n");
+            pc.printf("%f", regen);
+
+        }
+    }
+
     if(can2.read(msg)){
      if(msg.id == id3 ) { // Tritium Bus
         for(int i = 0; i < msg.len; i++) {
@@ -208,7 +308,7 @@
         if (!can1.write(CANMessage(0x242, (char*) rdata, 8))) {
           pc.printf("Cannot write to CAN\n");
         }
-        wait(0.001);
+//        wait(0.001);
  
         urxdata.rcvdata[3] = rdata[7];
         urxdata.rcvdata[2] = rdata[6];
@@ -233,7 +333,7 @@
         if (!can1.write(CANMessage(0x243, (char*) rdata2, 8))) {
           pc.printf("Cannot write to CAN\n");
         }
-        wait(0.001);
+//        wait(0.001);
  
         urxdata.rcvdata[3] = rdata2[7];
         urxdata.rcvdata[2] = rdata2[6];
@@ -247,101 +347,101 @@
         motorVel = urxdata.rxdata;
     }
  
-        // reading phase currents
-    else if(msg.id == (MC_BASE+MC_PHCUR)) {
-        for (int i = 0; i < msg.len; i++) {
-          rdata3[i] = msg.data[i];
-        }
- 
-        // sending value to CAR can
-        if (!can1.write(CANMessage(0x244, (char*) rdata3, 8))) {
-          pc.printf("Cannot write to CAN\n");
-        }
-        wait(0.001);
- 
-        urxdata.rcvdata[3] = rdata3[7];
-        urxdata.rcvdata[2] = rdata3[6];
-        urxdata.rcvdata[1] = rdata3[5];
-        urxdata.rcvdata[0] = rdata3[4];
-        phaseCcurrent = urxdata.rxdata;
-        urxdata.rcvdata[3] = rdata3[3];
-        urxdata.rcvdata[2] = rdata3[2];
-        urxdata.rcvdata[1] = rdata3[1];
-        urxdata.rcvdata[0] = rdata3[0];
-        phaseBcurrent = urxdata.rxdata;
-        }
- 
-        // reading motor voltage vector
-    else if(msg.id == (MC_BASE+MC_VOVEC)) {
-        for (int i = 0; i < msg.len; i++) {
-          rdata4[i] = msg.data[i];
-        }
- 
-        // sending value to CAR can
-        if (!can1.write(CANMessage(0x245, (char*) rdata4, 8))) {
-          pc.printf("Cannot write to CAN\n");
-        }
-        wait(0.001);
- 
-        urxdata.rcvdata[3] = rdata4[7];
-        urxdata.rcvdata[2] = rdata4[6];
-        urxdata.rcvdata[1] = rdata4[5];
-        urxdata.rcvdata[0] = rdata4[4];
-        vd = urxdata.rxdata;
-        urxdata.rcvdata[3] = rdata4[3];
-        urxdata.rcvdata[2] = rdata4[2];
-        urxdata.rcvdata[1] = rdata4[1];
-        urxdata.rcvdata[0] = rdata4[0];
-        vq = urxdata.rxdata;
-    }
+//        // reading phase currents
+//    else if(msg.id == (MC_BASE+MC_PHCUR)) {
+//        for (int i = 0; i < msg.len; i++) {
+//          rdata3[i] = msg.data[i];
+//        }
+// 
+//        // sending value to CAR can
+//        if (!can1.write(CANMessage(0x244, (char*) rdata3, 8))) {
+//          pc.printf("Cannot write to CAN\n");
+//        }
+////        wait(0.001);
+// 
+//        urxdata.rcvdata[3] = rdata3[7];
+//        urxdata.rcvdata[2] = rdata3[6];
+//        urxdata.rcvdata[1] = rdata3[5];
+//        urxdata.rcvdata[0] = rdata3[4];
+//        phaseCcurrent = urxdata.rxdata;
+//        urxdata.rcvdata[3] = rdata3[3];
+//        urxdata.rcvdata[2] = rdata3[2];
+//        urxdata.rcvdata[1] = rdata3[1];
+//        urxdata.rcvdata[0] = rdata3[0];
+//        phaseBcurrent = urxdata.rxdata;
+//        }
  
-        // reading current vector
-    else if(msg.id == (MC_BASE+MC_CUVEC)) {
-        for (int i = 0; i < msg.len; i++) {
-          rdata5[i] = msg.data[i];
-        }
- 
-        // sending value to CAR can
-        if (!can1.write(CANMessage(0x246, (char*) rdata5, 8))) {
-          pc.printf("Cannot write to CAN\n");
-        }
-        wait(0.001);
- 
-        urxdata.rcvdata[3] = rdata5[7];
-        urxdata.rcvdata[2] = rdata5[6];
-        urxdata.rcvdata[1] = rdata5[5];
-        urxdata.rcvdata[0] = rdata5[4];
-        Id = urxdata.rxdata;
-        urxdata.rcvdata[3] = rdata5[3];
-        urxdata.rcvdata[2] = rdata5[2];
-        urxdata.rcvdata[1] = rdata5[1];
-        urxdata.rcvdata[0] = rdata5[0];
-        Iq = urxdata.rxdata;
-    }
- 
-    // reading back emf
-    else if(msg.id == (MC_BASE+MC_BEMF)) {
-        for (int i = 0; i < msg.len; i++) {
-          rdata6[i] = msg.data[i];
-        }
- 
-        // sending value to CAR can
-        if (!can1.write(CANMessage(0x247, (char*) rdata6, 8))) {
-          pc.printf("Cannot write to CAN\n");
-        }
-        wait(0.001);
- 
-        urxdata.rcvdata[3] = rdata6[7];
-        urxdata.rcvdata[2] = rdata6[6];
-        urxdata.rcvdata[1] = rdata6[5];
-        urxdata.rcvdata[0] = rdata6[4];
-        BEMFd = urxdata.rxdata;
-        urxdata.rcvdata[3] = rdata6[3];
-        urxdata.rcvdata[2] = rdata6[2];
-        urxdata.rcvdata[1] = rdata6[1];
-        urxdata.rcvdata[0] = rdata6[0];
-        BEMFq = urxdata.rxdata;
-    }
+//        // reading motor voltage vector
+//    else if(msg.id == (MC_BASE+MC_VOVEC)) {
+//        for (int i = 0; i < msg.len; i++) {
+//          rdata4[i] = msg.data[i];
+//        }
+// 
+//        // sending value to CAR can
+//        if (!can1.write(CANMessage(0x245, (char*) rdata4, 8))) {
+//          pc.printf("Cannot write to CAN\n");
+//        }
+////        wait(0.001);
+// 
+//        urxdata.rcvdata[3] = rdata4[7];
+//        urxdata.rcvdata[2] = rdata4[6];
+//        urxdata.rcvdata[1] = rdata4[5];
+//        urxdata.rcvdata[0] = rdata4[4];
+//        vd = urxdata.rxdata;
+//        urxdata.rcvdata[3] = rdata4[3];
+//        urxdata.rcvdata[2] = rdata4[2];
+//        urxdata.rcvdata[1] = rdata4[1];
+//        urxdata.rcvdata[0] = rdata4[0];
+//        vq = urxdata.rxdata;
+//    }
+// 
+ //       // reading current vector
+//    else if(msg.id == (MC_BASE+MC_CUVEC)) {
+//        for (int i = 0; i < msg.len; i++) {
+//          rdata5[i] = msg.data[i];
+//        }
+// 
+//        // sending value to CAR can
+//        if (!can1.write(CANMessage(0x246, (char*) rdata5, 8))) {
+//          pc.printf("Cannot write to CAN\n");
+//        }
+////        wait(0.001);
+// 
+//        urxdata.rcvdata[3] = rdata5[7];
+//        urxdata.rcvdata[2] = rdata5[6];
+//        urxdata.rcvdata[1] = rdata5[5];
+//        urxdata.rcvdata[0] = rdata5[4];
+//        Id = urxdata.rxdata;
+//        urxdata.rcvdata[3] = rdata5[3];
+//        urxdata.rcvdata[2] = rdata5[2];
+//        urxdata.rcvdata[1] = rdata5[1];
+//        urxdata.rcvdata[0] = rdata5[0];
+//        Iq = urxdata.rxdata;
+//    }
+// 
+//    // reading back emf
+//    else if(msg.id == (MC_BASE+MC_BEMF)) {
+//        for (int i = 0; i < msg.len; i++) {
+//          rdata6[i] = msg.data[i];
+//        }
+// 
+//        // sending value to CAR can
+//        if (!can1.write(CANMessage(0x247, (char*) rdata6, 8))) {
+//          pc.printf("Cannot write to CAN\n");
+//        }
+////        wait(0.001);
+// 
+//        urxdata.rcvdata[3] = rdata6[7];
+//        urxdata.rcvdata[2] = rdata6[6];
+//        urxdata.rcvdata[1] = rdata6[5];
+//        urxdata.rcvdata[0] = rdata6[4];
+//        BEMFd = urxdata.rxdata;
+//        urxdata.rcvdata[3] = rdata6[3];
+//        urxdata.rcvdata[2] = rdata6[2];
+//        urxdata.rcvdata[1] = rdata6[1];
+//        urxdata.rcvdata[0] = rdata6[0];
+//        BEMFq = urxdata.rxdata;
+//    }
  
     // reading heatsink and motor temp
     else if(msg.id == (MC_BASE+MC_TEMP)) {
@@ -353,7 +453,7 @@
         if (!can1.write(CANMessage(0x24B, (char*) rdata7, 8))) {
           pc.printf("Cannot write to CAN\n");
         }
-        wait(0.001);
+//        wait(0.001);
  
         urxdata.rcvdata[3] = rdata7[7];
         urxdata.rcvdata[2] = rdata7[6];
@@ -367,29 +467,29 @@
         motorTemp = urxdata.rxdata;
     }
  
-    // reading odometer and bus amp ohours measuremeant
-    else if(msg.id == (MC_BASE+MC_AMPH)) {
-        for (int i = 0; i < msg.len; i++) {
-          rdata8[i] = msg.data[i];
-        }
- 
-        // sending value to CAR can
-        if (!can1.write(CANMessage(0x24E, (char*) rdata8, 8))) {
-          pc.printf("Cannot write to CAN\n");
-        }
-        wait(0.001);
- 
-        urxdata.rcvdata[3] = rdata8[7];
-        urxdata.rcvdata[2] = rdata8[6];
-        urxdata.rcvdata[1] = rdata8[5];
-        urxdata.rcvdata[0] = rdata8[4];
-        DCBusAmpHours = urxdata.rxdata;
-        urxdata.rcvdata[3] = rdata8[3];
-        urxdata.rcvdata[2] = rdata8[2];
-        urxdata.rcvdata[1] = rdata8[1];
-        urxdata.rcvdata[0] = rdata8[0];
-        odometerValue = urxdata.rxdata;
-    }
+//    // reading odometer and bus amp ohours measuremeant
+//    else if(msg.id == (MC_BASE+MC_AMPH)) {
+//        for (int i = 0; i < msg.len; i++) {
+//          rdata8[i] = msg.data[i];
+//        }
+// 
+//        // sending value to CAR can
+//        if (!can1.write(CANMessage(0x24E, (char*) rdata8, 8))) {
+//          pc.printf("Cannot write to CAN\n");
+//        }
+////        wait(0.001);
+// 
+//        urxdata.rcvdata[3] = rdata8[7];
+//        urxdata.rcvdata[2] = rdata8[6];
+//        urxdata.rcvdata[1] = rdata8[5];
+//        urxdata.rcvdata[0] = rdata8[4];
+//        DCBusAmpHours = urxdata.rxdata;
+//        urxdata.rcvdata[3] = rdata8[3];
+//        urxdata.rcvdata[2] = rdata8[2];
+//        urxdata.rcvdata[1] = rdata8[1];
+//        urxdata.rcvdata[0] = rdata8[0];
+//        odometerValue = urxdata.rxdata;
+//    }
     }
  
        if(alive % 100 == 0){
@@ -406,32 +506,32 @@
        printf("\r\n");
        printf(" Motor Velocity (V) = %f",motorVel);
        printf("\r\n");
-       printf(" Phase B Current (A-rms) = %f",phaseBcurrent);
-       printf("\r\n");
-       printf(" Phase C Current (A-rms) = %f",phaseCcurrent);
-       printf("\r\n");
-       printf(" Vd (V) = %f",vd);
-       printf("\r\n");
-       printf(" Vq (V) = %f",vq);
-       printf("\r\n");
- 
-       printf(" Id (A) = %f",Id);
-       printf("\r\n");
-       printf(" Iq (A) = %f",Iq);
-       printf("\r\n");
-       printf(" BEMFd (V) = %f",BEMFd);
-       printf("\r\n");
-       printf(" BEMFq (V) = %f",BEMFq);
-       printf("\r\n");
+      // printf(" Phase B Current (A-rms) = %f",phaseBcurrent);
+//       printf("\r\n");
+//       printf(" Phase C Current (A-rms) = %f",phaseCcurrent);
+//       printf("\r\n");
+//       printf(" Vd (V) = %f",vd);
+//       printf("\r\n");
+//       printf(" Vq (V) = %f",vq);
+//       printf("\r\n");
+// 
+//       printf(" Id (A) = %f",Id);
+//       printf("\r\n");
+//       printf(" Iq (A) = %f",Iq);
+//       printf("\r\n");
+//       printf(" BEMFd (V) = %f",BEMFd);
+//       printf("\r\n");
+//       printf(" BEMFq (V) = %f",BEMFq);
+//       printf("\r\n");
        printf(" Heat Sink Temperature (Celsius) = %f",heatSinkTemp);
        printf("\r\n");
        printf(" Motor Temperature (Celsius) = %f",motorTemp);
        printf("\r\n");
-       printf(" DC Bus (Ah) = %f",DCBusAmpHours);
-       printf("\r\n");
-       printf(" Odometer (Distance) (m) = %f",odometerValue);
-       printf("\r\n");
- 
+//       printf(" DC Bus (Ah) = %f",DCBusAmpHours);
+//       printf("\r\n");
+//       printf(" Odometer (Distance) (m) = %f",odometerValue);
+//       printf("\r\n");
+// 
  
        // blinking LED
        LED8 = !LED8;