[PIC] パルスジェネレータを作る

開発中のボードを評価するために60~600Hzのパルスが必要になったので、PIC評価ボード「LAB-X1」でパルスを生成してみる。

パルス生成にハードウェアPWMを使う

パルス生成にはPICに搭載されているPWMを使う。手持ちのPIC16F877Aの場合、CCP1(PORTC.2)とCCP2(PORTC.1)の2チャンネルのPWMが利用可能。PBPのマニュアルによると、周波数の上限はクロックに関わらず32767Hz、下限はクロックに依存して下図の通り。

OSC 14-bit Enhanced 14-bit PIC18
4MHz 245Hz 62Hz 245Hz
8MHz 489Hz 123Hz 489Hz
10MHz 611Hz 153Hz 611Hz
12MHz 733Hz 184Hz 733Hz
16MHz 977Hz 245Hz 977Hz
20MHz 1221z 306Hz 1221Hz

この表によると、命令長14ビットのPIC16F877Aだと4MHzクロックでも下限は245Hzである。必要としている周波数は60~600Hzだけど、ハードの制限ならば仕方ない。245~600Hzのパルスを発生できるように要件を変更する。

サンプルコード

以下のサンプルコードでは、LAB-X1上のポテンショメータ(POT1)で周波数を245Hzから600Hzまで可変させて、チャンネル1のPWMで50%デューティのパルスを生成している。

動作確認のため、生成したパルス(PORTC.1)を別ポート(PORTB.6)に入力してパルス幅を測定してLCDに表示させてみた。パルス幅測定用の組み込みルーチンPULSINは、4MHz OSCだと10マイクロ秒単位のパルス幅を読み取って返す。読み取ったパルス幅から逆算すれば、指定した周波数のパルスが生成できているかどうか確認できるはず。