Credit for the author

Dependents:   Stepper_4

Fork of sMotor by Nuno Sarmento

Committer:
zchen311
Date:
Sat Sep 20 14:48:34 2014 +0000
Revision:
1:cf4869aef47f
Parent:
0:4b3b9e047ce3
modify

Who changed what in which revision?

UserRevisionLine numberNew contents of line
XtaticO 0:4b3b9e047ce3 1 /*
XtaticO 0:4b3b9e047ce3 2 ############################################
XtaticO 0:4b3b9e047ce3 3 ## sMotor v0.1 Library ##
XtaticO 0:4b3b9e047ce3 4 ## created by Samuel Matildes ##
XtaticO 0:4b3b9e047ce3 5 ############################################
XtaticO 0:4b3b9e047ce3 6 ---- sam.naeec@gmail.com -----
XtaticO 0:4b3b9e047ce3 7 This library was made for 4-Phase Stepper Motors
XtaticO 0:4b3b9e047ce3 8 I don't take any resposability for the damage caused to your equipment.
XtaticO 0:4b3b9e047ce3 9
XtaticO 0:4b3b9e047ce3 10 */
XtaticO 0:4b3b9e047ce3 11
XtaticO 0:4b3b9e047ce3 12 #include "sMotor.h"
XtaticO 0:4b3b9e047ce3 13
XtaticO 0:4b3b9e047ce3 14 #include "mbed.h"
XtaticO 0:4b3b9e047ce3 15
XtaticO 0:4b3b9e047ce3 16 int motorSpeed; // Steper speed
XtaticO 0:4b3b9e047ce3 17
XtaticO 0:4b3b9e047ce3 18 sMotor::sMotor(PinName A0, PinName A1, PinName A2, PinName A3) : _A0(A0), _A1(A1), _A2(A2), _A3(A3) { // Defenition of motor pins
XtaticO 0:4b3b9e047ce3 19 _A0=0;
XtaticO 0:4b3b9e047ce3 20 _A1=0;
XtaticO 0:4b3b9e047ce3 21 _A2=0;
XtaticO 0:4b3b9e047ce3 22 _A3=0;
XtaticO 0:4b3b9e047ce3 23 }
XtaticO 0:4b3b9e047ce3 24
XtaticO 0:4b3b9e047ce3 25
zchen311 1:cf4869aef47f 26 void sMotor::anticlockwise(int current_step) { // rotate the motor 1 step anticlockwise
zchen311 1:cf4869aef47f 27
zchen311 1:cf4869aef47f 28 //for (int i = 0; i < 8; i++) {
XtaticO 0:4b3b9e047ce3 29
zchen311 1:cf4869aef47f 30 switch (current_step) { // activate the ports A0, A2, A3, A3 in a binary sequence for steps
zchen311 1:cf4869aef47f 31 case 0: {
zchen311 1:cf4869aef47f 32 _A0=0;
zchen311 1:cf4869aef47f 33 _A1=0;
zchen311 1:cf4869aef47f 34 _A2=0;
zchen311 1:cf4869aef47f 35 _A3=1;
zchen311 1:cf4869aef47f 36 }
zchen311 1:cf4869aef47f 37 //break;
zchen311 1:cf4869aef47f 38 case 1: {
zchen311 1:cf4869aef47f 39 _A0=0;
zchen311 1:cf4869aef47f 40 _A1=0;
zchen311 1:cf4869aef47f 41 _A2=1;
zchen311 1:cf4869aef47f 42 _A3=1;
zchen311 1:cf4869aef47f 43 }
zchen311 1:cf4869aef47f 44 //break;
zchen311 1:cf4869aef47f 45 case 2: {
zchen311 1:cf4869aef47f 46 _A0=0;
zchen311 1:cf4869aef47f 47 _A1=0;
zchen311 1:cf4869aef47f 48 _A2=1;
zchen311 1:cf4869aef47f 49 _A3=0;
zchen311 1:cf4869aef47f 50 }
zchen311 1:cf4869aef47f 51 //break;
zchen311 1:cf4869aef47f 52 case 3: {
zchen311 1:cf4869aef47f 53 _A0=0;
zchen311 1:cf4869aef47f 54 _A1=1;
zchen311 1:cf4869aef47f 55 _A2=1;
zchen311 1:cf4869aef47f 56 _A3=0;
zchen311 1:cf4869aef47f 57 }
zchen311 1:cf4869aef47f 58 //break;
zchen311 1:cf4869aef47f 59 case 4: {
zchen311 1:cf4869aef47f 60 _A0=0;
zchen311 1:cf4869aef47f 61 _A1=1;
zchen311 1:cf4869aef47f 62 _A2=0;
zchen311 1:cf4869aef47f 63 _A3=0;
zchen311 1:cf4869aef47f 64 }
zchen311 1:cf4869aef47f 65 //break;
zchen311 1:cf4869aef47f 66 case 5: {
zchen311 1:cf4869aef47f 67 _A0=1;
zchen311 1:cf4869aef47f 68 _A1=1;
zchen311 1:cf4869aef47f 69 _A2=0;
zchen311 1:cf4869aef47f 70 _A3=0;
zchen311 1:cf4869aef47f 71 }
zchen311 1:cf4869aef47f 72 //break;
zchen311 1:cf4869aef47f 73 case 6: {
zchen311 1:cf4869aef47f 74 _A0=1;
zchen311 1:cf4869aef47f 75 _A1=0;
zchen311 1:cf4869aef47f 76 _A2=0;
zchen311 1:cf4869aef47f 77 _A3=0;
zchen311 1:cf4869aef47f 78 }
zchen311 1:cf4869aef47f 79 //break;
zchen311 1:cf4869aef47f 80 case 7: {
zchen311 1:cf4869aef47f 81 _A0=1;
zchen311 1:cf4869aef47f 82 _A1=0;
zchen311 1:cf4869aef47f 83 _A2=0;
zchen311 1:cf4869aef47f 84 _A3=1;
zchen311 1:cf4869aef47f 85 }
zchen311 1:cf4869aef47f 86 // break;
zchen311 1:cf4869aef47f 87 //}
zchen311 1:cf4869aef47f 88
zchen311 1:cf4869aef47f 89
zchen311 1:cf4869aef47f 90 wait_us(motorSpeed); // wait time defines the speed
zchen311 1:cf4869aef47f 91 }
zchen311 1:cf4869aef47f 92 }
zchen311 1:cf4869aef47f 93
zchen311 1:cf4869aef47f 94 void sMotor::clockwise(int current_step) { // rotate the motor 1 step clockwise
zchen311 1:cf4869aef47f 95 //for (int i = 7; i >= 0; i--) {
zchen311 1:cf4869aef47f 96
zchen311 1:cf4869aef47f 97 switch (current_step) {
XtaticO 0:4b3b9e047ce3 98 case 0: {
XtaticO 0:4b3b9e047ce3 99 _A0=0;
XtaticO 0:4b3b9e047ce3 100 _A1=0;
XtaticO 0:4b3b9e047ce3 101 _A2=0;
XtaticO 0:4b3b9e047ce3 102 _A3=1;
XtaticO 0:4b3b9e047ce3 103 }
XtaticO 0:4b3b9e047ce3 104 break;
XtaticO 0:4b3b9e047ce3 105 case 1: {
XtaticO 0:4b3b9e047ce3 106 _A0=0;
XtaticO 0:4b3b9e047ce3 107 _A1=0;
XtaticO 0:4b3b9e047ce3 108 _A2=1;
XtaticO 0:4b3b9e047ce3 109 _A3=1;
XtaticO 0:4b3b9e047ce3 110 }
XtaticO 0:4b3b9e047ce3 111 break;
XtaticO 0:4b3b9e047ce3 112 case 2: {
XtaticO 0:4b3b9e047ce3 113 _A0=0;
XtaticO 0:4b3b9e047ce3 114 _A1=0;
XtaticO 0:4b3b9e047ce3 115 _A2=1;
XtaticO 0:4b3b9e047ce3 116 _A3=0;
XtaticO 0:4b3b9e047ce3 117 }
XtaticO 0:4b3b9e047ce3 118 break;
XtaticO 0:4b3b9e047ce3 119 case 3: {
XtaticO 0:4b3b9e047ce3 120 _A0=0;
XtaticO 0:4b3b9e047ce3 121 _A1=1;
XtaticO 0:4b3b9e047ce3 122 _A2=1;
XtaticO 0:4b3b9e047ce3 123 _A3=0;
XtaticO 0:4b3b9e047ce3 124 }
XtaticO 0:4b3b9e047ce3 125 break;
XtaticO 0:4b3b9e047ce3 126 case 4: {
XtaticO 0:4b3b9e047ce3 127 _A0=0;
XtaticO 0:4b3b9e047ce3 128 _A1=1;
XtaticO 0:4b3b9e047ce3 129 _A2=0;
XtaticO 0:4b3b9e047ce3 130 _A3=0;
XtaticO 0:4b3b9e047ce3 131 }
XtaticO 0:4b3b9e047ce3 132 break;
XtaticO 0:4b3b9e047ce3 133 case 5: {
XtaticO 0:4b3b9e047ce3 134 _A0=1;
XtaticO 0:4b3b9e047ce3 135 _A1=1;
XtaticO 0:4b3b9e047ce3 136 _A2=0;
XtaticO 0:4b3b9e047ce3 137 _A3=0;
XtaticO 0:4b3b9e047ce3 138 }
XtaticO 0:4b3b9e047ce3 139 break;
XtaticO 0:4b3b9e047ce3 140 case 6: {
XtaticO 0:4b3b9e047ce3 141 _A0=1;
XtaticO 0:4b3b9e047ce3 142 _A1=0;
XtaticO 0:4b3b9e047ce3 143 _A2=0;
XtaticO 0:4b3b9e047ce3 144 _A3=0;
XtaticO 0:4b3b9e047ce3 145 }
XtaticO 0:4b3b9e047ce3 146 break;
XtaticO 0:4b3b9e047ce3 147 case 7: {
XtaticO 0:4b3b9e047ce3 148 _A0=1;
XtaticO 0:4b3b9e047ce3 149 _A1=0;
XtaticO 0:4b3b9e047ce3 150 _A2=0;
XtaticO 0:4b3b9e047ce3 151 _A3=1;
XtaticO 0:4b3b9e047ce3 152 }
XtaticO 0:4b3b9e047ce3 153 break;
XtaticO 0:4b3b9e047ce3 154 }
XtaticO 0:4b3b9e047ce3 155
XtaticO 0:4b3b9e047ce3 156
XtaticO 0:4b3b9e047ce3 157 wait_us(motorSpeed); // wait time defines the speed
XtaticO 0:4b3b9e047ce3 158 }
zchen311 1:cf4869aef47f 159 //}
XtaticO 0:4b3b9e047ce3 160 void sMotor::step(int num_steps, int direction, int speed) {// steper function: number of steps, direction (0- right, 1- left), speed (default 1200)
XtaticO 0:4b3b9e047ce3 161 int count=0; // initalize step count
XtaticO 0:4b3b9e047ce3 162 motorSpeed=speed; //set motor speed
XtaticO 0:4b3b9e047ce3 163 if (direction==0) // turn clockwise
XtaticO 0:4b3b9e047ce3 164 do {
XtaticO 0:4b3b9e047ce3 165 clockwise();
XtaticO 0:4b3b9e047ce3 166 count++;
XtaticO 0:4b3b9e047ce3 167 } while (count<num_steps); // turn number of steps applied
XtaticO 0:4b3b9e047ce3 168 else if (direction==1)// turn anticlockwise
XtaticO 0:4b3b9e047ce3 169 do {
XtaticO 0:4b3b9e047ce3 170 anticlockwise();
XtaticO 0:4b3b9e047ce3 171 count++;
XtaticO 0:4b3b9e047ce3 172 } while (count<num_steps);// turn number of steps applied
XtaticO 0:4b3b9e047ce3 173
zchen311 1:cf4869aef47f 174 }
zchen311 1:cf4869aef47f 175
zchen311 1:cf4869aef47f 176
zchen311 1:cf4869aef47f 177 void sMotor::anticlockwise(int current_step) { // rotate the motor 1 step anticlockwise
zchen311 1:cf4869aef47f 178
zchen311 1:cf4869aef47f 179 //for (int i = 0; i < 8; i++) {
zchen311 1:cf4869aef47f 180
zchen311 1:cf4869aef47f 181 switch (current_step) { // activate the ports A0, A2, A3, A3 in a binary sequence for steps
zchen311 1:cf4869aef47f 182 case 0: {
zchen311 1:cf4869aef47f 183 _A0=0;
zchen311 1:cf4869aef47f 184 _A1=0;
zchen311 1:cf4869aef47f 185 _A2=0;
zchen311 1:cf4869aef47f 186 _A3=1;
zchen311 1:cf4869aef47f 187 }
zchen311 1:cf4869aef47f 188 //break;
zchen311 1:cf4869aef47f 189 case 1: {
zchen311 1:cf4869aef47f 190 _A0=0;
zchen311 1:cf4869aef47f 191 _A1=0;
zchen311 1:cf4869aef47f 192 _A2=1;
zchen311 1:cf4869aef47f 193 _A3=1;
zchen311 1:cf4869aef47f 194 }
zchen311 1:cf4869aef47f 195 //break;
zchen311 1:cf4869aef47f 196 case 2: {
zchen311 1:cf4869aef47f 197 _A0=0;
zchen311 1:cf4869aef47f 198 _A1=0;
zchen311 1:cf4869aef47f 199 _A2=1;
zchen311 1:cf4869aef47f 200 _A3=0;
zchen311 1:cf4869aef47f 201 }
zchen311 1:cf4869aef47f 202 //break;
zchen311 1:cf4869aef47f 203 case 3: {
zchen311 1:cf4869aef47f 204 _A0=0;
zchen311 1:cf4869aef47f 205 _A1=1;
zchen311 1:cf4869aef47f 206 _A2=1;
zchen311 1:cf4869aef47f 207 _A3=0;
zchen311 1:cf4869aef47f 208 }
zchen311 1:cf4869aef47f 209 //break;
zchen311 1:cf4869aef47f 210 case 4: {
zchen311 1:cf4869aef47f 211 _A0=0;
zchen311 1:cf4869aef47f 212 _A1=1;
zchen311 1:cf4869aef47f 213 _A2=0;
zchen311 1:cf4869aef47f 214 _A3=0;
zchen311 1:cf4869aef47f 215 }
zchen311 1:cf4869aef47f 216 //break;
zchen311 1:cf4869aef47f 217 case 5: {
zchen311 1:cf4869aef47f 218 _A0=1;
zchen311 1:cf4869aef47f 219 _A1=1;
zchen311 1:cf4869aef47f 220 _A2=0;
zchen311 1:cf4869aef47f 221 _A3=0;
zchen311 1:cf4869aef47f 222 }
zchen311 1:cf4869aef47f 223 //break;
zchen311 1:cf4869aef47f 224 case 6: {
zchen311 1:cf4869aef47f 225 _A0=1;
zchen311 1:cf4869aef47f 226 _A1=0;
zchen311 1:cf4869aef47f 227 _A2=0;
zchen311 1:cf4869aef47f 228 _A3=0;
zchen311 1:cf4869aef47f 229 }
zchen311 1:cf4869aef47f 230 //break;
zchen311 1:cf4869aef47f 231 case 7: {
zchen311 1:cf4869aef47f 232 _A0=1;
zchen311 1:cf4869aef47f 233 _A1=0;
zchen311 1:cf4869aef47f 234 _A2=0;
zchen311 1:cf4869aef47f 235 _A3=1;
zchen311 1:cf4869aef47f 236 }
zchen311 1:cf4869aef47f 237 // break;
zchen311 1:cf4869aef47f 238 //}
zchen311 1:cf4869aef47f 239
zchen311 1:cf4869aef47f 240
zchen311 1:cf4869aef47f 241 wait_us(motorSpeed); // wait time defines the speed
zchen311 1:cf4869aef47f 242 }
zchen311 1:cf4869aef47f 243 }
zchen311 1:cf4869aef47f 244
zchen311 1:cf4869aef47f 245 void sMotor::stop(int current_step) { // rotate the motor 1 step clockwise
zchen311 1:cf4869aef47f 246 //for (int i = 7; i >= 0; i--) {
zchen311 1:cf4869aef47f 247
zchen311 1:cf4869aef47f 248 switch (current_step) {
zchen311 1:cf4869aef47f 249 case 1: {
zchen311 1:cf4869aef47f 250 _A0=0;
zchen311 1:cf4869aef47f 251 _A1=0;
zchen311 1:cf4869aef47f 252 _A2=0;
zchen311 1:cf4869aef47f 253 _A3=1;
zchen311 1:cf4869aef47f 254 }
zchen311 1:cf4869aef47f 255 break;
zchen311 1:cf4869aef47f 256 case 2: {
zchen311 1:cf4869aef47f 257 _A0=0;
zchen311 1:cf4869aef47f 258 _A1=0;
zchen311 1:cf4869aef47f 259 _A2=1;
zchen311 1:cf4869aef47f 260 _A3=1;
zchen311 1:cf4869aef47f 261 }
zchen311 1:cf4869aef47f 262 break;
zchen311 1:cf4869aef47f 263 case 3: {
zchen311 1:cf4869aef47f 264 _A0=0;
zchen311 1:cf4869aef47f 265 _A1=0;
zchen311 1:cf4869aef47f 266 _A2=1;
zchen311 1:cf4869aef47f 267 _A3=0;
zchen311 1:cf4869aef47f 268 }
zchen311 1:cf4869aef47f 269 break;
zchen311 1:cf4869aef47f 270 case 4: {
zchen311 1:cf4869aef47f 271 _A0=0;
zchen311 1:cf4869aef47f 272 _A1=1;
zchen311 1:cf4869aef47f 273 _A2=1;
zchen311 1:cf4869aef47f 274 _A3=0;
zchen311 1:cf4869aef47f 275 }
zchen311 1:cf4869aef47f 276 break;
zchen311 1:cf4869aef47f 277 case 5: {
zchen311 1:cf4869aef47f 278 _A0=0;
zchen311 1:cf4869aef47f 279 _A1=1;
zchen311 1:cf4869aef47f 280 _A2=0;
zchen311 1:cf4869aef47f 281 _A3=0;
zchen311 1:cf4869aef47f 282 }
zchen311 1:cf4869aef47f 283 break;
zchen311 1:cf4869aef47f 284 case 6: {
zchen311 1:cf4869aef47f 285 _A0=1;
zchen311 1:cf4869aef47f 286 _A1=1;
zchen311 1:cf4869aef47f 287 _A2=0;
zchen311 1:cf4869aef47f 288 _A3=0;
zchen311 1:cf4869aef47f 289 }
zchen311 1:cf4869aef47f 290 break;
zchen311 1:cf4869aef47f 291 case 7: {
zchen311 1:cf4869aef47f 292 _A0=1;
zchen311 1:cf4869aef47f 293 _A1=0;
zchen311 1:cf4869aef47f 294 _A2=0;
zchen311 1:cf4869aef47f 295 _A3=0;
zchen311 1:cf4869aef47f 296 }
zchen311 1:cf4869aef47f 297 break;
zchen311 1:cf4869aef47f 298 case 0: {
zchen311 1:cf4869aef47f 299 _A0=1;
zchen311 1:cf4869aef47f 300 _A1=0;
zchen311 1:cf4869aef47f 301 _A2=0;
zchen311 1:cf4869aef47f 302 _A3=1;
zchen311 1:cf4869aef47f 303 }
zchen311 1:cf4869aef47f 304 break;
zchen311 1:cf4869aef47f 305 }
zchen311 1:cf4869aef47f 306
zchen311 1:cf4869aef47f 307
zchen311 1:cf4869aef47f 308 wait_us(motorSpeed); // wait time defines the speed
zchen311 1:cf4869aef47f 309 }
zchen311 1:cf4869aef47f 310
zchen311 1:cf4869aef47f 311 void sMotor::delay(int delay_time){
zchen311 1:cf4869aef47f 312 wait_us(delay_time);
XtaticO 0:4b3b9e047ce3 313 }