安いATX電源を長持ちさせる・・のか?外付けコンデンサ回路の作成

PCショップに行けば大抵ある3000〜7千円程度の電源。最近はこの価格帯でも500wクラスの容量のものを比較的容易に手に入れることが出来るようになりました。
しかし電源内部の品質は決して良くはありません。
例として去年〜今年中ごろ位まで売られていたサイズという会社のコアパワー2という電源の中身を見てみましょう。


まずは電源の箱を開けたところ。 ※箱を開けた瞬間に保障は消滅します。

一次側のコンデンサの写真です。
珍しく日本製コンデンサが載っています。会社は松下(パナソニック)
200V1200μだそうです。 85℃品なのはこの価格帯の電源ではほぼ当たり前?

下は2次側のコンデンサの写真です。
JunFuという会社(海外)のものが載っています。105℃品でした。
この会社、コンデンサの液漏れ報告があります。安物電源には大抵付いてるようです。

下は小さくて見難いですが、GLという会社のコンデンサです。
105℃品でした。しかしこれも液漏れ報告が結構ありますし、品質はちょっと・・というもののようです。


この電源、Core2Quad Q6700をOCしたりした環境で約1年間使いましたが・・幸い現在液漏れを起こしたコンデンサは電源内にはありませんでした。
しかし、1次側はまだしも、2次側コンデンサの品質がどれも悪いものばかりでいつ液漏れを起こしてもおかしくない状態ですので何とかしなければいけません。


コンデンサが液漏れを起こす主な理由は・・
スイッチング電源のパルス電流を平滑化する際に、負荷が大きくなるとコンデンサに多くの電流が流れるため、
発熱してコンデンサ内部の圧力が上昇→液漏れやパッケージの膨張が発生
他の部品(2次側整流用ダイオード素子や抵抗、1次側スイッチング用MOS−FET等)の発熱によって周りのコンデンサも一緒に加熱されてコンデンサ内の電解液が蒸発→圧力上昇によって液漏れ又はパッケージの膨張
そもそもコンデンサ内の電解液の品質が極端に悪く、電圧を加えられると電気分解をしてしまって圧力上昇→液漏れ

等が挙げられます。
2つ目の原因は冷却を強化すれば回避可能です。3つ目の原因については品質の良いコンデンサを使うしかありません。
一つ目の原因は最近のPCの仕様上、もはやどうしようもないのですが、平滑化をするコンデンサを多くして、負荷分散をさせれば何とかなるかもしれません。


そこで電源用の補助平滑コンデンサ回路を作ってみることにしました。
これを作ることによって期待できる効果
回路的に2次側の平滑コンデンサが増えたことになるので、電源内の安くて品質の宜しくないコンデンサへの平滑時の負担が軽減される。
補助コンデンサによっても電源の出力に乗ってしまう高周波ノイズが吸収されるので、ノイズ低減に繋がる。
CPUや最近の高性能大消費電力GPUによる急な電力需要の増大に対する電源電圧の変動を補助コンデンサに溜まった電力である程度補完できるので、電圧の安定化に繋がる。

補助コンデンサの回路は電源のケース内に回路を組み込むことは出来ない(エアフローや大きさの問題から)ので
IDE又はS−ATA電源の出力を使うことにします。

※12V等が1系統以上の規格の電源が最近増えていますが、殆どの電源では最終的にケーブルで出力されるまでの間に内部的に一度1系統にまとめられている為、12Vならどの12V出力を使っても問題ありません。 他の電圧の部分も同一のことが言えます。

今回は12V、5V、3.3Vの電源ラインに補助平滑コンデンサ回路を入れたいので、それらの電圧を取ることのできるS−ATAの出力を使うことにしました。

追加要素として、各電源ラインの電圧が異常になった場合(定格電圧から+/−10%以上離れた場合)
異常を知らせるインジケータLEDとPICマイコンの回路を実装してみました。


回路図は↓画像をクリック。
※使用するコンデンサはなるべく信頼性のある日本製、マザーボード用等の低ESRコンデンサを使うようにしてください。
※コンデンサの容量は各自増やしても構いませんが、余り大きくしすぎると、電源によっては短絡保護回路が働いてしまう場合があります。(コンデンサは電荷が溜まっていないときの抵抗値はほぼ0になることから。詳しくはコンデンサの充放電特性を各自調べてみてください。)
※下の回路図のマイコンのA0〜A2ポートに分圧抵抗が入っていません。20K、10K、100Ωの所へ10KΩをグランドと各ポート間に繋いで下さい。(例:12V−抵抗(20K)−A2ポート → 12V−抵抗(20K)−A2ポート−抵抗(10K)−GND に変更)



PICマイコンのプログラム
PICライタはあるけどコンパイラは用意できない方はココからコンパイル済みHEXファイルをダウンロードしてください。
ソースは↓に示します。
(CCS−Cコンパイラがある方はコピペしてコンパイルしてください。
16F88だとプログラム領域が凄く空いてるので各自他の機能も入れる等してカスタマイズしてもらっても結構です。)

//////////////////////////////////////
//ATX電源異常電圧検出プログラム(適当)
//2008 12 TaKE_IN
//CCS-C V4 16F88 ADC:A0,A1,A2
//////////////////////////////////////

#include <16F88.h>
#device adc=10

#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO //Internal RC Osc, no CLKOUT
#FUSES NOPUT //No Power Up Timer
#FUSES NOMCLR //Master Clear pin used for I/O
#FUSES BROWNOUT //Reset when brownout detected
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOPROTECT //Code not protected from reading
#FUSES FCMEN //Fail-safe clock monitor enabled
#FUSES IESO //Internal External Switch Over mode enabled

#use delay(clock=8000000)
//#use rs232(baud=4800,parity=N,xmit=PIN_A6,rcv=PIN_A5,bits=8)//(デバッグ/検出電圧調節用)

#define v3in pin_A0///////////////アナログ入力ポート設定(3.3V)
#define v5in pin_A1///////////////アナログ入力ポート設定(5V)
#define v12in pin_A2//////////////アナログ入力ポート設定(12V)

#define v3toohigh pin_B0//////////3.3V過電圧時にLEDを点灯させるポートの設定
#define v3ok pin_B1///////////3.3V適正電圧時にLEDを点灯させるポートの設定
#define v3toolow pin_B2//////////3.3V低電圧時にLEDを点灯させるポートの設定

#define v5toohigh pin_B3//////////5V過電圧時にLEDを点灯させるポートの設定
#define v5ok pin_B4///////////5V適正電圧時にLEDを点灯させるポートの設定
#define v5toolow pin_B5//////////5V低電圧時にLEDを点灯させるポートの設定

#define v12toohigh pin_B6/////////12V過電圧時にLEDを点灯させるポートの設定
#define v12ok pin_B7//////////12V適正電圧時にLEDを点灯させるポートの設定
#define v12toolow pin_A3/////////12V低電圧時にLEDを点灯させるポートの設定

int16 adcvalue3;
int16 adcvalue5;
int16 adcvalue12;

void wakeup();
void LED_on_off();

void main()
{
setup_adc_ports(sAN0|sAN1|sAN2|VSS_VDD);
setup_adc(ADC_CLOCK_DIV_64);
setup_spi(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
setup_oscillator(OSC_8MHZ);

// TODO: USER CODE!!
wakeup();
while(1){
set_adc_channel(0);
delay_us(100);//Processing_Interval
adcvalue3=read_adc();
delay_us(100);//Processing_Interval
//printf("\n3:%LX",adcvalue3);
set_adc_channel(1);
delay_us(100);//Processing_Interval
adcvalue5=read_adc();
delay_us(100);//Processing_Interval
//printf("\n5:%LX",adcvalue5);
set_adc_channel(2);
delay_us(100);//Processing_Interval
adcvalue12=read_adc();
delay_us(100);//Processing_Interval
//printf("\n12:%LX",adcvalue12);
delay_ms(100);//////////////////////////電圧検出間隔の変更はココ
LED_on_off();
}//while(1)
}
void wakeup(void){
output_high(v3toohigh);
output_high(v3ok);
output_high(v3toolow);
output_high(v5toohigh);
output_high(v5ok);
output_high(v5toolow);
output_high(v12toohigh);
output_high(v12ok);
output_high(v12toolow);
delay_ms(250);
output_low(v3toohigh);
output_low(v3ok);
output_low(v3toolow);
output_low(v5toohigh);
output_low(v5ok);
output_low(v5toolow);
output_low(v12toohigh);
output_low(v12ok);
output_low(v12toolow);
}
void LED_on_off(void){
if(adcvalue12<0x02E3){
output_high(v12toolow);
output_low(v12ok);
output_low(v12toohigh);
}else if(adcvalue12>0x0387){
output_low(v12toolow);
output_low(v12ok);
output_high(v12toohigh);
}else{
output_low(v12toolow);
output_high(v12ok);
output_low(v12toohigh);
}
if(adcvalue5<0x01CC){
output_high(v5toolow);
output_low(v5ok);
output_low(v5toohigh);
}else if(adcvalue5>0x0234){
output_low(v5toolow);
output_low(v5ok);
output_high(v5toohigh);
}else{
output_low(v5toolow);
output_high(v5ok);
output_low(v5toohigh);
}
if(adcvalue3<0x0255){
output_high(v3toolow);
output_low(v3ok);
output_low(v3toohigh);
}else if(adcvalue3>0x02DE){
output_low(v3toolow);
output_low(v3ok);
output_high(v3toohigh);
}else{
output_low(v3toolow);
output_high(v3ok);
output_low(v3toohigh);
}
}
//////プログラムソースここまで//////

下は完成した回路です。3枚目は絶縁コーティングを施した上で実際に電源に付けて稼動させているものです。


今回作った回路で電源が必ず安定するとは限りません。しかしこれを付けて起動すると、電源に起因するノイズが低減することは確認できました。(オンボードサウンドカードの無音時のノイズ量の聴き比べにて、オシロで電圧波形見るとか、理論的な証拠となるものが無くてスミマセン。)

もし電源ノイズが気になる時や、あまり高い電源を使っていないという時はこういう回路を作って追加しても良いんじゃないでしょうか。
今回はこれで終了。

戻る