PIC−USBIO using BASIC
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
USBインターフェースを内蔵したPICを使ってWindowsパソコンで外部回路を制御するための各種I/O基板の製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第112回]
●PICUSBIO−03(61)Timer2(10)シングルPWMモード(6)パルス出力プログラム(5)パルスの最小値
前回はCCP1CON<5:4>の値を確認するためにパルス幅と周期を小さい値にしてオシロで観測し易いようにしてみました。
そこで気が付いたのですが。
PWMモードで出力できる最小のパルス幅と周期はどのくらいなのでしょうか?
これは確認しておくべきです。
そこでまず思いついた値を今までのプログラムに入れて試してみました。
PR2=1、CCPR1L=1にしました。
周期=4*(1+1)/48=0.167(μsec)
パルス幅=4*1/48=0.083(μsec)
になります。
プログラムを実行しました。
周期は約170nsecです。
CH1(P1A)のパルス幅は90nsecほどです。
P1Aのパルス幅は計算値よりも少し大きいようです。
CH2(P1B)のパルス幅は80nsecより少し小さいようです。
P1Bのパルス幅はP1Aとは逆に計算値よりも少し小さいようです。
前回も書きましたがこれはもうnsecレベルの数値なのでこのくらいのずれは許容範囲だと思います。
ちなみに74HCのシンプルなゲートでも数nsecの遅れは許容範囲です。
最初はPR2とCCPR1Lに設定できる最小値は1だと思ったのですが、ひょっとすると0でもよいのかもと思いました。
ものは試しです。
そのようにして試してみることにしました。
CCPR1Lを0にするとパルス幅が0になってしまいますのでCCP1CON<5:4>=10にしてパルス幅は0.5にしました。
PR2=0、CCPR1L=0にしてCCP1CON=$2Dにしました。
周期=4*1/48=0.083(μsec)
パルス幅=4*0.5/48=0.042(μsec)
になります。
プログラムを実行しました。
これはもう限界に近い波形ですがそれでもなんとか出力されています。
周期は80nsecほどです。
パルス幅はさすがに苦しいようです。
CH1(P1A)は50nsecぐらいです。
逆にCH2(P1B)はやっと30nsecほどです。
周期は上の値が最小ですがパルス幅はCCP1CON<5:4>=01にすることが可能です。
そのようにプログラムを変更しました。
CCP1CON=$1Dにしました。
パルス幅=4*0.25/48=0.021(μsec)
になります。
プログラムを実行しました。
これは本当に限界です。
CH1(P1A)はかなりつぶれてはいるもののなんとかパルス出力できています。
パルス幅も20nsecほどです。
周期は先ほどと同じ約80nsecです。
しかしCH2(P1B)はパルスが完全につぶれてしまっています。
やはり無理の無いところとしては今回の最初に試したPR2=1、CCPR1L=1( 周期=167nsec、パルス幅=83nsec)が最小値ということになると思います。
PIC−USBIO using BASIC[第112回]
2022.11.27upload
前へ
次へ
ホームページトップへ戻る