Modified Motor Driver Firmware to include Flash + Thermal

Dependencies:   FastPWM3 mbed-dev-STM-lean

Files at this revision

API Documentation at this revision

Comitter:
adimmit
Date:
Fri Aug 26 21:44:23 2022 +0000
Parent:
70:2ea6c555a2cb
Child:
72:3163691b0851
Commit message:
modified by adding current controller gains in flash;

Changed in this revision

Config/current_controller_config.h Show annotated file Show diff for this revision Revisions of this file
Config/user_config.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/Config/current_controller_config.h	Thu Apr 01 18:23:53 2021 +0000
+++ b/Config/current_controller_config.h	Fri Aug 26 21:44:23 2022 +0000
@@ -2,11 +2,11 @@
 #define CURRENT_CONTROLLER_CONFIG_H
 
 // Current controller///
-#define K_D  0.13319f                    // Loop gain,  Volts/Amp
-#define K_Q  0.13319f                    // Loop gain,  Volts/Amp
-#define K_SCALE 0.00013310f             // K_loop/Loop BW (Hz) 0.0042
-#define KI_D 0.0373f                // PI zero, in radians per sample
-#define KI_Q 0.0373f                // PI zero, in radians per sample
+// #define K_D  0.13319f                    // Loop gain,  Volts/Amp
+// #define K_Q  0.13319f                    // Loop gain,  Volts/Amp
+// #define K_SCALE 0.00013310f             // K_loop/Loop BW (Hz) 0.0042
+// #define KI_D 0.0373f                // PI zero, in radians per sample
+// #define KI_Q 0.0373f                // PI zero, in radians per sample
 #define V_BUS 48.0f                 // Volts
 #define OVERMODULATION 1.15f        // 1.0 = no overmodulation
 
--- a/Config/user_config.h	Thu Apr 01 18:23:53 2021 +0000
+++ b/Config/user_config.h	Fri Aug 26 21:44:23 2022 +0000
@@ -14,12 +14,15 @@
 #define R_NOMINAL               __float_reg[7]                                  // Nominal motor resistance, set during calibration
 #define TEMP_MAX                __float_reg[8]                                  // Temperature safety lmit
 #define I_MAX_CONT              __float_reg[9]                                  // Continuous max current
+#define K_SCALE                 __float_reg[10]                                 // Current Controller KP scaled w/ BW
+#define KI_D                    __float_reg[11]                                 // Current Controller KI D-Axis
+#define KI_Q                    __float_reg[12]                                 // Current Controller KI Q-Axis
 
 #define PHASE_ORDER             __int_reg[0]                                    // Phase swapping during calibration
 #define CAN_ID                  __int_reg[1]                                    // CAN bus ID
 #define CAN_MASTER              __int_reg[2]                                    // CAN bus "master" ID
 #define CAN_TIMEOUT             __int_reg[3]                                    // CAN bus timeout period
-#define ENCODER_LUT             __int_reg[5]                                    // Encoder offset LUT - 128 elements long
+#define ENCODER_LUT             __int_reg[5]                                    // Encoder offset LUT - 128 elements long               
 
 
 
--- a/main.cpp	Thu Apr 01 18:23:53 2021 +0000
+++ b/main.cpp	Fri Aug 26 21:44:23 2022 +0000
@@ -135,6 +135,12 @@
     wait_us(10);
     printf(" %-4s %-31s %-5s %-6s %.1f\n\r", "c", "Continuous Current (A)", "0", "40.0", I_MAX_CONT);
     wait_us(10);
+    printf(" %-4s %-31s %-5s %-6s %.1f\n\r", "s", "Current Controller K_SCALE", "0", "0.1", K_SCALE);                                                 //ADDED --> FOR CURRENT CONTROL GAINS (KP)
+    wait_us(10);
+    printf(" %-4s %-31s %-5s %-6s %.1f\n\r", "d", "Current Controller KI_D", "0", "1.0", KI_D);                                                       //ADDED --> FOR CURRENT CONTROL GAINS (KI D-Axis)
+    wait_us(10);
+    printf(" %-4s %-31s %-5s %-6s %.1f\n\r", "q", "Current Controller KI_Q", "0", "1.0", KI_Q);                                                       //ADDED --> FOR CURRENT CONTROL GAINS (KI Q-Axis)
+    wait_us(10);
     printf("\n\r To change a value, type 'prefix''value''ENTER'\n\r i.e. 'b1000''ENTER'\n\r\n\r");
     wait_us(10);
     state_change = 0;
@@ -395,6 +401,15 @@
                     case 'c':
                         I_MAX_CONT = fmaxf(fminf(atof(cmd_val), 40.0f), 0.0f);
                         break;
+                    case 's':                                                                                                                   //CURRENT CONTROL K_SCALE
+                        K_SCALE = fmaxf(fminf(atof(cmd_val), 0.1f), 0.0f);
+                        break;
+                    case 'd':                                                                                                                   //CURRENT CONTORL KI_D
+                        KI_D = fmaxf(fminf(atof(cmd_val), 1.0f), 0.0f);
+                        break;
+                    case 'q':                                                                                                                   //CURRENT CONTORL KI_Q
+                        KI_Q = fmaxf(fminf(atof(cmd_val), 1.0f), 0.0f);
+                        break;
                     default:
                         printf("\n\r '%c' Not a valid command prefix\n\r\n\r", cmd_id);
                         break;
@@ -493,6 +508,9 @@
     if(isnan(R_NOMINAL) || R_NOMINAL==-1){R_NOMINAL = 0.0f;}
     if(isnan(TEMP_MAX) || TEMP_MAX==-1){TEMP_MAX = 125.0f;}
     if(isnan(I_MAX_CONT) || I_MAX_CONT==-1){I_MAX_CONT = 14.0f;}
+    if(isnan(K_SCALE) || K_SCALE==-1){K_SCALE = 0.00013310f;}                                                                                           //CURRENT CONTROLLER K_SCALE
+    if(isnan(KI_D) || KI_D==-1){KI_D = 0.0373f;}                                                                                                        //CURRENT CONTROLLER KI_D
+    if(isnan(KI_Q) || KI_Q==-1){KI_Q = 0.0373f;}                                                                                                        //CURRENT CONTROLLER KI_Q
     spi.SetElecOffset(E_OFFSET);                                                // Set position sensor offset
     spi.SetMechOffset(M_OFFSET);
     spi.Sample(1.0f);