Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Reverse-Engineering Qualcomm Quick Charge 2.0/3.0 Menggunakan ATtiny85: Panduan Praktis

Komponen dan Perlengkapan

Microchip Technology ATtiny851
Regulator SparkFun LM1117 3.3V1
SparkFun USB Male A1
Resistor 10k ohm2
Resistor 2.21k ohm1
Arduino Proto Shield1
Tombol Tekan SparkFun 12mm1
Power Bank atau Charger QC1
Jumper Umum (0.1")8
Male-Header 36 Posisi 1 Baris - Panjang (0.1")1
Resistor 0.05 ohm10
Arduino UNO1
Kabel Jumper Laki/Perempuan7
LED (umum)1
Resistor 22.1k ohm1

Alat dan Mesin yang Diperlukan

Pemancah solder (umum)

Aplikasi dan Layanan Online

Arduino IDE

Tentang Proyek Ini

Pendahuluan

Banyak perangkat elektronik konsumen yang diberi daya USB memiliki solusi Qualcomm QC (Quick Charge) bawaan untuk pengisian daya cepat pada berbagai voltase alih-alih 5.0 volt biasa. Ini membuka kesempatan untuk menggunakan Power Bank kompatibel QC untuk proyek yang membutuhkan lebih banyak daya atau voltase lebih tinggi seperti 9/12 volt.

Tujuan proyek ini adalah mengembangkan perangkat yang dapat mengubah protokol QC dan membiarkan hobi, pengembang, insinyur menggunakan power bank mereka untuk lebih banyak voltase/daya untuk proyek berikutnya yang membutuhkan banyak daya.

Reverse-Engineering Qualcomm Quick Charge 2.0/3.0 Menggunakan ATtiny85: Panduan Praktis
Reverse-Engineering Qualcomm Quick Charge 2.0/3.0 Menggunakan ATtiny85: Panduan Praktis
Reverse-Engineering Qualcomm Quick Charge 2.0/3.0 Menggunakan ATtiny85: Panduan Praktis

Gambar di atas menunjukkan output 5, 9, 12 Volt dari power bank kompatibel QC 2.0 yang memberi daya resistor 10 Ohm 5 Watt.

Mengembangkan Hack * Perangkat

Seluruh perangkat memiliki dua komponen aktif - regulator tegangan LM1117 3.3V dan mikrokontroler ATtiny85 untuk mengontrol. Semua bagian lain adalah resistor, tombol tekan, konektor, jumper, header, terminal, papan prototipe, dll.

Reverse-Engineering Qualcomm Quick Charge 2.0/3.0 Menggunakan ATtiny85: Panduan Praktis

Untuk membangun perangkat, pertama komponen ditempatkan dalam tata letak rapi, lalu dipancarkan. Beberapa jumper 0 ohm digunakan untuk menghubungkan berbagai bagian.

Ada jumper untuk menonaktifkan rangkaian papan dan mengaktifkan pemrograman. Karena garis pemrograman (SPI - MOSI, MISO, SCK) juga bertindak sebagai GPIO selama operasi perangkat.

Reverse-Engineering Qualcomm Quick Charge 2.0/3.0 Menggunakan ATtiny85: Panduan Praktis
Reverse-Engineering Qualcomm Quick Charge 2.0/3.0 Menggunakan ATtiny85: Panduan Praktis
Reverse-Engineering Qualcomm Quick Charge 2.0/3.0 Menggunakan ATtiny85: Panduan Praktis

Memprogram ATtiny85 dengan ISP

Sebelum memprogram ATtiny85, itu dikeluarkan dari IC Base dan ditempatkan pada papan roti. Untuk memprogram ATtiny85, papan Arduino UNO diubah menjadi programmer ISP dengan mengunggah sketsa "ArduinoISP" dari File > Contoh > ArduinoISP. Sketsa ini tersedia di Arduino IDE.

Memprogram ATtiny85 memerlukan langkah berikut:

Rangkaian berikut disiapkan untuk memprogram ATtiny85:

Reverse-Engineering Qualcomm Quick Charge 2.0/3.0 Menggunakan ATtiny85: Panduan Praktis
Reverse-Engineering Qualcomm Quick Charge 2.0/3.0 Menggunakan ATtiny85: Panduan Praktis

ISP = in system programmer

Secara alternatif, ATtiny85 dapat diprogram dengan tetap berada pada perangkat dengan mencabut semua jumper di sekitarnya.

Operasi Perangkat

Untuk menggunakan perangkat, pertama perlu dihubungkan ke Power Bank (atau Charger) kompatibel QC. Secara default voltase USB Power Bank QC akan 5.0 volt.

Semua jumper harus dihubungkan setelah mengunggah kode, sehingga MCU dapat berkomunikasi melalui D+/- ke sumber QC.

Regulator LM1117 3.3 V akan menyala dan memberi daya ke ATtiny85. MCU ini akan mulai mengeksekusi kode. 4 pin I/O ATtiny85 terhubung ke resistor pembagi tegangan yang akan digunakan sebagai Output High dan Low. Pin I/O lain terhubung ke tombol yang akan diinisialisasi sebagai input Pull Up. Tombol ini mengambil input pengguna untuk mengubah voltase sumber QC.

Sekarang, sebelum masuk ke detail, penting untuk mengetahui bagaimana Output akan berubah. Terdapat setidaknya 4 garis/kabel yang umum untuk setiap jenis USB (USB A, B, C, 1.1, 2.0, 3.0+).

Ini adalah :-

Dalam Charger/Power Bank biasa, VBUS tetap, karena itu pengiriman daya terbatas oleh arus yang mungkin 500 mA, 1 A, 2 A menghasilkan 2.5 Watt, 5 Watt dan 10 Watt masing-masing.

Namun dalam perangkat sumber QC, ada konverter boost internal yang dapat menaikkan voltase tergantung pada permintaan perangkat penerima daya (PD) !!!

QC 2.0 ( juga 3.0 ) menggunakan D+ dan D- USB untuk berkomunikasi dengan PD. PD mengirim sinyal voltase pada D+ dan D- dan charger QC akan memberikan daya sesuai dengan mengubah voltase VBUS. Menurut Datasheet CHY ini, berikut adalah tabel yang menjelaskan pasang sinyal apa pada D+/D- dari PD yang akan membuat QC memberikan output voltase apa:

Reverse-Engineering Qualcomm Quick Charge 2.0/3.0 Menggunakan ATtiny85: Panduan Praktis

Dukungan QC 2.0 dimulai ketika voltase pada D+ dan D- sama dengan nilai pada baris ke-4 dari tabel ini dan tetap setidaknya 1.25 detik. Jika D+ menjadi 0.0 volt (di bawah 0.325 Volt sebenarnya) dukungan QC akan berhenti dan Output akan 5.0 volt. Dengan mengatur voltase menurut tabel ini, output pada VBUS dapat diubah.

Di sini, 4 Output ATtiny85 terhubung ke 2 jaringan pembagi tegangan yang terdiri dari dua resistor 10k dan dua resistor 2.2k untuk menghasilkan sinyal voltase ini untuk garis D+/D-.

Reverse-Engineering Qualcomm Quick Charge 2.0/3.0 Menggunakan ATtiny85: Panduan Praktis

Misalnya, untuk menghasilkan 3.3 V pada D+, resistor atas dan bawah yang terhubung ke dua pin Output ATtiny85 PB3 dan PB4, keduanya akan dibuat High dari kode.

Demikian pula, untuk menghasilkan 0.6 V pada D-, resistor atas dan bawah yang terhubung ke dua pin Output ATtiny85 lainnya (PB1 dan PB3) akan dibuat High dan Low masing-masing.

Dengan cara ini charger/power bank QC 2.0 menerima permintaan perubahan voltase dan berubah sesuai. Tombol Tekan dikonfigurasi sebagai Input PULLUP, saat tidak ditekan, dibaca HIGH oleh MCU dan eksekusi kode terperangkap dalam while loop mencegah perubahan set voltase apa pun. Saat pengguna menekan Tombol Tekan, while loop terputus dan voltase berikutnya diatur. Kemudian lagi, eksekusi kode memasuki while loop berikutnya untuk memegang voltase VBUS saat ini.

Ada LED yang menyala redup (5V), sedang (9V) dan terang (12V) untuk memberikan representasi visual output voltase kepada pengguna.

Aplikasi yang Mungkin

Dukungan untuk Kelas QC Lainnya

Karena QC 2.0 Class B, QC 3.0 dan QC 4.0 kompatibel mundur dengan QC 2.0 Class A, maka perangkat ini mungkin bekerja dengan semua charger dan power bank terbaru. Namun opsi voltase akan 5.0, 9.0 dan 12.0 volt. Jika voltase output lain diperlukan, silakan baca datasheet CHY 100, 101, 103 dan ubah kode sesuai.

Peringatan!

Catatan: Direkomendasikan untuk tidak mereplikasi proyek ini jika poin-poin di atas tidak dipahami oleh seseorang, jika tidak, Risiko Bahaya Kebakaran atau Kehilangan Peralatan mungkin terjadi!

Tidak mungkin untuk mengubah voltase secara manual tanpa menggunakan mikrokontroler. Hanya 4 kabel jumper diperlukan untuk meniru kondisi pada tabel D+/D- dengan menghubungkan ke Vcc (3.3V) dan Gnd (0V) ke resistor dalam urutan yang tepat. Karena menggunakan MCU mungkin terlalu berlebihan untuk transisi sederhana seperti ini.

Referensi

Kode

Kode ATtiny85C/C++
QC Controller
///========================= Algorithm ========================/// /* First, Connect the D+ pin to a voltage 0.325 to 2 volts and keep the D- floating, then wait at least 2 seconds. Two actions happen during this 2 seconds: The D+ and D- voltage equal a voltage between 0.325 to 2 volts for 1.25 seconds. (because the D+ and D- pins connect together inside the CHY100 at first) Then the D+ keeps at a voltage between 0.325 to 2 volts and the D- voltage decrease to zero. (because the D+ and D- pins disconnect and a resistor inside the CHY100 discharges the D-)*** CHY100 is a QC 2.0 Protocol interface chip inside Power bank/charger ........ other QC 2.0 chips are probably similar Make D+ above 3.0 V first and then connect the D- to a voltage between 0.325 to 2 volts. The VBUS jumps to 9V. While keeping the D- connection with a voltage between 0.325 to 2 volts,make D+ a voltage between 0.325 to 2 volts. The VBUS jumps to 12V. (because the D+ and D- voltage are between 2V and 0.325V) Disconnect the D+ from a voltage between 0.325 to 2 volts . VBUS jumps to 5V, Because the QC2.0 exits Voltage changing mode and VBUS goes to the default value 5V. start from beginning when needing to enter QC2.0 again) */ // ============ IMPORTANT NOTE ================ // // *** Sequence of making pins HIGH and LOW is important // *** If D+ falls below 0.325V during transition because of wrong GPIO Switching Sequence // *** QC 2.0 will exit High Voltage Mode and VBUS will go back to 5 Volts // ============================================== // #define PUSH_SWITCH 0 #define Dp_2k2 4 #define Dp_10k 3 #define Dn_2k2 2 #define Dn_10k 1 int Press_Detect = 0; void setup() { pinMode(PUSH_SWITCH, INPUT_PULLUP); // Now Initiating QC Handshake by making D+ 0.6 v keeping D- at Gnd Init_QC(); } void loop() { //// 5V //// while (digitalRead(PUSH_SWITCH) == 1) { } delay(250); //// 9v //// Set_9V(); while (digitalRead(PUSH_SWITCH) == 1) { } delay(250); //// 12v //// Set_12V(); while (digitalRead(PUSH_SWITCH) == 1) { } delay(250); // Set_5V(); } ///********************** Functions **********************/// void Init_QC() { //pinMode(Dn_2k2, INPUT); //pinMode(Dn_10k, INPUT); pinMode(Dp_2k2, OUTPUT); pinMode(Dp_10k, OUTPUT); digitalWrite(Dp_2k2, LOW); digitalWrite(Dp_10k, HIGH); delay(3000); // now QC protocol is active } void Set_9V() { pinMode(Dp_2k2, OUTPUT); pinMode(Dp_10k, OUTPUT); digitalWrite(Dp_10k, HIGH); digitalWrite(Dp_2k2, HIGH); pinMode(Dn_2k2, OUTPUT); pinMode(Dn_10k, OUTPUT); digitalWrite(Dn_2k2, LOW); digitalWrite(Dn_10k, HIGH); } void Set_12V() { pinMode(Dp_2k2, OUTPUT); pinMode(Dp_10k, OUTPUT); pinMode(Dn_2k2, OUTPUT); pinMode(Dn_10k, OUTPUT); digitalWrite(Dn_2k2, LOW); digitalWrite(Dn_10k, HIGH); digitalWrite(Dp_10k, HIGH); digitalWrite(Dp_2k2, LOW); } void Set_5V() { pinMode(Dp_2k2, OUTPUT); pinMode(Dp_10k, OUTPUT); digitalWrite(Dp_10k, HIGH); digitalWrite(Dp_2k2, LOW); pinMode(Dn_2k2, OUTPUT); pinMode(Dn_10k, OUTPUT); digitalWrite(Dn_2k2, LOW); digitalWrite(Dn_10k, LOW); } void Set_20V() { // change Voltage Regulator !!! // do at your own risk } 

Skematik

https://circuits.io/circuits/5830928-qc-chargeing-hackReverse-Engineering Qualcomm Quick Charge 2.0/3.0 Menggunakan ATtiny85: Panduan Praktis

Proses manufaktur

  1. Qualcomm Meluncur Platform Drone AI 5G untuk Mendorong Inovasi UAV Otonom
  2. Sealing FDM Parts with Stratasys Insight: A Practical Guide
  3. Markforged’s Mark Two Mempercepat Inovasi di Hackathon Hardware MIT 2016
  4. Tampilan LED Gyroscope Interaktif dengan NeoPixel Ring dan Arduino
  5. Kostum Awan DIY: Strip LED, Arduino Nano & Bagian SparkFun
  6. Bangun Sensor Halangan Sederhana dengan Arduino – Tutorial Mudah LED IR & Fotodioda
  7. Membuat Kit Drum MIDI Kompak dengan Pencetakan 3D
  8. Menguasai Pengenalan dan Sintesis Ucapan pada Arduino Due
  9. S-Meter Eksternal untuk Radio Icom dengan CI-V dan Arduino
  10. Radio Stereo Mini Kompak RDA5807 – Proyek Arduino Nano