スイッチを押すとステッピングモーターが回転します。
Arduinoと秋月で購入したステッピングモーター(MDP-35A)
ドライバーとしてTA7774PG互換のTB6674PGを使用しています。
回路はデータシートを参考にしてこんな感じです。
右側のA、~A、~B、Bはステッピングモーターです。
TB6674の12番と13番ピンはGNDに接続します。
SW1とSW2をそれぞれ押すとモーターが回ります。
SW1が正転でSW2が逆転です。
ARDUINOはUNOでソースはこんな感じです。
----------------------------
//2相励磁でのステッピングモーター制御
#define VOLIMEPIN 0
#define INAPIN 7
#define INBPIN 6
#define PulseWidth 3.0 // 1パルス msec
#define MotorStep 48 //
void setup() {
// put your setup code here, to run once:
pinMode(INAPIN, OUTPUT);
pinMode(INBPIN, OUTPUT);
Serial.begin(9600);
}
struct OUTPUT_PIN_MAP
{
int A;
int B;
};
struct OUTPUT_PIN_MAP opMap[4] = {
HIGH, HIGH,
LOW , HIGH,
LOW , LOW,
HIGH, LOW
};
int nIdx=0;
int OldStep=-1;
void loop() {
//1回転で何ステップなのか確かめる実験
//今回のモーターは51STEPで1回転だった。仕様が48なので良し。
// for(int j=0;j<51;j++){
// digitalWrite(INAPIN, opMap[nIdx].A);
// digitalWrite(INBPIN, opMap[nIdx].B);
// delay(PulseWidth);
// nIdx++;
// if(nIdx>=4){
// nIdx=0;
// }
// }
// while(1);
// put your main code here, to run repeatedly:
//2相励磁なので最低STEP角度は以下の計算式になる
float fStepKakudo = (float)360/(float)MotorStep;
Serial.print("fStepKakudo=");
Serial.println(fStepKakudo);
int nVolume = analogRead(VOLIMEPIN); //0-1023
Serial.print("nVolume=");
Serial.println(nVolume);
//ボリュームの値を360度にマッピングする
float nVolumeKakudo = (float)nVolume / ((float)1024.0/(float)360.0);
Serial.print("nVolumeKakudo=");
Serial.println(nVolumeKakudo);
//
int Step = (int)((float)nVolumeKakudo / (float)fStepKakudo);
if(OldStep==-1){
OldStep = Step;
return;
}
Serial.print("Step=");
Serial.println(Step);
//
int nSa = Step - OldStep;
Serial.print("nSa=");
Serial.println(nSa);
for(int i=0;i<abs(nSa);i++){
if(nSa>0){
nIdx++;
if(nIdx>=4){
nIdx=0;
}
}
else{
nIdx--;
if(nIdx<=-1){
nIdx=3;
}
}
digitalWrite(INAPIN, opMap[nIdx].A);
digitalWrite(INBPIN, opMap[nIdx].B);
delay(PulseWidth);
}
OldStep = Step;
// delay(2000);
}