Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 256:7c8cc8b56b88, committed 2021-03-03
- Comitter:
- Lightvalve
- Date:
- Wed Mar 03 12:23:13 2021 +0000
- Parent:
- 255:aa424a9ca332
- Commit message:
- 210303
Changed in this revision
--- a/CAN/function_CAN.cpp	Mon Feb 22 14:09:13 2021 +0000
+++ b/CAN/function_CAN.cpp	Wed Mar 03 12:23:13 2021 +0000
@@ -137,12 +137,6 @@
         case CRX_SET_DATA_REQUEST: {
             int request_type = msg.data[2];
             flag_data_request[request_type] = msg.data[1];
-            //pc.printf("can middle %d\n", request_type);
-
-//            if (flag_data_request[1] == HIGH) SPI_VREF_DAC_WRITE(PRES_A_VREF, PRES_B_VREF, TORQUE_VREF, 0); // set DAC
-            //if (flag_data_request[1] == HIGH) dac_1 = PRES_A_VREF/3.3;
-//            if (flag_data_request[2] == HIGH) SPI_VREF_DAC_WRITE(PRES_A_VREF, PRES_B_VREF, TORQUE_VREF, 0); // set DAC
-            //if (flag_data_request[2] == HIGH) dac_2 = PRES_B_VREF/3.3;
             
             // Position, Velocity, and Torque (ID:1200)
             if (flag_data_request[0] == HIGH) {
@@ -154,8 +148,7 @@
                     }
                 } else if ((OPERATING_MODE & 0b01) == 1) { // Linear Actuator
                     if (SENSING_MODE == 0) {
-//                        CAN_TX_POSITION_FT((int16_t) (pos.sen/16.0f), (int16_t) (vel.sen/256.0f), (int16_t) (torq.sen * 10.0f * (float)(TORQUE_SENSOR_PULSE_PER_TORQUE)));
-                        CAN_TX_POSITION_FT((int16_t) (pos.sen/16.0f), (int16_t) (vel.sen/256.0f), (int16_t) (pos.ref*0.001f));
+                        CAN_TX_POSITION_FT((int16_t) (pos.sen/16.0f), (int16_t) (vel.sen/256.0f), (int16_t) (torq.sen * 10.0f * (float)(TORQUE_SENSOR_PULSE_PER_TORQUE)));
                     } else if (SENSING_MODE == 1) {
                         CAN_TX_POSITION_PRESSURE((int16_t) (pos.sen/16.0f), (int16_t) (vel.sen/256.0f), (int16_t) ((pres_A.sen)*5.0f), (int16_t) ((pres_B.sen)*5.0f));
                     }
@@ -173,8 +166,8 @@
                 double t_value_ref = 0.0f;
                 
                 if (CURRENT_CONTROL_MODE) {
-                    t_value = cur.sen;
-                    t_value_ref = I_REF_fil;
+                    t_value = cur.sen * 1000.0f;    //Pulse
+                    t_value_ref = I_REF_fil * 1000.0f;  //Pulse
                 } else {
                     if(value>=(float) VALVE_CENTER) {
                         t_value = 10000.0f*((double)value - (double)VALVE_CENTER)/((double)VALVE_MAX_POS - (double)VALVE_CENTER);
@@ -189,8 +182,7 @@
                     }
                 }
 
-//                CAN_TX_PRES((int16_t) (t_value), (int16_t) (t_value_ref)); // 1400
-                CAN_TX_PRES((int16_t) (VALVE_DEADZONE_PLUS), (int16_t) (t_value_ref)); // 1400
+                CAN_TX_PRES((int16_t) (t_value), (int16_t) (t_value_ref)); // 1400
             }
 
 //            //If it doesn't rest, below can can not work.
@@ -851,7 +843,7 @@
             pos.ref = (double)temp_pos * 1.0f;
             vel.ref = (double)temp_vel * 10.0f;
         } else { //Linear Actuator
-            pos.ref = (double)temp_pos * 10.0f;
+            pos.ref = (double)temp_pos * 16.0f;
             vel.ref = (double)temp_vel * 256.0f;
         }
 
--- a/SPI_EEP_ENC/SPI_EEP_ENC.cpp	Mon Feb 22 14:09:13 2021 +0000
+++ b/SPI_EEP_ENC/SPI_EEP_ENC.cpp	Wed Mar 03 12:23:13 2021 +0000
@@ -82,7 +82,7 @@
  // ENCODER
 void spi_enc_set_clear(void){
     unsigned int temp;
-    enc_cs = 1; //sw add
+//    enc_cs = 1; //sw add
     enc_cs = 0;
     temp = enc.write(0b00100000);
     enc_cs = 1;
@@ -92,14 +92,14 @@
     unsigned int temp, i, temp1, temp2;
 
     // write MDR0 -> 0b11 -> x4 quadrature count mode
-    enc_cs = 1; //sw add
+//    enc_cs = 1; //sw add
     enc_cs = 0;
     temp = enc.write(0b10001000);     // WR + MDR0
     temp = enc.write(0b00000011);     // quadratue mode
     enc_cs = 1;
 
     // write MDR1 -> 0b10 -> 2-byte counter mode
-    for(i=0;i<100;i++);
+    for(i=0;i<10000;i++);
     enc_cs = 0;
     temp = enc.write(0b10010000);     // WR + MDR1
     //temp = enc.write(0b00000010);     // 2 byte mode
@@ -114,7 +114,7 @@
 int spi_enc_read(void){   
     //for(t_i=0;t_i<100;t_i++);
     unsigned int t_dummy, t_b1, t_b2, t_b3, t_b4, t_i;
-    enc_cs = 1; //sw add
+//    enc_cs = 1; //sw add
     enc_cs = 0;
     t_dummy = enc.write(0b01100000); // Read Commend 
     t_b1 = enc.write(0x00);         // Dummy data for clock
--- a/function_utilities/function_utilities.cpp	Mon Feb 22 14:09:13 2021 +0000
+++ b/function_utilities/function_utilities.cpp	Wed Mar 03 12:23:13 2021 +0000
@@ -625,8 +625,8 @@
     //DDV_CENTER = (float) (flashReadInt(Rom_Sector, RID_DDV_CENTER)) * 0.1f;
     VALVE_POS_NUM = spi_eeprom_read(RID_VALVE_POS_NUM);
 
-    K_SPRING = spi_eeprom_read(RID_K_SPRING);
-    D_DAMPER = spi_eeprom_read(RID_D_DAMPER);
+//    K_SPRING = spi_eeprom_read(RID_K_SPRING);
+//    D_DAMPER = spi_eeprom_read(RID_D_DAMPER);
 
 
 
--- a/main.cpp	Mon Feb 22 14:09:13 2021 +0000
+++ b/main.cpp	Wed Mar 03 12:23:13 2021 +0000
@@ -891,12 +891,17 @@
 
     enc_cs = 1;     //sw add
     enc.format(8,0);
-    enc.frequency(10000000); //10M
+    enc.frequency(5000000); //10M
     enc_cs = 0;     //sw add
     
     make_delay();
-
-//    spi_eeprom_write(RID_BNO, (int16_t) 0);
+    
+    // spi _ enc
+    spi_enc_set_init();
+    make_delay();
+    
+    //Inital BNO setting
+//    spi_eeprom_write(RID_BNO, (int16_t) 1);
 //    make_delay();
 
     //rom
@@ -911,6 +916,14 @@
     Init_PWM();
     TIM4->CR1 ^= TIM_CR1_UDIS;
     make_delay();
+    
+    // CAN
+    can.attach(&CAN_RX_HANDLER);
+    CAN_ID_INIT();
+    make_delay();
+
+   //can.reset();
+    can.filter(msg.id, 0xFFFFF000, CANStandard);
 
     // TMR3 init
     Init_TMR3();
@@ -922,22 +935,24 @@
 //    TIM2->CR1 ^= TIM_CR1_UDIS;
 //    make_delay();
 
-    // CAN
-    can.attach(&CAN_RX_HANDLER);
-    CAN_ID_INIT();
-    make_delay();
+//    // CAN
+//    can.attach(&CAN_RX_HANDLER);
+//    CAN_ID_INIT();
+//    make_delay();
+    
+      
 
     //Timer priority
     NVIC_SetPriority(TIM3_IRQn, 2);
     //NVIC_SetPriority(TIM2_IRQn, 3);
     NVIC_SetPriority(TIM4_IRQn, 3);
 
-    //can.reset();
-    can.filter(msg.id, 0xFFFFF000, CANStandard);
-
-    // spi _ enc
-    spi_enc_set_init();
-    make_delay();
+//    //can.reset();
+//    can.filter(msg.id, 0xFFFFF000, CANStandard);
+
+  //  // spi _ enc
+//    spi_enc_set_init();
+//    make_delay();
 
     //DAC init
     if (SENSING_MODE == 0) {
@@ -2380,16 +2395,15 @@
 
                 double torq_ref = 0.0f;
                 pos.err = (pos.ref - pos.sen)/(float)(ENC_PULSE_PER_POSITION); //[mm]
-                vel.err = (0.0f - vel.sen)/(float)(ENC_PULSE_PER_POSITION); //[mm/s]
+                vel.err = (vel.ref - vel.sen)/(float)(ENC_PULSE_PER_POSITION); //[mm/s]
                 pos.err_sum += pos.err/(float) TMR_FREQ_5k; //[mm]
 
                 //K & D Low Pass Filter
                 float alpha_K_D = 1.0f/(1.0f + 5000.0f/(2.0f*3.14f*30.0f)); // f_cutoff : 30Hz
                 K_LPF = K_LPF*(1.0f-alpha_K_D)+K_SPRING*(alpha_K_D);
                 D_LPF = D_LPF*(1.0f-alpha_K_D)+D_DAMPER*(alpha_K_D);
-
-//                torq_ref = torq.ref + K_LPF * pos.err - D_LPF * vel.sen / ENC_PULSE_PER_POSITION; //[N]
-                torq_ref = torq.ref;
+                torq_ref = torq.ref + K_LPF * pos.err - D_LPF * vel.sen / ENC_PULSE_PER_POSITION; //[N]
+//                torq_ref = torq.ref;
 
                 // torque feedback
                 torq.err = torq_ref - torq.sen; //[N]
@@ -2839,7 +2853,7 @@
 //                            }
 //                        } else if ((OPERATING_MODE & 0b01) == 1) { // Linear Actuator
 //                            if (SENSING_MODE == 0) {
-//                                CAN_TX_POSITION_FT((int16_t) (pos.sen/10.0f), (int16_t) (vel.sen/256.0f), (int16_t) (torq.sen * 10.0f * (float)(TORQUE_SENSOR_PULSE_PER_TORQUE)));
+//                                CAN_TX_POSITION_FT((int16_t) (pos.sen/16.0f), (int16_t) (vel.sen/256.0f), (int16_t) (torq.sen * 10.0f * (float)(TORQUE_SENSOR_PULSE_PER_TORQUE)));
 //                            } else if (SENSING_MODE == 1) {
 //                                CAN_TX_POSITION_PRESSURE((int16_t) (pos.sen/10.0f), (int16_t) (vel.sen/256.0f), (int16_t) ((pres_A.sen)*5.0f), (int16_t) ((pres_B.sen)*5.0f));
 //                            }