summaryrefslogtreecommitdiff
path: root/digital/mimot/src/dirty/speed.c
diff options
context:
space:
mode:
authorNicolas Schodet2011-04-19 21:26:15 +0200
committerNicolas Schodet2011-04-19 21:26:15 +0200
commit4cd9c4458eaa49c269171145f4bc2a184948eae1 (patch)
tree780cdc9493bfcfd2907a61cce62ff8a6f64a0c45 /digital/mimot/src/dirty/speed.c
parente2594ccdadae65d7e7473e51fb8bfbbd49c04a24 (diff)
digital/mimot: switch to differential drive
Diffstat (limited to 'digital/mimot/src/dirty/speed.c')
-rw-r--r--digital/mimot/src/dirty/speed.c27
1 files changed, 15 insertions, 12 deletions
diff --git a/digital/mimot/src/dirty/speed.c b/digital/mimot/src/dirty/speed.c
index f9d4193e..cd68fec2 100644
--- a/digital/mimot/src/dirty/speed.c
+++ b/digital/mimot/src/dirty/speed.c
@@ -37,16 +37,15 @@
* shaft position.
*/
-/** Auxiliaries speed control states. */
-struct speed_t speed_aux[AC_ASSERV_AUX_NB];
+/** Theta/alpha speed control states. */
+struct speed_t speed_theta, speed_alpha;
/** Initialise speed control states. */
void
speed_init (void)
{
- uint8_t i;
- for (i = 0; i < AC_ASSERV_AUX_NB; i++)
- speed_aux[i].pos = &pos_aux[i];
+ speed_theta.pos = &pos_theta;
+ speed_alpha.pos = &pos_alpha;
}
/** Update current speed according to a speed consign. */
@@ -104,18 +103,24 @@ speed_update_by (struct speed_t *speed)
speed->pos->cons += speed->cur >> 8;
}
-/** Update shaft position consign for one motor system. */
+/** Update shaft position consign for two motors system. */
static void
-speed_update_single (struct state_t *state, struct speed_t *speed)
+speed_update_double (struct state_t *state, struct speed_t *speed0,
+ struct speed_t *speed1)
{
if (state->mode >= MODE_SPEED)
{
/* Update speed. */
- speed_update_by (speed);
+ speed_update_by (speed0);
+ speed_update_by (speed1);
/* Check for completion. */
if (state->mode == MODE_SPEED
- && speed->use_pos && speed->cur == 0)
+ && (speed0->use_pos || speed1->use_pos)
+ && (!speed0->use_pos || speed0->cur == 0)
+ && (!speed1->use_pos || speed1->cur == 0))
+ {
state_finish (state);
+ }
}
}
@@ -123,8 +128,6 @@ speed_update_single (struct state_t *state, struct speed_t *speed)
void
speed_update (void)
{
- uint8_t i;
- for (i = 0; i < AC_ASSERV_AUX_NB; i++)
- speed_update_single (&state_aux[i], &speed_aux[i]);
+ speed_update_double (&state_main, &speed_theta, &speed_alpha);
}