USB を使って PC からリモート操作可能な安定化電源装置を作りました。汎用の電子回路実験に便利です。

製作したCVCC電源の外観
仕様
- 定電圧出力:0~16.5V
- 定電流出力:15mA~1.5A
- ロータリーエンコーダと DAC によるデジタル式出力電圧設定
- 加熱保護
- USB (CDC) によるリモート操作
回路構成
全体制御部

全体制御部の回路図
全体の制御は PIC18F27Q43 で行います。各種スイッチの状態の取得、電圧などの測定、DAC の制御、LCD の表示、リモートコマンドの解釈などを行っています。
絶縁 DC-DC コンバータによって制御回路をフローティング状態にしています。制御回路のグランドは電源装置の出力に繋がれているので、出力電圧に追従するようになっています。このフローティング電源はアナログ回路の電源にも使うのでトランスで作りたいところですが、都合の良いトランスは見当たりません。複数のトランスを使うことも嫌だったので、絶縁 DC-DC コンバータの出力にフィルタと三端子レギュレータを入れることにしました。
大電流が必要なファンと LCD のバックライトには制御回路とは別の DC-DC コンバータを用意しています。
今回の出力は15V、1.5A程度と電源装置としては控えめですが、これはDACの分解能の制約によるものです。使用部品した部品は電力面でかなり余裕があるので、出力電圧、出力電流はそれぞれ分圧抵抗の比を変えれば増大させることができます。しかし、採用した MCP4922 のような安価で手に入れやすい 12bit DAC で実用的な分解能を持たせるためにこのような仕様にしています。
電源制御部

電源制御部の回路図
定電圧モードでは U4A、定電流モードでは U4B で Q1 を制御します。制御の切り替えは、D7、D12 によって行います。出力電圧が低い方のオペアンプが FET の制御を行うことになります。また、二つのオペアンプの出力をコンパレータ U8B で比較することでモードの状態を検出することができます。
Q2、Q3 はオペアンプの出力が飽和することを防ぐスイッチです。オペアンプが飽和状態から復帰する必要がなくなるので、CV / CC のモード切替を高速に行うことができるようになります。
制御回路の電源がフローティング状態になっているので、CV と CC の回路構成を似たものにすることができます。特に CC の制御回路のオペアンプを1つにできるので、発振しにくい安定した回路になりやすいです。
USB/絶縁UART部

絶縁UARTの回路図
メインの制御を行う PIC18F27Q43 は大地グランドを基準に動作していないので、PC との接続部分は絶縁する必要があります。ADuM121N によって UART 信号を絶縁することでこの問題を解決しています。
USB 通信は PIC16F1454 で行います。現在は CDC を用いて通信していますが、将来的に USBTMC を実装できないかと思い専用チップではなくマイコンにしました。
製作・実装
今回はプリント基板を発注しました。メイン基板は 2層、絶縁 UART 基板は 6層です。JLCPCB で異常に安かったので 6層にしましたが、内層は電源のベタしかありません。

発注した基板の写真

CVCC電源の内部写真
ところでこの 6層基板、ENIG にインピーダンスコントロールに Pad on Via とてんこ盛りだったのに 2ドル (5枚) でした。同じ条件の4層基板よりはるかに安いっ!なぜ!
ケースは前に作ったデュアルトラッキング電源と同じものを使いましたが、今回はヒートシンクを筐体の中に入れて、ファンで冷やす形にしました。サーミスタで温度を監視して、熱くなったら冷やします。
基板を立てて実装しましたが、これだと重力の方向を考えた部品配置にするべきだったかもしれません。ショートすることはなさそうですが、足を浮かせた部品が下を向きそうでやや不安です。
動作テスト
7.5V 出力で、無負荷→500mA の過渡応答です。

過渡応答の波形
1us 以内に定常状態へ戻っているので、なかなか速いのではないかと思います。致命的になるようなリンギングも無いようです。一方、ノイズは多めに見えます。20mVpp 程度乗っているようですので、対策を考えたいところです。
リモートコマンド
多くの計測器と同じようなコマンドで制御できるようにしました。必要最低限のコマンドのみ実装しています。校正用のコマンドのみ 2つ目の引数があります。本来であれば複数の引数を並べる際はカンマで区切るべきですが、実装が楽だったのでスペース区切りにしています。
ここにコマンドを載せても私以外が使うことは無いでしょうけれども……
コマンド | 説明 | 返答例 |
---|---|---|
*IDN? | 識別文字列を返します | ice458,PWR1615,001,v1.0 |
VOLTage {<voltage>} | 出力電圧を設定します | |
VOLTage? | 設定されている出力電圧を返します | 5.200626 |
CURRent {<current>} | 電流制限値を設定します | |
CURRent? | 設定されている電流制限値を返します | 0.399862 |
OUTPut {ON|OFF} | 電源装置の出力を切り替えます | |
OUTPut? | 電源装置の出力の状態を返します | ON |
MEASure:VOLTage? | 電圧計の値を返します | 5.197031 |
MEASure:CURRent? | 電流計の値を返します | 0.399921 |
MEASure:TEMPerature? | メイントランジスタの取り付けられたヒートシンクの温度を返します | 35 |
SYSTem:REMote | パネル操作を無効にします | |
SYSTem:LOCal | パネル操作を有効にします | |
SYSTem:ERRor? | 発生したエラーを返します | out of range error |
LOCK? | パネル操作が有効かどうかを返します | ON |
CALibration:VOLTage {HIGH|LOW|DONE} {<voltage>} | 電圧の校正に使います | |
CALibration:CURRent {HIGH|LOW|DONE} {<current>} | 電流の校正に使います |

PCに認識された電源を示す写真
*IDN? の返答ができるようになると、Keysight の Connection Expert のようなソフトに認識されるようになります。地味にうれしい。