Akito / SPM_simple

Dependents:   kisoken_PenPlotter

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers SPM.cpp Source File

SPM.cpp

00001 
00002 #include "mbed.h"
00003 #include "SPM.h"
00004 
00005 stepMotor::stepMotor(PinName pinName_A , PinName pinName_nA , PinName pinName_B , PinName pinName_nB)
00006     : pin_A(pinName_A) , pin_nA(pinName_nA) , pin_B(pinName_B) , pin_nB(pinName_nB) {
00007     
00008     pin_A = pin_nA = pin_B = pin_nB = 0;
00009     state=0;
00010     
00011 }
00012 
00013 stepMotor::~stepMotor(){}
00014 
00015 void stepMotor::oneStep(bool direction){
00016     
00017 #ifdef __P1_EXCITATION__
00018     switch(state){
00019         case 0 : pin_A  = 1; pin_B  = pin_nA = pin_nB = 0; break;
00020         case 1 : pin_B  = 1; pin_nA = pin_nB = pin_A  = 0; break;
00021         case 2 : pin_nA = 1; pin_nB = pin_A  = pin_B  = 0; break;
00022         case 3 : pin_nB = 1; pin_A  = pin_B  = pin_nA = 0; break;
00023     }
00024     if(direction){
00025         if(state<3)state++;
00026         else state=0;
00027     }else{
00028         if(state>0)state--;
00029         else state=3;
00030     }
00031 #elif defined __P12_EXCITATION__
00032     switch(state){
00033         case 0 : pin_A           = 1; pin_B  = pin_nA = pin_nB = 0; break;
00034         case 1 : pin_A  = pin_B  = 1; pin_nA = pin_nB          = 0; break;
00035         case 2 : pin_B           = 1; pin_nA = pin_nB = pin_A  = 0; break;
00036         case 3 : pin_B  = pin_nA = 1; pin_nB = pin_A           = 0; break;
00037         case 4 : pin_nA          = 1; pin_nB = pin_A  = pin_B  = 0; break;
00038         case 5 : pin_nA = pin_nB = 1; pin_A  = pin_B           = 0; break;
00039         case 6 : pin_nB          = 1; pin_A  = pin_B  = pin_nA = 0; break;
00040         case 7 : pin_nB = pin_A  = 1; pin_B  = pin_nA          = 0; break;
00041     }
00042     if(direction){
00043         if(state<7)state++;
00044         else state=0;
00045     }else{
00046         if(state>0)state--;
00047         else state=7;
00048     }
00049 #elif defined __P2_EXCITATION__
00050     switch(state){
00051         case 0 : pin_nB = pin_A  = 1; pin_B  = pin_nA = 0; break;
00052         case 1 : pin_A  = pin_B  = 1; pin_nA = pin_nB = 0; break;
00053         case 2 : pin_B  = pin_nA = 1; pin_nB = pin_A  = 0; break;
00054         case 3 : pin_nA = pin_nB = 1; pin_A  = pin_B  = 0; break;
00055     }
00056     if(direction){
00057         if(state<3)state++;
00058         else state=0;
00059     }else{
00060         if(state>0)state--;
00061         else state=3;
00062     }
00063 #endif
00064     
00065 }
00066 
00067 void stepMotor::free(){
00068     pin_A = pin_nA = pin_B = pin_nB = 0;
00069 }
00070 
00071 void stepMotor::lock(){
00072     #ifdef __P1_EXCITATION__
00073     switch(state){
00074         case 0 : pin_A  = 1; pin_B  = pin_nA = pin_nB = 0; break;
00075         case 1 : pin_B  = 1; pin_nA = pin_nB = pin_A  = 0; break;
00076         case 2 : pin_nA = 1; pin_nB = pin_A  = pin_B  = 0; break;
00077         case 3 : pin_nB = 1; pin_A  = pin_B  = pin_nA = 0; break;
00078     }
00079 #elif defined __P12_EXCITATION__
00080     switch(state){
00081         case 0 : pin_A           = 1; pin_B  = pin_nA = pin_nB = 0; break;
00082         case 1 : pin_A  = pin_B  = 1; pin_nA = pin_nB          = 0; break;
00083         case 2 : pin_B           = 1; pin_nA = pin_nB = pin_A  = 0; break;
00084         case 3 : pin_B  = pin_nA = 1; pin_nB = pin_A           = 0; break;
00085         case 4 : pin_nA          = 1; pin_nB = pin_A  = pin_B  = 0; break;
00086         case 5 : pin_nA = pin_nB = 1; pin_A  = pin_B           = 0; break;
00087         case 6 : pin_nB          = 1; pin_A  = pin_B  = pin_nA = 0; break;
00088         case 7 : pin_nB = pin_A  = 1; pin_B  = pin_nA          = 0; break;
00089     }
00090 #elif defined __P2_EXCITATION__
00091     switch(state){
00092         case 0 : pin_nB = pin_A  = 1; pin_B  = pin_nA = 0; break;
00093         case 1 : pin_A  = pin_B  = 1; pin_nA = pin_nB = 0; break;
00094         case 2 : pin_B  = pin_nA = 1; pin_nB = pin_A  = 0; break;
00095         case 3 : pin_nA = pin_nB = 1; pin_A  = pin_B  = 0; break;
00096     }
00097 #endif
00098 }
00099 
00100