Antarmuka untuk pengisi daya USB Tipe C dengan PD/PPS
Proyek ini berasal dari colaborasi dengan Embres GmbH.
Mereka melakukan pekerjaan dengan baik
Ada beberapa papan menarik di luar sana untuk memicu sumber pengiriman daya USB tipe C. Seperti zy12pdn.
Anda dapat menemukan banyak detail di Manuel BL .. Modul -modul ini memungkinkan Anda untuk melangkah melalui profil tetap yang tersedia yang mencakup 5 V, 9 V, 12 V, 15 V dan 20 V. Ada banyak lainnya di luar sana, beberapa memiliki tegangan yang dapat dipilih melalui resistor atau jumper.
Saya berhasil mendapatkan yang menggunakan chip Husb238 dari Hynetek. Yang ini dapat diprogram baik melalui resistor atau mikrokontroler menggunakan I2C.
Sayangnya ini jauh di bawah kemampuan catu daya PD 3.0 yang sesuai. Semua modul ini hanya menggunakan profil tetap. Tetapi ada mode PPS (catu daya porgrammable). Ini menggunakan profil augmented. Profil augmented spacified dari 3,3 V hingga 21 V dan hingga 5 A. Tegangan dapat dipilih dalam 20 mV langkah dan arus maksimum dapat dipilih dalam 50 MA langkah.
Dan inilah ide saya: Apakah Anda pernah menggunakan salah satu catu daya lab yang chunky memakan sebagian besar ruang di meja Anda? Catu daya ini sering berkisar dari 0 - 30 V dan 0 - 5 A. Sejauh yang saya ketahui, saya kebanyakan menggunakan 5 - 15 V pada beberapa amp.
Bagaimana jika kita dapat menggunakan profil augmented ini untuk meniru catu daya lab? Kami akan membutuhkan chip yang mampu meminta profil ini dari catu daya USB tipe C PPS yang sesuai.
Nah ada cara yang mudah dan sulit:
Cara mudah adalah dengan memberi tahu beberapa chip untuk meminta tegangan yang diinginkan dari catu daya.
Chip semacam itu adalah AP33772 yang tersedia dari Dioda Incorporated. Anda bisa mendapatkan dioda bentuk papan evaluasi khusus atau produsen lain misalnya. Microe. Ini adalah USB-C Wastafel 2 Formulir Microe: 
Chip ini telah ditandai sebagai nrnd dan digantikan oleh AP33772S. Versi "S" bahkan lebih mudah digunakan tetapi memiliki downside yang sangat besar: memungkinkan hanya 100 mV dan 250 mA langkah.
Cara yang sulit adalah dengan menggunakan salah satu dari USB-C PD Phys. Mereka menyediakan antarmuka OSI 0 + 1 ke catu daya. Tingkat yang lebih tinggi harus diimplementasikan dalam SW. Chip yang paling umum digunakan tampaknya adalah bentuk FUSB302 pada semikonduktor. Chip ini digunakan dalam zy12pdn asli.
Dan ini dia: 
Ini adalah PD-Micro yang berkenan oleh Ryan Ma. Ini adalah Aruduino Pro Micro dengan FUSB302, beberapa LED, sakelar daya dan regulator tegangan. Ryan telah memudahkan untuk memilih profil prepopiate. Kai Clemens Liebich telah melakukan beberapa perbaikan pada Lib FUSB302 Ryan.
Satu -satunya masalah adalah stabilitas tegangan. Bahkan ketika menggunakan 5 kabel U USB, penurunan tegangan cukup signifikan. Jadi kita mungkin perlu mengukur tegangan output untuk menyesuaikan tegangan catu daya. Gagasan Frist adalah menggunakan ADC internal dengan eferensi tegangan 2.048 V eksternal. Masalahnya adalah, ini hanya ADC 10 bit, tetapi kita perlu mengukur tegangan hingga 21 V. Dengan asumsi kita klip pada 20,48 V kita akan memiliki resolusi 20 mV. Ini sepertinya cukup tetapi kita bisa dengan mudah melakukan lebih baik. Saat menggunakan ADC khusus misalnya INA219
Kita dapat meningkatkan ketepatan menjadi 4 mV. Ini jauh di bawah 20 MV Stepesize. Dan kami mendapatkan sensor saat ini di atas.
Peringatan tentang sensor saat ini ACS712
ACS 712 adalah sensor arus terisolasi yang mudah digunakan. Tetapi:
Sekarang kita dapat mengatur tegangan, mengaktifkan output dan mengukur tegangan dan arus output. Jadi kita dapat menulis beberapa baris kode untuk mengimplementasikan tegangan / sumber arus yang konstan. Nah waktu respons reagulator akan dibatasi oleh kecepatan catu daya tetapi dalam batas yang wajar tergantung pada catu daya USB Anda. PS saya adalah Ugreen Nexode 2 yang sudah ketinggalan zaman dengan 100W yang beralih dalam ~ 40 .. 50 ms.
Tapi bagaimana tegangan dan slectet arus? Yah kita bisa menggunakan antarmuka serial dan komputer untuk "mengontrol remote" sirkuit. Tapi bagaimana dengan LCD A Rotary Switch sebagai UI?.
Dan ini membawa saya ke prototipe pertama saya.

Dan inilah komponen yang dimulai secara searah jarum jam dengan kiri atas.

Ini adalah tegangan dan sensor arus. Resistor shunt telah dikurangi menjadi R015 untuk mendapatkan pembacaan 5 skala penuh.
Ada serial EEPROM 24C256 di papan tulis. Ini digunakan untuk penyimpanan parameter. Saya bisa menggunakan atmel di chip eeprom tetapi ini memiliki resistensi keausan yang jauh lebih sedikit. Saya tidak tahu berapa banyak siklus menulis yang akan dibutuhkan, jadi saya memilih eeprom eksternel

Ini adalah jantung dari sirkuit.
Port USB - C dari PD -Micro ditempati oleh catu daya. Antarmuka USB tidak dapat digunakan untuk komunikasi. Oleh karena itu, antarmuka serial HW ditransfer ke chip serial FT232 ke serial.

Ini adalah tampilan kompatibel 20x4 HD44780 dengan PCF8574, inverter tegangan dan sumber arus untuk kontras seperti yang dijelaskan dalam pustaka LCD saya.
Kiri ke layar ada sakelar encoder rotary KY-040. Tepat di atas sakelar hanya ada bar bus I2C dan VCC.
Fitur apa yang dibutuhkan catu daya lab?












Pada startup sistem akan menampilkan versi dan membangun pesan sebelum memulai di menu utama.
PD/PPS-Controller
====================
Ver. : 3.3 nbl
Build: mmm dd yyyy
Setelah inisialisasi selesai, menu utama akan ditampilkan
Mode (x:...) [UI^] !
UU.UU V I.II A
OUT UU.UU V I.II A
[i i i i i] (i)
Baris Terakhir I: Ikon Menu
Untuk memilih item menu, tekan tombol, kursor akan muncul. Putar sakelar putar sampai kursor berada pada posisi item yang diinginkan. Tekan tombol lagi untuk memilih menu. Di menu ini "V" dan "A" di baris kedua adalah item menu juga. Pilih untuk menyesuaikan tegangan atau arus yang diinginkan.
Menu ini digunakan untuk memilih profil PD yang diinginkan.
# 1 / n (...)
U= UU.UU V - UU.UU V
I= I.II A max
[i i i] (i)
Baris Terakhir I: Ikon Menu
Untuk memilih profil, tekan tombol Navigasi ke simbol "#" di baris pertama dan tekan lagi untuk memasuki pemilihan profil. Berbalik akan melangkah melalui profil Avalabla. Untuk memilih profil, tekan lagi dan navigasikan ke tanda centang di garis buttom atau pilih "x" untuk dibatalkan.
Menu ini digunakan untuk mengubah mode operasi atau nilai kalibrasi.
(i)=auto (*)=. *
(i)=auto
(i)=auto
[i i i x] (i)
[i] atau (i) ikon dalam tanda kurung
I= I.III A: I.III A
[i i i x] (i)
[i] atau (i) ikon dalam tanda kurung
Untuk menyesuaikan kalibrasi pengukuran saat ini memungkinkan output dengan beban dan menggunakan meter ampere yang dikalibrasi untuk mengukur arus.
Masukkan menu Pengaturan dan buka menu kalibrasi. Masukkan arus yang diukur dan pilih tanda centang yang direkomendasikan untuk memilih arus setinggi mungkin untuk mendapatkan presisi maksimum.
AVR SW ditulis dengan Arduino IDE. Saat mengembangkan SW, saya menemukan beberapa hal tentang sistem:
Setelah awal berhasil dengan cepat mengalami masalah dengan flash dan ram. Anda mungkin dapat menjalankan kode AVR tetapi saya sarankan untuk mengurangi fungsionalitas beberapa memori gratis.
Dan ini membawa saya ke prototipe kedua menggunakan ATSAMD21G18.
Perangkat lunak di folder AVR adalah apa adanya. Tidak akan ada perkembangan lebih lanjut di cabang ini. Ini jenis pekerjaan tetapi digunakan dengan risiko Anda sendiri. Ini hanya dikompilasi tanpa bootloader, Anda perlu menambahkan file board.local.txt dari folder konfigurasi ke
C:Users_user_AppDataLocalArduino15packagesarduinohardwareavr1.8.6
(setidaknya pada mesin Windows) dan pilih Arduino Leonardo w/o bootloader dari papan yang tersedia.
Anda akan membutuhkan Avrdude dan USBASP
Petunjuk: Hati -hati saat membeli salah satu klon murah. Mereka sering datang dengan SW yang sudah ketinggalan zaman dan tidak akan berhasil. Tidak masalah untuk memperbarui itu tetapi Anda akan membutuhkan adaptor USBASP yang berfungsi.
programmer untuk mem -flash sw. Untuk pengguna non CLI: Avrduess adalah GUI yang hebat untuk Avrdude.
Anda mungkin juga menggunakan Arduino Uno sebagai USB ke ISP Bridge.
Setelah kemunduran saya, saya mencoba Arduino Zero. Papan ini menggunakan ATSAMD21G18 yang merupakan pengontrol lengan Cortex M0+ yang berjalan pada 48 MHz. Ini memiliki flash 256 kb dan 32 kb RAM dan banyak antarmuka. Port cepat menunjukkan bahwa SW dapat dengan mudah diangkut dari AVR ke lengan dengan hampir tidak ada masalah.
Ini adalah titik di mana kami memutuskan untuk memulai PCB kustom pertama kami menghindari semua masalah yang dihadapi dengan portotype pertama.
Beberapa sakit kepala menyebabkan pasokan VCC. Sebagian besar sirkuit Buck Converter memerlukan beberapa ruang kepala tegangan untuk beroperasi dan "fitur" sirkuit penguncian undervoltage. Tapi ini tidak digunakan untuk sirkuit ini. Perlu beroperasi hingga serendah 3,3 V VBUS. Kami membutuhkan curcuit bypass undervoltage untuk menjamin operasi di 3.3 V VBUS. Kalau tidak, sirkuit akan mengunci ketika VBUS turun di bawah ambang yang biasanya 4 V - 4,7 V pada output 3,3 V.
Masalah ini dipecahkan sedikit terlalu direkayasa. Kami menggunakan dua regulator 3,3 V yang didirikan oleh dioda yang ideal.
TPS62932 dikonfigurasi ke output 3.45 V. UVLO diatur ke 4,55 V dan Enable diatur ke 5.06 V. Ini menjamin konverter Buck beroperasi di atas 5 V dan output sedikit di atas 3,3 V sehingga 3,3 V LDO dinonaktifkan dengan siap payah. LDO adalah NCV2951ACDMR2G diatur ke 3.3 V. Tegangan putus sekolah adalah maks 450 mV pada 100 Ma. Konsumsi sirkuit saat ini di bawah 50 mA sehingga kami akan memiliki perkiraan putus max 300 mV.
Ketika tegangan input di atas 5,06 V LDO menganggur dan VCC adalah 3,45 V. Ketika voltag input turun di bawah 4,55 V konverter uang dinonaktifkan dan LDO mengambil OVE, menghasilkan VCC 3,3 V. Ketika voltog input terus turun, VCC akan turun ke ~ 3 v pada 3.3 v.
CPU akan beroperasi dengan saraf hingga 2,7 V tergantung pada pengaturan Brownout.
PCBA: 
Prototipe yang berfungsi: 
Current Calibration
internal I.III A
reference I.III A
[i i i x] (i)
Bacaan saat ini dan nilai referensi telah direorganisasi.
SW telah direfaktor dan sekarang USB-PD2. Di SW pertama, kontrol catu daya diterapkan di kelas menu. Ini telah dipindahkan ke kelas pengontrolnya sendiri.
Header untuk TODO Repo telah ditambahkan kelas uji catu daya telah ditambahkan ke perubahan profil tes.
Untuk mem -flash SW untuk pertama kalinya Anda membutuhkan antarmuka JTAG Debug seperti
Anda dapat menggunakan Atmel Studio atau Arduino IDE untuk mem -flash bootloader Arduio Zero.
Anda dapat menggunakan demo Blink juga. Pilih Sketsa -> Biner Ekspor. IDE akan membuat file xxx.ino.with_bootloader.arduino_zero.bin. Cukup kunjungi file. Anda mungkin perlu menyalin bit sekering dari Arduino Zero.
Ada beberapa sampel di folder sekering. Beberapa sekering disetel pabrik dan tidak dapat ditimpa.
Setelah bootloader berfungsi, Anda dapat mem-flash SW menggunakan bootloader SAM-BA. SW yang disediakan oleh Microchip memiliki CLI yang cocok untuk semua perangkat SAM yang mendukung SAM-BA dan karenanya agak sulit digunakan. Alat yang jauh lebih sederhana adalah Bossa dari Shumatech.
Charger saya mendukung 5 V / 9 V / 12 V / 15 V @ 3a dan 20 V @ 5a Profil tetap dan 3,3 V - 21 V @ 5 profil augmented. Hati -hati banyak pengisi daya yang ditandai dengan 100W (bahkan Ugreen) hanya akan mendukung 65 W PPS (3,25 A) dengan rentang tegangan terbatas. Mereka mungkin tidak menekan tegangan di bawah 3,3 V. Beberapa bahkan akan memiliki dua profil PPS dengan tegangan / peringkat arus differnet.
Ugreen Nexode 2 Port 100W PD-Charger (Model CD254 #50827) Profil yang Didukung:
Ugreen Nexode 100W Desktop Charger (Model CD328 #90928) Profil yang Didukung:
Anker Powerport I 30W PD
Profil yang Didukung:
Ilepo USB C Fast Charger 65 W
Profil yang didukung
INIU Power Bank 20000mAh, 22.5W
Profil yang didukung
Beberapa daya tampaknya mengatur ulang daya ketika tidak ada arus yang ditarik.
"Nexode 100W Desktop Charger" saya P/N 90928 Reset setelah ~ 1 jam tanpa beban. Pengisi daya lainnya tidak.
Bank Daya INIU saya diatur ulang tanpa beban dalam ~ 10s
Log dengan Load 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
...
log tanpa beban:
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