文書の表示以前のリビジョンバックリンクPDF の出力全て展開する/折り畳むODT 出力文書の先頭へ この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。 ====== 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}} ===== ソースコード ===== <code c dc2dc_v3_2.c> //******************************************************************************** /* <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) ; } } //******************************************************************************** </code> ===== 動作確認 ===== {{: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にすると、更に高い電圧を得ることが出来ます。 <callout type="warning" title="著作権表示 copyright notice"> このページは稲崎様の閉鎖した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]] </callout> elechobby/picdic/pic12f683/29.txt 最終更新: 2025/10/17 14:29by 127.0.0.1