投稿

LT3080実験用DC電源プロジェクト(9)PCB基板化

イメージ
 LT30800を用いた安定化電源 画像だと文字が潰れているとおもうのでPDFを用意 PDF 試行錯誤の結果、ブレッドボードで組んだのが以下   ジャンパーでごちゃっと!!これを一つ一つ、くみ上げてきた自分を誇らしく思う。 TFTの画面に、カラー表示。設定値などの変更は、ローターリーエンコーダーを利用。 リモート、ローカルでLEDの色も変わるように。 KiCadでレイアウト 3Dを確認すうとこんな感じ JLCPCBに発注。少し最近は送料が高くなっている模様。といっては1.2$。で送料は大陸から送られてきて180円ぐらい。 ブレッドボードでは、328PBにブートローダーを焼き付けてあるので、USB経由で以下のプログラを書き込み。 #include <SPI.h> // =============================== // ピンアサイン // =============================== const int PIN_CS = PIN_PB2; const int PIN_DAC_CS = PIN_PB1; const int PIN_PMOS = PIN_PB0; const int PIN_LED_R = PIN_PB7; const int PIN_LED_G = PIN_PB6; const int PIN_LED_B = PIN_PE1; const int PIN_Encoder_A  = PIN_PD7; const int PIN_Encoder_B  = PIN_PD6; const int PIN_Encoder_SW = PIN_PD5; // =============================== // PowerState 構造体 // =============================== struct PowerState {     float setVoltage;        // 設定電圧[V]     float setCurrentLimit;   // 電流制限[mA]   ...

LT3080実験用DC電源プロジェクト(8)疑似SCPI?とマイナス電位発生タイミング

イメージ
 電源をPCから制御できるようにする!というのが当初の目的の一つ。 https://funasover.blogspot.com/2026/01/blog-post.html PCからのコマンドを受け取って、それで動作するようにしたい訳だが、コマンドはオリジナルでもよく、つまり”hoge 1.0"とシリアルで受け取ったら電圧を1.0Vにするとか。 このhogeを考えるのも一苦労。 そこでスキッピーを参考にして、コマンドを定めてやる。 *IDN?ってまず通信を確立できているか?GPIBなんかで接続テストする時に送る これをArduinoで実装すると void loop () {   while ( Serial . available ()) {     char c = Serial . read ();     if (c == ' \r ') continue ;  // ★ CR を無視する     if (c == ' \n ') {       lineBuffer . trim ();       if ( lineBuffer . length () > 0 ) {         processSCPI (lineBuffer);       }       lineBuffer = "" ;     } else {       lineBuffer += c;     }   } } シリアルに何飛び込んだら、processSCPIという関数に飛ぶようにしておいて、   // -------------------------   // *IDN?   // -------------------------   if (cmd == "*IDN?" ) {     Serial . println ( "Arduino, Power Sup...

LT3080実験用DC電源プロジェクト(7)OPAの変更

イメージ
 オペアンプNJM2746のフルスイングを利用してきたが、変更する。 秋月で入手可能 https://akizukidenshi.com/catalog/g/g114002/ 入手性とか価格が手頃。 VOL(Maximum Low-Level Output Voltage)オペアンプが負の電源(ここではGND)に近い電圧を出力しようとした際に、ロー(Low)レベルとして保証される最大電圧値 ここが、データシート上、0.1Vとなっていて、ゼロV付近を出力したくても、オペアンプの出力が0.1Vより下がらないということになる。 そこで同じレールtoレールのオペアンプでも、高性能と言われるOPA192への置換。手元にあったから・・・という理由だが・・・。大陸から取り寄せれば倍ぐらいの値段。 No loadで5mVという事で、かなりVOLが期待できる。 ゲインを3倍に設定した時のDACの入力値とオペアンプの出力の関係性を取得。 二つともゲインは3倍で出てくるのは当然。 さて、ゼロボルト付近を拡大してみる。 オレンジが、NJM2746で、ゼロボルト入力の時でも50mVの出力がある。DAC出力が30mVぐらいでゲイン3なので100mV付近までは線形からずれている。 これでも50mV以下の電圧をかけたい!という要求がどれほどあるか?と考えるとほぼないので、このままでも問題はない。 青のOPA192の方は、綺麗にゼロ付近まで落とせている。 実際は、ゼロボルトで6mVぐらいの出力は出ていて完全にゼロではないが、かなりゼロに漸近する事ができた。 でこの6mVをさらに削減したい場合は、オペアンプV-をマイナス電源電圧につなぐと4mVぐらいに削減できるが効果が薄い。 ゼロ点調整するようにすれば追い込めるが、回路が複雑になるので、ここは6mVを許容する事とする。 でこのグラフどうやって取得したかというと、PCとシリアル通信で取得するアプリをサクッとつくて測定した・・・。この点はいずれ。

LT3080実験用DC電源プロジェクト(6)電流制限まわりの回路

イメージ
 前段の電流制御を行うLT3080のSETを今度は、外部のDAC制限をする事を試みる。 考えた回路が以下。 差動アンプとエラーアンプの組み合わせ。センス用の抵抗1Ωのの両端の電位差を見て流れる電流を検知。DACにより設定した値と電位差の大小を見て、オペアンプの出力を調整するというもの。KiCadで書くと上のようだが解説は下の図で。(上の図において、R7(赤い丸で囲んでいる所の抵抗)が220Ωとなっているが、これは後ほど違う値に) 1Ωの電流センス用の抵抗のLT3080側をVsense_H、次段の後段LT3080側をVsense_Lとして差動アンプへ投入して、電位差Vsenseを得る。ゲイン1だったら1Ωの抵抗だから100mA流れると電位差が丁度100mVだが、ここではR2/R1=2.7倍なので270mVになって現れる。これをVsesnseとしている。 そして後段のオペアンプが、エラーアンプにして、V_DACとVsenseを比べてV_DAC>Vsenseなら出力を大きくしようとするが、電源電圧以上には持ち上がらないのでV_setには電源電圧がそのまま(ここでは12V)がセットされる。 V_DAC<Vsenseになる(つまり設定より過剰な電流が流れる)と後段のエラーアンプがオペアンプの出力電圧をバランスするV_DAC=Vsenseが保たれるように、V_SETを下げにいく。 これをブレッドボードに実装する。抵抗1Ωは3W品を利用しているが、途中で半田してワイヤーで基板に落とすという荒業で対処。この時、まだ、前段のLT3080は可変抵抗は残して電流制限をそうかけずに結構電流がながれるようにしている。 DACとオペアンプ回りは・・・ ワイヤーの空中戦・・・・。あまり美しくはない。DACはMCP4725を同じく使ったが今度はA0をHIGHにしてアドレスを61に設定。 負荷抵抗は、68Ωの抵抗1/4W品を2本並列。34Ωで1/2Wまで流せる。 出力は、先に作ったマイコンからの制御で3.4V程度印加するようにする。 すると抵抗には、0.1Aつまり100mA流れる事になる。この時消費電力は0.34W。1/2Wは下回る。 この状態で、電流制限値を決めるDACの出力を500mVぐらいの出力(270mVより大きく)になるようにマイコンから命令を送る。 オペアンプが動いても、可変抵抗...

LT3080実験用DC電源プロジェクト(5)LT3080のSETへのDAC→OPA出力の接続

イメージ
  データシートに記載されている基本的なラボ用電源の回路。 後段のLT3080が電圧を決めている。 内部の定電流源10uAから接続された抵抗に流されて発生する電圧がSETに入る事で、Vset≒Voutとなり出力される。10uAで1MΩの場合は10Vになるので、出力が10Vになる。 このSETを外部のDACでコントロールしてやる事で、Voutを可変しようという事。 テスト1(上手く動かない) OPの出力は、SETに接続する前は、9.58V、7.17V、4.77V、 2.413V、0.054Vと変化している事を確認している。 それをそのままSETに接続する。 すると、LT3080の出力は、9.58V、7.17V、4.77V、 2.413Vまでは良いが、0.054Vの所が、2.276Vになる。おや? という子事でOPの出力を見てやると、9.58V、7.17V、4.77V、2.413V、 0.905Vとやはり最後の電圧がゼロ付近になっていない・・・。 テスト2(CRD) LT3080だが出力から少なくとも0.5mA以上引き出さないと出力してくれなくなる。 1.5kの抵抗だと0.75V以上ないと0.5mAにならない。 そこで、出力にCRD、定電流ダイオード2mAを別途用意している-3.3Vに向かって付けてやる。 この状態で、出力を測定してやると、LT3080の出力は、9.58V、7.17V、4.77V、 2.413Vまでは良いが、0.054Vの所が、2.14Vと先ほど2.276からは下がるものの・・・ Voutは必ず電流をゼロ付近でも流してあげないといけないので、このCRDは正解のはずだが・・・他に要因が・・・ テスト2(直列抵抗) OPの出力とSETの間に、10kの抵抗を直列に入れてやる。 そして、この抵抗のOP側とSET側をそれぞれ測定する。 OP側   : 9.58V、7.17V、4.77V、 2.413V、0.054V SET側: 9.68V、7.27V、4.87V、 2.513V、0.155V いずれもSET側は最後の0.054Vの所も含めて100mV高い値に。 これは丁度、10kΩx10uA=100mAで、LT3080の内部電流源から流れてくる電流が超えてくるときの電位差に一致する。 10kΩだと100mAだが、ここを小さい値にしてやる...

LT3080実験用DC電源プロジェクト(4)DACとオペアンプ

イメージ
  秋月定番?のMCP4725をDACには利用。オペアンプは、NJM2745Mを使った(後に理由があり変更する予定だが現時点ではこれ) この時点で、マイコンから指示を送って、DACが所定の出力をし、オペアンプでしっかりと3倍の電圧に変換されている事を確認する。 今回は最初から横着する事を目的に328PBを使っているので、Adafruitから提供されているMCP4725のライブラリーを使ってサクッと動かしてみる。 #include <Wire.h> #include <Adafruit_MCP4725.h> Adafruit_MCP4725 dac; void setup () {   Serial . begin ( 9600 );   Serial . println ( "Hello!" ); // put your setup code here, to run once: //For MCP4725A0 the address: when A0 is high, the adress is 0x61.   dac . begin (0x 60 );   dac . setVoltage ( 0 , true ); } void loop () { // for (uint16_t i = 0; i < 4095; i++) // { // dac.setVoltage(i, false); // delay(1); // } dac . setVoltage ( 4000 , false ); delay ( 3000 ); dac . setVoltage ( 3000 , false ); delay ( 3000 ); dac . setVoltage ( 2000 , false ); delay ( 3000 ); dac . setVoltage ( 1000 , false ); delay ( 3000 ); dac . setVoltage ( 0 , false ); delay ( 3000 ); dac.setVoltage(0, true); 第一引数が0-4095の4096階調の出力を示して、第二引数がtrueならMCP4725ないのEEPRO...

LT3080実験用DC電源プロジェクト(3)電源まわり

イメージ
 電源まわり この段階では、入力は12V(WiiのACアダプター)で実験を進めている。 12Vから5V、3.3V、そして-3.3Vを生成する電源まわり。 ATmega389PBは、5V,3.3Vどちらでも8MHzで動作させられるが、TFT LCD3.3Vを使いたいので3.3Vを用意。5Vはいろいろ使う機会も多いから個別に取り出せるようにしようかと。あとマイナス側の-3.3Vも用意。これは、LT3080は常に出力側にマニュアル上は0.5mA少なくとも流れていないとゼロボルト付近の設定ができないため、マイナス側を用意して定電流ダイオードで出力にゼロ付近でも常に電流を流してやるために用意。その他にもオペアンプ電源のマイナス側をゼロVではなく、マイナス側に振る事で、ゼロ付近を確実に出したいという事で用意している。 ブレッドボード上に用意した姿が上。 5Vの出力には、LD1117を使用。ユニバーサル基板を適当な大きさにカットしたものに実装。チップコンデンサーをそれぞれ用いてCを基板上で実装。入力側のコンデンサーは電圧がそれなりにかかるので耐圧の高いものを利用する。 同じく3.3Vには、AP7333を利用。3.3Vで電流容量がそれなりにあるものなら何でもOKでしょう。手元にあったものから利用。 変換基板の裏側にデータシートの通り1uFのコンデンサーを固定している。 最後に負電圧を作成するためNJU7660A。ボルテージコンバーター。入力した電圧を符号をマイナスにして出力してくれる。チャージポンプでマイナス電源を用意。  ATmega328PB、C340Eの3.3V駆動 マイコンは5Vでも駆動できるが、3.3VのLCDを利用する事を想定して、マイコンそのものを3.3Vで駆動する。 PCからUSBのVBUSに+5Vが供給されるが、PCからの5Vはノイズも多いので、ここはどこにも接続せず利用しない。(赤い〇の部分)。CH340とATmega328PBに3.3Vを与えてやる。これでしっかりPCとコミュニケーション(ファームの書き込みやシリアル通信)ができる。