2022.11.28
前へ
次へ
ホームページトップへ戻る


PIC−USBIO using BASIC

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
USBインターフェースを内蔵したPICを使ってWindowsパソコンで外部回路を制御するための各種I/O基板の製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第113回]



●PICUSBIO−03(62)Timer2(11)シングルPWMモード(7)パルス出力プログラム(6)パルスの最大値/ポストスケーラは?

前回はPWMモードで出力するパルスの周期とパルス幅の最小値について書きました。
最小値について書いたということになると当然次は最大値について書かなければいけませんでしょう。
これは簡単なことでPR2とCCPR1Lに最大値の$FFを与えることで得られます。
最初に作ったプログラムのPR2とCCPR1Lの値をそのように変更しました。

あっと、そうでした。
それだけではまだ最大値にはなりませんでした。
プリスケーラを最大の1:16にします。
T2CONのbit1を1にすることでプリスケーラを1:16にします(20行)。
50行でPR2に$FF(255)を設定しています。
60行でCCPR1Lにも$FFを設定しています。
周期=4*(255+1)*16/48=341.333(μsec)
パルス幅=4*255*16/48=340(μsec)
になります。
それが周期の最大値です。
パルス幅についてはもう少し…があるかなと思いますがそれについては後ほど。

プログラムを実行しました。

周期は340μsecほどです。
パルス幅は周期とほとんど同じです。
オシロで見るとパルスというよりもほとんどヒゲが出ているようにしか見えません。

水平時間軸を1μsec/divにしました。

「ヒゲ」の部分が拡大されています。
さきほどの計算では周期−パルス幅=1.333μsecです。
オシロの波形もおおよそそのくらいの値になっていることが確認できます。

●ポストスケーラは使えるのか?

先ほどの式ではプリスケールの値を最大の1:16に設定しました。
Timer2はプリスケーラだけではなくてポストスケーラにも1:16までの値を設定できます。
PWMモードのドキュメントではポストスケーラについては何も書かれていません。
PWMモードではポストスケーラは関係しないのでしょうか。
ポストスケーラはT2CONのbit6−bit3で分周比を指定します。
試しにポストスケーラに1:16を設定してみました。

T2CONのbit6−3を1111にするとポストスケーラの分周比が1:16になります。
プリスケーラは前回と同じ1:16です。
T2CONには$7Eまたは$7Fを設定することになります。
今回は$7Fにしました(20行)。
プログラムをそのように変更して実行してみましたが結果はさきほどと同じでした。
PWMモードではポストスケーラは無視されることが確認できました。

●パルス幅で小数点以下の値を設定

パルス幅は前回のテストでCCP1CON<5:4>に小数点以下の2ビットを設定できることを確認しました。
さきほどのテストではCCPR1Lに最大値として$FFを設定しました。
しかし厳密に言えばそれはまだ最大値ではありません。
CCP1CON<5:4>に11を設定して10bitの値11111111.11にしたときにそれが最大値になります。
そんなパルスに意味があるとは思えませんが計算上は最大値になりますからとにかくそのようにプログラムを書き換えて試してみることにします。

20行のCCP1CONに$3Dを設定しました。
パルス幅=4*255.75*16/48=341(μsec)
になります。
周期は341.333μsecですから周期−パルス幅=333nsecです。
これをオシロで見るのはちょっとむずかしいかも知れません。

プログラムを実行しました。

さすがはSonyTectronixです。
もうほんとにかすかなヒゲにしか見えませんが見事にキャッチしてくれました。

水平時間軸を100nsec/divにしました。

「ヒゲ」の部分が拡大されました。

もう少し拡大してみました。

水平時間軸は50nsec/divです。
「ヒゲ」の部分の幅は計算通りの330nsecほどです。

●最大値が小さすぎる?

今回のテストによってPWMモードで出力できるパルスの最大値は周期=341.333μsecであることが確認できました。
PWMモードの目的としてはLEDなどの調光とかモーターの回転制御などが考えられます。
そのような用途としては最大周期が1msecに満たないというのはちょっと短すぎるのでは?
という気がします。
それで考えてみたのですが。
そういう用途のためには48MHzというシステムクロックが高速過ぎるということかもしれません。
48MHzはUSB通信のためには必要なクロックなのですがUSBを離れてPIC単体で制御用に用いる場合、その目的に合わせてたとえばクロックを4MHzとか1MHzとかにすることで適当な出力パルスが得られるのではないかと考えられます。

PIC−USBIO using BASIC[第113回]
2022.11.28upload

前へ
次へ
ホームページトップへ戻る