Repository navigation
DCDC_Converter
askn37 edited this page Oct 12, 2026
·
1 revision
降圧回路(BuckConverter)の制御は、AC周辺機能ひとつで構成できる。
-
AC0の正入力に、最終出力の電圧フィードバックを抵抗分圧で投入。 - 負入力に内部固定参照電圧を投入し、正入力と比較。
-
AC0の比較結果出力で、入力電圧をスイッチング。
/* for AVR-DB sample */
/* 5V入力 3.3V出力を想定 */
/* フィードバック分圧抵抗 1kΩ+1kΩ */
pinMode(PIN_PA7, OUTPUT); /* AC_OUT -> PA7 */
/* or */
// pinMode(PIN_PC6, OUTPUT);
// PORTMUX_ACROUTEA = PORTMUX_AC0_ALT1_gc; /* AC_OUT -> PC6 */
/* 内部参照電圧 2.048V(最大)*/
VREF_ACREF = VREF_REFSEL_2V048_gc;
/* 目標値 3.3V を抵抗分圧1:1 で比較 */
AC0_DACREF = (255 / 2.048) * (3.3 / (1 + 1));
AC0_MUXCTRL = AC_INVERT_bm /* AC_OUT を反転出力する場合 */
| AC_MUXPOS_AINP1_gc /* 正入力 PD3 */
| AC_MUXNEG_DACREF_gc; /* 負入力 内部参照 */
AC0_CTRLA = AC_ENABLE_bm /* AC0 有効化 */
| AC_OUTEN_bm /* AC_OUT 出力有効: PA7 または PC6 */
| AC_HYSMODE_SMALL_gc; /* 10mV 幅の入力ヒステリシス */外付け部品の各諸元は、かなり適当でも動作する。(破綻しにくい)
- AC_OUT を直接降圧回路入力にしても良い。(最大負荷 50mA)
- 出力平滑化コンデンサ: 1uF 〜 47uF。負荷に対して大きすぎると突入電流が増加する。
- 電力変換インダクタ: 1uH 〜 47uH。負荷に対して大きすぎると制御誤差が大きくなる。小さすぎると電圧変動が大きくなる。
- 分圧抵抗:1kΩ+1kΩ 〜 10kΩ+10kΩ。大きすぎると追従精度が低下する。小さすぎると出力ディスチャージとして機能するので、損失が増加する。
昇圧回路(BuckBooster)の制御は、以下の 3要素から構成できる。
- AC周辺機能での 出力電圧フィードバック。
- TCx周辺機能での PWM波形生成。
- CCLn周辺機能での PWM出力オン/オフ。
外付け部品の選定では、昇圧用インダクタと、短絡用 FET素子の諸元が重要。
- インダクタ容量が小さすぎると、過渡応答の都合から PWM周波数が高くなりすぎる。0.2 us レベルのオーダーとするには 10uH 以上が必要。
- インダクタ容量が大きすぎると、短絡用 FET素子に過大電流が流れる。低オン抵抗かつ高電流対応の FET素子が必要。
- 逆に言えば 数mA 程度の軽負荷出力を求めるなら(インダクタ容量を削れないので)BuckBooster は損失が大きく向いていない。多段チャージポンプ(必要なら BuckConverter を追加)の方が適する。
/* for AVR-DB sample */
/* 5V入力 12V/1A 出力を想定 */
/* インダクタ容量 47uH、FET素子 IRLML6344(Nch 30V/5A ON=29mΩ)を想定 */
/* フィードバック分圧抵抗 1kΩ+4.7kΩ(分圧比5.7、IO電圧5Vなら 14.2V出力まで許容)*/
/* 無負荷でも 50mA 程度の損失が生じることに注意 */
VREF_ACREF = VREF_REFSEL_2V500_gc; /* 内部参照電圧 2.5V(最大)*/
AC0_DACREF = (255 / 2.5) * (12.0 / (1 + 4.7));
AC0_MUXCTRL = AC_MUXPOS_AINP0_gc | AC_MUXNEG_DACREF_gc; /* 正入力:PD2 */
AC0_CTRLA = AC_ENABLE_bm | AC_HYSMODE_SMALL_gc;
/* ここでは TCA標準動作だが、TCA分割動作でも良い */
/* 単一傾斜動作で LOW 出力先行 */
/* 4.7uH 〜 10uH クラスのインダクタでは 48MHz PLL動作の TCDが必要になる */
TCA0_SINGLE_PER = (F_CPU / 1e6) * 1.4;
TCA0_SINGLE_CMP0 = (F_CPU / 1e6) * 0.7; /* FETオン時間 0.7us */
TCA0_SINGLE_CTRLB = TCA_SINGLE_WGMODE_SINGLESLOPE_gc | TCA_SINGLE_CMP0EN_bm;
TCA0_SINGLE_CTRLA = TCA_SINGLE_CLKSEL_DIV1_gc | TCA_SINGLE_ENABLE_bm;
EVSYS_CHANNEL0 = EVSYS_CHANNEL0_AC0_OUT_gc; /* AC0から フィードバック */
EVSYS_USERCCLLUT2A = EVSYS_USER_CHANNEL0_gc;
CCL_TRUTH2 = CCL_TRUTH_1_bm; /* フィードバックオンで PWM波形出力オフ */
CCL_LUT2CTRLB = CCL_INSEL0_TCA0_gc
| CCL_INSEL1_EVENTA_gc;
CCL_LUT2CTRLA = CCL_ENABLE_bm | CCL_OUTEN_bm; /* FET素子 GATE制御: PD3 */
CCL_CTRLA = CCL_ENABLE_bm;Twitter(X): @askn37
BlueSky Social: @multix.jp
GitHub: https://github.com/askn37/
Product: https://askn37.github.io/
Copyright (c) 2026 askn (K.Sato) multix.jp
Released under the MIT license
https://opensource.org/licenses/mit-license.php
https://www.oshwa.org/
multix.jp/てくにかるむ(休眠中)
Multix Zinnia Product SDK [*AVR]
AVR.JP(日本語訳)
AVR-LIBC(日本語訳)