
投稿日 2017/01/04
新しいPICマイコンに搭載されているPSMC(Programmable Switch Mode Controller)を試してみました。PSMCは多機能な16ビットのパルス幅変調器(PWM)です。今回はPSMCがサポートする12種類のPWMのうち、前回の単相PWMに続き、相補PWM信号を作ってみました。前回の単相PWMについては以下をご覧ください。
関連記事:PICのPSMCを試してみる 単相PWM
なお、PSMCにはマイクロチップ社から日本語訳のアプリケーションノートAN1468が公開されています。(ただしほとんどモードの説明だけです)
相補PWMは、同期整流型のDC-DCコンバータで使用されます。同期整流では、2つのパワーMOSFETを交代でON/OFFしますが、タイミング的に同時にONになる時間があるとまずいので、デッドバンドという、両方がOFFの時間を設けることが特徴です。
PSMCのブロック図を以下に示します。

PSMCのブロック図
Microchip社 PIC 16F1783のデータシートより抜粋
相補PWMでは、AからFまでの6本の出力端子のうち、2つずつを割り当てます。それらを直接パワーMOSFETのゲートに接続するわけにはいきませんので、実際にはドライバーを介します。
単相‘PWMと同じようにPWM信号の周期(period)を決め、その中で立ち上がり、立下りタイミングを決めます。各レジスタの設定方法は単相PWMと似ていますので、単相PWMの設定を相補PWMに切り替える形で変更してみました。
単相PWMから相補PWMの変更箇所は、
PSMCxCONレジスタのPxMODEを1(相補PWM)にする
PSMC1CONbits.P1MODE = 1; //相補PWM
立ち上がり、立ち下がりのデッドバンドを有効にする
PSMC1CONbits.P1DBFE = 1; //立ち下がりのデッドバンド有効
PSMC1CONbits.P1DBRE = 1; //立ち上がりのデッドバンド有効
PSMCxAピンとPSMCxBピンを有効にする
PSMC1OENbits.P1OEA = 1; //PSMC1Aピン有効
PSMC1OENbits.P1OEB = 1; //PSMC1Bピン有効
論理を決める(この場合A/Bピンとも正論理(アクティブ・ハイ)
PSMC1POLbits.P1POLA = 0; //PSMC1A アクティブ・ハイ
PSMC1POLbits.P1POLB = 0; //PSMC1B アクティブ・ハイ
デッドバンドの時間を指定する( 1 / 64000000 x 10) ns
PSMC1DBR = 10; //約160ns
PSMC1DBF = 10;
AからFピンの担当出力を設定する
PSMC1STR0bits.P1STRA = 1; //PSMC1A 単一PWM出力
PSMC1STR0bits.P1STRB = 1; //PSMC1B 相補PWM出力
相補PWMはこのように2つのピンをペアにして使いますが、CとD、EとFも同じように設定すれば同時に相補PWM信号を出力することができます。
相補PWMの設定例
PSMC1CONbits.P1MODE = 1; //相補PWM
PSMC1CONbits.P1DBFE = 1; //立ち下がりのデッドバンド有効
PSMC1CONbits.P1DBRE = 1; //立ち上がりのデッドバンド有効
PSMC1CLKbits.P1CPRE = 0; //プリスケーラ1:1
PSMC1CLKbits.P1CSRC = 1; //Clock source 64MHz
PSMC1OENbits.P1OEA = 1; //PSMC1Aピン有効
PSMC1OENbits.P1OEB = 1; //PSMC1Bピン有効
PSMC1POLbits.P1POLA = 0; //PSMC1A アクティブ・ハイ
PSMC1POLbits.P1POLB = 0; //PSMC1B アクティブ・ハイ
PSMC1STR0bits.P1STRA = 1; //PSMC1A 単一PWM出力
PSMC1STR0bits.P1STRB = 1; //PSMC1B 相補PWM出力
PSMC1PRSbits.P1PRST = 1; //PSMC1PRH/Lとの比較でタイマリセット
PSMC1PHSbits.P1PHST = 1; //PSMC1PHH/Lとタイマとの比較で立ち上げ
PSMC1DCSbits.P1DCST = 1; //PSMC1DCH/Lとタイマとの比較で立ち下げ
//Period
period = 100; //100KHz
PSMC1PRH = (64000 / period - 1) >> 8;
PSMC1PRL = (64000 / period - 1) & 0xFF;
//Phase
PSMC1PHH = 0;
PSMC1PHL = 0;
//Duty
PSMC1DCH = (( 64000 / period - 1) / 2 ) >> 8; //Duty = 50%
PSMC1DCL = (( 64000 / period - 1) / 2 ) & 0xFF;
//Deadband
PSMC1DBR = 10; //156nS
PSMC1DBF = 10;
PSMC1INT = 0;
PSMC1CONbits.PSMC1EN = 1;
PSMC1CONbits.PSMC1LD = 1;

上記の設定で観測した相補PWMの波形 3.3Vpp
Period=10uS(100KHz), Phase=0, Duty=50%

上記の設定で観測した相補PWMの波形 3.3Vpp
デッドバンドを観測
AとBの間に約160nSのOFF期間(デッドバンド)が確認できる
相補PWMによって、同期整流型のDC-DCコンバータを制御する場合、2つのパワーMOSFETが同時にONになることがないようデッドバンドを設けます。パワーMOSFETのゲートドライバの中には単一のPWM信号を入力すれば相補PWM信号にして、デッドバンドも自動的に入れてくれるものがありますが、このようにマイコン制御で細かく設定が変えられるのは便利です。
(JF1VRR)