PWMとCWG/COGの使い方 


【PWMとCWG/COGとは】

PWM(Pulse Width Modulation)CWG(Complememtary Waveform Generator)
またはCOG(Complementary Output Generator)は、コアインデペンデントモジュールと
いう扱いで新たに実装されたモジュールでペアで使われることが多いので一緒に解説します。

PWM: 文字通りパルス幅変調されたパルスを生成するモジュールで、
     CCPモジュールをPWM構成だけにしたものと同じです。

CWG: 1種類のパルスを相補形式のパルスに変換します。
     デッドバンド幅やフォルトによる自動シャットダウン機能を設定できます。

COG: CWGの機能を強化したモジュールです。
     1種類のパルスを相補構成のパルスに変換するのはCWGと同じですが
     パルスの出力形態を6種類から選択できます。これによりフルブリッジや
     プッシュプル構成の電源などを構成することができます。
     デッドバンドを設定できます。
     ブランキングと位相シフトができるようになっているのが特徴です。
     さらに外部イベントでパルスの立ち上がりと立下りを決めることもできます。

PWMとCWGの実際の応用例は下図のようなモータやLED電源の制御のような
場合があります。




【PWMモジュールの内部構成】

このPWMモジュールの構成は下図のようになっていて、標準のCCPモジュールを
PWM動作だけに限定した構成と同じとなっています。
 PWMパルスの周期はタイマ2で決定され、タイマ2が周期レジスタPR2と一致して
タイマ2本体が0にクリアされるとき、同時にPWMx出力がHighとなります。

 タイマ2は同時にデューティコンパレータで内部ラッチと比較されています。
このときにはタイマ2はプリスケーラを含めて10ビットで扱われます。
そして内部ラッチと一致したとき、PWMx出力がLowになります。
こうして一定周期でデューティが設定で変わるPWMパルスが生成されます。

 デューティ設定はPWMxDCHレジスタとPWMxDCLレジスタの2ビットで行いますが、
実際の変更は、タイマ2がPR2と一致した周期の最初で内部ラッチに転送されて有効となります。
これで、周期の途中でおかしな動作になることがないようにしています。



【PWMモジュール制御レジスタ】

このPWMの動作設定は下図のレジスタで行います。PWMxCONレジスタで基本的な動作を
設定します。あとはタイマ2で周期を設定し、2個のデューティレジスタでデューティを設定します
出力の極性の切り替えができます。



【CWGモジュールの内部構成】

CWGの機能は単純で、一つのパルス信号を入力とし、そのパルス幅を元にして相補パルスを
出力します。さらにパルスの切り替わり時にはデッドバンドが追加され、外部または内部からの
フォルト信号によるフォルト制御機能も内蔵されています。
 CWGモジュールの内部構成は、下図のようになっています。



下図のようなパルス出力をすることが基本の機能ですが、デッドバンド幅制御や、
出力制御、さらにフォルト制御の設定のための条件がたくさん用意されています



このモジュールは、PWM、NCO、CLC、コンパレータからひとつを選択して入力ソースとし、
それをハイサイドとローサイドの相補のパルスに変換します。
さらに切り替わり時に両方をOffとする時間、つまりデッドバンドを挿入します。
 このデッドバンドの幅はプログラム設定により立ち上り側、立下り側独立に可変することが
できますので、負荷に接続するトランジスタなどのスイッチング特性に合わせて最適な値と
することができます。
 デッドバンド幅の設定は、クロック選択で指定されたクロック単位で0クロックから64クロック
まで可変できますので、16MHzクロックの場合、625nsec単位で最大40μsecまで指定できます。

 また、実際の出力の極性はいずれも独立に設定変更できますので、負荷に合わせた極性
として出力することができます。

 内部や外部からフォルト信号を入力するか、ソフトウェア命令によりフォルト制御することも可能で、
この信号により、出力を自動的にシャットダウン停止させることができます。
停止時の出力レベルは任意に選択することができますので、出力負荷が安全な状態に合わせて
出力を決めることができます。
この機能により負荷にダメージを与えずに出力を停止させることができます。
 フォルト制御はフォルト入力が継続している間か、ソフトウェアで解除するまで継続します。
フォルト信号が無くなったら自動的に出力を再開します。
 CPUがスリープ中にもCWGモジュールの動作を継続させたい場合には、CWGモジュール用
クロックにHFINTOSCを選択すれば、スリープ中も継続動作します。

【CWGモジュールの制御レジスタ】

CWGモジュールの制御用レジスタは下図のようになっています。簡単な機能のモジュール
の割にはレジスタの数が多くなっています。
CWGxCON0、CWGxCON1、CWGxCON2のレジスタで基本的な動作とシャットダウン時の動作を
設定します。
そしてデッドバンド幅についてはCWGxDBRとCWGxDBFレジスタで設定します。
立ち上がり側と立下り側それぞれ独立のレジスタで設定します。
この幅はCWGx用クロックとして選択したクロックの何倍かで指定します


【プログラム例】

実際のPWMとCWGの初期設定のプログラム例です。これは単純な
降圧型のスイッチング電源用の初期設定例です。