high level strat
[aversive.git] / projects / microb2010 / cobboard / cs.c
index f9c0b7d..0ed2f1a 100644 (file)
@@ -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 */
@@ -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;