1

Dependencies:   mbed-dev-f303 FastPWM3

Revision:
56:d34e4540ec12
Parent:
52:91a42bd0fe2e
--- a/main.cpp	Fri Aug 02 02:39:16 2019 +0000
+++ b/main.cpp	Fri Aug 14 07:22:11 2020 +0000
@@ -46,13 +46,18 @@
 CANMessage   rxMsg;
 CANMessage   txMsg;
 
+PositionSensorAM5147 spi(16384, 0.0, NPP);   //resolution is 0.02197265625 deg
 
-SPI drv_spi(PA_7, PA_6, PA_5);
-DigitalOut drv_cs(PA_4);
-//DigitalOut drv_en_gate(PA_11);
-DRV832x drv(&drv_spi, &drv_cs);
+//drv8323 SPI 设置 改为PC12\11\10 SPI3,片选改为PA15
+SPI drv_spi(PC_12, PC_11, PC_10);
 
-PositionSensorAM5147 spi(16384, 0.0, NPP);   //resolution is 0.02197265625 deg
+//    GPIOC->AFR[1]&=0xfff000ff;
+//    GPIOC->AFR[1]|=0x00055500;
+DigitalOut drv_cs(PA_15);
+
+DRV832x drv(&drv_spi, &drv_cs);             
+
+
 
 volatile int count = 0;
 volatile int state = REST_MODE;
@@ -142,7 +147,7 @@
     //gpio.enable->write(1);
     controller.ovp_flag = 0;
     controller.init_flag = 0;                                                   //HJB added. The flag of fastest way to go to the desire position, state change or CAN time off.
-    reset_foc(&controller);                                                     // Tesets integrators, and other control loop parameters
+    reset_foc(&controller);                                                     // Resets integrators, and other control loop parameters
     wait(.001);
     controller.i_d_ref = 0;
     controller.i_q_ref = 0;                                                     // Current Setpoints
@@ -167,7 +172,9 @@
     
 void print_encoder(void){
     printf(" Mechanical Angle:  %f    Electrical Angle:  %f    Raw:  %d\n\r", spi.GetMechPosition(), spi.GetElecPosition(), spi.GetRawPosition());  //spi.GetMechPosition
+   // printf("%d  %d  %d \n\r",controller.adc1_raw,controller.adc2_raw,controller.adc3_raw);
     //printf("%d\n\r", spi.GetRawPosition());
+ //   can.write(txMsg);
     wait(.001);
     }
 
@@ -207,7 +214,7 @@
                 break;
              
             case MOTOR_MODE:                                                   // Run torque control
-                if(state_change){
+                if(state_change){//Initiate Torque control parameters
                     enter_torque_mode();
                     count = 0;
                      //===============================================HJB added====================================================//
@@ -246,7 +253,7 @@
                     controller.v_des = 0;                                                       //HJB added
                     } 
            
-                torque_control(&controller);
+                torque_control(&controller);//Calculate the desire torque for current loop
                 commutate(&controller, &observer, &gpio, controller.theta_elec);           // Run current loop
 
                 controller.timeout++;
@@ -277,7 +284,7 @@
 void serial_interrupt(void){
     while(pc.readable()){
         char c = pc.getc();
-        if(c == 27){ 
+        if(c == 27){ //return to default mode
                 //===============================================HJB added====================================================//
                 wait_us(100);                                                             //HJB add, to clear fault
                 drv.write_DCR(0x0, 0x0, 0x0, PWM_MODE_3X, 0x0, 0x0, 0x0, 0x0, 0x1);       //HJB add, to clear fault
@@ -304,11 +311,11 @@
                     state = ENCODER_MODE;
                     state_change = 1;
                     break;
-                case 's':
+                case 's'://
                     state = SETUP_MODE;
                     state_change = 1;
                     break;
-                case 'z':
+                case 'z'://set zero position
                     spi.SetMechOffset(0);
                     spi.Sample(DT);
                     wait_us(20);
@@ -396,7 +403,7 @@
     
     gpio.enable->write(1);   //enable!
     wait_us(100);
-    drv.calibrate();
+    drv.calibrate();        //calibrete and initialize the Drv8323 Chip 
     wait_us(100);
     drv.write_DCR(0x0, 0x0, 0x0, PWM_MODE_3X, 0x0, 0x0, 0x0, 0x0, 0x1);
     wait_us(100);
@@ -419,7 +426,7 @@
     TIM1->CCR1 = 0x708*(1.0f);
     gpio.enable->write(0);
     */
-    reset_foc(&controller);                                                     // Reset current controller
+    reset_foc(&controller);                                                    // Reset current controller
     reset_observer(&observer);                                                 // Reset observer
     TIM1->CR1 ^= TIM_CR1_UDIS;
     //TIM1->CR1 |= TIM_CR1_UDIS; //enable interrupt
@@ -477,7 +484,7 @@
     state_change = 1;
 
 
-    int counter = 0;
+   // int counter = 0;
      //===============================================HJB added====================================================//
                 wait_us(100);                                                             //HJB add, to clear fault
                 drv.write_DCR(0x0, 0x0, 0x0, PWM_MODE_3X, 0x0, 0x0, 0x0, 0x0, 0x1);       //HJB add, to clear fault
@@ -485,19 +492,22 @@
                 //===============================================HJB ended====================================================//
     while(1) {
         drv.print_faults();
-       wait(.1);
+        wait(.1);
        //printf("%.4f\n\r", controller.v_bus);
        
         if(state == MOTOR_MODE)
         {
            //printf(" %.3f  %.3f  %.3f \n\r", controller.p_des,controller.p_des-controller.theta_mech,controller.v_des-controller.dtheta_mech);  //spi.GetMechPosition
-           printf(" %.3f  %.3f  %.3f \n\r", controller.v_des*60/(2*PI),controller.dtheta_mech*60/(2*PI),controller.v_des-controller.dtheta_mech);  //spi.GetMechPosition
+           printf(" %.3f  %d  %d \n\r", controller.v_bus,controller.adc1_raw,controller.adc2_raw);  //spi.GetMechPosition
            // printf("%.3f  %.3f  %.3f\n\r", (float)observer.temperature, (float)observer.temperature2, observer.resistance);
             //printf("%.3f  %.3f  %.3f %.3f %.3f\n\r", controller.v_d, controller.v_q, controller.i_d_filt, controller.i_q_filt, controller.dtheta_elec);
            // printf("%.3f\n\r", controller.dtheta_mech);
            wait(.002);
         }
-        
+//        spi.Sample(DT);
+//        print_encoder();
+        wait(0.01);
+ //       printf(" %d\n\r", drv.read_register(DCR));
          /*
           if(state == MOTOR_MODE)
         {