Library for 4 Phase Step Motor like 28BYJ-48

Dependents:   Stepper_4 LV9_GRUPA2_TIM008_ZADATAK2 LV9_PAI_Grupa2_Tim003-Zadatak1 LV9_PAI_Grupa2-Tim003 ... more

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers sMotor.cpp Source File

sMotor.cpp

00001 /*
00002 ############################################
00003 ##           sMotor v0.1 Library          ##
00004 ##          created by Samuel Matildes    ##
00005 ############################################
00006         ---- sam.naeec@gmail.com -----
00007 This library was made for 4-Phase Stepper Motors
00008 I don't take any resposability for the damage caused to your equipment.
00009 
00010 */
00011 
00012 #include "sMotor.h"
00013 
00014 #include "mbed.h"
00015 
00016 int motorSpeed; // Steper speed
00017 
00018 sMotor::sMotor(PinName A0, PinName A1, PinName A2, PinName A3) : _A0(A0), _A1(A1), _A2(A2), _A3(A3) { // Defenition of motor pins
00019     _A0=0;
00020     _A1=0;
00021     _A2=0;
00022     _A3=0;
00023 }
00024 
00025 
00026 void sMotor::anticlockwise() { // rotate the motor 1 step anticlockwise 
00027     for (int i = 0; i < 8; i++) {
00028 
00029         switch (i) { // activate the ports A0, A2, A3, A3 in a binary sequence for steps
00030             case 0: {
00031                 _A0=0;
00032                 _A1=0;
00033                 _A2=0;
00034                 _A3=1;
00035             }
00036             break;
00037             case 1: {
00038                 _A0=0;
00039                 _A1=0;
00040                 _A2=1;
00041                 _A3=1;
00042             }
00043             break;
00044             case 2: {
00045                 _A0=0;
00046                 _A1=0;
00047                 _A2=1;
00048                 _A3=0;
00049             }
00050             break;
00051             case 3: {
00052                 _A0=0;
00053                 _A1=1;
00054                 _A2=1;
00055                 _A3=0;
00056             }
00057             break;
00058             case 4: {
00059                 _A0=0;
00060                 _A1=1;
00061                 _A2=0;
00062                 _A3=0;
00063             }
00064             break;
00065             case 5: {
00066                 _A0=1;
00067                 _A1=1;
00068                 _A2=0;
00069                 _A3=0;
00070             }
00071             break;
00072             case 6: {
00073                 _A0=1;
00074                 _A1=0;
00075                 _A2=0;
00076                 _A3=0;
00077             }
00078             break;
00079             case 7: {
00080                 _A0=1;
00081                 _A1=0;
00082                 _A2=0;
00083                 _A3=1;
00084             }
00085             break;
00086         }
00087 
00088 
00089         wait_us(motorSpeed); // wait time defines the speed 
00090     }
00091 }
00092 
00093 void sMotor::clockwise() { // rotate the motor 1 step clockwise 
00094     for (int i = 7; i >= 0; i--) {
00095 
00096         switch (i) {
00097             case 0: {
00098                 _A0=0;
00099                 _A1=0;
00100                 _A2=0;
00101                 _A3=1;
00102             }
00103             break;
00104             case 1: {
00105                 _A0=0;
00106                 _A1=0;
00107                 _A2=1;
00108                 _A3=1;
00109             }
00110             break;
00111             case 2: {
00112                 _A0=0;
00113                 _A1=0;
00114                 _A2=1;
00115                 _A3=0;
00116             }
00117             break;
00118             case 3: {
00119                 _A0=0;
00120                 _A1=1;
00121                 _A2=1;
00122                 _A3=0;
00123             }
00124             break;
00125             case 4: {
00126                 _A0=0;
00127                 _A1=1;
00128                 _A2=0;
00129                 _A3=0;
00130             }
00131             break;
00132             case 5: {
00133                 _A0=1;
00134                 _A1=1;
00135                 _A2=0;
00136                 _A3=0;
00137             }
00138             break;
00139             case 6: {
00140                 _A0=1;
00141                 _A1=0;
00142                 _A2=0;
00143                 _A3=0;
00144             }
00145             break;
00146             case 7: {
00147                 _A0=1;
00148                 _A1=0;
00149                 _A2=0;
00150                 _A3=1;
00151             }
00152             break;
00153         }
00154 
00155 
00156         wait_us(motorSpeed); // wait time defines the speed 
00157     }
00158 }
00159 void sMotor::step(int num_steps, int direction, int speed) {// steper function: number of steps, direction (0- right, 1- left), speed (default 1200)
00160     int count=0; // initalize step count
00161     motorSpeed=speed; //set motor speed
00162     if (direction==0) // turn clockwise
00163         do {
00164             clockwise();
00165             count++;
00166         } while (count<num_steps); // turn number of steps applied 
00167     else if (direction==1)// turn anticlockwise
00168         do {
00169             anticlockwise();
00170             count++;
00171         } while (count<num_steps);// turn number of steps applied 
00172 
00173 }