summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2014-05-21 22:54:19 +0200
committerChristian Pointner <equinox@spreadspace.org>2014-05-21 22:54:19 +0200
commit2b39db60e0a948e5109e345ad601f511d88d63db (patch)
tree226f5d01eca453582d74c01b2f88ab9353631325
parentimproved acceleration (diff)
reimplemented rpm based speed setting
-rw-r--r--tube-rotator/stepper.c46
-rw-r--r--tube-rotator/stepper.h8
-rw-r--r--tube-rotator/tube-rotator.c28
3 files changed, 42 insertions, 40 deletions
diff --git a/tube-rotator/stepper.c b/tube-rotator/stepper.c
index ee8518f..8b718ae 100644
--- a/tube-rotator/stepper.c
+++ b/tube-rotator/stepper.c
@@ -93,9 +93,9 @@ static inline void stepper_handle(void)
if(step_idx != 0 && step_idx % 8) {
if(current_speed > target_speed)
- OCR1A = (uint16_t)(STEPPER_SPEED_CONVERT_VALUE/(--current_speed));
+ OCR1A = (uint16_t)((STEPPER_SPEED_CONVERT_VALUE/(--current_speed)) - 1);
else if(current_speed < target_speed)
- OCR1A = (uint16_t)(STEPPER_SPEED_CONVERT_VALUE/(++current_speed));
+ OCR1A = (uint16_t)((STEPPER_SPEED_CONVERT_VALUE/(++current_speed)) - 1);
}
}
@@ -146,24 +146,24 @@ uint16_t stepper_get_speed(void)
return target_speed;
}
-/* void stepper_set_speed_rpm(uint8_t new_rpm) */
-/* { */
-/* 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); */
-/* } */
+void stepper_set_speed_rpm(uint8_t new_rpm)
+{
+ stepper_set_speed( (uint16_t)lround( ( (double)(64.0 * 800.0 * (double)STEPPER_SPEED_CONVERT_VALUE) / (double)(60.0 * (double)F_CPU) ) * (double)new_rpm) );
+}
+
+uint8_t stepper_get_speed_rpm(void)
+{
+ return (uint8_t)lround( ( (double)(60.0 * (double)F_CPU) / (double)(64.0 * 800.0 * (double)STEPPER_SPEED_CONVERT_VALUE) ) * (double)(target_speed) );
+}
+
+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 7c0eaa3..5b5a315 100644
--- a/tube-rotator/stepper.h
+++ b/tube-rotator/stepper.h
@@ -51,9 +51,9 @@ void stepper_inc_speed(void);
void stepper_dec_speed(void);
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);
+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 416e077..065dd2f 100644
--- a/tube-rotator/tube-rotator.c
+++ b/tube-rotator/tube-rotator.c
@@ -40,20 +40,22 @@ 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_inc_speed_rpm(); break;
-// case '-': stepper_dec_speed_rpm(); break;
- case '-': stepper_dec_speed(); break;
- case '3': stepper_set_speed(STEPPER_SPEED_30RPM); break;
- case '4': stepper_set_speed(STEPPER_SPEED_40RPM); break;
- case '5': stepper_set_speed(STEPPER_SPEED_50RPM); break;
- case '6': stepper_set_speed(STEPPER_SPEED_60RPM); break;
- case '7': stepper_set_speed(STEPPER_SPEED_70RPM); break;
- case '8': stepper_set_speed(STEPPER_SPEED_80RPM); break;
- case '9': stepper_set_speed(STEPPER_SPEED_90RPM); break;
- case '0': stepper_set_speed(STEPPER_SPEED_100RPM); 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;
+ case '6': stepper_set_speed_rpm(60); break;
+ case '7': stepper_set_speed_rpm(70); break;
+ case '8': stepper_set_speed_rpm(80); break;
+ case '9': stepper_set_speed_rpm(90); break;
+ case '0': stepper_set_speed_rpm(100); break;
+ case '1': stepper_set_speed_rpm(110); break;
+ case '2': stepper_set_speed_rpm(120); break;
}
- printf("state: %s, %3d rpm\r", stepper_state_to_string(stepper_get_state()), stepper_get_speed());
+ printf("state: %s, %3d rpm\r", stepper_state_to_string(stepper_get_state()), stepper_get_speed_rpm());
}
int main(void)