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

Dependents:   kisoken_PenPlotter

Files at this revision

API Documentation at this revision

Comitter:
Akito914
Date:
Thu Aug 03 06:49:26 2017 +0000
Commit message:
1,1-2,2?????????; ????????????

Changed in this revision

SPM.cpp Show annotated file Show diff for this revision Revisions of this file
SPM.h Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SPM.cpp	Thu Aug 03 06:49:26 2017 +0000
@@ -0,0 +1,100 @@
+
+#include "mbed.h"
+#include "SPM.h"
+
+stepMotor::stepMotor(PinName pinName_A , PinName pinName_nA , PinName pinName_B , PinName pinName_nB)
+    : pin_A(pinName_A) , pin_nA(pinName_nA) , pin_B(pinName_B) , pin_nB(pinName_nB) {
+    
+    pin_A = pin_nA = pin_B = pin_nB = 0;
+    state=0;
+    
+}
+
+stepMotor::~stepMotor(){}
+
+void stepMotor::oneStep(bool direction){
+    
+#ifdef __P1_EXCITATION__
+    switch(state){
+        case 0 : pin_A  = 1; pin_B  = pin_nA = pin_nB = 0; break;
+        case 1 : pin_B  = 1; pin_nA = pin_nB = pin_A  = 0; break;
+        case 2 : pin_nA = 1; pin_nB = pin_A  = pin_B  = 0; break;
+        case 3 : pin_nB = 1; pin_A  = pin_B  = pin_nA = 0; break;
+    }
+    if(direction){
+        if(state<3)state++;
+        else state=0;
+    }else{
+        if(state>0)state--;
+        else state=3;
+    }
+#elif defined __P12_EXCITATION__
+    switch(state){
+        case 0 : pin_A           = 1; pin_B  = pin_nA = pin_nB = 0; break;
+        case 1 : pin_A  = pin_B  = 1; pin_nA = pin_nB          = 0; break;
+        case 2 : pin_B           = 1; pin_nA = pin_nB = pin_A  = 0; break;
+        case 3 : pin_B  = pin_nA = 1; pin_nB = pin_A           = 0; break;
+        case 4 : pin_nA          = 1; pin_nB = pin_A  = pin_B  = 0; break;
+        case 5 : pin_nA = pin_nB = 1; pin_A  = pin_B           = 0; break;
+        case 6 : pin_nB          = 1; pin_A  = pin_B  = pin_nA = 0; break;
+        case 7 : pin_nB = pin_A  = 1; pin_B  = pin_nA          = 0; break;
+    }
+    if(direction){
+        if(state<7)state++;
+        else state=0;
+    }else{
+        if(state>0)state--;
+        else state=7;
+    }
+#elif defined __P2_EXCITATION__
+    switch(state){
+        case 0 : pin_nB = pin_A  = 1; pin_B  = pin_nA = 0; break;
+        case 1 : pin_A  = pin_B  = 1; pin_nA = pin_nB = 0; break;
+        case 2 : pin_B  = pin_nA = 1; pin_nB = pin_A  = 0; break;
+        case 3 : pin_nA = pin_nB = 1; pin_A  = pin_B  = 0; break;
+    }
+    if(direction){
+        if(state<3)state++;
+        else state=0;
+    }else{
+        if(state>0)state--;
+        else state=3;
+    }
+#endif
+    
+}
+
+void stepMotor::free(){
+    pin_A = pin_nA = pin_B = pin_nB = 0;
+}
+
+void stepMotor::lock(){
+    #ifdef __P1_EXCITATION__
+    switch(state){
+        case 0 : pin_A  = 1; pin_B  = pin_nA = pin_nB = 0; break;
+        case 1 : pin_B  = 1; pin_nA = pin_nB = pin_A  = 0; break;
+        case 2 : pin_nA = 1; pin_nB = pin_A  = pin_B  = 0; break;
+        case 3 : pin_nB = 1; pin_A  = pin_B  = pin_nA = 0; break;
+    }
+#elif defined __P12_EXCITATION__
+    switch(state){
+        case 0 : pin_A           = 1; pin_B  = pin_nA = pin_nB = 0; break;
+        case 1 : pin_A  = pin_B  = 1; pin_nA = pin_nB          = 0; break;
+        case 2 : pin_B           = 1; pin_nA = pin_nB = pin_A  = 0; break;
+        case 3 : pin_B  = pin_nA = 1; pin_nB = pin_A           = 0; break;
+        case 4 : pin_nA          = 1; pin_nB = pin_A  = pin_B  = 0; break;
+        case 5 : pin_nA = pin_nB = 1; pin_A  = pin_B           = 0; break;
+        case 6 : pin_nB          = 1; pin_A  = pin_B  = pin_nA = 0; break;
+        case 7 : pin_nB = pin_A  = 1; pin_B  = pin_nA          = 0; break;
+    }
+#elif defined __P2_EXCITATION__
+    switch(state){
+        case 0 : pin_nB = pin_A  = 1; pin_B  = pin_nA = 0; break;
+        case 1 : pin_A  = pin_B  = 1; pin_nA = pin_nB = 0; break;
+        case 2 : pin_B  = pin_nA = 1; pin_nB = pin_A  = 0; break;
+        case 3 : pin_nA = pin_nB = 1; pin_A  = pin_B  = 0; break;
+    }
+#endif
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SPM.h	Thu Aug 03 06:49:26 2017 +0000
@@ -0,0 +1,39 @@
+
+#ifndef __SPM_H__
+#define __SPM_H__
+
+#include "mbed.h"
+
+
+//#define __P1_EXCITATION__
+#define __P12_EXCITATION__
+//#define __P2_EXCITATION__
+
+
+class stepMotor{
+    
+public:
+    
+    stepMotor(PinName pinName_A , PinName pinName_nA , PinName pinName_B , PinName pinName_nB);
+    
+    ~stepMotor();
+    
+    void oneStep(bool direction);
+    
+    void free();
+    
+    void lock();
+    
+private:
+    
+    DigitalOut pin_A;
+    DigitalOut pin_nA;
+    DigitalOut pin_B;
+    DigitalOut pin_nB;
+    
+    int state;
+    
+};
+
+
+#endif
\ No newline at end of file