ユニポーラステッピングモーター駆動用ライブラリ

Dependents:   kisoken_PenPlotter

Committer:
Akito914
Date:
Thu Aug 03 06:49:26 2017 +0000
Revision:
0:3e978f6d03d9
1,1-2,2?????????; ????????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Akito914 0:3e978f6d03d9 1
Akito914 0:3e978f6d03d9 2 #include "mbed.h"
Akito914 0:3e978f6d03d9 3 #include "SPM.h"
Akito914 0:3e978f6d03d9 4
Akito914 0:3e978f6d03d9 5 stepMotor::stepMotor(PinName pinName_A , PinName pinName_nA , PinName pinName_B , PinName pinName_nB)
Akito914 0:3e978f6d03d9 6 : pin_A(pinName_A) , pin_nA(pinName_nA) , pin_B(pinName_B) , pin_nB(pinName_nB) {
Akito914 0:3e978f6d03d9 7
Akito914 0:3e978f6d03d9 8 pin_A = pin_nA = pin_B = pin_nB = 0;
Akito914 0:3e978f6d03d9 9 state=0;
Akito914 0:3e978f6d03d9 10
Akito914 0:3e978f6d03d9 11 }
Akito914 0:3e978f6d03d9 12
Akito914 0:3e978f6d03d9 13 stepMotor::~stepMotor(){}
Akito914 0:3e978f6d03d9 14
Akito914 0:3e978f6d03d9 15 void stepMotor::oneStep(bool direction){
Akito914 0:3e978f6d03d9 16
Akito914 0:3e978f6d03d9 17 #ifdef __P1_EXCITATION__
Akito914 0:3e978f6d03d9 18 switch(state){
Akito914 0:3e978f6d03d9 19 case 0 : pin_A = 1; pin_B = pin_nA = pin_nB = 0; break;
Akito914 0:3e978f6d03d9 20 case 1 : pin_B = 1; pin_nA = pin_nB = pin_A = 0; break;
Akito914 0:3e978f6d03d9 21 case 2 : pin_nA = 1; pin_nB = pin_A = pin_B = 0; break;
Akito914 0:3e978f6d03d9 22 case 3 : pin_nB = 1; pin_A = pin_B = pin_nA = 0; break;
Akito914 0:3e978f6d03d9 23 }
Akito914 0:3e978f6d03d9 24 if(direction){
Akito914 0:3e978f6d03d9 25 if(state<3)state++;
Akito914 0:3e978f6d03d9 26 else state=0;
Akito914 0:3e978f6d03d9 27 }else{
Akito914 0:3e978f6d03d9 28 if(state>0)state--;
Akito914 0:3e978f6d03d9 29 else state=3;
Akito914 0:3e978f6d03d9 30 }
Akito914 0:3e978f6d03d9 31 #elif defined __P12_EXCITATION__
Akito914 0:3e978f6d03d9 32 switch(state){
Akito914 0:3e978f6d03d9 33 case 0 : pin_A = 1; pin_B = pin_nA = pin_nB = 0; break;
Akito914 0:3e978f6d03d9 34 case 1 : pin_A = pin_B = 1; pin_nA = pin_nB = 0; break;
Akito914 0:3e978f6d03d9 35 case 2 : pin_B = 1; pin_nA = pin_nB = pin_A = 0; break;
Akito914 0:3e978f6d03d9 36 case 3 : pin_B = pin_nA = 1; pin_nB = pin_A = 0; break;
Akito914 0:3e978f6d03d9 37 case 4 : pin_nA = 1; pin_nB = pin_A = pin_B = 0; break;
Akito914 0:3e978f6d03d9 38 case 5 : pin_nA = pin_nB = 1; pin_A = pin_B = 0; break;
Akito914 0:3e978f6d03d9 39 case 6 : pin_nB = 1; pin_A = pin_B = pin_nA = 0; break;
Akito914 0:3e978f6d03d9 40 case 7 : pin_nB = pin_A = 1; pin_B = pin_nA = 0; break;
Akito914 0:3e978f6d03d9 41 }
Akito914 0:3e978f6d03d9 42 if(direction){
Akito914 0:3e978f6d03d9 43 if(state<7)state++;
Akito914 0:3e978f6d03d9 44 else state=0;
Akito914 0:3e978f6d03d9 45 }else{
Akito914 0:3e978f6d03d9 46 if(state>0)state--;
Akito914 0:3e978f6d03d9 47 else state=7;
Akito914 0:3e978f6d03d9 48 }
Akito914 0:3e978f6d03d9 49 #elif defined __P2_EXCITATION__
Akito914 0:3e978f6d03d9 50 switch(state){
Akito914 0:3e978f6d03d9 51 case 0 : pin_nB = pin_A = 1; pin_B = pin_nA = 0; break;
Akito914 0:3e978f6d03d9 52 case 1 : pin_A = pin_B = 1; pin_nA = pin_nB = 0; break;
Akito914 0:3e978f6d03d9 53 case 2 : pin_B = pin_nA = 1; pin_nB = pin_A = 0; break;
Akito914 0:3e978f6d03d9 54 case 3 : pin_nA = pin_nB = 1; pin_A = pin_B = 0; break;
Akito914 0:3e978f6d03d9 55 }
Akito914 0:3e978f6d03d9 56 if(direction){
Akito914 0:3e978f6d03d9 57 if(state<3)state++;
Akito914 0:3e978f6d03d9 58 else state=0;
Akito914 0:3e978f6d03d9 59 }else{
Akito914 0:3e978f6d03d9 60 if(state>0)state--;
Akito914 0:3e978f6d03d9 61 else state=3;
Akito914 0:3e978f6d03d9 62 }
Akito914 0:3e978f6d03d9 63 #endif
Akito914 0:3e978f6d03d9 64
Akito914 0:3e978f6d03d9 65 }
Akito914 0:3e978f6d03d9 66
Akito914 0:3e978f6d03d9 67 void stepMotor::free(){
Akito914 0:3e978f6d03d9 68 pin_A = pin_nA = pin_B = pin_nB = 0;
Akito914 0:3e978f6d03d9 69 }
Akito914 0:3e978f6d03d9 70
Akito914 0:3e978f6d03d9 71 void stepMotor::lock(){
Akito914 0:3e978f6d03d9 72 #ifdef __P1_EXCITATION__
Akito914 0:3e978f6d03d9 73 switch(state){
Akito914 0:3e978f6d03d9 74 case 0 : pin_A = 1; pin_B = pin_nA = pin_nB = 0; break;
Akito914 0:3e978f6d03d9 75 case 1 : pin_B = 1; pin_nA = pin_nB = pin_A = 0; break;
Akito914 0:3e978f6d03d9 76 case 2 : pin_nA = 1; pin_nB = pin_A = pin_B = 0; break;
Akito914 0:3e978f6d03d9 77 case 3 : pin_nB = 1; pin_A = pin_B = pin_nA = 0; break;
Akito914 0:3e978f6d03d9 78 }
Akito914 0:3e978f6d03d9 79 #elif defined __P12_EXCITATION__
Akito914 0:3e978f6d03d9 80 switch(state){
Akito914 0:3e978f6d03d9 81 case 0 : pin_A = 1; pin_B = pin_nA = pin_nB = 0; break;
Akito914 0:3e978f6d03d9 82 case 1 : pin_A = pin_B = 1; pin_nA = pin_nB = 0; break;
Akito914 0:3e978f6d03d9 83 case 2 : pin_B = 1; pin_nA = pin_nB = pin_A = 0; break;
Akito914 0:3e978f6d03d9 84 case 3 : pin_B = pin_nA = 1; pin_nB = pin_A = 0; break;
Akito914 0:3e978f6d03d9 85 case 4 : pin_nA = 1; pin_nB = pin_A = pin_B = 0; break;
Akito914 0:3e978f6d03d9 86 case 5 : pin_nA = pin_nB = 1; pin_A = pin_B = 0; break;
Akito914 0:3e978f6d03d9 87 case 6 : pin_nB = 1; pin_A = pin_B = pin_nA = 0; break;
Akito914 0:3e978f6d03d9 88 case 7 : pin_nB = pin_A = 1; pin_B = pin_nA = 0; break;
Akito914 0:3e978f6d03d9 89 }
Akito914 0:3e978f6d03d9 90 #elif defined __P2_EXCITATION__
Akito914 0:3e978f6d03d9 91 switch(state){
Akito914 0:3e978f6d03d9 92 case 0 : pin_nB = pin_A = 1; pin_B = pin_nA = 0; break;
Akito914 0:3e978f6d03d9 93 case 1 : pin_A = pin_B = 1; pin_nA = pin_nB = 0; break;
Akito914 0:3e978f6d03d9 94 case 2 : pin_B = pin_nA = 1; pin_nB = pin_A = 0; break;
Akito914 0:3e978f6d03d9 95 case 3 : pin_nA = pin_nB = 1; pin_A = pin_B = 0; break;
Akito914 0:3e978f6d03d9 96 }
Akito914 0:3e978f6d03d9 97 #endif
Akito914 0:3e978f6d03d9 98 }
Akito914 0:3e978f6d03d9 99
Akito914 0:3e978f6d03d9 100