From afa987c506c6c5ad2090d4b96d125ee21029686f Mon Sep 17 00:00:00 2001 From: LongHairedHacker Date: Thu, 23 Jul 2020 19:04:18 +0200 Subject: [PATCH] Alternative switching pattern for better bootstraping --- firmware/main.c | 20 ++++++++++++++------ firmware/pwm.h | 37 ++++++++++++++++++++++++++++++------- 2 files changed, 44 insertions(+), 13 deletions(-) diff --git a/firmware/main.c b/firmware/main.c index 1a1afef..d0244a4 100644 --- a/firmware/main.c +++ b/firmware/main.c @@ -14,14 +14,16 @@ int main(void) { while(1) { - //hbridge_set_l1(); - - for(uint8_t speed = 0; speed <= 250; speed++) { - for(uint16_t i = 0; i < 250; i++) { + for(uint8_t speed = 50; speed <= 255; speed++) { + for(uint16_t i = 0; i < 1000; i++) { pwm_cycle_forwards(speed); } } + for(uint16_t i = 0; i < 10000; i++) { + pwm_cycle_forwards(255); + } + hbridge_unset_h2(); hbridge_unset_h2(); hbridge_set_l1(); @@ -30,12 +32,18 @@ int main(void) { hbridge_unset_l2(); hbridge_unset_l2(); - for(uint8_t speed = 0; speed <= 250; speed++) { - for(uint16_t i = 0; i < 250; i++) { + + + for(uint8_t speed = 50; speed <= 255; speed++) { + for(uint16_t i = 0; i < 1000; i++) { pwm_cycle_backwards(speed); } } + for(uint16_t i = 0; i < 10000; i++) { + pwm_cycle_forwards(255); + } + hbridge_unset_h2(); hbridge_unset_h2(); hbridge_set_l1(); diff --git a/firmware/pwm.h b/firmware/pwm.h index 02f336f..b2b4dc5 100644 --- a/firmware/pwm.h +++ b/firmware/pwm.h @@ -41,39 +41,62 @@ static inline void hbridge_unset_l2(void) { PORTB &= ~(1 << PB4); } -const double delay_time = 2.0; +const double delay_time = 1; static inline void pwm_cycle_backwards(uint8_t speed) { PIND |= (1 << PD1); - hbridge_unset_l2(); - hbridge_set_l1(); for(uint8_t i = 0; i < 8; i++) { if((speed & (1 << i)) != 0) { + hbridge_unset_h1(); hbridge_set_h2(); + hbridge_set_l1(); + hbridge_unset_l2(); + } + else { + hbridge_unset_h1(); + hbridge_unset_h2(); + hbridge_unset_l1(); + hbridge_set_l2(); } for(uint8_t j = 0; j < (1 << i); j++) { _delay_us(delay_time); } - hbridge_unset_h2(); } + + hbridge_unset_h1(); + hbridge_unset_h2(); + hbridge_unset_l1(); + hbridge_unset_l2(); } static inline void pwm_cycle_forwards(uint8_t speed) { PIND |= (1 << PD1); - hbridge_unset_l1(); - hbridge_set_l2(); + for(uint8_t i = 0; i < 8; i++) { if((speed & (1 << i)) != 0) { hbridge_set_h1(); + hbridge_unset_h2(); + hbridge_unset_l1(); + hbridge_set_l2(); + } + else { + hbridge_unset_h1(); + hbridge_unset_h2(); + hbridge_set_l1(); + hbridge_unset_l2(); } for(uint8_t j = 0; j < (1 << i); j++) { _delay_us(delay_time); } - hbridge_unset_h1(); } + + hbridge_unset_h1(); + hbridge_unset_h2(); + hbridge_unset_l1(); + hbridge_unset_l2(); } #endif