連載
» 2007年06月06日 00時00分 公開

H8で学ぶマイコン開発入門(9):モータ制御に欠かせない技術“PWM”って何? (2/3)

[宮崎 雅史 ソフィアシステムズ,@IT MONOist]

H8マイコンのITUを使う

 では、H8/3048F-ONEでPWM制御を行うには、どのようにすればよいのでしょうか。それには、H8マイコンのITU機能を使います。ITUはH8/3048F-ONEのマニュアルで「16ビットインテグレーテッドタイマユニット」と呼ばれる機能です。名前のとおりタイマ機能を提供するもので、16ビットのカウンタを備えています。

 このカウンタが何秒でカウントアップされるかについては、H8マイコン自身を動作させている内部クロックを使うか、H8マイコンの外部からのクロックを使うか、大きく分けて2つから選ぶことができます。また、内部クロックは等倍から1/8倍まで選ぶことができます。このタイマユニットのモードの中にPWMモードがあり、H8マイコンの必要なレジスタを操作するだけでPWM制御が可能です。

 このITUは全部で5チャネルあり、タイマを使う機器を同時に5種類使えるということになります。本連載のターゲットボードではサーボモータ2個をチャネル0と1で、DCモータ2個をチャネル3と4でそれぞれ制御しています。

ITUのレジスタ解説

 それでは、ITUを使用するためにはどうすればよいのでしょうか。いままでのLED、LCD、ステッピングモータでは各ポートの入出力を操作するためにDR、PCR、DDRを操作してきました。ITUを使用するためには表1のレジスタを操作します。

ITUのレジスタ名と機能概要 表1 ITUのレジスタ名と機能概要

 各レジスタの構造は以下のようになります。

TCR(タイマコントロールレジスタ)

CCLR0、1(カウンタクリア0、1)
TCNTのカウンタクリアの要因を決定するビットです。TCNTの値が一致したときにTCNTをクリア(0x0000にする)か、GRBとTCNTが一致したときにクリアするか、もしくは一致してもクリアはしないかを選択できます。

CKEG0、1(クロックエッジ0、1)
次に紹介するTPSC0〜2で外部クロックを選択した際の入力エッジを選択します。この設定値によって外部クロックの立ち上がりでTCNTがカウントされるか、立ち下がりでカウントされるか、それとも両方でカウントされるかを選択できます。ですが、本連載のターゲットボードでは入力クロックにH8マイコンの内部クロックを使用するので、ここでは特に設定しません。

TPSC0〜2(タイマプリスケーラ0〜2)
TCNTへの入力クロックをどれにするかを選択します。例えば3ビットとも0にした場合、TCNTへの入力クロックは内部クロックを1倍したものが選択されます。もう1つ例を挙げると、TPSC0のみ1にした場合、TCNTへの入力クロックは内部クロックを1/2倍したものが選択されます。

 余談ですが、ビット7はリザーブビットとなっており、リードすると常に1が読み出されます。そしてライトは無効です。

GRA(ジェネラルレジスタA)

 このレジスタの設定した値とTCNTの値が常に比較されます。値が一致したら以降はPWM波形の1(High)が出力されます。

GRB(ジェネラルレジスタB)

 このレジスタの設定した値とTCNTの値が常に比較されます。値が一致したら以降はPWM波形の0(Low)が出力されます。

 GRAとGRB、そしてタイマ用のクロック周波数とTCNTを調整することで自由にパルス幅を調整できるようになります。

TMDR(タイマモードレジスタ)

PWM0〜4(PWMモード0〜4)
これらのビットはITUの各チャネルのモードを設定します。ビットに1をライトすることで各チャネルはPWMモードになります。

MDF(位相計数モード)、FDIR(フラグディレクション)
この2ビットはITUチャネル2専用の特別なビットなのですが、本連載ではチャネル2はモータに接続されていませんので、特に操作する必要はありません。

TSTR(タイマスタートレジスタ)

STR0〜4(カウンタスタート0〜4)
STR0〜4は各チャネルのタイマの動作/停止を切り替えます。ビットに1をライトすることで各チャネルは動作を開始します。

TCNT(タイマカウンタ)

 このレジスタはTCRで選択した入力クロックにより、カウント動作を行います。リード/ライト可能なレジスタですが、PWM制御中は書き込むことはあまりないと思います。

Copyright © ITmedia, Inc. All Rights Reserved.