PICで+12Vから+5Vを作る

USB充電用にPIC12F683内蔵のコンパレーターを使って12V→5Vのステップダウン型DC-DCコンバーター(Buck Converter)を作りました。定格出力は1.5Aとしています。回路は下図のとおり。出力電圧のリップルは回路図のC6次第ですので低ESR(0.1Ω以下)の電解コンデンサーか固体電解コンデンサーがお勧めです。

PIC12F683のプログラムです。

#pragma config FCMEN=OFF, IESO=OFF, BOREN=ON, CPD=OFF, CP=OFF, MCLRE=OFF, PWRTE=ON, WDTE=OFF, FOSC=INTOSCIO
#include 
#include 
#include 
#define _XTAL_FREQ 2000000
#define CM_REF 0x0c             // comparator reference = Vdd/24*12=2.5V

int main(int argc, char** argv) {
    int i;
    OSCCON = 0x50;              //OSC setup: intosc, 2MHz
    ANSEL = 0x02;	        //GPIO setup: GP1=CIN-(VSense)
    TRISIO = 0x02;              //GPIO setup: GP2:Cout
    T1CON = 0x01;               //Timer1 setup: 1:1 prescale, T1 on
    // comparator setup
    CMCON0 = 0x05;              //Output enable, non-inv, Internal Reference
    CMCON1 = 0x03;              //T1G, CMSYNC on
    VRCON = 0xa0;               //CVRef on, low range, Vdd/24*0=0v

    for(i=0;i<=CM_REF;i++){    //soft start
        __delay_ms(5);
        VRCON=0xa0+i;
    }

    while(1){
    }
    return (EXIT_SUCCESS);
}

出力電圧の1/2をPIC内蔵のコンパレーターに入れ、コンパレーターの出力をTimer1のクロック(1/4OSC=500KHz)でサンプリングし、2.5Vを超えていればMOSFETをOff、下回っていればOnします。コンパレーターの出力をそのまま使うとノイズ等の影響で非常に短い周期でFETがON/OFFしてしまう場合があるため、クロックで叩いています。このため最小周期は250KHzになります。

これらはPIC内蔵のコンパレーターとD-FFだけで行われ、ソフトウェアによる処理は不要です。よってPICはI/Oの初期設定終了後は何もしていません。I/Oポートも4本余っていますので、好みに合わせて他の処理をさせると良いと思います。PWMモジュールもA/Dも使わず、コンパレーターとD-FFさえ入っていればいいので、より安価な12F609/12F615なども使えます。出力にパワーLEDと抵抗を直列に接続してコンパレーター入力端子に抵抗の電圧を接続すれば、1.5Aまでの定電流回路としても使えます。

電源投入直後はソフトスタートのためにコンパレーターのしきい値を0Vから2.5Vまで5msおきに0.208Vずつ上げています。LTSPICEによるシミュレーションは下図になります。コンパレーターしきい値のV4はPWLモードにして5msごとに電圧を変化させています。

出力に3.9Ωの抵抗を接続した実測値は下図。ほぼシミュレーション通りです。コンデンサーC6は固体電解コンデンサー(0.027Ω)を、コイルL1は太陽誘電NRS6045T-100(直流重畳3.1A/温度上昇2.4A)を使用しました。3.9Ω接続時(出力1.25A)の変換効率は約81%でした。MOSFETショットキーダイオード、コイルがそれなりに(合計最大1.5W程度)発熱します。MOSFETのタブがドレイン端子ですので、ここに銅板を放熱板として半田付けして、それにダイオードとコイルを直付けして放熱するのが良いと思います。