summaryrefslogtreecommitdiff
path: root/n/asserv/src/asserv/speed.c
diff options
context:
space:
mode:
authorschodet2006-01-17 16:39:17 +0000
committerschodet2006-01-17 16:39:17 +0000
commit435b5a9adaa251e8d72ccf5b744db80296b30908 (patch)
treebbb366c0826073f4a4111b2a5af4a295180aee8c /n/asserv/src/asserv/speed.c
parent1e15fde47f958a7564c45e852bbb7e9b2c31a3ce (diff)
Ouh lala, plein de modifs, dont l'ajout d'un modèle de moteur à courant
continue, le changement du PID, de la PWM et l'ajout de commandes dans main.
Diffstat (limited to 'n/asserv/src/asserv/speed.c')
-rw-r--r--n/asserv/src/asserv/speed.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/n/asserv/src/asserv/speed.c b/n/asserv/src/asserv/speed.c
index 87223e2..d354307 100644
--- a/n/asserv/src/asserv/speed.c
+++ b/n/asserv/src/asserv/speed.c
@@ -29,12 +29,12 @@
* shaft position.
*/
-/** Current speed, uf8.8. */
+/** Current speed, f8.8. */
int16_t speed_theta_cur, speed_alpha_cur;
-/** Consign speed, uf8.8. */
+/** Consign speed, f8.8. */
int16_t speed_theta_cons, speed_alpha_cons;
/** Consign position. */
-uint16_t speed_theta_pos_cons, speed_alpha_pos_cons;
+uint32_t speed_theta_pos_cons, speed_alpha_pos_cons;
/** Weither to use the consign position (1) or not (0). */
uint8_t speed_pos;
@@ -52,18 +52,15 @@ speed_update_by_speed (void)
if (UTILS_ABS (speed_theta_cons - speed_theta_cur) < speed_theta_acc)
speed_theta_cur = speed_theta_cons;
else if (speed_theta_cons > speed_theta_cur)
- speed_theta_cur -= speed_theta_acc;
- else
speed_theta_cur += speed_theta_acc;
+ else
+ speed_theta_cur -= speed_theta_acc;
if (UTILS_ABS (speed_alpha_cons - speed_alpha_cur) < speed_alpha_acc)
speed_alpha_cur = speed_alpha_cons;
else if (speed_alpha_cons > speed_alpha_cur)
- speed_alpha_cur -= speed_alpha_acc;
- else
speed_alpha_cur += speed_alpha_acc;
- /* Update shaft position. */
- pos_theta_cur += speed_theta_cur;
- pos_alpha_cur += speed_alpha_cur;
+ else
+ speed_alpha_cur -= speed_alpha_acc;
}
/** Update shaft position consign according to a position consign. */
@@ -77,9 +74,13 @@ speed_update_by_position (void)
static void
speed_update (void)
{
+ /* Update speed. */
if (speed_pos)
speed_update_by_position ();
else
speed_update_by_speed ();
+ /* Update shaft position. */
+ pos_theta_cur += speed_theta_cur >> 8;
+ pos_alpha_cur += speed_alpha_cur >> 8;
}