====== DC→DCコンバーター(最適周波数自動設定)V2 ======
===== 概要 =====
真空管を使用した製作物では、高圧(200V~400V)の電圧が必要となります。
今回製作した、DC→DCコンバータは、入力電圧(数V~数十V)を、出力電圧(数百V)に変換するものです。
以前にも、『DC→DCコンバータ(最適周波数自動設定)』を製作しましたが、ハードおよびソフトの両面を見直し、機能強化、精度向上を図ってみました。
===== 動作原理 =====
基本的な、動作原理は、『DC→DCコンバータ(最適周波数自動設定)』を参照してください。
<ハード見直し>
* DCモータ用フルブリッジドライバIC、パワーMOS-FETの単一ドライブのどちらでも可能とする。
* 出力電圧の変化に追従するために、2系統の平滑回路方式を採用する。\\ 電圧検出用の平滑回路(平滑用のコンデンサの容量を小さくする)\\ 電圧利用用の平滑回路(平滑用のコンデンサの容量を大きくする)
<ソフト見直し>
* CCPモジュールによるPWM(周波数変化型)方式を採用する。
* 周波数範囲を、500Hz~50kHzまでに拡張する。\\ CCPモジュールを、PWMで使用し、その周波数を変化させる。(ソフト負荷を減らす)\\ 500Hz~2kHzまでは、100Hz単位で変化させる。\\ 2kHz~50kHzまでは、1kHz単位で変化させる。
* A/D変換での取り込み回数を多く(平均化)し、安定度を向上させる。\\ 出力電圧の高低判定の安定化を図るために、A/D変換を50回行い、その平均値で判断する。
* 最適値を見つける(ロック状態)とLEDを点灯し、その状態を維持する。
* 繰り返し処理(再測定)を可能とする。(SW1の押下による)
===== 回路図 =====
回路図の点線箇所は、どちらでも可能です。
* 効率重視の場合には、上図の回路を採用してください。
* より簡易な方法で実現したいのであれば、下図を採用してください。
SW1を押下することにより、繰り返し処理(再測定)をさせることが出来ます。
ダイオード(D1、D2)は、高速タイプを使用してください。
{{:imgpaste:202004:htmikan-20200429-115832.png}}
===== ソースコード =====
//********************************************************************************
/*
<DC→DCコンバータ(最適周波数自動設定)V3>
*/
//********************************************************************************
#define SW &GPIO, 3
#define LED GPIO.F1
#define ON 1
#define OFF 0
//**********************************************************************
void Pwm_Change_DutyEx(unsigned int duty_ratio)
{
CCPR1L = duty_ratio >> 2;
CCP1CON.DC1B0 = (duty_ratio & 0b0000000000000001) == 0 ? 0 : 1;
CCP1CON.DC1B1 = (duty_ratio & 0b0000000000000010) == 0 ? 0 : 1;
}
//**********************************************************************
static unsigned short pr2_tmp;
unsigned int measurement(double clock, unsigned long start, unsigned long stop, unsigned int step)
{
static unsigned int max, ad;
static unsigned long freq, tmp;
static unsigned short cnt;
//
max = 0;
for (freq = start; freq <= stop; freq += step) {
tmp = ((1.0 / freq) / clock) * 10.0;
if ((tmp % 10) >= 5) {
PR2 = (tmp / 10) + 1;
} else {
PR2 = (tmp / 10);
}
Pwm_Change_DutyEx((PR2 * 4) / 2);
//
LED = ON;
Delay_ms(25);
LED = OFF;
Delay_ms(25);
//
ad = 0;
for (cnt = 0; cnt < 50; cnt++) {
ad += Adc_Read(0);
Delay_ms(1);
}
ad = ad / 50;
if (ad > max) {
max = ad;
pr2_tmp = PR2;
}
}
return (max);
}
//**********************************************************************
void main()
{
static unsigned int max1, max2, max3, max, ad, tmp;
static unsigned short pr2_tmp1, pr2_tmp2, pr2_tmp3;
//
OSCCON = 0b01110000; //クロックを8Mhzに設定
CMCON0 = 0b00000111; //コンパレータは使用しない。
ANSEL = 0b00000001; //A/D変換はAN3を使用する。
TRISIO = 0b00111001; //入出力ポートを設定する。
//PWMの初期化
Pwm_Init(1000);
Pwm_Change_DutyEx((PR2 * 4) / 2);
Pwm_Start();
//
while (1) {
//125kHz
T2CON.T2CKPS1 = 1;
T2CON.T2CKPS0 = 0;
max1 = measurement(0.000008, 500, 1900, 100); //500Hz~1.9kHzを100Hz単位で測定する。
pr2_tmp1 = pr2_tmp;
//500kHz
T2CON.T2CKPS1 = 0;
T2CON.T2CKPS0 = 1;
max2 = measurement(0.000002, 2000, 7000, 1000); //2kHz~7kHzを1kHz単位で測定する。
pr2_tmp2 = pr2_tmp;
//2Mhz
T2CON.T2CKPS1 = 0;
T2CON.T2CKPS0 = 0;
max3 = measurement(0.0000005, 8000, 50000, 1000); //8kHz~50kHzを1kHz単位で測定する。
pr2_tmp3 = pr2_tmp;
//
max = max(max1, max2);
max = max(max, max3);
if (max == max1) {
PR2 = pr2_tmp1;
T2CON.T2CKPS1 = 1;
T2CON.T2CKPS0 = 0;
}
if (max == max2) {
PR2 = pr2_tmp2;
T2CON.T2CKPS1 = 0;
T2CON.T2CKPS0 = 1;
}
if (max == max3) {
PR2 = pr2_tmp3;
T2CON.T2CKPS1 = 0;
T2CON.T2CKPS0 = 0;
}
Pwm_Change_DutyEx((PR2 * 4) / 2);
LED = ON;
//スイッチが押されると再度繰り返す。
while (Button(SW, 1, 0) == 0)
;
while (Button(SW, 1, 1) == 0)
;
}
}
//********************************************************************************
===== 動作確認 =====
{{:imgpaste:202004:htmikan-20200429-115943.png?500}}
左側:PIC12F683、2SC1815、TA7291です。
右側:平滑回路です。
{{:imgpaste:202004:htmikan-20200429-120014.png}}{{:imgpaste:202004:htmikan-20200429-120017.png}}
手持ちの電源トランスで動作させて見ました。
約49kHzで最大電圧52Vを取り出すことが出来ます。
{{:imgpaste:202004:htmikan-20200429-120025.png}}{{:imgpaste:202004:htmikan-20200429-120028.png}}{{:imgpaste:202004:htmikan-20200429-120032.png}}
手持ちの電源トランスで動作させて見ました。
3kHzで最大電圧140Vを取り出すことが出来ます。
{{:imgpaste:202004:htmikan-20200429-120040.png}}{{:imgpaste:202004:htmikan-20200429-120044.png}}{{:imgpaste:202004:htmikan-20200429-120049.png}}
手持ちの電源トランスで動作させて見ました。
23kHzで最大電圧72Vを取り出すことが出来ます。
{{:imgpaste:202004:htmikan-20200429-120058.png}}{{:imgpaste:202004:htmikan-20200429-120102.png}}{{:imgpaste:202004:htmikan-20200429-120105.png}}
手持ちの電源トランスで動作させて見ました。
35kHzで最大電圧38Vを取り出すことが出来ます。
{{:imgpaste:202004:htmikan-20200429-120112.png}}{{:imgpaste:202004:htmikan-20200429-120115.png}}{{:imgpaste:202004:htmikan-20200429-120120.png}}
如何ですか?
トランスのドライブに使用したTA7291Pは、ロジック側電源(7ピン)と出力側電源(8ピン)を別々に設定できますが、今回は同一(+5Vのみ)としました。
出力側電源は規格上で最大20Vまでいけますので、今回の回路構成で20Vにすると、更に高い電圧を得ることが出来ます。
このページは稲崎様の閉鎖したHPのコピーで、著作権は稲崎様にあります。[[elechobby:picdic:picdic|詳細]]
This page is a copy of Mr. Inasaki's closed website, and the copyright is held by him.[[elechobby:picdic:picdic|Details]]