MC34063APとPIC12F629を用いた、ニッカド充電器の製作


 1800mAhのニッカド電池を2本買ったので、このニッカド電池を定電流充電するような装置を作ってみます。

 どういう方式にするかあれこれ考えたのですが、結局、ノートパソコン用のACアダプタを流用することとし、このACアダプタから出力される16V DCを、充電電流が一定になるように降圧型チョッパでステップダウンする方 式を採ることにしました。

 降圧型チョッパは、専用ICのMC34063APを用いれば簡単に製作できます。通常は、出力電圧が一定になるようにMC34063APを制御します が、これを、充電電流が一定になるように制御方法を変更します

 以下に、今回製作した降圧型チョッパの回路図を示します。R1は、MC34063APに流すことのできる最大電流を設定するための保護抵抗です。最大電 流は0.3÷(R1の抵抗値)アンペアですので、この回路では、約1(A)ということになります。チョッパの発振周波数はC2により決まります。ステップ ダウン型のチョッパでは、330(pF)または470(pF)とすると良いようです。220(pF)では発振が不安定になりますし、1000pF以上では チョッパの効率が低下するようです。D1にはショットキーバリアダイオードを用います。コイルは、トロイダルコアに巻かれた電力用を用いるのが一番良いの ですが、ここでは、横着をして、普通のインダクターを用いました。

 本機では、R5の0.22(Ω)の両端の電圧を測ることにより、充電電流を監視します。この電圧を汎用オペアンプのLM358で増幅し、 MC34063APの5番ピンに入力します。増幅倍率は、VR1によって可変できるようにします。これは、充電電流の設定値を可変できるようにするためです。




 上図で、オペアンプの部分は非反転増幅器となっており、その最小倍率は100/6=16.7倍、最大倍率は105倍となります。一方、 MC34063APは、その5番ピンの電圧が1.25(V)となるようにチョッパを制御しますから、最小倍率のときのR5の電圧は1.25÷ (100/6)=0.075(V)、最大倍率のときのR5の電圧は1.25÷105=0.012(V)ということになります。R5の値は0.22(Ω)で すから、電流値に直すと、340(mA)から55(mA)までの範囲を可変できることになります。

 このように、MC34063APは、その5番ピンが常に1.25(V)となるように出力電圧を自動的に制御します。出力電圧を抵抗で分圧して5番ピンに 戻してやれば定電圧電源となりますし、この回路のように負荷に直列に入れた抵抗の両端の電圧を5番ピンに戻してやれば、定電流電源として動作させることが 可能です。


 上図の回路だけでしたら、オペアンプの電源は、+16Vとしてかまいません。
 ただし、以下に述べるように、PICと組み合わせる場合は、オペアンプの電源はPICと共通の+5(V)とします。





 このままでは、ただ定電流を流すだけの機能しかありませんので、PICと組み合わせて、タイマー機能を追加しました。PICとしては、いつも使っている PIC12F629を今回も用います。SW1を押すことによって充電がスタートし、PICが充電時間をカウントし始めます。設定時間が経過すると、自動的 に充電が停止します。また、充電中はLEDが点滅するようにします。





 PICのプログラムを以下に示します。SW1が押されるまで、リレーをOFFにしてL2の部分をループしながら待っていますが、SW1が押されるとリ レーをONにして、指定時間だけカウントします。カウントが終了すると、リレーをOFFにします。

 このサンプルプログラムでは、充電時間は12時間としていますが、「MOVLW  D'12'」の部分を書き換えることにより、他の充電時間(ただし、正の整数値に限る)に変更することができます。

(★ なお、このプログラム中の「INVERSE_POLARITY」については、次節で説明します。)

    LIST    P=12F629
    INCLUDE    P12F629.INC
    ERRORLEVEL -302

CB = _CPD_OFF
CB &= _CP_OFF
CB &= _BODEN_ON
CB &= _MCLRE_OFF
CB &= _PWRTE_ON
CB &= _WDT_OFF
CB &= _XT_OSC

    __CONFIG    CB
    __IDLOCS    H'0100'

    CBLOCK        H'20'
      HOUR
      MIN
      SEC
      CNT1
      CNT2
      CNT3
    ENDC
;---------------------------------
    ORG            H'0'
    GOTO        L1
;---------------------------------
    ORG            H'4'
    RETFIE
;---------------------------------
L1:
    BANKSEL GPIO
    MOVLW        B'00000000'    ;Relay OFF, LED ON
    MOVWF        GPIO

    BANKSEL      CMCON
    MOVLW        B'00000111'    ;SETUP DIGITAL I/O MODE
    MOVWF        CMCON

    BANKSEL      TRISIO
    MOVLW        B'00001100'    ;PORT 0,1 = OUT, PORT 2, 3 = IN
    MOVWF        TRISIO

    BANKSEL      GPIO
L2:
    BTFSS         GPIO,2            ; CHECK BATTERY
    GOTO         INVERSE_POLARITY
    BTFSC         GPIO,3            ;CHECK SW1
    GOTO         L2

    MOVLW         D'12'
    MOVWF         HOUR
L_HOUR:
    MOVLW         D'60'
    MOVWF         MIN
L_MIN:
    MOVLW         D'60'
    MOVWF         SEC
L_SEC:
    CALL         WAIT_1_SEC
    DECFSZ         SEC,F
    GOTO         L_SEC

    DECFSZ         MIN,F
    GOTO         L_MIN
   
    DECFSZ         HOUR,F
    GOTO         L_HOUR

    MOVLW         B'00000001'    ;Relay OFF, LED OFF
    MOVWF         GPIO
    GOTO         $
;---------------------------------
WAIT_1_SEC:
    MOVLW         B'00000010'    ;Relay ON, LED ON
    MOVWF         GPIO
    CALL         WAIT_HALF_SEC

    MOVLW         B'00000011'    ;Relay ON, LED OFF
    MOVWF         GPIO
    CALL         WAIT_HALF_SEC
    RETURN
;---------------------------------
WAIT_HALF_SEC:
    MOVLW         D'196'
    MOVWF         CNT1
L_CNT1:
    BTFSS         GPIO,2
    GOTO         INVERSE_POLARITY

    MOVLW         D'250'
    MOVLW         CNT2
L_CNT2:
    GOTO         $+1
    GOTO         $+1
    GOTO         $+1
    NOP

    DECFSZ         CNT2,F
    GOTO         L_CNT2

    DECFSZ         CNT1,F
    GOTO         L_CNT1
    RETURN
;---------------------------------
INVERSE_POLARITY:
    MOVLW         B'00000000'    ;Relay OFF, LED ON
    MOVWF         GPIO
    CALL         WAIT_ONE_TENTH_SEC
    MOVLW         B'00000001'    ;Relay OFF, LED OFF
    MOVWF         GPIO
    CALL         WAIT_ONE_TENTH_SEC
    MOVLW         B'00000000'    ;Relay OFF, LED ON
    MOVWF         GPIO
    CALL         WAIT_ONE_TENTH_SEC
    MOVLW         B'00000001'    ;Relay OFF, LED OFF
    MOVWF         GPIO
    CALL         WAIT_ONE_TENTH_SEC
    GOTO         INVERSE_POLARITY
;---------------------------------
WAIT_ONE_TENTH_SEC:
    MOVLW         D'30'
    MOVWF         CNT1
L2_CNT1:
    MOVLW         D'200'
    MOVLW         CNT2
L2_CNT2:
    GOTO         $+1
    GOTO         $+1
    GOTO         $+1
    NOP

    DECFSZ         CNT2,F
    GOTO         L2_CNT2

    DECFSZ         CNT1,F
    GOTO         L2_CNT1
    RETURN
;---------------------------------
     END




 ニッカド充電器としては、以上で完成なのですが、LM358にはオペアンプが2個入っており、一つ余っていますので、電池をモニターすることにします。 電池を入れ忘れたり、あるいは電池を逆に挿入してしまった場合、充電できないようにするとともに、LEDが高速で点滅して、警告を表示するようにします。

 前節の回路図の、R8の接続先を、余っているオペアンプの出力に変更します。 また、R11とR12を増設し、余っているオペアンプに入力します。オペアンプをコンパレータとして動作させ ることになります。電池が正しい極性でセットされておれば、PICのポート2(5番ピン)はHIGHとなります。ですので、プログラム中でポート2を常 に監視し、これがHIGHでなければ、充電を中止します。これが「INVERSE_POLARITY」の部分の働きです。

 また、R5に並列にラジケータを入れて、充電電流を読めるようにしました。




写真1 製作した、ニッカド充電器です。まだ仮組みの状態です。



写真2 一例として、170(mA)の電流値にセットしたところです。ほぼ定電流に制御されていますが、最大で±2(mA)程度の変動はあるよ うです。ニッカド充電器としては、この程度の変動は問題ありません。



 この充電器で、試しに一晩かけてニッカド電池を充電してみましたが、朝起きてみると、うまく充電されていました。本機は急速充電器ではありま せんので、0.1Cで12〜16時間程度かけて充電することになります。実際の充電電流の可変範囲は、56(mA)から310(mA)となりました。最低 電流は大体予想通りですが、最大電流が計算値よりもやや低めです。抵抗器に、普通のカーボン抵抗を用いたので、多少、誤差が出ているのだと思います。精度 の良い金属皮膜抵抗を用い、オペアンプも単電源高精度型(NJM2119Dなど)にすれば、理論値により近づくのではないかと思いますが、そこまで厳密な 精度を要求する代物でもありませんし、そのままにしています。



ゼミ作品に戻る