プロメモグラム

誰が見てもわかるような文章を目指す

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で指定。

計算式

[latex] 周期 = {(PR2 + 1)}cdot 4 cdot Tosc cdot (TMR2の分周(プレスケール)値) [/latex]
[latex] パルス幅 = (CCPRxL:DCxB) cdot Tosc cdot (TMR2の分周値) [/latex]
[latex] デューティ比 = frac{パルス幅}{周期} = frac{(CCPRxL:DCxB)}{4(PR2 + 1)} [/latex]
[latex] 分解能 = frac{log{[4(PR2 + 1)]}}{log{2}} [/latex]

式中のToscはクロック周期(Tosc = 1/Fosc) CCPRxL:DCxBは上位ビットと下位ビットを繋げて10bitとしたもの

まとめ

ここまで書いたが、使用する場合のことだけかいて、中でどのように動いているかを 全く書かなかったので理解が深まらない気がしてくる。よく言えば簡潔?