28BYJというステッピングモータを入手したので動かしてみた。
国内価格500円程度。
4相モータなのでHブリッジいらずで駆動させやすい。最近は4相モータ見かけなくなったなあ。
だいたい、このULN2003 インターフェースボードと一緒に売ってる。
これは単なるトランジスタアレイなのでコイルに与える位相信号は自ら作り出す必要がある。面倒だねえ。
接続はarduinoにそのまま刺してみた。+-はクリップで供給。これで問題なく動作したよ。詳しくはサンプルコード見てね。
サンプルコード。これは 4tronix Arduino のコードを丸ごと使わせてもらっている。2-2相励磁 で動いてるよ。原理はこのへん 2-2相励磁 を参照。
実測消費電流は139mA(無負荷)
// このサンプルコードは28BYJ-48の時計回り・逆回りを行うデモです。 // ULN2003 インターフェースボードを使用。つまりただのトランジスタアレイで駆動するだけ // 28BYJ-48モーターは4相、8ビートモーター。 // 減速ギア非68倍。 1バイポーラ巻線。ステップ角は5.625/64。 // 動作周波数100PPS。電流92mA。 //////////////////////////////////////////////// //Base Code // 4tronix Arduino http://www.4tronix.co.uk/arduino/Stepper-Motors.php int motorPin1 = 8; // Blue - 28BYJ48 pin 1 int motorPin2 = 9; // Pink - 28BYJ48 pin 2 int motorPin3 = 10; // Yellow - 28BYJ48 pin 3 int motorPin4 = 11; // Orange - 28BYJ48 pin 4 // Red - 28BYJ48 pin 5 (VCC) int motorSpeed = 1200; //速度。数値が小さいほど速くなる。800以下は脱調して動かない int count = 0; // count of steps made int countsperrev = 512; // number of steps per full revolution int lookup[8] = {B01000, B01100, B00100, B00110, B00010, B00011, B00001, B01001}; ////////////////////////////////////////////////////////////////////////////// void setup() { //declare the motor pins as outputs pinMode(motorPin1, OUTPUT); pinMode(motorPin2, OUTPUT); pinMode(motorPin3, OUTPUT); pinMode(motorPin4, OUTPUT); Serial.begin(9600); } ////////////////////////////////////////////////////////////////////////////// void loop(){ if(count < countsperrev ) clockwise(); else if (count == countsperrev * 2) count = 0; else anticlockwise(); count++; } ////////////////////////////////////////////////////////////////////////////// void anticlockwise() //反時計回り { for(int i = 0; i < 8; i++) { setOutput(i); delayMicroseconds(motorSpeed); } } void clockwise() //時計回り { for(int i = 7; i >= 0; i--) { setOutput(i); delayMicroseconds(motorSpeed); } } void setOutput(int out) { digitalWrite(motorPin1, bitRead(lookup[out], 0)); digitalWrite(motorPin2, bitRead(lookup[out], 1)); digitalWrite(motorPin3, bitRead(lookup[out], 2)); digitalWrite(motorPin4, bitRead(lookup[out], 3)); }
1-1相励磁のも書いてみた。消費電流85mA程度まで落ちている。
トルクはかなり弱くなった。赤文字部分が2-2相と比較した変更点。
// このサンプルコードは28BYJ-48の時計回り・逆回りを行うデモです。 // ULN2003 インターフェースボードを使用。つまりただのトランジスタアレイで駆動するだけ // 28BYJ-48モーターは4相、8ビートモーター。 // 減速ギア非68倍。 1バイポーラ巻線。ステップ角は5.625/64。 // 動作周波数100PPS。電流92mA。 //////////////////////////////////////////////// //Base Code // 4tronix Arduino http://www.4tronix.co.uk/arduino/Stepper-Motors.php int motorPin1 = 8; // Blue - 28BYJ48 pin 1 int motorPin2 = 9; // Pink - 28BYJ48 pin 2 int motorPin3 = 10; // Yellow - 28BYJ48 pin 3 int motorPin4 = 11; // Orange - 28BYJ48 pin 4 // Red - 28BYJ48 pin 5 (VCC) int motorSpeed = 2300; //速度。数値が小さいほど速くなる。2000以下は脱調が起きる int count = 0; // count of steps made int countsperrev = 512; // number of steps per full revolution //int lookup[8] = {B01000, B01100, B00100, B00110, B00010, B00011, B00001, B01001}; int lookup[4] = {B01000, B00100, B00010, B00001}; //1-1相 ////////////////////////////////////////////////////////////////////////////// void setup() { //declare the motor pins as outputs pinMode(motorPin1, OUTPUT); pinMode(motorPin2, OUTPUT); pinMode(motorPin3, OUTPUT); pinMode(motorPin4, OUTPUT); Serial.begin(9600); } ////////////////////////////////////////////////////////////////////////////// void loop(){ if(count < countsperrev ) clockwise(); else if (count == countsperrev * 2) count = 0; else anticlockwise(); count++; } ////////////////////////////////////////////////////////////////////////////// void anticlockwise() //反時計回り { for(int i = 0; i < 4; i++) { setOutput(i); delayMicroseconds(motorSpeed); } } void clockwise() //時計回り { for(int i = 3; i >= 0; i--) { setOutput(i); delayMicroseconds(motorSpeed); } } void setOutput(int out) { digitalWrite(motorPin1, bitRead(lookup[out], 0)); digitalWrite(motorPin2, bitRead(lookup[out], 1)); digitalWrite(motorPin3, bitRead(lookup[out], 2)); digitalWrite(motorPin4, bitRead(lookup[out], 3)); }
.