PIC18F25K22におけるPWMの使用方法についてまとめてみた。
PIC18F25K22におけるPWMの使用方法についてまとめてみた。
概要
PWMの概要については書かない。 PICではCCPモジュール(Capture Compare PWM)の一つとして位置づけられている。 PIC18なんかではCCPが2つ搭載されていたり、CCPを拡張したEnhanced CCPが含まれていたりする。 PIC18F25K22には5つ搭載されており、CCP1~CCP3がEnhanced CCP、CCP4とCCP5が通常のCCPである。 今回はCCP4とCCP5のみ扱うことにする。
PWMにおいて必要なことは3つ。
- デューティ比(デューティサイクル)
- 周期
- 分解能(resolutionだから解像度とも言う?)
この3つをレジスタで指定してやると動くはずである。 しかし、レジスタに直接値を入れることはできない。幾つかのビットとそれを引数とする計算式によって 値が定まるでしょう。
レジスタ
PWMに関するレジスタは4つ有る。 ここからレジスタ名に出てくる小文字のxは数字がはいるものとする(データシートでもそんな風に書いてるから従うよ)
CCPxCON
このレジスタはEnhanced CPPとCPPで中身が違うので面倒であるがひとまず通常のCPPであるCCP4CONから。
未使用 | 未使用 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
---|---|---|---|---|---|---|---|
- | - | DC2B1 | DC2B0 | CCP2M3 | CCP2M2 | CCP2M1 | CCP2M0 |
- DC4Bx デューティ比を10bitで表す場合の最小位ビットとなる。残りの8bitはCCPR2Lで指定。 ちなみにPWM以外のモードでは不使用。
- CCP4Mx…4ビットの羅列によって別々の意味を成す。 このビット列によってPWMかその他2つとして使うかを決定できる。今回はPWMを使うので1100と入れる。 詳細の表はデータシート参照。時間あればここに載せたいが、和訳できないのです。
PR2
PWMでHIGHとなる時間を0から255で指定。
T2CON
CCPはTIMER2の機能を使用している。 このコンフィギュレーションレジスタはタイマ2に関する設定を記述する。
未使用 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
---|---|---|---|---|---|---|---|
- | T2OUTPS3 | T2OUTPS2 | T2OUTP1 | T2OUTPS0 | TMR2ON | T2CKPS1 | T2CKPS0 |
- T2OUTPSx ポストスケールの設定。今回は使わない
- TMR2ON Timer2を使用するかどうか 1:使用 0:不使用
- T2CKPSx プレスケールの設定。計算式に含まれる。xは0でも1でOK。 00 :プレスケール1 01 :プレスケール4 1x :プレスケール16
CCPRxL
デューティ比に使用する。0~255で指定。
計算式
式中のToscはクロック周期(Tosc = 1/Fosc) CCPRxL:DCxBは上位ビットと下位ビットを繋げて10bitとしたもの
まとめ
ここまで書いたが、使用する場合のことだけかいて、中でどのように動いているかを 全く書かなかったので理解が深まらない気がしてくる。よく言えば簡潔?