では、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を使用するためにはどうすればよいのでしょうか。いままでのLED、LCD、ステッピングモータでは各ポートの入出力を操作するためにDR、PCR、DDRを操作してきました。ITUを使用するためには表1のレジスタを操作します。
各レジスタの構造は以下のようになります。
余談ですが、ビット7はリザーブビットとなっており、リードすると常に1が読み出されます。そしてライトは無効です。
このレジスタの設定した値とTCNTの値が常に比較されます。値が一致したら以降はPWM波形の1(High)が出力されます。
このレジスタの設定した値とTCNTの値が常に比較されます。値が一致したら以降はPWM波形の0(Low)が出力されます。
GRAとGRB、そしてタイマ用のクロック周波数とTCNTを調整することで自由にパルス幅を調整できるようになります。
このレジスタはTCRで選択した入力クロックにより、カウント動作を行います。リード/ライト可能なレジスタですが、PWM制御中は書き込むことはあまりないと思います。
Copyright © ITmedia, Inc. All Rights Reserved.