DC→DCコンバータ（最適周波数自動設定）

概要

直流の5Vを100V前後にコンバートするユニットです。 通常は、固定の周波数（50Hzまたは60Hz）の電圧をトランスの一次側に加えるのですが、今回は周波数を 使用するトランスに最も適した値に設定（自動的に判断）することにより効率よく出力電圧を得ることにしました。

動作原理

トランスのドライブには、DCモータ用フルブリッジドライバ（TA7291P）を使用しました。 周波数は、約500Hz～40kHzの間を連続的に変化させ、その時のトランスの二次側の電圧を測定します。 そして最も電圧が高くなる周波数を見つけ出し、その周波数で以降は動作させるようにします。

トランスのドライブに使用したTA7291Pは、ロジック側電源（7ピン）と出力側電源（8ピン）を別々に設定できま すが、今回は同一（+5Vのみ）としました。出力側電源は規格上で最大20Vまでいけますので、今回の回路 構成で20Vにすると単純計算では、4倍の出力（440V）を得ることが出来ます。但し、トランスの一次側がこの ままでは持ちませんが．．．

回路図

本来ならFETやTrを組み合わせて、ブリッジドライバを構成すると思うのですが、DCモータ用フルブリッジ ドライバ（TA7291P）を使用したのでとてもすっきりした回路となりました。

ソースコード

//********************************************************************** void Vdelay_us(unsigned char us) { unsigned char i; for (i = 0; i < us; i++) { Delay_us(1); } } //********************************************************************** void main() { unsigned char cnt, tm, v; unsigned int tmp, max; OSCCON = 0b01110000; // クロックは8Mhz CMCON0 = 0b00000111; // コンパレータは使用しない。 ANSEL = 0b00000001; // A/D変換を使用する。 TRISIO = 0b00000001; GPIO = 0b00001000; v = 0; max = 0; while(1) { // 周波数を変化(約500Hz～40KHz)させながら電圧を測定し、MAX地点を調べる。 for (tm = 200; tm > 1; tm--) { tmp = 0; for (cnt = 0; cnt < 50; cnt++) { GPIO.F1 = 1; GPIO.F2 = 0; Vdelay_us(tm); GPIO.F1 = 0; GPIO.F2 = 1; Vdelay_us(tm); tmp += Adc_Read(0); } tmp = tmp / 50; if (max < tmp) { max = tmp; v = tm; } } // MAX地点の周波数で以降は発振させる。 while(1) { GPIO.F1 = 1; GPIO.F2 = 0; Vdelay_us(v); GPIO.F1 = 0; GPIO.F2 = 1; Vdelay_us(v); } } } //**********************************************************************

動作確認

全体の画像です。 左から、パワートランス、DCモータ用フルブリッジドライバ、PIC12F683、ネオンランプ（100V用）、テスタです。 最適電圧とその時のネオンランプの点灯の様子です。出力電圧は約110Vです。結構明るいですよ。 その時の周波数は、約12kHzでした。周波数が高いとコンデンサの容量が小さくて済むので良いですね。 使用したトランスです。（手持ちの適当な物を使用しました） トランスの一次側の波形です。（2V/DIV） TA7291PとPICの接続部分です。GNDを合わせてもたったの3本だけです。 整流部分です。 真空管のプリアンプ等のB電圧に使用してみては如何でしょうか？