StepperMotor: inherit new Actuator class
authorMichael Moon <triffid.hunter@gmail.com>
Sat, 1 Feb 2014 22:48:51 +0000 (09:48 +1100)
committerMichael Moon <triffid.hunter@gmail.com>
Sat, 1 Feb 2014 22:48:51 +0000 (09:48 +1100)
src/libs/StepperMotor.cpp
src/libs/StepperMotor.h
src/modules/robot/Planner.cpp
src/modules/robot/Robot.cpp

index 5954a5d..467e79d 100644 (file)
@@ -25,10 +25,10 @@ StepperMotor::StepperMotor(){
     this->step_signal_hook = new Hook();
 
     steps_per_mm         = 1.0F;
-    max_rate             = 50.0F;
+    max_speed            = 50.0F;
 
     last_milestone_steps = 0;
-    last_milestone_mm    = 0.0F;
+    last_milestone       = 0.0F;
 }
 
 StepperMotor::StepperMotor(Pin& step, Pin& dir, Pin& en) : step_pin(step), dir_pin(dir), en_pin(en) {
@@ -47,10 +47,10 @@ StepperMotor::StepperMotor(Pin& step, Pin& dir, Pin& en) : step_pin(step), dir_p
     set_high_on_debug(en.port_number, en.pin);
 
     steps_per_mm         = 1.0F;
-    max_rate             = 50.0F;
+    max_speed            = 50.0F;
 
     last_milestone_steps = 0;
-    last_milestone_mm    = 0.0F;
+    last_milestone       = 0.0F;
 }
 
 // This is called ( see the .h file, we had to put a part of things there for obscure inline reasons ) when a step has to be generated
@@ -174,13 +174,13 @@ void StepperMotor::unpause(){
 void StepperMotor::change_steps_per_mm(float new_steps)
 {
     steps_per_mm = new_steps;
-    last_milestone_steps = lround(last_milestone_mm * steps_per_mm);
+    last_milestone_steps = lround(last_milestone * steps_per_mm);
 }
 
 void StepperMotor::change_last_milestone(float new_milestone)
 {
-    last_milestone_mm = new_milestone;
-    last_milestone_steps = lround(last_milestone_mm * steps_per_mm);
+    last_milestone = new_milestone;
+    last_milestone_steps = lround(last_milestone * steps_per_mm);
 }
 
 int  StepperMotor::steps_to_target(float target)
index 6e654d7..c9fe05e 100644 (file)
 
 #include "libs/Hook.h"
 #include "Pin.h"
+#include "Actuator.h"
 
 class StepTicker;
 class Hook;
 
-class StepperMotor {
+class StepperMotor : public Actuator {
     public:
         StepperMotor();
         StepperMotor(Pin& step, Pin& dir, Pin& en);
@@ -76,10 +77,8 @@ class StepperMotor {
         bool paused;
 
         float steps_per_mm;
-        float max_rate;
 
         int32_t last_milestone_steps;
-        float   last_milestone_mm;
 
         uint32_t steps_to_move;
         uint32_t stepped;
index 0baabee..1fabfe9 100644 (file)
@@ -63,7 +63,7 @@ void Planner::append_block( float actuator_pos[], float rate_mm_s, float distanc
 
         // Update current position
         THEKERNEL->robot->actuators[i]->last_milestone_steps += steps;
-        THEKERNEL->robot->actuators[i]->last_milestone_mm = actuator_pos[i];
+        THEKERNEL->robot->actuators[i]->last_milestone = actuator_pos[i];
 
         block->steps[i] = labs(steps);
     }
index 5c69924..86a2b31 100644 (file)
@@ -186,9 +186,9 @@ void Robot::on_config_reload(void* argument){
     beta_stepper_motor->change_steps_per_mm(steps_per_mm[1]);
     gamma_stepper_motor->change_steps_per_mm(steps_per_mm[2]);
 
-    alpha_stepper_motor->max_rate = THEKERNEL->config->value(alpha_max_rate_checksum)->by_default(30000.0F)->as_number() / 60.0F;
-    beta_stepper_motor->max_rate  = THEKERNEL->config->value(beta_max_rate_checksum )->by_default(30000.0F)->as_number() / 60.0F;
-    gamma_stepper_motor->max_rate = THEKERNEL->config->value(gamma_max_rate_checksum)->by_default(30000.0F)->as_number() / 60.0F;
+    alpha_stepper_motor->max_speed = THEKERNEL->config->value(alpha_max_rate_checksum)->by_default(30000.0F)->as_number() / 60.0F;
+    beta_stepper_motor->max_speed  = THEKERNEL->config->value(beta_max_rate_checksum )->by_default(30000.0F)->as_number() / 60.0F;
+    gamma_stepper_motor->max_speed = THEKERNEL->config->value(gamma_max_rate_checksum)->by_default(30000.0F)->as_number() / 60.0F;
 
     actuators.clear();
     actuators.push_back(alpha_stepper_motor);
@@ -314,15 +314,15 @@ void Robot::on_gcode_received(void * argument){
                 if (gcode->has_letter('Z'))
                     axes[Z_AXIS].max_speed = gcode->get_value('Z');
                 if (gcode->has_letter('A'))
-                    alpha_stepper_motor->max_rate= gcode->get_value('A');
+                    alpha_stepper_motor->max_speed= gcode->get_value('A');
                 if (gcode->has_letter('B'))
-                    beta_stepper_motor->max_rate= gcode->get_value('B');
+                    beta_stepper_motor->max_speed= gcode->get_value('B');
                 if (gcode->has_letter('C'))
-                    gamma_stepper_motor->max_rate= gcode->get_value('C');
+                    gamma_stepper_motor->max_speed= gcode->get_value('C');
 
                 gcode->stream->printf("X:%g Y:%g Z:%g  A:%g B:%g C:%g ",
                     axes[X_AXIS].max_speed, axes[Y_AXIS].max_speed, axes[Z_AXIS].max_speed,
-                    alpha_stepper_motor->max_rate, beta_stepper_motor->max_rate, gamma_stepper_motor->max_rate);
+                    alpha_stepper_motor->max_speed, beta_stepper_motor->max_speed, gamma_stepper_motor->max_speed);
                 gcode->add_nl = true;
                 gcode->mark_as_taken();
                 break;
@@ -390,7 +390,7 @@ void Robot::on_gcode_received(void * argument){
                 gcode->stream->printf(";X- Junction Deviation, S - Minimum Planner speed:\nM205 X%1.5f S%1.5f\n", THEKERNEL->planner->junction_deviation, THEKERNEL->planner->minimum_planner_speed);
                 gcode->stream->printf(";Max feedrates in mm/sec, XYZ cartesian, ABC actuator:\nM203 X%1.5f Y%1.5f Z%1.5f A%1.5f B%1.5f C%1.5f\n",
                     axes[X_AXIS].max_speed, axes[Y_AXIS].max_speed, axes[Z_AXIS].max_speed,
-                    alpha_stepper_motor->max_rate, beta_stepper_motor->max_rate, gamma_stepper_motor->max_rate);
+                    alpha_stepper_motor->max_speed, beta_stepper_motor->max_speed, gamma_stepper_motor->max_speed);
                 gcode->mark_as_taken();
                 break;
 
@@ -525,10 +525,10 @@ void Robot::append_milestone( float target[], float rate_mm_s )
     // check per-actuator speed limits
     for (int actuator = 0; actuator <= 2; actuator++)
     {
-        float actuator_rate  = fabs(actuator_pos[actuator] - actuators[actuator]->last_milestone_mm) * rate_mm_s / millimeters_of_travel;
+        float actuator_rate  = fabs(actuator_pos[actuator] - actuators[actuator]->last_milestone) * rate_mm_s / millimeters_of_travel;
 
-        if (actuator_rate > actuators[actuator]->max_rate)
-            rate_mm_s *= (actuators[actuator]->max_rate / actuator_rate);
+        if (actuator_rate > actuators[actuator]->max_speed)
+            rate_mm_s *= (actuators[actuator]->max_speed / actuator_rate);
     }
 
     // Append the block to the planner