モータを制御する

PUPPY付属の車輪駆動用モータ(図1)を制御するプログラムを作成します。

まず開発環境として下のボタンをクリックしPWM_sampleをダウンロードし、解凍して図2の場所にフォルダを移動してください。表1にPWM_sampleフォルダの中にあるファイルの内容を示します。

図2

main.c PWM出力プログラム
start.src マイコンのスタートアップルーチン
make.bat ビルド実行ファイル
led_sample.sub ビルド用SUBファイル
3687s.h H8/3687F用レジスタ定義ファイル
36057s.h H8/36057F用レジスタ定義ファイル
36064s.h H8/36064F用レジスタ定義ファイル
36077.h H8/36077F用レジスタ定義ファイル
sci.h シリアル通信用ヘッダ
sci.c シリアル通信用プログラム
portdef.h レジスタ名を別名定義

表1

シリアル通信の演習でダウンロードしたものとは基本的には変わりませんが、portdef.hが追加になりました。(リスト1)

前回までの演習ではLEDを操作、ディップスイッチの値を読む際にそれぞれが接続されているポートのデータレジスタを書いていましたが、あとでプログラムを見たときに解りにくいので、解りやすい名前を定義しておきます。portdef.hの17,18,19行目が今回の演習で主に操作するレジスタです。

モータを動かす回路的なことはハードウェア編のモータドライバに書いたとおりです。モータを動かすには正回転用の信号(FORWARD)、逆回転用の信号をそれぞれ出す出力ポート(BACK)を用意し、モータの回転数を調整するにはPWMを出力するポート(PWM)を接続すればモータを自在にコントロールすることができます。

今回の演習のテーマはPWMの出力方法についてです。PWMは図3に示すような波形です。一周期における5V(HI)の時間の割合をデューティー比といい、デューティー比が高いほどモータは早く回り、低いほどモータは遅く回ります。

図3

ポートからPWMを出力するもっとも単純な方法は、ポートデータレジスタを直接操作することだと思います。端子をHIにしたら決められた時間(ONデューティ時間)だけ待って端子をLOWにする。さらに決められた時間(OFFデューティ時間)だけ待って端子をHIにする。これを繰り返し行うことで簡単にPWMを出力することができます。pwm_sampleのmain.cにそのプログラムがあります(リスト2)

リスト2

6行目: レジスタ別名定義ファイルをインクルードしてLED,SWなどのレジスタ別名を使用できるようにする

12行目: モータドライバに正回転,逆回転用信号を出力するP56,P57を出力設定する

13行目: モータドライバにPWM信号を出力するP63を出力設定する

17,18行目: モータを回転させる方向を設定する。(表2参照)

FORWARD BACK
正回転 1 0
逆回転 0 1

表2

27行目〜: P63からPWMを出力する、出力時間をループカウンタの数値で決める。この場合デューティ比は25%になります。

このプログラムを実行すると車輪が動き出しますので、車輪を浮かせた状態で電源を入れてください。

プログラムを実行すると車輪がゆっくりと動き出します。ディップスイッチ4を変化させると回転方向が変化します。

演習課題

ディップスイッチでモータの回転方向だけでなくモータの回転速度を変化させるプログラムを作成してみましょう

演習課題ができたらココ