PD/PPSを使用したUSBタイプC充電器のインターフェイス
このプロジェクトは、embregs gmbhとのコラボレーションに由来します。
彼らは素晴らしい仕事をしました
USBタイプCの電力供給源をトリガーするために、いくつかの興味深いボードがあります。 Zy12pdnなど。
Manuel BLで多くの詳細を見つけることができます。これらのモジュールを使用すると、5 V、9 V、12 V、15 V、20 Vを含む利用可能な固定プロファイルをステップスルーすることができます。他にも多くの電圧があり、抵抗器やジャンパーを介して選択可能な電圧があります。
HynetekのHusb238チップを使用するものを手に入れることができました。これは、i2cを使用した抵抗器またはマイクロコントローラーを介してプログラム可能です。
残念ながら、これはPD 3.0準拠電源の機能をはるかに下回っています。これらのすべてのモジュールは、いわゆる固定プロファイルのみを使用しています。ただし、PPSモード(毛包のような電源)があります。これにより、拡張プロファイルが使用されます。拡張プロファイルは3.3 Vから21 V、最大5 Aの間隔を空けています。電圧は20 mVステップで選択でき、最大電流は50 mAステップで選択できます。
そして、私のアイデアは次のとおりです。あなたの机の中で最もスペースを食べるチャンキーなラボ電源の1つを使用したことがありますか?これらの電源は、多くの場合、0〜30 Vおよび0-5 Aの範囲です。
この拡張プロファイルを使用してラボ電源を模倣できる場合はどうなりますか?適切なPPS対応のUSBタイプC電源からこのプロファイルを要求できるチップが必要です。
さて、簡単で難しい方法があります:
簡単な方法は、いくつかのチップに指示して、電源を形成する目的の電圧を要求することです。
このようなチップは、組み込まれたダイオードから利用可能なAP33772です。専用の評価ボードフォームダイオードまたは他のメーカーなどを取得できます。マイクロ。これはUSB-Cシンク2フォームマイクロをクリックします。 
このチップはNRNDとしてマークされており、AP33772Sに置き換えられました。 「S」バージョンはさらに使いやすいですが、巨大な欠点があります。100mVと250 mAのステップのみを許可します。
難しい方法は、これらのUSB-C PD Physの1つを使用することです。それらは、電源にOSI 0 + 1インターフェイスを提供します。 SWでより高いレベルを実装する必要があります。最も一般的に使用されるチップは、半導体のFUSB302フォームのようです。このチップは、元のZY12PDNで使用されました。
そして、ここにあります: 
これは、Ryan Maによって廃止されたPD-Microです。 FUSB302、いくつかのLED、電源スイッチ、電圧レギュレーターを備えたAruduino Pro Microです。ライアンは、Appropiateプロファイルを簡単に選択できるようにしました。 Kai Clemens Liebichは、RyanのFusb302 Libを改善しました。
唯一の問題は、電圧の安定性です。 5つのUSB Cケーブルを使用しても、電圧降下は非常に重要です。したがって、出力電圧を測定して電源電圧を微調整する必要があるかもしれません。揚げ物のアイデアは、外部2.048 V電圧eferenceで内部ADCを使用することでした。問題は、これはわずか10ビットADCですが、最大21 Vの電圧を測定する必要があります。20.48Vでクリップをクリップすると、20 mVの解像度があります。これで十分のようですが、簡単にうまくやることができます。 INA219を使用する場合
精度を4 mVに改善できます。これは、20 mVのステップサイズを大きく下回っています。 an現在のセンサーを上に取得します。
現在のセンサーACS712での警告
ACS 712は、使いやすい分離電流センサーです。しかし:
これで、電圧を設定し、出力を有効にし、出力電圧と電流を測定できます。そのため、数行のコードを記述して、一定の電圧 /電流ソースを実装できます。さて、再発生装置の応答時間は電源の速度によって制限されますが、それはUSB電源に留めている妥当な制限内です。私のPSは、100Wの時代遅れのウグリーンネクソード2で、〜40 .. 50ミリ秒に切り替わります。
しかし、電圧と電流のスレクテットはどうですか?さて、シリアルインターフェイスとコンピューターを使用して、回路を「リモートコントロール」することができます。しかし、LCDはUIとしてのロータリースイッチについてはどうですか?
そして、これは私の最初のプロトタイプに私を導きます。

そして、ここに左上に時計回りに開始されたコンポーネントがあります。

これは電圧と電流センサーです。シャント抵抗器はR015に縮小され、フルスケールの読み取り値が5になりました。
ボードにはシリアルEEPROM 24C256があります。これは、パラメーターストレージに使用されます。 Atmel's on Chip Eepromを使用できたかもしれませんが、これは耐摩耗性がはるかに少ないです。書き込みサイクルの数がわからなかったので、Externel Eepromを選びました

これが回路の中心です。
PD -MicroのUSB -Cポートは、電源によって占有されています。 USBインターフェイスは通信に使用できません。したがって、HWシリアルインターフェイスは、FT232 USBからシリアルチップまで配線されています。

これは、私のLCDライブラリで説明されているように、PCF8574、電圧インバーター、コントラストの電流源との20x4 HD44780互換ディスプレイです。
ディスプレイに残されているKY-040ロータリーエンコーダースイッチがあります。スイッチのすぐ上には、I2CとVCCバスバーだけがあります。
ラボ電源にはどのような機能が必要ですか?












起動時に、システムはメインメニューから開始する前にバージョンを表示し、メッセージを作成します。
PD/PPS-Controller
====================
Ver. : 3.3 nbl
Build: mmm dd yyyy
初期化が完了すると、メインメニューが表示されます
Mode (x:...) [UI^] !
UU.UU V I.II A
OUT UU.UU V I.II A
[i i i i i] (i)
最後の行I:メニューアイコン
メニュー項目を選択するには、ボタンを押すと、カーソルが表示されます。カーソルが目的のアイテムの位置になるまで回転スイッチを回します。もう一度ボタンを押してメニューを選択します。このメニューでは、2行目の「V」と「A」もメニュー項目です。希望の電圧または電流を調整するには選択します。
このメニューは、目的のPDプロファイルを選択するために使用されます。
# 1 / n (...)
U= UU.UU V - UU.UU V
I= I.II A max
[i i i] (i)
最後の行I:メニューアイコン
プロファイルを選択するには、ボタンを押して、最初の行の「#」シンボルに移動し、再度押してプロファイルの選択を入力します。ターンは、Avalablaプロファイルを介して段階的になります。プロファイルを選択するには、もう一度押し、Buttom Lineのチェックマークに移動するか、「x」を選択して中止します。
このメニューは、操作モードまたはキャリブレーション値を変更するために使用されます。
(i)=auto (*)=. *
(i)=auto
(i)=auto
[i i i x] (i)
[i]または(i)括弧内のアイコン
I= I.III A: I.III A
[i i i x] (i)
[i]または(i)括弧内のアイコン
現在の測定キャリブレーションを調整するには、負荷で出力を有効にし、校正されたアンペアメーターを使用して電流を測定します。
[設定]メニューを入力して、[キャリブレーション]メニューに移動します。測定された電流を入力して、最大精度を得るために可能な限り高い電流を選択するように再構成されたチェックマークを選択します。
AVR SWはArduino IDEで書かれています。 SWを開発している間、私はシステムについていくつかのことを見つけました:
最初の成功の後、フラッシュとRAMの問題にすぐに遭遇しました。 AVRコードを実行できるかもしれませんが、機能をフリーメモリに減らすことをお勧めします。
そして、これにより、ATSAMD21G18を使用して2番目のプロトタイプに導かれます。
AVRフォルダーのソフトウェアはそのままです。この支店では、これ以上開発は行われません。それは一種の仕事ですが、あなた自身の責任で使用してください。 Bootloaderなしでのみコンパイルされます。Boards.local.txtファイルを構成フォルダーから追加する必要があります。
C:Users_user_AppDataLocalArduino15packagesarduinohardwareavr1.8.6
(少なくともWindowsマシンで)、利用可能なボードからBootloaderを使用したArduino Leonardoを選択します。
AvrdudeとUSBaspが必要です
ヒント:安価なクローンの1つを購入するときは注意してください。彼らはしばしば時代遅れのSWが付属しており、うまくいきません。それらを更新するのは問題ありませんが、機能するUSBASPアダプターが必要になります。
SWをフラッシュするプログラマー。非CLIユーザーの場合:AvrduessはAvrdudeにとって素晴らしいGUIです。
Arduino UNOをUSBからISPブリッジとして使用することもできます。
私のset折の後、私はArduinoゼロを試しました。このボードは、48 MHzで実行される皮質M0+アームコントローラーであるATSAMD21G18を使用しています。 256 kbのフラッシュと32 kbのRAMと多くのインターフェイスがあります。クイックポートでは、SWがAVRからARMに簡単に移植される可能性があることが示されました。
これは、最初のカスタムPCBを開始することを決めたポイントでした。
ある頭痛はVCC供給を引き起こします。ほとんどのバックコンバーターサーキットは、動作するために電圧ヘッドルームを必要とし、低電圧ロックアウト回路を「機能させ」ます。しかし、これはこのサーキットのことではありません。 3.3 V VBUSまでの低い動作が必要です。 3.3 V VBUでの操作を保証するために、アンダーボルテージバイパスクルクーツが必要です。それ以外の場合、VBUSが3.3 V出力で4 V -4.7 VであるThresholtの下にVBUがドロップすると、回路がロックアウトされます。
この問題は、わずかに専用に解決されました。理想的なダイオードにある2つの3.3 Vレギュレーターを使用しました。
TPS62932は3.45 Vに出力するように構成されています。UVLOは4.55 Vに設定されており、イネーブルは5.06 Vに設定されています。これにより、バックコンバーターは5 Vを超えて動作し、3.3 Vをわずかに上回る出力を保証するため、3.3 V LDOは賢明に無効になります。 LDOは3.3 Vに設定されたNCV2951ACDMR2Gです。ドロップアウト電圧は、100 MAで最大450 mVです。回路の現在の消費量は50 MA未満なので、推定最大ドロップアウトは300 mVです。
入力電圧が5.06 Vを超えると、LDOはアイドル状態でVCCが3.45 Vです。入力ボルトが4.55 Vを下回ると、バックコンバーターが無効になり、LDOが3.3 VのVCCになります。
CPUは、Brownoutの設定に応じて2.7 Vに賢明に動作します。
PCBA: 
作業プロトタイプ: 
Current Calibration
internal I.III A
reference I.III A
[i i i x] (i)
現在の読み取り値と参照値は再編成されています。
SWはリファクタリングされており、現在はUSB-PD2です。最初のSWでは、電源の制御がメニュークラスに実装されました。これは、独自のコントローラークラスに移動されます。
TODOリマインダーのヘッダーが追加されました。プロファイルの変更をテストするために、電源テストクラスが追加されました。
SWを初めてフラッシュするには、次のようなJTAGデバッグインターフェイスが必要になります。
Atmel StudioまたはArduino IDEを使用して、Arduio Zero Bootloaderをフラッシュできます。
Blinkデモも使用できます。スケッチ - >バイナリのエクスポートを選択します。 IDEはファイルxxx.ino.with_bootloader.arduino_zero.binを作成します。ファイルをフラッシュするだけです。 Arduinoゼロからヒューズビットをコピーする必要があるかもしれません。
ヒューズフォルダーにはいくつかのサンプルがあります。ヒューズの一部は工場で調整されており、上書きできません。
ブートローダーが機能したら、SAM-BAブートローダーを使用してSWをフラッシュできます。 Microchipが提供するSWには、SAM-BAをサポートするすべてのSAMデバイスに適したCLIがあり、したがって使用するのが少し難しいです。はるかにシンプルなツールは、ShumatechのBossaです。
私の充電器は、5 V / 9 V / 12 V / 15 V @ 3Aおよび20 V @ 5A固定プロファイルと3.3 V -21 V @ 5の増強プロファイルをサポートしています。 100W(UGREENでさえ)でマークされた多くの充電器は、電圧範囲が限られている65 W PPS(3.25 A)のみをサポートします。 3.3 V未満の電圧を抑制しない場合があります。一部のPPSプロファイルには、異なる電圧 /電流定格を備えた2つのPPSプロファイルもあります。
Ugreen Nexode 2ポート100W PD-Charger(モデルCD254#50827)サポートプロファイル:
Ugreen Nexode 100Wデスクトップ充電器(モデルCD328#90928)サポートプロファイル:
Anker Powerport I 30W PD
サポートされているプロファイル:
ILEPO USB C高速充電器65 w
サポートされているプロファイル
Iniu Power Bank 20000MAH、22.5W
サポートされているプロファイル
電力が描かれていないときにパワーをリセットするように見えます。
私の「Nexode 100Wデスクトップ充電器」P/N 90928は、負荷なしで〜1時間後にリセットします。他の充電器はそうではありません。
私のiniuパワーバンクは、10秒以内に負荷なしでリセットされます
負荷20Rでログ
0006: FUSB302 ver ID:B_revA
0118: USB attached CC1 vRd-3.0
0172: RX Src_Cap id=1 raw=0x53A1
0172: obj0=0x2A01912C
0172: obj1=0x0002D0E9
0172: obj2=0x0003C096
0172: obj3=0xC076323C
0172: obj4=0xC0DC3228
0172: [0] 5.00V 3.00A
0172: [1] 9.00V 2.33A
0172: [2] 12.00V 1.50A
0172: [3] 5.00V-5.90V 3.00A PPS *
0172: [4] 5.00V-11.00V 2.00A PPS
0176: TX Request id=0 raw=0x1082
0176: obj0=0x42022628
0186: RX GoodCRC id=0 raw=0x0121
0192: RX Accept id=2 raw=0x05A3
0210: RX PS_RDY id=3 raw=0x07A6
0212: PPS 5.50V 2.00A supply ready
0214: Load SW ON
5214: TX Request id=1 raw=0x1282
5214: obj0=0x42022628
5222: RX GoodCRC id=1 raw=0x0321
5228: RX Accept id=4 raw=0x09A3
5246: RX PS_RDY id=5 raw=0x0BA6
5246: PPS 5.50V 2.00A supply ready
10248:TX Request id=2 raw=0x1482
10248: obj0=0x42022628
10256:RX GoodCRC id=2 raw=0x0521
10262:RX Accept id=6 raw=0x0DA3
10280:RX PS_RDY id=7 raw=0x0FA6
10280:PPS 5.50V 2.00A supply ready
...
負荷なしでログ:
0006: FUSB302 ver ID:B_revA
0118: USB attached CC1 vRd-3.0
0172: RX Src_Cap id=1 raw=0x53A1
0172: obj0=0x2A01912C
0172: obj1=0x0002D0E9
0172: obj2=0x0003C096
0172: obj3=0xC076323C
0172: obj4=0xC0DC3228
0172: [0] 5.00V 3.00A
0172: [1] 9.00V 2.33A
0172: [2] 12.00V 1.50A
0172: [3] 5.00V-5.90V 3.00A PPS *
0172: [4] 5.00V-11.00V 2.00A PPS
0176: TX Request id=0 raw=0x1082
0176: obj0=0x42022628
0186: RX GoodCRC id=0 raw=0x0121
0192: RX Accept id=2 raw=0x05A3
0210: RX PS_RDY id=3 raw=0x07A6
0212: PPS 5.50V 2.00A supply ready
0214: Load SW ON
5214: TX Request id=1 raw=0x1282
5214: obj0=0x42022628
5222: RX GoodCRC id=1 raw=0x0321
5228: RX Accept id=4 raw=0x09A3
5248: RX PS_RDY id=5 raw=0x0BA6
5248: PPS 5.50V 2.00A supply ready
10250:TX Request id=2 raw=0x1482
10250: obj0=0x42022628
10258:RX GoodCRC id=2 raw=0x0521
10264:RX Accept id=6 raw=0x0DA3
10284:RX PS_RDY id=7 raw=0x0FA6
10284:PPS 5.50V 2.00A supply ready
==> The Power bank resets and defaults to 5V only.
0006: FUSB302 ver ID:B_revA
0118: USB attached CC1 vRd-3.0
0352: TX Get_Src_Cap id=0 raw=0x0087
0704: TX Get_Src_Cap id=0 raw=0x0087
1056: TX Get_Src_Cap id=0 raw=0x0087