今回はCWG(Complementary Waveform Generator)の練習1回目です。パワエレ系の人々にはお馴染みさんのハーフブリッジとかフルブリッジとかを駆動するための波形を作り出してくれるもの。パワエレ素人の年寄はインバータといわれると反射的にロジックを思い浮かべてしまう。ダメな私。
※『PIC三昧』PIC関係の記事総目次はこちら
※作業はMicroChip社の統合開発環境 MPLAB X IDEと、その上で走るコンフィギュレーションツールMCC Classic を使用して行っています。ターゲット・マイコンはPIC16F18855です。
手元にはパワエレ系の部品の在庫がほぼ無なので別シリーズでブリッジ回路をでっち上げる検討をしてます。今回は駆動対象の回路無、駆動波形のみテキトーに生成してお茶を濁します。まずはハーフ・ブリッジ・モードだっ。
MCCクラシックを使った設定
CWGはお名前が長いだけでなく、「関係各方面にお願い」しないと動かすことができないデバイスです。今回は三個搭載されているCWGの1番を使用しました。その元になるPWM波形はPWMの6番、さらにPWM6に与える元クロックはTMR2で生成と「オールスター」キャストです。なお、後でロジアナモードで波形を観察したときに元クロックとの関係を見たいので、動作とは直接関係ないですが、CLKREFも使用しています。プロジェクトリソースが以下に。
さて、CWG1の設定は以下です。Output ModeがHalf bridge modeにしてあります。後でハーフブリッジ(もどき)の現物回路を接続して負荷を交流駆動できることを確かめたいと思いますが、今回は負荷なしです。
注目すべきは、Eventsというところにある、Rising CountsとFalling Countsという値です。今回FOSC=1MHz設定なので、そのクロックで確保したA相とB相の波形のノンオーバラップ区間を確保するための設定です。ロジアナで観察したときに見極めがつくようにカウント数を殊更に変えてあります。
つづく設定はCWG1に接続し、元波形を与えているPWM6です。以前にやりましたが、CCP(コンペア・キャプチャ・PWM)というモジュールがあり、そちらはPWM出力だけでなくキャプチャ入力なども可能な多機能なモジュールです。そこにPWMが5本あるので、シンプルなPWMモジュールは6番と7番だけです。今回はPWM6使用です。設定はシンプル。PWMの周期は100usとし、ハイ期間とロー期間が遠くから見てもよく分かるようにハイ25%で設定してます。
最後はPWM6の周期10kHzを決定しているTMR2です。Start/Reset OptionでSoftware controlとしてあるので、ソフトでStartしないと出力が始まりませぬ。勿論、ソフトで停止も可能。
上記まででCWG1の設定は完了ですが、後で波形観察のために参照クロックとしてFOSCをCLKREFに出力するようにしてあります。
最後に忘れちゃいけないピン設定です。赤丸したのがCWG1の出力信号。ハーフブリッジモードなので、A相とB相の2出力です。オレンジ色が参照用のFOSC信号とPWM6信号です。緑色は「いつもの」ソフトウエアのLチカ用。
main.cに書き込んだソース
CWG以下の設定はほぼ全てMCCクラシックが自動生成したコードに含まれているので手作業でmain()関数内に書き込む必要があるのは タイマ2をスタートさせる TMR2_StartTimer()関数のみです。whileの中は「いつもの(惰性の)」ソフトウエアLチカです。
TMR2_StartTimer(); while (1) { RA0 = 1; __delay_ms(500); RA0 = 0; __delay_ms(500); }
実機動作確認
Digilent、Analog Discovery2のロジアナモードで観察した波形が以下に。FOSCのところは速すぎて黒く潰れてます。PWMの元信号に比べてCWGのA相、B相が「削れている」のが分かるかと。
立ち上がりの「隙間」と立下りの「隙間」のカウント数を変化させてあるので、非対称なノンオーバラップ期間になってます。こんなもんかい?