前回の記事でDCモータ制御したけども、速度制御とか回転方向とかもっと細かく制御したいので、ステッピングモータを試してみることにした。
試しに使ったのはSPG20-332。
4相ユニポーラ方式。
というわけで回路図。
回路図の説明。
左端のコネクタがArduinoのDigital-ポート。LEONARDOだと実際には13本しかないはず。15本もあるのは、回路図のツールの都合で15になってるだけです。
Arduinoのポートからの出力は非常に小さくてモータを駆動するには能力が足りないので、MOSFETで増幅してあげることに。(ARDUINOの回路図みてないけど、ベース抵抗とか色々と必要かもしれない。)
N型MOSFETとして2SK2231を使う。千石電子あたりで一個百円くらい。
このMOSFETはゲートに電圧をかけると、ドレインーソース間に電流が流れる。
回路図でいうと、左側の端子(ベース)に電圧をかけると、上側の端子(ドレイン)から下側の端子(ソース)間に電流が流れる。
ソース側はそのまま接地。ドレイン側はステッピングモータの出力端子へ。
ステッピングモータの電源端子はそのまま電池に接続
これで4相での回転を制御できる。
というわけでソースコード。
1相励磁方式では安定しなかったので2相励磁でやることにした。
#define LED_PIN1 13
#define MOTER_PIN1 3
#define MOTER_PIN2 5
#define MOTER_PIN3 6
#define MOTER_PIN4 9
#define STEP_DELAY 50
// 初期化
void setup(){
// ピンを出力に
pinMode(MOTER_PIN1, OUTPUT);
pinMode(MOTER_PIN2, OUTPUT);
pinMode(MOTER_PIN3, OUTPUT);
pinMode(MOTER_PIN4, OUTPUT);
}
void loop() {
digitalWrite(MOTER_PIN1, 1);
digitalWrite(MOTER_PIN3, 0);
delay(STEP_DELAY);
digitalWrite(MOTER_PIN2, 1);
digitalWrite(MOTER_PIN4, 0);
delay(STEP_DELAY);
digitalWrite(MOTER_PIN3, 1);
digitalWrite(MOTER_PIN1, 0);
delay(STEP_DELAY);
digitalWrite(MOTER_PIN4, 1);
digitalWrite(MOTER_PIN2, 0);
delay(STEP_DELAY);
}
とりあえず回った。
駆動部分の機構ができてから色々調整していくことにしましょう。
あと必要な機能は初期位置を検出するためのエンコーダ。
エンコーダとか買うと高いので、赤外線LEDと赤外線受信モジュールあたりでなんとかできないか試してみたい。