PIC−USBIO using BASIC
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
USBインターフェースを内蔵したPICを使ってWindowsパソコンで外部回路を制御するための各種I/O基板の製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第106回]
●PICUSBIO−03(55)Timer2(4)PWMモード
Timer2はPWM出力のためのTimerとして使われます。
PWMはPulse Width Modulationの略語です。
パルス幅変調と訳されます。
周期を一定にしてそのHLの期間の比(デューティ)を変えることで色々な回路、装置の制御に使われます。
周期のためのTimerとデューティを決定するためのTimerを用意することでPWM出力をすることは可能ですが2つのTimerをコントロールするために複雑なプログラムが必要になります。
さらにパルスモーター(ステッピングモーター)の制御に応用することなどを考えるとソフトウェアだけではなくてハードウェアについても考えなければなりません。
PIC18F13K50のPWMモジュールはそのような用途への応用を簡単に実現するための仕組みです。
とはいえ実のところちっとも簡単ではありません。
Datasheetを何回か読んだのですがなかなかにホネな仕組みです。
しかしPICUSBIOについてここまでやってきて途中で投げ出すわけにはいきません。
なんとか解読と理解を試みることにいたします。
下はPIC18F13K50のDatashhetからの引用です。
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
PWM出力モード(強化版)は最大4本の出力端子に最大で10ビットのカウンタによるパルス出力を行なうことができます。
そのPWM出力モードには以下の4通りがあります。
シングルPWM
ハーフブリッジPWM
フルブリッジPWM(フォワードモード)
フルブリッジPWM(リバースモード)
上記の4通りのモードはCCP1CONレジスタのP1Mビット(bit7−6)で指定します。
PWM出力はI/O出力と端子を共用しています。
CCP1/P1AはRC5と端子を共用しています。
P1BはRC4と、P1CはRC3と、P1DはRC2と共用しています。
それらに対するTRISCのビットは出力に設定する必要があります。
ただしPWMモードで使わないこととした端子については共用する他の機能を使うことができます。
各出力の極性はCCP1CONレジスタのCCP1Mビット(bit3−0)で設定します。
CCP1CONは[第78回]で紹介しました(今回の少し下のところに再掲しました)。
FIGURE14−3がPWMモードのブロック図です。
図の右側部分はわかりますが左側はよくわからない図です。
TMR2をカウンタに使いPR2の値ともうひとつCCPR1Hとも比較することで出力するパルスの周期とパルス幅(デューティ)を決定するようなのですが。
どうやらそこにプリスケーラも関係しているようです。
注記(1)を見るとプリスケーラを使って8ビットカウンタを10ビットに拡張するということのようです。
しかし「または2ビットの内部クロックQ」とは何なんでしょう。
プリスケーラを使わない設定にしたときには内部クロックが追加されるということでしょうか。
いまひとつはっきりしません。
さらに言うとCCPR1Hには(Slave)と書かれていてそこにはCCPR1Lからの矢印があります。
CCPR1Hはバッファとして使われていてCCPR1Lに値を設定するということのようです。
そのCCPR1Lにも追加部分があってDC1B<1:0>と書いてあります。
DC1Bはどこかで見たようです。
ここにありました。
[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet
CCP1CONのbit5−4がDC1Bです。
PWM Duty Cycle bit 1 and bit 0
と書かれています。
その下を見るとPWM modeのところに説明があります。
このビットは10ビットPWMデューティサイクルの下位2ビットで、上位8ビットはCCPR1Lの値である。
なるほど。
そこはなんとなくわかったような気がします。
まあとにかく各レジスタに適当な値を書いて試してみればどういうふうに使えばよいのかということがわかってくると思います。
PIC−USBIO using BASIC[第106回]
2022.11.21upload
前へ
次へ
ホームページトップへ戻る