carcon999のブログ

12年間Y!ブログの記載を移行しました。電子工作関連の記事が多いです。

がじぇるねボード(GR-SAKURA-FULL)でステッピングモーター

物理的に動くものを作りたいので、ステッピングモーターを試食してみました。
今回利用したのも、がじぇるねボート(GR-SAKURA)です。

イメージ 2


実は、ステッピングモーターをコントロールするのは、H8でチャレンジしたとき以来です。
やっぱり、モーター制御は楽しいな。
1分の短い動画を作りました。



Arduinoのライブラリ(Stepper)は気軽に使えてらくらくなのですが、モーター回転中に、別な処理をさせるのがちょっと難しいようなので、独自にポート制御するようにしました。

今回は珍しく回路図も書きました。

イメージ 1

モータードライブするIC TA7774PGを利用しています。触れない程ではありませんが少し発熱があります。
ステッピングモーターは、秋月のSM-42BYG011を使ってみました。ブレッドボードのケーブルがゴチョゴチョしていますが、それほど面倒な配線ではありませんでした。

モーター停止中に500mA程度消費しているので、もう少し考えた方が良いかもしれません。

モーター制御用のソースを貼っておきます。
※変数とか省略されていたりしますので、そのままではビルドできません。

void stepper_init(int pin_1, int pin_2, int steps)
{
pinMode(pin_1, OUTPUT);
pinMode(pin_2, OUTPUT);
steps_max = steps;
}

void stepper_setpos(int pos, int dir)
{
steps_target = pos % steps_max;
steps_dir = dir;
steps_turn = false;
}

void stepper_turn(int dir)
{
steps_dir = dir;
steps_turn = true;
}

void stepper_turn_stop()
{
steps_turn = false;
}

void stepper_fore()
{
int work = (steps_now & 0x03);

if(work == 0){
digitalWrite(PIN_PC2, 1);
digitalWrite(PIN_PC3, 1);
}else if(work == 1){
//digitalWrite(PIN_PC2, 1);
digitalWrite(PIN_PC3, 0);
}else if(work == 2){
digitalWrite(PIN_PC2, 0);
//digitalWrite(PIN_PC3, 0);
}else if(work == 3){
//digitalWrite(PIN_PC2, 0);
digitalWrite(PIN_PC3, 1);
}

steps_now += 1;
}

void stepper_back()
{
int work = (steps_now & 0x03);

if(work == 0){
digitalWrite(PIN_PC2, 1);
digitalWrite(PIN_PC3, 1);
}else if(work == 1){
digitalWrite(PIN_PC2, 1);
//digitalWrite(PIN_PC3, 0);
}else if(work == 2){
//digitalWrite(PIN_PC2, 0);
digitalWrite(PIN_PC3, 0);
}else if(work == 3){
digitalWrite(PIN_PC2, 0);
//digitalWrite(PIN_PC3, 1);
}

steps_now -= 1;
}

void stepper_proc()
{
if*1
{
goto EXIT;
}

if(steps_dir > 0){
stepper_fore();
}else{
stepper_back();
}

if(steps_now < 0){
steps_now = steps_max - 1;
}else if(steps_now >= steps_max){
steps_now = 0;
}

EXIT:;
}

*1:steps_now == steps_target) && (steps_turn != true