From 943668711671cec5efa238daed28cfe0e2828d5c Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Wed, 21 May 2014 02:02:40 +0200 Subject: cleaned up stepper state added rpm based inc speed commands --- tube-rotator/stepper.c | 36 +++++++++++++++++++++++++++++++----- tube-rotator/stepper.h | 10 ++++++++-- tube-rotator/tube-rotator.c | 12 +++++++----- 3 files changed, 46 insertions(+), 12 deletions(-) (limited to 'tube-rotator') 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_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) -- cgit v1.2.3