From f6601c1f928cc28a88bcb8921ca927453d53a1f2 Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Sun, 22 May 2011 17:26:31 +0200 Subject: digital/mimot: add offset to compensate H-bridge dead zone --- digital/mimot/src/dirty/pwm.h | 5 ++++- digital/mimot/src/dirty/pwm_ocr.avr.c | 8 ++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/digital/mimot/src/dirty/pwm.h b/digital/mimot/src/dirty/pwm.h index a751ee9e..b4f12d0d 100644 --- a/digital/mimot/src/dirty/pwm.h +++ b/digital/mimot/src/dirty/pwm.h @@ -25,8 +25,11 @@ * * }}} */ +/** Offset to compensate for H-bridge dead zone at low PWM values. */ +#define PWM_OFFSET 0x40 + /** Define the absolute maximum PWM value. */ -#define PWM_MAX 0x3ff +#define PWM_MAX (0x3ff - PWM_OFFSET) /** PWM control state. */ struct pwm_t diff --git a/digital/mimot/src/dirty/pwm_ocr.avr.c b/digital/mimot/src/dirty/pwm_ocr.avr.c index c4cd5279..a1d98c25 100644 --- a/digital/mimot/src/dirty/pwm_ocr.avr.c +++ b/digital/mimot/src/dirty/pwm_ocr.avr.c @@ -94,12 +94,12 @@ pwm_ocr_update (void) IO_SET (PWM1_BRK_IO); if (PWM_VALUE (PWM1) < 0) { - pwm1 = -PWM_VALUE (PWM1); + pwm1 = -PWM_VALUE (PWM1) + PWM_OFFSET; } else { dir_d |= _BV (PWM1_DIR); - pwm1 = PWM_VALUE (PWM1); + pwm1 = PWM_VALUE (PWM1) + PWM_OFFSET; } } # endif /* PWM1 */ @@ -115,12 +115,12 @@ pwm_ocr_update (void) IO_SET (PWM2_BRK_IO); if (PWM_VALUE (PWM2) < 0) { - pwm2 = -PWM_VALUE (PWM2); + pwm2 = -PWM_VALUE (PWM2) + PWM_OFFSET; } else { dir_d |= _BV (PWM2_DIR); - pwm2 = PWM_VALUE (PWM2); + pwm2 = PWM_VALUE (PWM2) + PWM_OFFSET; } } # endif /* PWM2 */ -- cgit v1.2.3