123

Dependencies:   mbed-dev-f303 FastPWM3

Files at this revision

API Documentation at this revision

Comitter:
shaorui
Date:
Mon Mar 29 07:08:14 2021 +0000
Parent:
48:f083ea9d1d03
Commit message:
suojin

Changed in this revision

Calibration/calibration.cpp Show annotated file Show diff for this revision Revisions of this file
Config/hw_config.h Show annotated file Show diff for this revision Revisions of this file
Config/motor_config.h Show annotated file Show diff for this revision Revisions of this file
FlashWriter/FlashWriter.cpp Show annotated file Show diff for this revision Revisions of this file
hw_setup.cpp 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
structs.h Show annotated file Show diff for this revision Revisions of this file
diff -r f083ea9d1d03 -r 9d762c5d05c3 Calibration/calibration.cpp
--- a/Calibration/calibration.cpp	Thu Jan 09 01:42:00 2020 +0000
+++ b/Calibration/calibration.cpp	Mon Mar 29 07:08:14 2021 +0000
@@ -16,7 +16,8 @@
     printf("\n\r Checking phase ordering\n\r");
     float theta_ref = 0;
     float theta_actual = 0;
-    float v_d = .15f;                                                             //Put all volts on the D-Axis
+    //float v_d = .45f;  
+    float v_d = .10f;                                                            //Put all volts on the D-Axis
     float v_q = 0.0f;
     float v_u, v_v, v_w = 0;
     float dtc_u, dtc_v, dtc_w = .5f;
@@ -88,7 +89,8 @@
     int raw_b[n] = {0};
     float theta_ref = 0;
     float theta_actual = 0;
-    float v_d = .15f;                                                             // Put volts on the D-Axis
+    //float v_d = .45f; 
+    float v_d = .10f;                                                            // Put volts on the D-Axis
     float v_q = 0.0f;
     float v_u, v_v, v_w = 0;
     float dtc_u, dtc_v, dtc_w = .5f;
diff -r f083ea9d1d03 -r 9d762c5d05c3 Config/hw_config.h
--- a/Config/hw_config.h	Thu Jan 09 01:42:00 2020 +0000
+++ b/Config/hw_config.h	Mon Mar 29 07:08:14 2021 +0000
@@ -6,6 +6,8 @@
 #define PIN_W PA_8
 #define ENABLE_PIN PA_11        // Enable gate drive pin
 #define LED         PC_5        // LED Pin
+#define BRAKE1   PA_4  //brake1 pin
+#define BRAKE2   PA_6  //brake2 pin
 #define I_SCALE 0.02014160156f  // Amps per A/D Count
 #define V_SCALE 0.00884f        // Bus volts per A/D Count
 #define DTC_MAX 0.95f          // Max phase duty cycle
diff -r f083ea9d1d03 -r 9d762c5d05c3 Config/motor_config.h
--- a/Config/motor_config.h	Thu Jan 09 01:42:00 2020 +0000
+++ b/Config/motor_config.h	Mon Mar 29 07:08:14 2021 +0000
@@ -2,13 +2,16 @@
 #define MOTOR_CONFIG_H
 
 #define R_PHASE 0.105f          //Ohms
+//#define R_PHASE 0.310f          //Ohms 200N Joint
 #define L_D 0.00003f            //Henries
 #define L_Q 0.00003f            //Henries
 //#define KT .075f                 //N-m per peak phase amp, = WB*NPP*3/2
 #define KT .08f  
 #define NPP 21                  //Number of pole pairs
-//#define GR 1.0f  
-#define GR 49.0f                 //Gear ratio
+//#define GR 1.0f 
+#define GR 49.0f  
+//#define GR 89.0f                 //Gear ratio
+//#define GR 151.0f                 //Gear ratio
 //#define KT_OUT 0.45f            //KT*GR
 #define KT_OUT 4.0f   
 #define WB 0.0024f               //Webers.  
diff -r f083ea9d1d03 -r 9d762c5d05c3 FlashWriter/FlashWriter.cpp
--- a/FlashWriter/FlashWriter.cpp	Thu Jan 09 01:42:00 2020 +0000
+++ b/FlashWriter/FlashWriter.cpp	Mon Mar 29 07:08:14 2021 +0000
@@ -13,7 +13,7 @@
 }
 
 void FlashWriter::open() {
-    FLASH_Unlock();
+    FLASH_Unlock();//Unlocks the FLASH control register access
     FLASH_ClearFlag( FLASH_FLAG_EOP |  FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR);
     FLASH_EraseSector(__SECTORS[__sector], VoltageRange_3);
     __ready = true;
diff -r f083ea9d1d03 -r 9d762c5d05c3 hw_setup.cpp
--- a/hw_setup.cpp	Thu Jan 09 01:42:00 2020 +0000
+++ b/hw_setup.cpp	Mon Mar 29 07:08:14 2021 +0000
@@ -13,6 +13,8 @@
 
     GPIOC->MODER |= (1 << 10);                                  // set pin 5 to be general purpose output for LED
     gpio->enable = new DigitalOut(ENABLE_PIN);
+    gpio->brake1=new DigitalIn(BRAKE1);
+    gpio->brake2=new DigitalIn(BRAKE2);
     gpio->pwm_u = new FastPWM(PIN_U);
     gpio->pwm_v = new FastPWM(PIN_V);
     gpio->pwm_w = new FastPWM(PIN_W);
diff -r f083ea9d1d03 -r 9d762c5d05c3 main.cpp
--- a/main.cpp	Thu Jan 09 01:42:00 2020 +0000
+++ b/main.cpp	Mon Mar 29 07:08:14 2021 +0000
@@ -52,7 +52,8 @@
 volatile int count = 0;
 volatile int state = REST_MODE;
 volatile int state_change;
-
+volatile int brake_state=1;
+int reg_count=0;
 void onMsgReceived() {
     //msgAvailable = true;
    
@@ -147,6 +148,10 @@
     
 void print_encoder(void){
     printf(" Mechanical Angle:  %f    Electrical Angle:  %f    Raw:  %d\n\r", spi.GetMechPosition(), spi.GetElecPosition(), spi.GetRawPosition());
+     for(reg_count=0;reg_count<=263;reg_count++)
+    {
+        printf("%d  %d\n\r",reg_count,__int_reg[reg_count]);
+    }
     wait(.05);
     }
 
@@ -211,15 +216,27 @@
                 commutate(&controller, &observer, &gpio, controller.theta_elec);           // Run current loop
                 controller.timeout += 1;
                 
-                /*
-                count++;
-                if(count == 4000){
-                     printf("%.4f\n\r", controller.dtheta_mech);
-                     count = 0;
-                     }
-                     */
                      
-            
+                if(brake_state)
+                {
+                 if(gpio.brake1->read()==0||gpio.brake2->read()==0)
+                 {
+                    printf("2\n\r");
+                    controller.i_d_ref = 0;
+                    controller.i_q_ref = 0;
+                    controller.kp = 0;
+                    controller.kd = 0;
+                    controller.t_ff = 0; 
+                    brake_state=0; 
+                     state_change = 0;   
+                    gpio.enable->write(0);
+                    gpio.led->write(0); 
+                 }
+                 }
+                 if(gpio.brake1->read()==1&&gpio.brake2->read()==1)
+                 {
+                     brake_state=1;
+                    }
                 }     
                 break;
             case SETUP_MODE:
@@ -395,6 +412,11 @@
 
     
     while(1) {
-
+                if(state==MOTOR_MODE)
+        {
+           printf("%.3f\n\r",controller.theta_mech );
+            wait(1);
+             
+        }
     }
 }
diff -r f083ea9d1d03 -r 9d762c5d05c3 structs.h
--- a/structs.h	Thu Jan 09 01:42:00 2020 +0000
+++ b/structs.h	Mon Mar 29 07:08:14 2021 +0000
@@ -9,6 +9,8 @@
 typedef struct{
     DigitalOut *enable;
     DigitalOut *led;
+    DigitalIn *brake1;//shaorui add for braking
+    DigitalIn *brake2;//shaorui add for braking
     FastPWM *pwm_u, *pwm_v, *pwm_w;
     } GPIOStruct;