速度からステップ数を取得する、台形駆動ライブラリ。

Revision:
2:ee75bb401e31
Parent:
1:15adfb7ee64c
diff -r 15adfb7ee64c -r ee75bb401e31 trapezoidalMotionCal.cpp
--- a/trapezoidalMotionCal.cpp	Thu Aug 03 12:42:12 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-
-#include "mbed.h"
-#include "trapezoidalMotionCal.h"
-
-
-trapezoidalMotionCal::trapezoidalMotionCal(double f_start, double f_stop, double f_max, double a_up, double a_down){
-    _f_start = f_start;
-    _f_stop  = f_stop;
-    _f_max   = f_max;
-    _a_up    = a_up;
-    _a_down  = a_down;
-    
-    shortMode = 0;
-    revMode = 0;
-    
-}
-
-void trapezoidalMotionCal::setTarg(int32_t targ){
-    
-    targSteps = targ;
-    
-    if(targSteps < 0){
-        revMode = 1;
-        targSteps *= -1;
-    }
-    
-    step_accel = (_f_max * _f_max - _f_start * _f_start) / (2 * _a_up);
-    step_const = (double)targSteps - step_accel - step_decel;
-    step_decel = (_f_stop * _f_stop - _f_max * _f_max) / (2 * _a_down);
-    
-    if (step_const <= 0) {
-        shortMode = 1;
-        step_accel = (2 * _a_down * targSteps + _f_start * _f_start - _f_stop * _f_stop) / (2 * (_a_down - _a_up));
-        step_decel = targSteps - step_accel;
-        step_const = 0;
-        f_reach = sqrt(2 * _a_up * step_accel + _f_start * _f_start);
-    }
-    
-}
-
-uint32_t trapezoidalMotionCal::calStepDelay(int32_t steps){
-    uint32_t period_us;
-    
-    if (steps < step_accel) {
-        period_us = 1000000 * pow(_f_start * _f_start + 2 * _a_up * steps, -0.5);
-    }
-    else if (steps < step_accel + step_const) {
-        period_us = 1000000 / _f_max;
-    }
-    else {
-        if (shortMode == 0) {
-            period_us = 1000000 * pow(_f_max * _f_max + 2 * _a_down * (steps - step_accel - step_const), -0.5);
-        }
-        else {
-            period_us = 1000000 * pow(f_reach * f_reach + 2 * _a_down * (steps - step_accel - step_const), -0.5);
-        }
-        
-    }
-    
-    return period_us;
-}
-