better cobboard commands in strat_event
[aversive.git] / projects / microb2010 / cobboard / cs.c
index f9c0b7d..7eb186e 100644 (file)
@@ -78,9 +78,9 @@ static void do_cs(__attribute__((unused)) void *dummy)
                ls = (cobboard.left_spickle.prev - cobboard.left_spickle.cs.filtered_feedback_value);
                rs = (cobboard.right_spickle.prev - cobboard.right_spickle.cs.filtered_feedback_value);
                sh = (cobboard.shovel.prev - cobboard.shovel.cs.filtered_feedback_value);
-               if (ls < -2000 || ls > 2000 ||
-                   rs < -2000 || rs > 2000 ||
-                   sh < -2000 || sh > 2000) {
+               if (ls < -3000 || ls > 3000 ||
+                   rs < -3000 || rs > 3000 ||
+                   sh < -3000 || sh > 3000) {
                        printf_P(PSTR("left_spickle %ld "), ls);
                        printf_P(PSTR("right_spickle %ld "), rs);
                        printf_P(PSTR("shovel %ld "), sh);
@@ -95,10 +95,20 @@ static void do_cs(__attribute__((unused)) void *dummy)
        }
 #endif
 
-       if (cobboard.flags & DO_BD) {
+       if ((cobboard.flags & DO_BD) && (cobboard.flags & DO_POWER)) {
                bd_manage_from_cs(&cobboard.left_spickle.bd, &cobboard.left_spickle.cs);
                bd_manage_from_cs(&cobboard.right_spickle.bd, &cobboard.right_spickle.cs);
                bd_manage_from_cs(&cobboard.shovel.bd, &cobboard.shovel.cs);
+
+               /* urgent case: stop power on blocking */
+               if (cobboard.flags & DO_ERRBLOCKING) {
+                       if (/* bd_get(&cobboard.left_spickle.bd) || */
+                           /* bd_get(&cobboard.right_spickle.bd) || */
+                           bd_get(&cobboard.shovel.bd)) {
+                               printf_P(PSTR("MOTOR BLOCKED STOP ALL\r\n"));
+                               cobboard.flags &= ~(DO_POWER | DO_ERRBLOCKING);
+                       }
+               }
        }
        if (cobboard.flags & DO_POWER)
                BRAKE_OFF();
@@ -139,8 +149,8 @@ void microb_cs_init(void)
        /* ---- CS left_spickle */
        /* PID */
        pid_init(&cobboard.left_spickle.pid);
-       pid_set_gains(&cobboard.left_spickle.pid, 300, 10, 1500);
-       pid_set_maximums(&cobboard.left_spickle.pid, 0, 10000, 2400); /* max is 12 V */
+       pid_set_gains(&cobboard.left_spickle.pid, 400, 10, 1500);
+       pid_set_maximums(&cobboard.left_spickle.pid, 0, 25000, 4095);
        pid_set_out_shift(&cobboard.left_spickle.pid, 10);
        pid_set_derivate_filter(&cobboard.left_spickle.pid, 4);
 
@@ -154,13 +164,13 @@ void microb_cs_init(void)
        /* Blocking detection */
        bd_init(&cobboard.left_spickle.bd);
        bd_set_speed_threshold(&cobboard.left_spickle.bd, 150);
-       bd_set_current_thresholds(&cobboard.left_spickle.bd, 500, 8000, 1000000, 40);
+       bd_set_current_thresholds(&cobboard.left_spickle.bd, 500, 8000, 1000000, 200);
 
        /* ---- CS right_spickle */
        /* PID */
        pid_init(&cobboard.right_spickle.pid);
-       pid_set_gains(&cobboard.right_spickle.pid, 300, 10, 1500);
-       pid_set_maximums(&cobboard.right_spickle.pid, 0, 10000, 2400); /* max is 12 V */
+       pid_set_gains(&cobboard.right_spickle.pid, 400, 10, 1500);
+       pid_set_maximums(&cobboard.right_spickle.pid, 0, 25000, 4095);
        pid_set_out_shift(&cobboard.right_spickle.pid, 10);
        pid_set_derivate_filter(&cobboard.right_spickle.pid, 4);
 
@@ -174,7 +184,7 @@ void microb_cs_init(void)
        /* Blocking detection */
        bd_init(&cobboard.right_spickle.bd);
        bd_set_speed_threshold(&cobboard.right_spickle.bd, 150);
-       bd_set_current_thresholds(&cobboard.right_spickle.bd, 500, 8000, 1000000, 40);
+       bd_set_current_thresholds(&cobboard.right_spickle.bd, 500, 8000, 1000000, 200);
 
        /* ---- CS shovel */
        /* PID */
@@ -186,7 +196,7 @@ void microb_cs_init(void)
 
        /* quadramp */
        quadramp_init(&cobboard.shovel.qr);
-       quadramp_set_1st_order_vars(&cobboard.shovel.qr, 2000, 2000); /* set speed */
+       quadramp_set_1st_order_vars(&cobboard.shovel.qr, 2500, 2500); /* set speed */
        quadramp_set_2nd_order_vars(&cobboard.shovel.qr, 50, 20); /* set accel */
 
        /* CS */
@@ -200,7 +210,7 @@ void microb_cs_init(void)
        /* Blocking detection */
        bd_init(&cobboard.shovel.bd);
        bd_set_speed_threshold(&cobboard.shovel.bd, 150);
-       bd_set_current_thresholds(&cobboard.shovel.bd, 500, 8000, 1000000, 40);
+       bd_set_current_thresholds(&cobboard.shovel.bd, 500, 8000, 1000000, 200);
 
        /* set them on (or not) !! */
        cobboard.left_spickle.on = 0;