UC3843Aな昇圧DCDCをESP32で出力電圧の調整をできるようにする(CdSアナログフォトカプラ式)

投稿者: | 6月 12, 2023

きっかけ

DCDCコンバータのフィードバックの分圧抵抗をCdSアナログフォトカプラにして、PWMで抵抗値を可変にすれば、出力が可変にできるなーって思いついた次第です。前回の記事でCdSアナログフォトカプラの特性を計測したので、今回はそれを実際に使ってみます。以前にはESP32で電圧を計測して、フィードバック端子に直接デジタル信号を入れるというものも行なっています。

前回のおさらい

前回の記事より計測結果はこんなでした。

CdSアナログフォトカプラとPWMの特性

今回やること

前回作成したCdSアナログフォトカプラをDCDCコンバータのフィードバック端子部分に接続します。CdSアナログフォトカプラのLEDをPWMで明るさを可変にし、CdSを可変抵抗として使用します。CdSの応答速度の遅さを利用しています。これによって、デジタル入出力しかないマイコンでもDCDCコンバータの出力を可変にできます。

使用するDCDCコンバータ

今回使用するDCDCコンバータはこれです。

UC3843Aな昇圧DCDCをESP32で出力電圧の調整をできるようにする(CdSアナログフォトカプラ式)
昇圧DCDCコンバータ(UC3843Aを使用)

TEXAS INSTRUMENTSのUC3843Aが使用されている150Wの昇圧DCDCコンバータです。以前に、ESP32を使ってフィードバックを直接制御したときに使ったのと同じやつです。

回路図

元々のフィードバック部分の回路図はこんなです。

UC3843Aな昇圧DCDCをESP32で出力電圧の調整をできるようにする(CdSアナログフォトカプラ式)
フィードバック部分の回路図
元々のフィードバック部分の回路

可変抵抗で出力電圧を変更できます。フィードバック端子(FB)が2.5VになるようにUC3843Aは動作します。そのため、可変抵抗器の抵抗値を小さくすると電圧は下がり、大きくすると上がります。

改造後の回路図はこんな感じにしました。CdSアナログフォトカプラを用いた可変抵抗器はGND側に配置しました。Vout側に配置してしまうと、LEDが全く光ってないときに、電圧が無限に上昇してしまうからです。元々ついている可変抵抗は最大出力電圧の調整ができます。1kΩは元の回路のものを使い回すので配置を変えるのと、4.7kΩを追加するだけです。CdSアナログフォトカプラは176Ω~2.5kΩの区間を使用しています。12~35Vくらいが出力されるはずです。LEDを明るくすると出力電圧は高くなり、暗くすると低くなります。

UC3843Aな昇圧DCDCをESP32で出力電圧の調整をできるようにする(CdSアナログフォトカプラ式)
フィードバック部分の回路図
改造後
改造後

改造

実装していきます。適当に実装しました。パターンのカットが無く、部品点数も少ないので比較的簡単です。

UC3843Aな昇圧DCDCをESP32で出力電圧の調整をできるようにする(CdSアナログフォトカプラ式)
改造後 実装後
実装後表
UC3843Aな昇圧DCDCをESP32で出力電圧の調整をできるようにする(CdSアナログフォトカプラ式)
改造後 実装後
実装後裏

プログラム

ESP32に書き込んだプログラムはこんな感じです。ボタンを押すごとに、前回のCdSアナログフォトカプラの特性を計測したときと同じです。PWMを255段階としてボタンが押されると15ずつ大きくしていくだけです。

#define BOOT_SW 0 //DevKit上のBOOTボタン
#define LED 2 //DevKit上の青色LED
#define LED2 32 //PWMの出力端子

int Button_flag = 1; //スイッチの状態、押されていない状態で1・押された状態で0
int oldButton_flag = 1;
int LED_flag = 0;
int pwm = 1;

void setup() {
  Serial.begin(115200);
  pinMode(BOOT_SW,INPUT_PULLUP);
  ledcSetup(0,10000,8);
  ledcAttachPin(LED,0);
  ledcAttachPin(LED2,0);
}

void loop() {
  oldButton_flag = Button_flag;
  Button_flag = digitalRead(BOOT_SW);
  //Serial.println(flag);
  if (Button_flag != oldButton_flag && Button_flag == 1){
    Serial.println(pwm);
    ledcWrite(0,pwm);
    if (pwm == 1){
      pwm = 15;
    }
    else{
      pwm = pwm + 15;
      if (pwm > 256){
        pwm = 1;
      }
    }
  }
}

動作

実際に動作させてみました。負荷として100WのLEDをつけています。

いちばん重要な電圧を測るのを忘れてました。もう、分解してしまったので計測できません…トホホ

おわりに

ツイート上ではボツ案と言っていますが、没にはしません。0.5MΩではなく5MΩのものを使用とかして線形性のある部分だけで使ってみようかなと考えてます。もしくは、計測したデータから立式して、それに代入して線形性を出すとか、色々試せます。まあ、実験は先になると思いますが。
フィードバック動作をESP32でやるよりも安定するので、こちらの方法を優先的に検討してます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)