Library for handle a Stepper Motor Driver Borad
StepperMotor.h@1:b96435078d4d, 2012-12-16 (annotated)
- Committer:
- dury
- Date:
- Sun Dec 16 16:39:40 2012 +0000
- Revision:
- 1:b96435078d4d
- Parent:
- 0:ce88091ae9fb
Library for move Stepper Motor using DIR and CLK pin of a control board.;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dury | 1:b96435078d4d | 1 | /* mbed Stepper Motor Library |
dury | 1:b96435078d4d | 2 | * Copyright (c) 2012 Fabio Durigon |
dury | 1:b96435078d4d | 3 | * |
dury | 1:b96435078d4d | 4 | * Permission is hereby granted, free of charge, to any person obtaining a copy |
dury | 1:b96435078d4d | 5 | * of this software and associated documentation files (the "Software"), to deal |
dury | 1:b96435078d4d | 6 | * in the Software without restriction, including without limitation the rights |
dury | 1:b96435078d4d | 7 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
dury | 1:b96435078d4d | 8 | * copies of the Software, and to permit persons to whom the Software is |
dury | 1:b96435078d4d | 9 | * furnished to do so, subject to the following conditions: |
dury | 1:b96435078d4d | 10 | * |
dury | 1:b96435078d4d | 11 | * The above copyright notice and this permission notice shall be included in |
dury | 1:b96435078d4d | 12 | * all copies or substantial portions of the Software. |
dury | 1:b96435078d4d | 13 | * |
dury | 1:b96435078d4d | 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
dury | 1:b96435078d4d | 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
dury | 1:b96435078d4d | 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
dury | 1:b96435078d4d | 17 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
dury | 1:b96435078d4d | 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
dury | 1:b96435078d4d | 19 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
dury | 1:b96435078d4d | 20 | * THE SOFTWARE. |
dury | 1:b96435078d4d | 21 | */ |
dury | 1:b96435078d4d | 22 | |
dury | 1:b96435078d4d | 23 | #ifndef STEPPERMOTOR_H |
dury | 1:b96435078d4d | 24 | #define STEPPERMOTOR_H |
dury | 1:b96435078d4d | 25 | |
dury | 1:b96435078d4d | 26 | #include "mbed.h" |
dury | 1:b96435078d4d | 27 | |
dury | 1:b96435078d4d | 28 | //!Library for handle Stepper Motor with a Power Module with Clock and Dir input |
dury | 1:b96435078d4d | 29 | |
dury | 1:b96435078d4d | 30 | // Rotation direction |
dury | 1:b96435078d4d | 31 | #define CW 1 |
dury | 1:b96435078d4d | 32 | #define CC 0 |
dury | 1:b96435078d4d | 33 | |
dury | 1:b96435078d4d | 34 | /** Library to control a Stepper Motor Driver Board with Clock and Dir input*/ |
dury | 1:b96435078d4d | 35 | class StepperMotorDrv |
dury | 1:b96435078d4d | 36 | { |
dury | 1:b96435078d4d | 37 | public: |
dury | 1:b96435078d4d | 38 | /** Create a StepperMotorDrv Object |
dury | 1:b96435078d4d | 39 | * |
dury | 1:b96435078d4d | 40 | * @param PinDir Digital Output Pin to set Direction of motor |
dury | 1:b96435078d4d | 41 | * @param PinClk Pwm Output Pin for Clock signal |
dury | 1:b96435078d4d | 42 | */ |
dury | 1:b96435078d4d | 43 | StepperMotorDrv(PinName PinDir, PinName PinClk); |
dury | 1:b96435078d4d | 44 | |
dury | 1:b96435078d4d | 45 | /** Destroys an instance of StepperMotorDrv Object*/ |
dury | 1:b96435078d4d | 46 | ~StepperMotorDrv(); |
dury | 1:b96435078d4d | 47 | |
dury | 1:b96435078d4d | 48 | /** Set duty cycle of clock pulse in Percentual |
dury | 1:b96435078d4d | 49 | * |
dury | 1:b96435078d4d | 50 | * @param PercentualValue Value 0-100% |
dury | 1:b96435078d4d | 51 | */ |
dury | 1:b96435078d4d | 52 | void SetDutyCyclePerc(float PercentualValue); |
dury | 1:b96435078d4d | 53 | |
dury | 1:b96435078d4d | 54 | /** Set duty cycle of clock pulse in decimal value |
dury | 1:b96435078d4d | 55 | * |
dury | 1:b96435078d4d | 56 | * @param DecimalValue 0.0 to 1.0 (0.5 = 50%) |
dury | 1:b96435078d4d | 57 | */ |
dury | 1:b96435078d4d | 58 | void SetDutyCycle(float DecimalValue); |
dury | 1:b96435078d4d | 59 | |
dury | 1:b96435078d4d | 60 | /** Set Motor Speed: frequency of clock pulse to apply on PinClk |
dury | 1:b96435078d4d | 61 | * |
dury | 1:b96435078d4d | 62 | * @param SpeedHz Frequency value in Hz |
dury | 1:b96435078d4d | 63 | */ |
dury | 1:b96435078d4d | 64 | void SetSpeed(float SpeedHz); |
dury | 1:b96435078d4d | 65 | |
dury | 1:b96435078d4d | 66 | /** Set MaxSpeed parameter used only by "Perc functions" |
dury | 1:b96435078d4d | 67 | * to calculate raw frequency to apply. |
dury | 1:b96435078d4d | 68 | * |
dury | 1:b96435078d4d | 69 | * @param MaxSpeedHz Frequency in Hz |
dury | 1:b96435078d4d | 70 | * |
dury | 1:b96435078d4d | 71 | * |
dury | 1:b96435078d4d | 72 | * Example: |
dury | 1:b96435078d4d | 73 | * @code |
dury | 1:b96435078d4d | 74 | * SetMaxSpeed(1000); // Max Speed is 1000 Hz |
dury | 1:b96435078d4d | 75 | * SetSpeedPerc(50); // Set Speed to 50% that means 500 Hz |
dury | 1:b96435078d4d | 76 | * @endcode |
dury | 1:b96435078d4d | 77 | * |
dury | 1:b96435078d4d | 78 | * |
dury | 1:b96435078d4d | 79 | */ |
dury | 1:b96435078d4d | 80 | void SetMaxSpeed(float MaxSpeedHz); |
dury | 1:b96435078d4d | 81 | |
dury | 1:b96435078d4d | 82 | /** Set Speed in Perc of MaxSpeed |
dury | 1:b96435078d4d | 83 | * @param PercValue 0 to 100 (in %) |
dury | 1:b96435078d4d | 84 | * |
dury | 1:b96435078d4d | 85 | * |
dury | 1:b96435078d4d | 86 | * Example: |
dury | 1:b96435078d4d | 87 | * @code |
dury | 1:b96435078d4d | 88 | * SetMaxSpeed(1000); // Max Speed is 1000 Hz |
dury | 1:b96435078d4d | 89 | * SetSpeedPerc(100); // Set Speed to 100% that means 1000 Hz |
dury | 1:b96435078d4d | 90 | * @endcode |
dury | 1:b96435078d4d | 91 | * |
dury | 1:b96435078d4d | 92 | * |
dury | 1:b96435078d4d | 93 | */ |
dury | 1:b96435078d4d | 94 | void SetSpeedPerc(float PercValue); |
dury | 1:b96435078d4d | 95 | |
dury | 1:b96435078d4d | 96 | /** Increment Speed by Hz value |
dury | 1:b96435078d4d | 97 | * @param StepValueHz: amount of Hz to add to velocity |
dury | 1:b96435078d4d | 98 | * |
dury | 1:b96435078d4d | 99 | * @return new Speed in Hz |
dury | 1:b96435078d4d | 100 | */ |
dury | 1:b96435078d4d | 101 | float SpeedUp(float ValueHz); |
dury | 1:b96435078d4d | 102 | |
dury | 1:b96435078d4d | 103 | /** Decrement Speed by Hz value |
dury | 1:b96435078d4d | 104 | * @param StepValueHz: amount of Hz to substract to velocity |
dury | 1:b96435078d4d | 105 | * |
dury | 1:b96435078d4d | 106 | * @return new Speed in Hz |
dury | 1:b96435078d4d | 107 | */ |
dury | 1:b96435078d4d | 108 | float SpeedDown(float ValueHz); |
dury | 1:b96435078d4d | 109 | |
dury | 1:b96435078d4d | 110 | /** Set Step value to apply in SpeedUp() SpeedDown() like functions |
dury | 1:b96435078d4d | 111 | * @param StepValueHz: value in Hz |
dury | 1:b96435078d4d | 112 | * |
dury | 1:b96435078d4d | 113 | * |
dury | 1:b96435078d4d | 114 | * Example: |
dury | 1:b96435078d4d | 115 | * @code |
dury | 1:b96435078d4d | 116 | * SetStep(10); // Set Step to 10 Hz |
dury | 1:b96435078d4d | 117 | * ... |
dury | 1:b96435078d4d | 118 | * SpeedUp(); // Increase Speed by 10 Hz |
dury | 1:b96435078d4d | 119 | * ... |
dury | 1:b96435078d4d | 120 | * @endcode |
dury | 1:b96435078d4d | 121 | * |
dury | 1:b96435078d4d | 122 | * |
dury | 1:b96435078d4d | 123 | */ |
dury | 1:b96435078d4d | 124 | void SetSpeedJump(float ValueHz); |
dury | 1:b96435078d4d | 125 | |
dury | 1:b96435078d4d | 126 | /** Increase velocity by a Step set with SetStep() function |
dury | 1:b96435078d4d | 127 | * |
dury | 1:b96435078d4d | 128 | * @return new Speed in Hz |
dury | 1:b96435078d4d | 129 | * |
dury | 1:b96435078d4d | 130 | */ |
dury | 1:b96435078d4d | 131 | float SpeedUp(void); |
dury | 1:b96435078d4d | 132 | |
dury | 1:b96435078d4d | 133 | /** Decrease velocity by a Step set with SetStep() function |
dury | 1:b96435078d4d | 134 | * |
dury | 1:b96435078d4d | 135 | * @return new Speed in Hz |
dury | 1:b96435078d4d | 136 | * |
dury | 1:b96435078d4d | 137 | */ |
dury | 1:b96435078d4d | 138 | float SpeedDown(void); |
dury | 1:b96435078d4d | 139 | |
dury | 1:b96435078d4d | 140 | /** Get Current Speed in Hz*/ |
dury | 1:b96435078d4d | 141 | float GetSpeed(void); |
dury | 1:b96435078d4d | 142 | |
dury | 1:b96435078d4d | 143 | /** Get Current Speed in Percentual*/ |
dury | 1:b96435078d4d | 144 | float GetSpeedPerc(void); |
dury | 1:b96435078d4d | 145 | |
dury | 1:b96435078d4d | 146 | /** Get MaxSpeed parameter set (in Hz)*/ |
dury | 1:b96435078d4d | 147 | float GetMaxSpeed(void); |
dury | 1:b96435078d4d | 148 | |
dury | 1:b96435078d4d | 149 | /** Get duty cycle value in Percentual*/ |
dury | 1:b96435078d4d | 150 | float GetDutyCyclePerc(void); |
dury | 1:b96435078d4d | 151 | |
dury | 1:b96435078d4d | 152 | /** Get duty cycle in decimal value (Ex: 0.5 means 50%)*/ |
dury | 1:b96435078d4d | 153 | float GetDutyCycle(void); |
dury | 1:b96435078d4d | 154 | |
dury | 1:b96435078d4d | 155 | /** Get step value for SpedUp/Down (in Hz)*/ |
dury | 1:b96435078d4d | 156 | float GetSpeedJump(void); |
dury | 1:b96435078d4d | 157 | |
dury | 1:b96435078d4d | 158 | /** Set Rotation Direction |
dury | 1:b96435078d4d | 159 | * @param RotationDir 1 or CW for ClockWise rotation, 0 or CC for Counterclockwise rotation |
dury | 1:b96435078d4d | 160 | * |
dury | 1:b96435078d4d | 161 | * N.B. CW and CC depends from MotorBoard Specs |
dury | 1:b96435078d4d | 162 | * |
dury | 1:b96435078d4d | 163 | */ |
dury | 1:b96435078d4d | 164 | void SetDir(bool RotationDir); |
dury | 1:b96435078d4d | 165 | |
dury | 1:b96435078d4d | 166 | /** Set Rotation Direction to CW*/ |
dury | 1:b96435078d4d | 167 | void SetDirCW(void); |
dury | 1:b96435078d4d | 168 | |
dury | 1:b96435078d4d | 169 | /** Set Rotation Direction to CC*/ |
dury | 1:b96435078d4d | 170 | void SetDirCC(void); |
dury | 1:b96435078d4d | 171 | |
dury | 1:b96435078d4d | 172 | /** Revert Direction*/ |
dury | 1:b96435078d4d | 173 | void RevertDir(void); |
dury | 1:b96435078d4d | 174 | |
dury | 1:b96435078d4d | 175 | /** Get current Direction |
dury | 1:b96435078d4d | 176 | * |
dury | 1:b96435078d4d | 177 | * @return 1 for CW, o for CC |
dury | 1:b96435078d4d | 178 | */ |
dury | 1:b96435078d4d | 179 | bool GetDir(void); |
dury | 1:b96435078d4d | 180 | |
dury | 1:b96435078d4d | 181 | /** Run Motor*/ |
dury | 1:b96435078d4d | 182 | void Run(void); |
dury | 1:b96435078d4d | 183 | |
dury | 1:b96435078d4d | 184 | /** Stop Motor*/ |
dury | 1:b96435078d4d | 185 | void Stop(void); |
dury | 1:b96435078d4d | 186 | |
dury | 1:b96435078d4d | 187 | /** Run <nrSteps> step in <RotationDir> direction*/ |
dury | 1:b96435078d4d | 188 | void RunStep(int nrSteps, bool RotationDir); |
dury | 1:b96435078d4d | 189 | |
dury | 1:b96435078d4d | 190 | /** Run <nrSteps> step in current direction*/ |
dury | 1:b96435078d4d | 191 | void RunStep(int nrSteps); |
dury | 1:b96435078d4d | 192 | |
dury | 1:b96435078d4d | 193 | /** Run one step in current direction*/ |
dury | 1:b96435078d4d | 194 | void RunStep(void); |
dury | 1:b96435078d4d | 195 | |
dury | 1:b96435078d4d | 196 | /** Run one step in clockwise direction*/ |
dury | 1:b96435078d4d | 197 | void RunStepCW(void); |
dury | 1:b96435078d4d | 198 | |
dury | 1:b96435078d4d | 199 | /** Run one step in counterclockwise direction*/ |
dury | 1:b96435078d4d | 200 | void RunStepCC(void); |
dury | 1:b96435078d4d | 201 | |
dury | 1:b96435078d4d | 202 | /** Reset current position to 0 |
dury | 1:b96435078d4d | 203 | * currPos=0 |
dury | 1:b96435078d4d | 204 | * currDegree=0 |
dury | 1:b96435078d4d | 205 | */ |
dury | 1:b96435078d4d | 206 | void SetZero(void); |
dury | 1:b96435078d4d | 207 | |
dury | 1:b96435078d4d | 208 | /** Set internal <currPos> to Pos |
dury | 1:b96435078d4d | 209 | * be carefull if you use degrees funcions |
dury | 1:b96435078d4d | 210 | * this don't affect the degrees variables |
dury | 1:b96435078d4d | 211 | */ |
dury | 1:b96435078d4d | 212 | void SetCurrPos(int Pos); |
dury | 1:b96435078d4d | 213 | |
dury | 1:b96435078d4d | 214 | /* Get current position in steps positive or negative relative to zero*/ |
dury | 1:b96435078d4d | 215 | int GetCurrPos(void); |
dury | 1:b96435078d4d | 216 | |
dury | 1:b96435078d4d | 217 | /** Get current Period of duty cycle in seconds*/ |
dury | 1:b96435078d4d | 218 | float GetPeriod(void); |
dury | 1:b96435078d4d | 219 | |
dury | 1:b96435078d4d | 220 | /** Set degrees of rotation by one step of motor |
dury | 1:b96435078d4d | 221 | * Set it if You want to use Degrees functions |
dury | 1:b96435078d4d | 222 | * |
dury | 1:b96435078d4d | 223 | * |
dury | 1:b96435078d4d | 224 | * Example: |
dury | 1:b96435078d4d | 225 | * @code |
dury | 1:b96435078d4d | 226 | * SetDegreePerStep(1.6); // 1.6 degrees for each motor step |
dury | 1:b96435078d4d | 227 | * SetZero(); |
dury | 1:b96435078d4d | 228 | * RunStep(10); // move 1.6 * 10 = 16 degrees |
dury | 1:b96435078d4d | 229 | * printf("%f",GetCurrentDegree()); // prints "16" |
dury | 1:b96435078d4d | 230 | * ... |
dury | 1:b96435078d4d | 231 | * @endcode |
dury | 1:b96435078d4d | 232 | * |
dury | 1:b96435078d4d | 233 | * |
dury | 1:b96435078d4d | 234 | */ |
dury | 1:b96435078d4d | 235 | void SetDegreePerStep(float Degrees); |
dury | 1:b96435078d4d | 236 | |
dury | 1:b96435078d4d | 237 | /** Get current "Degrees per one step" value*/ |
dury | 1:b96435078d4d | 238 | float GetDegreePerStep(void); |
dury | 1:b96435078d4d | 239 | |
dury | 1:b96435078d4d | 240 | /** Get current position in Degrees*/ |
dury | 1:b96435078d4d | 241 | float GetCurrDegree(void); |
dury | 1:b96435078d4d | 242 | |
dury | 1:b96435078d4d | 243 | |
dury | 1:b96435078d4d | 244 | private: |
dury | 1:b96435078d4d | 245 | DigitalOut Dir; |
dury | 1:b96435078d4d | 246 | PwmOut Clock; |
dury | 1:b96435078d4d | 247 | float MaxSpeed; |
dury | 1:b96435078d4d | 248 | float Speed; |
dury | 1:b96435078d4d | 249 | float SpeedJump; |
dury | 1:b96435078d4d | 250 | float DutyCycle; |
dury | 1:b96435078d4d | 251 | int CurrPos; |
dury | 1:b96435078d4d | 252 | float tPeriod; |
dury | 1:b96435078d4d | 253 | float tUp; |
dury | 1:b96435078d4d | 254 | float tDown; |
dury | 1:b96435078d4d | 255 | float DegreesPerStep; |
dury | 1:b96435078d4d | 256 | float CurrDegree; |
dury | 1:b96435078d4d | 257 | |
dury | 1:b96435078d4d | 258 | }; |
dury | 0:ce88091ae9fb | 259 | #endif |