DC→DCコンバータ(最適周波数自動設定)
概要
直流の5Vを100V前後にコンバートするユニットです。
通常は、固定の周波数(50Hzまたは60Hz)の電圧をトランスの一次側に加えるのですが、今回は周波数を使用するトランスに最も適した値に設定(自動的に判断)することにより効率よく出力電圧を得ることにしました。
動作原理
トランスのドライブには、DCモータ用フルブリッジドライバ(TA7291P)を使用しました。
周波数は、約500Hz~40kHzの間を連続的に変化させ、その時のトランスの二次側の電圧を測定します。
そして最も電圧が高くなる周波数を見つけ出し、その周波数で以降は動作させるようにします。
トランスのドライブに使用したTA7291Pは、ロジック側電源(7ピン)と出力側電源(8ピン)を別々に設定できますが、今回は同一(+5Vのみ)としました。
出力側電源は規格上で最大20Vまでいけますので、今回の回路構成で20Vにすると単純計算では、4倍の出力(440V)を得ることが出来ます。
但し、トランスの一次側がこのままでは持ちませんが...
回路図
ソースコード
- dc2dc.c
//********************************************************************** 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); } } } //**********************************************************************







