summaryrefslogtreecommitdiff
path: root/n/asserv/src/speed.c
diff options
context:
space:
mode:
authorschodet2005-04-09 21:30:07 +0000
committerschodet2005-04-09 21:30:07 +0000
commitcbdfded9991dc3e01da3f70cd81b854694c0f769 (patch)
treef2d6a92f3b3ae7fbec28f9f86e698c0452181f0e /n/asserv/src/speed.c
parentd2f36b53cd72dc6e2d627faeea21be01507b758a (diff)
footing pour Taz, 0.05/256 d'erreur d'angle !!
Diffstat (limited to 'n/asserv/src/speed.c')
-rw-r--r--n/asserv/src/speed.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/n/asserv/src/speed.c b/n/asserv/src/speed.c
index 38842a1..7fdb0dc 100644
--- a/n/asserv/src/speed.c
+++ b/n/asserv/src/speed.c
@@ -43,6 +43,8 @@ int16_t speed_left_e_old, speed_right_e_old;
uint16_t speed_kp = 5 * 255;
/** I coeficients. 4.8 fixed point format. */
uint16_t speed_ki = 1 * 255;
+/** Dead zone. */
+uint16_t speed_dead_zone = 0;
/* +AutoDec */
@@ -114,6 +116,9 @@ speed_compute_left_pwm (void)
int16_t e;
int16_t pwm;
e = speed_left - counter_left_diff; /* 10b = 8b + 9b */
+ /* Dead zone. */
+ if (speed_dead_zone > e && e > -speed_dead_zone)
+ e = 0;
/* Integral update. */
speed_left_int += e; /* 12b = 11b + 10b */
if (speed_left_int > speed_int_max) /* 11b */
@@ -135,6 +140,9 @@ speed_compute_right_pwm (void)
int16_t e;
int16_t pwm;
e = speed_right - counter_right_diff;
+ /* Dead zone. */
+ if (speed_dead_zone > e && e > -speed_dead_zone)
+ e = 0;
/* Integral update. */
speed_right_int += e;
if (speed_right_int > speed_int_max)