11月25日発売 書籍『Arduinoと3Dプリンタでロボットを作ろう』を出させて頂きました!

【電子工作/自作基板PCB】CH224Kを使ったUSB PDトリガーモジュールを自作してみました!

Type-C端子から9Vや12Vといった任意の電圧を取り出すことが出来るUSB PD(Power Delivery)に対応した製品は最近よく見かけます。

ノートPCの電源に大きなACアダプタを使って接続するといった従来のものから、PDに対応した電源にType-Cケーブルを挿すだけで対応した電圧を取り出せるといったものは非常に便利ですよね!

小型なUSB PDトリガー(デコイ)モジュールはいろいろと販売されています。
ジャンパーの切り替えやスイッチ操作によりPDに対応した電源やモバイルバッテリーなどから5V/9V/12V/15V/20Vといった任意の電圧を取り出すことが出来る便利なモジュールです。
電子工作用途で1つ持っていると何かと結構役立ちます!

PDトリガーモジュールの回路構成や使われているチップをいくつか検証したのですが、メインとなるPDトリガーチップにはFS312やHUSB238、IP2721、CH224Kといったチップを使って制御しているものが多いようです!

ブレッドボードでのテストでいくつかチップを使ってテスト回路を組んでみたのですが、その中でCH224Kチップは扱いやすく便利なPDトリガー用のチップだと思います。

VBUS電圧制御用の端子(CFG1/CFG2/CFG3)に接続された抵抗値により固定で出力電圧を決めるといったアナログ的な使い方や、またこの端子のHIGH or LOWの組み合わせによりデジタル的に出力電圧を切り替えるといった使い方が出来ます。

【電子工作】USB PDトリガー(デコイ) モジュールを試してみる!CH224K PDトリガーチップについての解説!

市販されているPDトリガーモジュールをいくつか入手し使ってみて便利だったので、CH224Kを使った自作PD電源モジュール基板を製作してみました。

CH224Kを使ったUSB PDトリガーモジュールを自作してみました!

こちらが自作したPDトリガー電源モジュールです。

PDトリガーチップにCH224Kを使いスイッチ操作により出力電圧を切り替え、出力側(負荷)の電圧・電流・電力をリアルタイムにOLEDディスプレイに表示させ確認する事が出来るといったPD電源モジュールとなっています。

回路構成

こちらがこのPD電源モジュールの回路構成です。
Type-C端子からのVBUS電圧(出力電圧)をCH224Kチップにより制御しています。
また電流センサーチップINA219を使い負荷側のリアルタイムな電圧・電流をモニターしOLEDディスプレイに表示させています。
これらの制御をATmega328Pを使って行うといった全体構成になっています。

PDトリガーチップ WCH CH224K

PDトリガー(デコイ)チップには、WCH製のCH224Kを使っています。

PDソースと通信して最大20V 5A(100W)まで必要な出力電力をコントロールする事ができ、PD3.0/2.0、BC1.2やその他急速充電プロトコルもサポートされているチップとなります。
また、出力電圧検出機能や加熱・過電圧保護もサポートされています。

CH224KのCFG1/CFG2/CFG3端子の状態(HIGH/LOWの組み合わせ)によりType-C端子から取り出すVBUS電圧(出力電圧)を5V/9V/12V/15V/20Vと任意に切り替え出来るようになっています。

CH224Kに関してはこちらの記事で詳しく解説しているので合わせて読んで頂ければと思います。

【電子工作】USB PDトリガー(デコイ) モジュールを試してみる!CH224K PDトリガーチップについての解説!

電流センサー INA219

出力側(負荷側)の電圧・電流・電力をリアルタイムに表示させるため、電流センサーチップにINA219を使っています。

INA219はI2C接続で使える電流センサーとなり、VBUS-出力端子間に接続した0.1Ω(±1%誤差)のシャント抵抗間の電圧降下を計測し出力電圧・出力電流を計測しています。

INA219に関して詳しくはこちらの記事を参考にして下さい!

【Arduino入門編㉛】INA219モジュールで電圧・電流を計測する基本的な方法!

Atmega328P(内部8MHz動作)

Type-C端子からのVBUS電圧を決定するCH224KのCFG1/CFG2/ CFG3端子の状態(HIGH/LOW)およびOLEDディスプレイ(I2Cタイプ)の表示、またINA219で計測した電圧・電流値、これらをATmega328Pを使い制御しています。

テスト段階ではこれらの制御にATtiny814またはATtiny1614あたりのMCUを使う予定でしたが、チップの入手性の事やプログラムしやすいなどの理由で今回ATmega328Pを使いました。

VBUS電圧は5~20Vまで変化するので、3.3Vレギュレータに78L33を使いATmega328Pは内部8MHz動作の3.3Vで駆動する仕様としています。

またCH224KのPG端子はPDソースと要求する電圧が上手くネゴシエート出来ている場合、LOWに落ちるオープンドレインとなっています。
このPG端子の状態を見て目的の電圧が出力されているか否かの表示もさせています。

例えば出力の低いモバイルバッテリーなどを接続して使う時に15Vや20Vなど高い電圧を要求しても出力出来ない場合がありますが、そのような時はディスプレイにエラー表示をさせる仕様としています。

これらがこの電源モジュールの全体回路構成となります。

基板設計&発注

電子工作用途で便利に使えるようにモジュールサイズは出来るだけコンパクトに仕上げています。

結果的に使ってみたサイズ感はいい感じです!

基板の発注は今回もJLCPCBを使いました。
基板5枚と送料(OCS NEPを選択)を含め500円程度で製作でき、1週間ほどで手元に届きました。

基板データ(ガーバーファイル)をダウンロード出来るようにしておきます。
何かの参考になればと思います。

またJLCPCBでの基板発注方法に関しては、こちらの記事で詳しく解説しているので合わせて読んで頂ければと思います。

【電子工作】はじめての基板製作!JLCPCBさんに基板を発注してみました。ユーザー登録・データ納品・基板到着までの一連の流れをご紹介!

パーツ実装&使用パーツ一覧

表面実装パーツがメインなのでパーツの実装はリフロー装置があると便利です。

MHP30を使って実装しましたが、非常に便利でよく出来たミニリフロー装置です。

【電子工作】コンパクトボディーで安全設計!ミニリフロー装置『Miniware MHP30』を使ってみる!

パーツ実装に関して難しい部分はありませんが、OLEDディスプレイの取り付けはピンヘッダーの樹脂部分(プラスチック部分)を取り外して基板に実装すると無駄な高さが無くなりいいと思います。

使用パーツ一覧です。
入手しやすいパーツ構成で作っているので問題ないと思います。

パーツ定数入手先
抵抗(0805)R1/R2/R3/R5 10kΩAmazon / Aliexpress
抵抗(2512)R4 0.1ΩAliexpress
コンデンサ(0805)C1/C3/C5 0.1μFAmazon / Aliexpress
C2 1μF
C4 0.33μF
IC(チップ)U1 INA219AAliexpress
U2 CH224KAmazon / Aliexpress / 秋月電子
U3 78L33Aliexpress / 秋月電子
U4 ATmega328P-AUAliexpress / 秋月電子
ディスプレイOLED 0.96inch(128×64 I2C)Amazon / Aliexpress / 秋月電子
スイッチSW1/SW2 タクトスイッチ
(SMD 6mm×6mm)
Amazon / Aliexpress
端子J1 Type-C端子秋月電子
J2 ターミナルブロックAmazon / Aliexpress / 秋月電子
J3 ICSP端子用ピンヘッダーーーー
J4 DCジャックAmazon / Aliexpress / 秋月電子

プログラムの書き込み

パーツの実装が出来たらATmega328Pに制御用のプログラムを書き込む必要があります!
プログラムの書き込みにはディスプレイ下にあるICSP端子を使います。
書込み後はこのピンヘッダーは必要ないので取り外しても問題ありません。

制御用プログラム(スケッチ)はこちらからダウンロード出来ます。
このスケッチをボードのATmega328Pに書き込みます。
表示部分の変更等、使いやすく改変等して使って頂ければと思います。

この電源モジュールのATmega328Pは動作電圧3.3V、内部クロック8MHzで動作する仕様にしています。
Arduino IDEから書き込むに際に8MHzで動作させるためのブートローダーの書き込み作業が必要となり、これには対応したボードパッケージのインストールが必要となります。

詳しくはこちらの記事を参考に書き込みを行って下さい!

【電子工作】Arduino(ATmega328P)を単体で内部クロック8MHzで動かしてみる!

ボードパッケージのインストール

Arduinoを使った書き込み手順を簡単に順を追って見ていきます。

ATmega328Pを内部クロック8MHzで動作させるハードウェア構成は現在のArduino IDEには標準で搭載されていないので、Arduino公式サイトにあるbreadboard-1-6-x.zipをダウンロードして使います。

参考 From Arduino to a Microcontroller on a BreadboardArduino

Arduino IDEの[基本設定]で設定しているArduinoフォルダ内に[hardware]フォルダを新規で作成し、このフォルダ内にダウンロード&解凍した[breadboard]フォルダを移動します。

[Arduino]フォルダ

ー [hardware]

ーー [breadboard]

Arduino IDEを再起動して[ツール]→[ボード]の中に[breadboard-avr]という項目が追加されていればボードパッケージの導入の完了です!

書き込み装置との接続

こちらではArduino Unoを書き込み装置として使う方法で進めていきます。

Arduino IDEの[ファイル]→[スケッチ例]→[11.ArduinoISP]から[ArduinoISP]スケッチを開き、このスケッチを書き込み装置として使うArduino(こちらではArduino Unoを使いました)に書き込みます。
これで書き込み装置の完成です!

Arduinoと電源モジュール基板との接続です。
ICSPによる書き込みなので対応した端子同士を接続するだけです。

Arduino Uno電源モジュール基板
3.3VVCC
GNDGND
D10RESET
D11MOSI
D12MISO
D13SCK
MEMO
このPDトリガー基板ではATmega328Pのヒューズを書き換え8MHzで動作させる仕様で作っています。
ATmega328P-AUチップは生チップを使って下さい!
既に16MHzで動作するブートローダーがATmega328Pに書き込まれている場合、8MHzでの動作クロックに変更する際に外部クリスタル(16MHz)の接続が必要となるため、この基板単体では行えないので注意が必要です!

ブートローダーおよびスケッチの書き込み

以下設定でまずブートローダーを書き込みます。

  • [ボード]ATmega328 on a breadboard(8MHz internal clock) 
  • [ポート]Arduino Unoのシリアルポートを選択
  • [書き込み装置]Arduino as ISPに変更

上記設定で、[ブートローダを書き込む]からブートローダーの書き込みを行います。
これでATmega328Pは内部クロック8MHzで動作するようになります。

ブートローダーの書き込みが完了したら、同設定で[書き込み装置を使って書き込む]から上記制御用のスケッチをPD電源モジュール基板に書き込めば作業完了です!

スケッチをカスタムさせるなどの変更が必要なければ、もう書き込み用のICSP端子は必要ないので取り外しても問題ありません!
PD電源モジュールの完成です!

実際に使ってみる

[SET]ボタンを押すごとに出力電圧が5V→9V→12→15V→20Vと切り替わっていきます。
また[DISPLAY]ボタンで表示の切り替えです。

20V 5A(100W)まで出力できます。(INA219の電流計測は3.2Aまでです!)
手持ち負荷が65Wまでのものしかないため、60Wの負荷をかけたテストを行ってみました。

MEMO
制御用のスケッチは上記動画のものから、負荷の大きさに応じて[mA][mW]表示から[A][W]表示に切り替わるように変更しています!

VBUSラインから3.3Vを作り出しているレギュレータチップ78L33は最大30Vまでの耐圧がありますが、出力電圧が高くなると発熱するので注意して下さい!

また上記動画のように高い負荷で使うことはあまりないと思いますが、負荷電流が大きくなると基板裏に配置しているシャント抵抗も結構発熱します!
M3ビス&スペーサーを取り付けて使うのがいいと思います!

注意
大きな電圧・電流を扱える電源モジュール基板となるので製作等は自己責任でお願いします!

9Vや12Vといったこれまで個別で用意していたACアダプターなどもPDトリガーモジュールがあると1台で代用出来てしまうので便利ですね!

最後に!

PDトリガーモジュールはType-C端子から5V以外にも任意の電圧を取り出すことが出来るので便利ですね!

このようなミニサイズのPDトリガーモジュールは安価で入手出来る便利なモジュールですが、今回さらに使い勝手が良くなるように出力側(負荷)の状態をリアルタイムでモニター出来るような仕様で自作してみました。

PDトリガーモジュール、すごく便利です。
何かの参考になればと思います!

コメントを残す