diff options
author | Christian Pointner <equinox@spreadspace.org> | 2014-05-21 02:02:40 +0200 |
---|---|---|
committer | Christian Pointner <equinox@spreadspace.org> | 2014-05-21 02:02:40 +0200 |
commit | 943668711671cec5efa238daed28cfe0e2828d5c (patch) | |
tree | 9fc398f06796dcaf38298dabcb726b65034cd182 | |
parent | added set speed in rpm (diff) |
cleaned up stepper state
added rpm based inc speed commands
-rw-r--r-- | tube-rotator/stepper.c | 36 | ||||
-rw-r--r-- | tube-rotator/stepper.h | 10 | ||||
-rw-r--r-- | tube-rotator/tube-rotator.c | 12 |
3 files changed, 46 insertions, 12 deletions
diff --git a/tube-rotator/stepper.c b/tube-rotator/stepper.c index 3a08cd4..43e194f 100644 --- a/tube-rotator/stepper.c +++ b/tube-rotator/stepper.c @@ -49,7 +49,7 @@ uint8_t step_table [] = volatile uint16_t target_speed; uint16_t current_speed; -uint8_t running; +stepper_state_t current_state; void stepper_init(void) { @@ -61,7 +61,7 @@ void stepper_init(void) void stepper_start(void) { - if(running) return; + if(current_state == stepper_running) return; current_speed = STEPPER_SPEED_MIN; STEPPER_PORT |= (1<<STEPPER_ENABLE_A_BIT) | (1<<STEPPER_ENABLE_B_BIT); @@ -70,7 +70,7 @@ void stepper_start(void) TCCR1A = 0; // prescaler 1:64, WGM = 4 (CTC) TCCR1B = 1<<WGM12 | 1<<CS11 | 1<<CS10; // TIMSK1 = 1<<OCIE1A; - running = 1; + current_state = stepper_running; } void stepper_stop(void) @@ -78,7 +78,7 @@ void stepper_stop(void) STEPPER_PORT &= ~(0xF << STEPPER_FIRST_BIT | 1<<STEPPER_ENABLE_A_BIT | 1<<STEPPER_ENABLE_B_BIT); TCCR1B = 0; // no clock source TIMSK1 = 0; // disable timer interrupt - running = 0; + current_state = stepper_stopped; } static inline void stepper_handle(void) @@ -104,6 +104,20 @@ ISR(TIMER1_COMPA_vect) stepper_handle(); } +stepper_state_t stepper_get_state(void) +{ + return current_state; +} + +const char* stepper_state_to_string(stepper_state_t state) +{ + switch(state) { + case stepper_running: return "running"; + case stepper_stopped: return "stopped"; + } + return "?"; +} + void stepper_set_speed(uint16_t new_speed) { if(new_speed <= STEPPER_SPEED_MIN && new_speed >= STEPPER_SPEED_MAX) { @@ -134,10 +148,22 @@ uint16_t stepper_get_speed(void) void stepper_set_speed_rpm(uint8_t new_rpm) { - stepper_set_speed(( (uint16_t)( (double)(60.0 * F_CPU) / (double)(64.0 * 800.0 * (double)new_rpm) ) ) - 1); + stepper_set_speed(( (uint16_t)lround( (double)(60.0 * F_CPU) / (double)(64.0 * 800.0 * (double)new_rpm) ) ) - 1); } uint8_t stepper_get_speed_rpm(void) { return (uint8_t)lround( ( (double)F_CPU / (double)(64.0 * 800.0 * (double)(target_speed + 1) ) ) * 60.0 ); } + +void stepper_inc_speed_rpm(void) +{ + uint8_t rpm = stepper_get_speed_rpm(); + stepper_set_speed_rpm((rpm >= 255) ? 255 : rpm+1); +} + +void stepper_dec_speed_rpm(void) +{ + uint8_t rpm = stepper_get_speed_rpm(); + stepper_set_speed_rpm((rpm <= 1) ? 1 : rpm-1); +} diff --git a/tube-rotator/stepper.h b/tube-rotator/stepper.h index a4c7557..10f4900 100644 --- a/tube-rotator/stepper.h +++ b/tube-rotator/stepper.h @@ -23,10 +23,10 @@ #ifndef R3TUBE_stepper_h_INCLUDED #define R3TUBE_stepper_h_INCLUDED -#define STEPPER_SPEED_MIN 950 +#define STEPPER_SPEED_MIN 699 #define STEPPER_SPEED_MAX 149 +//#define STEPPER_SPEED_MAX 74 -#define STEPPER_SPEED_20RPM 936 #define STEPPER_SPEED_30RPM 624 #define STEPPER_SPEED_40RPM 468 #define STEPPER_SPEED_50RPM 374 @@ -38,9 +38,13 @@ #define STEPPER_SPEED_DEFAULT STEPPER_SPEED_60RPM +typedef enum { stepper_stopped = 0, stepper_running = 1 } stepper_state_t; + void stepper_init(void); void stepper_start(void); void stepper_stop(void); +stepper_state_t stepper_get_state(void); +const char* stepper_state_to_string(stepper_state_t state); void stepper_set_speed(uint16_t new_speed); void stepper_inc_speed(void); @@ -49,5 +53,7 @@ uint16_t stepper_get_speed(void); void stepper_set_speed_rpm(uint8_t new_rpm); uint8_t stepper_get_speed_rpm(void); +void stepper_inc_speed_rpm(void); +void stepper_dec_speed_rpm(void); #endif diff --git a/tube-rotator/tube-rotator.c b/tube-rotator/tube-rotator.c index b1446b0..065dd2f 100644 --- a/tube-rotator/tube-rotator.c +++ b/tube-rotator/tube-rotator.c @@ -40,9 +40,10 @@ void handle_cmd(uint8_t cmd) case '!': reset2bootloader(); break; case 'r': led_on(); stepper_start(); break; case 's': stepper_stop(); led_off(); break; - case '+': stepper_inc_speed(); break; - case '-': stepper_dec_speed(); break; - case '2': stepper_set_speed_rpm(20); break; + case '*': stepper_inc_speed(); break; + case '+': stepper_inc_speed_rpm(); break; + case '-': stepper_dec_speed_rpm(); break; + case '_': stepper_dec_speed(); break; case '3': stepper_set_speed_rpm(30); break; case '4': stepper_set_speed_rpm(40); break; case '5': stepper_set_speed_rpm(50); break; @@ -51,9 +52,10 @@ void handle_cmd(uint8_t cmd) case '8': stepper_set_speed_rpm(80); break; case '9': stepper_set_speed_rpm(90); break; case '0': stepper_set_speed_rpm(100); break; - default: printf("Error(cmd): unknown command %02X '%c'\r\n", cmd, cmd); return; + case '1': stepper_set_speed_rpm(110); break; + case '2': stepper_set_speed_rpm(120); break; } - printf("target speed: %3d rpm\r", stepper_get_speed_rpm()); + printf("state: %s, %3d rpm\r", stepper_state_to_string(stepper_get_state()), stepper_get_speed_rpm()); } int main(void) |