明日は明日の風が吹く

明日は明日の風が吹く

PR

Calendar

Favorite Blog

2024~25主力株概況3… New! みきまるファンドさん

(のωあ)つ【楽天之大… どらドラ7さん
TK typeR 心は猛… TK typeRさん
欲溺☆のぺーじ 『第… 欲溺☆さん
小江戸の人のぐだぐ… 小江戸の人さん

Keyword Search

▼キーワード検索

February 9, 2013
XML
カテゴリ: 組込み関連
さてさて、次はいよいよモーターを動かしましょう。

このVS-WRC003LVのモーター周りの回路をざっくり書くとこんな感じ。

motor.jpg

いやまあ、こんな回路図見ても訳がわからんよって感じかもですが、これはDCモーターを制御する、一番基本的な仕組み。
四つのトランジスタを使ったフルブリッジ回路になっていて、P30とP61に電圧をかけると電源からの電流が右から左に流れて正回転となり、P31とP61に電圧をかけると逆に左から右に電流が流れて逆回転をする。
つまり、P30とP31の組み合わせで回転方向を制御できるという事。んで、P61でデューティー比を設定してPWM制御が出来るようになるわけだ。

まあ、回路の内容は知らなくてもP30とP31で方向を決めてP61のONとOFFの間隔でまわる強さを制御するってのだけわかってればプログラムは組めますな。
各ポートの値とモーターの動作は下のような関係になってるようです。

P30
P31
モーター

0
0
停止

1
0
正回転

0
1
逆回転

1
1
ブレーキ




ちなみに「M1」と書いたけど、もう一つのモーターはP32、P33で方向制御、P62で出力制御になってます。


っつう訳でプログラムは前回のLEDの点滅とほぼ一緒。出力ポートをモーター用のものに変えるだけですな。



void wait(unsigned int msec);

void main(void)
{
  // 初期設定
  IO.PCR3 |= 0x03;    // IOポート30と31を出力に設定
  IO.PDR3.BIT.B0 = 1;  // IOポート30を1に設定
  IO.PDR3.BIT.B1 = 0;  // IOポート31を0に設定

  IO.PCR6 |= 0x02;    // IOポート61を出力に設定
  IO.PDR6.BIT.B1 = 0;  // IOポート61を0に設定

  while (1) {

    IO.PDR6.BIT.B1 = 1;


    IO.PDR6.BIT.B1 = 0;
    wait(10);
  }
}

void wait(unsigned int msec)

  unsigned int i, j;

  for (i = 0; i < msec; i++) {
    for (j = 0; j < 1000; j++);
  }
}

今回は半々にしましたが、ONとOFFのwaitのパラメータを変えれば出力が調整できます。
一つ注意点なんですが、モーターは電池をセットしないと動かないみたいですね。
LEDはUSBで書き込んだ直後から光り始めたんですが、モーターは電池のスイッチをOFFにしておいて、書き込んだ後にONにしないとまわり始めない。
まあ、書き込み完了からいきなり走り始められても困りますけどね。

今回のでとりあえずは動きましたが、実はこのプログラム、同時に何かほかの事をやろうとすると結構苦労します。
制御っつうのはただ動かせばいい訳じゃなくて、何かの情報を取り込んで出力を制御しないといけないですからね。
次回はマイコンについてるタイマー機能を使ってもっと簡単に制御してみましょう。


ヴイストン ビュートローバー ARM(Beauto Rover ARM)

ヴイストン ビュートローバー ARM(Beauto Rover ARM)
価格:6,300円(税込、送料別)







お気に入りの記事を「いいね!」で応援しよう

Last updated  March 20, 2013 11:27:20 AM
コメントを書く
[組込み関連] カテゴリの最新記事


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

© Rakuten Group, Inc.
X

Mobilize your Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: