Library for handle a Stepper Motor Driver Borad
Diff: StepperMotor.h
- Revision:
- 1:b96435078d4d
- Parent:
- 0:ce88091ae9fb
diff -r ce88091ae9fb -r b96435078d4d StepperMotor.h --- a/StepperMotor.h Tue Nov 20 16:46:43 2012 +0000 +++ b/StepperMotor.h Sun Dec 16 16:39:40 2012 +0000 @@ -1,85 +1,259 @@ -/* mbed Stepper Library - * Copyright (c) 2012 Fabio Durigon - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#ifndef STEPPERMOTOR_H -#define STEPPERMOTOR_H - -#include "mbed.h" - -//!Library for handle Stepper Motor with a Power Module with Clock and Dir input - -// Rotation direction -#define CW 1 -#define CC 0 - -class StepperMotorDrv -{ - public: - /** Create a StepperMotorDrv Object - * - * @param PinDir Digital Output Pin to set Direction of motor - * @param PinClk Pwm Output Pin for Clock signal - */ - StepperMotorDrv(PinName PinDir, PinName PinClk); - - /** Destroys an instance of SRD02 - */ - ~StepperMotorDrv(); - - /** Set duty cicle of clock pulse - * - * @param PercentualValue: Value 0-100% - */ - float SetDutyCyclePerc(float PercentualValue); - float SetDutyCycleValue(float DecimalValue); - float SetRawSpeedHz(float SpeedHz); - void SetMaxSpeedHz(float MaxSpeedHz); - float SetSpeedPerc(float PercValue); - float IncSpeedHz(float StepValueHz); - float SpeedUp(void); - float DecSpeedHz(float StepValueHz); - float SpeedDown(void); - void Stop(void); - float GetSpeedHz(void); - float GetSpeedPerc(void); - float GetMaxSpeed(void); - float GetDuryCyclePerc(void); - float GetDuryCycleValue(void); - float GetStepHz(void); - void SetDir(bool RotationDir); - void SetDirCW(void); - void SetDirCC(void); - void RevertDir(void); - bool GetDir(void); - - private: - DigitalOut Dir; - PwmOut Clock; - - float MaxSpeed; - float Speed; - float Step; - float DutyCycle; - bool Direction; - -}; +/* mbed Stepper Motor Library + * Copyright (c) 2012 Fabio Durigon + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#ifndef STEPPERMOTOR_H +#define STEPPERMOTOR_H + +#include "mbed.h" + +//!Library for handle Stepper Motor with a Power Module with Clock and Dir input + +// Rotation direction +#define CW 1 +#define CC 0 + +/** Library to control a Stepper Motor Driver Board with Clock and Dir input*/ +class StepperMotorDrv +{ + public: + /** Create a StepperMotorDrv Object + * + * @param PinDir Digital Output Pin to set Direction of motor + * @param PinClk Pwm Output Pin for Clock signal + */ + StepperMotorDrv(PinName PinDir, PinName PinClk); + + /** Destroys an instance of StepperMotorDrv Object*/ + ~StepperMotorDrv(); + + /** Set duty cycle of clock pulse in Percentual + * + * @param PercentualValue Value 0-100% + */ + void SetDutyCyclePerc(float PercentualValue); + + /** Set duty cycle of clock pulse in decimal value + * + * @param DecimalValue 0.0 to 1.0 (0.5 = 50%) + */ + void SetDutyCycle(float DecimalValue); + + /** Set Motor Speed: frequency of clock pulse to apply on PinClk + * + * @param SpeedHz Frequency value in Hz + */ + void SetSpeed(float SpeedHz); + + /** Set MaxSpeed parameter used only by "Perc functions" + * to calculate raw frequency to apply. + * + * @param MaxSpeedHz Frequency in Hz + * + * + * Example: + * @code + * SetMaxSpeed(1000); // Max Speed is 1000 Hz + * SetSpeedPerc(50); // Set Speed to 50% that means 500 Hz + * @endcode + * + * + */ + void SetMaxSpeed(float MaxSpeedHz); + + /** Set Speed in Perc of MaxSpeed + * @param PercValue 0 to 100 (in %) + * + * + * Example: + * @code + * SetMaxSpeed(1000); // Max Speed is 1000 Hz + * SetSpeedPerc(100); // Set Speed to 100% that means 1000 Hz + * @endcode + * + * + */ + void SetSpeedPerc(float PercValue); + + /** Increment Speed by Hz value + * @param StepValueHz: amount of Hz to add to velocity + * + * @return new Speed in Hz + */ + float SpeedUp(float ValueHz); + + /** Decrement Speed by Hz value + * @param StepValueHz: amount of Hz to substract to velocity + * + * @return new Speed in Hz + */ + float SpeedDown(float ValueHz); + + /** Set Step value to apply in SpeedUp() SpeedDown() like functions + * @param StepValueHz: value in Hz + * + * + * Example: + * @code + * SetStep(10); // Set Step to 10 Hz + * ... + * SpeedUp(); // Increase Speed by 10 Hz + * ... + * @endcode + * + * + */ + void SetSpeedJump(float ValueHz); + + /** Increase velocity by a Step set with SetStep() function + * + * @return new Speed in Hz + * + */ + float SpeedUp(void); + + /** Decrease velocity by a Step set with SetStep() function + * + * @return new Speed in Hz + * + */ + float SpeedDown(void); + + /** Get Current Speed in Hz*/ + float GetSpeed(void); + + /** Get Current Speed in Percentual*/ + float GetSpeedPerc(void); + + /** Get MaxSpeed parameter set (in Hz)*/ + float GetMaxSpeed(void); + + /** Get duty cycle value in Percentual*/ + float GetDutyCyclePerc(void); + + /** Get duty cycle in decimal value (Ex: 0.5 means 50%)*/ + float GetDutyCycle(void); + + /** Get step value for SpedUp/Down (in Hz)*/ + float GetSpeedJump(void); + + /** Set Rotation Direction + * @param RotationDir 1 or CW for ClockWise rotation, 0 or CC for Counterclockwise rotation + * + * N.B. CW and CC depends from MotorBoard Specs + * + */ + void SetDir(bool RotationDir); + + /** Set Rotation Direction to CW*/ + void SetDirCW(void); + + /** Set Rotation Direction to CC*/ + void SetDirCC(void); + + /** Revert Direction*/ + void RevertDir(void); + + /** Get current Direction + * + * @return 1 for CW, o for CC + */ + bool GetDir(void); + + /** Run Motor*/ + void Run(void); + + /** Stop Motor*/ + void Stop(void); + + /** Run <nrSteps> step in <RotationDir> direction*/ + void RunStep(int nrSteps, bool RotationDir); + + /** Run <nrSteps> step in current direction*/ + void RunStep(int nrSteps); + + /** Run one step in current direction*/ + void RunStep(void); + + /** Run one step in clockwise direction*/ + void RunStepCW(void); + + /** Run one step in counterclockwise direction*/ + void RunStepCC(void); + + /** Reset current position to 0 + * currPos=0 + * currDegree=0 + */ + void SetZero(void); + + /** Set internal <currPos> to Pos + * be carefull if you use degrees funcions + * this don't affect the degrees variables + */ + void SetCurrPos(int Pos); + + /* Get current position in steps positive or negative relative to zero*/ + int GetCurrPos(void); + + /** Get current Period of duty cycle in seconds*/ + float GetPeriod(void); + + /** Set degrees of rotation by one step of motor + * Set it if You want to use Degrees functions + * + * + * Example: + * @code + * SetDegreePerStep(1.6); // 1.6 degrees for each motor step + * SetZero(); + * RunStep(10); // move 1.6 * 10 = 16 degrees + * printf("%f",GetCurrentDegree()); // prints "16" + * ... + * @endcode + * + * + */ + void SetDegreePerStep(float Degrees); + + /** Get current "Degrees per one step" value*/ + float GetDegreePerStep(void); + + /** Get current position in Degrees*/ + float GetCurrDegree(void); + + + private: + DigitalOut Dir; + PwmOut Clock; + float MaxSpeed; + float Speed; + float SpeedJump; + float DutyCycle; + int CurrPos; + float tPeriod; + float tUp; + float tDown; + float DegreesPerStep; + float CurrDegree; + +}; #endif \ No newline at end of file