CH224KでUSB-C PDから5Vと12Vを取り出した話
PD対応のUSB充電器から、5Vと12Vを同時に取りたかった。
Raspberry Pi3と液晶をAnkerの65WPD充電器から1本のType-Cケーブルで動かしたかった。
CH224Kでそれっぽい回路を組んだ。案外うまくいった。
完成図(まずは見てくれ)
実物の写真はこちら。全部入りで動くやつ。
写真だと配線の雑多感があるが、type-cケーブル1本で液晶コントローラとラズパイ3に電力が供給されている。
なぜ作ったか
液晶ディスプレイを自作した。Raspberry Piも載せた。
動いた。嬉しかった。が、電源ケーブルが2本になった。
配線がゴチャゴチャした。コネクタも種類が違った。
「これって、もうちょっとスマートにできるんじゃ?」と思った。
Type-CのPDで1本化しよう。ついでに出力も分けよう。
そう思った。
やりたいこと
- PD充電器から15Vをもらう
- 15Vから5V(Raspberry Pi用)を作る
- 15Vから12V(液晶用)も作る
- 電源ケーブルを1本にまとめたい
- 出力電圧をArduinoで監視したい
※自分が使うAnkerの充電器には12Vの出力に対応していないため、15Vを出力するようにした。
構成概要
この回路はArduinoのシールドとして作った。
Arduinoには、出力された5Vと12Vの電圧をモニタリングさせている。
アナログピンで電圧を読むには分圧が必要なので、1kΩの抵抗を4本使って20Vまで測れるようにした。
全体構成図
分圧回路の構成
1kΩの抵抗を4本直列にして、Vinの1/4の電圧をA0ピンで読む。
この構成だと、A0ピンにはVin × (1/4)の電圧がかかる。
Arduinoが5Vまで測れるなら、Vinは最大で5V × 4 = 20Vまで対応できる。
Arduinoでの電圧読み取りコード
int raw = analogRead(A0);
float ref_voltage = 5.08; // 実測したArduinoの5Vピンの電圧
float vin = raw * (ref_voltage / 1023.0) * 4.0;
ArduinoのanalogRead()は0〜1023の値を返す。
USB給電では5Vピンが必ずしも5.00Vとは限らないので、テスターで測った実測値を使うのがコツ。筆者のテスタでの計測では5.08Vだったのでそれをソースコードに反映した。
使ったもの
-
CH224K
PDデコイと呼ばれるやつ。Type-Cの相手に「15Vちょうだい」とお願いする。
素直にくれる。いいやつ。
ただし、VDDとGNDの間に0.1μFのセラミックコンデンサが必須。
これがないと動かない。 -
LM2596(×2)
降圧モジュール。15Vを5Vと12Vにそれぞれ落とす。
最大3A流せるので安心。Amazonでだいたい5個セット売りされてるあれ。 -
1kΩ抵抗(×4)
分圧用。20Vまでのアナログ測定を可能にする。各電圧(5V,12V,15V)の計測用に3セット準備。スルーホール用の抵抗がたくさん余ってたので、1kオーム抵抗をたくさん使うようにした。
実装したもの
注意点(絶対読んで)
-
CH224Kはコンデンサ必須
VDDとGNDの間に0.1μFのセラミックコンデンサを入れないと、PDの電圧交渉が始まらない。
入れ忘れると「ん?動かないな?」ってなる。筆者はなった。 -
PD充電器は15V出せるか確認
たまに9V止まりのやつもある。CH224Kが頑張っても、相手が対応してないと無理。 -
プリント基板の配線幅に注意
今回の基板は1mm幅で設計したけど、ラズパイ3をフル負荷で動かすにはちょっと細いかも。
実験用にはOK、本番用途には2mm以上やベタGNDを検討したい。