Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Ingeniería Inversa de Qualcomm Quick Charge 2.0/3.0 con ATtiny85: Guía Práctica

Componentes y suministros

Microchip ATtiny85×1
Regulador LM1117 3.3V SparkFun×1
Conector USB Macho A SparkFun×1
Resistencia 10k ohm×2
Resistencia 2.21k ohm×1
Shield Proto Arduino×1
Pulsador 12mm SparkFun×1
Power Bank o Cargador QC×1
Jumper genérico (0.1")×8
Header macho 36 posiciones 1 fila×1
Resistencia 0.05 ohm×10
Arduino UNO (para programación)×1
Cables jumper Macho/Hembra×7
LED (genérico)×1
Resistencia 22.1k ohm×1

Herramientas necesarias

Aplicaciones y servicios online

Sobre el proyecto

Introducción

Muchos dispositivos electrónicos de consumo alimentados por USB incorporan la solución Qualcomm Quick Charge (QC) para carga rápida a distintos voltajes, no solo los 5,0V habituales. Esto permite usar Power Banks compatibles con QC para proyectos que requieren más potencia o voltajes mayores como 9/12V.

El objetivo de este proyecto es desarrollar un dispositivo que «hackee» el protocolo QC y permita a aficionados, desarrolladores e ingenieros usar sus power banks para obtener más voltaje/potencia en sus próximos proyectos hambrientos de energía.

Ingeniería Inversa de Qualcomm Quick Charge 2.0/3.0 con ATtiny85: Guía Práctica

Las imágenes muestran salidas de 5, 9 y 12 Voltios desde un power bank compatible QC 2.0 alimentando una resistencia de 10 Ohmios 5 Watt.

Desarrollo del Hack / Dispositivo

El dispositivo tiene dos componentes activos: el regulador LM1117 3.3V y el MCU ATtiny85 para control. El resto son resistencias, pulsador, conectores, jumpers, headers, terminal, protoboard, etc.

Ingeniería Inversa de Qualcomm Quick Charge 2.0/3.0 con ATtiny85: Guía Práctica

Para construirlo, primero se colocan los componentes en una disposición ordenada y luego se sueldan. Se usan enlaces cortos de 0 ohmios para interconectar partes.

Hay jumpers para deshabilitar el circuito a bordo y permitir la programación. Como las líneas de programación (SPI - MOSI, MISO, SCK) también actúan como GPIO durante el funcionamiento del dispositivo.

Ingeniería Inversa de Qualcomm Quick Charge 2.0/3.0 con ATtiny85: Guía Práctica

Programar ATtiny85 con ISP

Antes de programar el ATtiny85, se extrae de su zócalo y se coloca en una protoboard. Para programarlo, se convierte un Arduino UNO en programador ISP subiendo el sketch ArduinoISP desde Archivo > Ejemplos > ArduinoISP.

Pasos para programar ATtiny85:

Circuito para programar el ATtiny85:

Ingeniería Inversa de Qualcomm Quick Charge 2.0/3.0 con ATtiny85: Guía Práctica

ISP = programador en sistema

Alternativamente, el ATtiny85 puede programarse manteniéndolo en el dispositivo quitando todos los jumpers alrededor.

Funcionamiento del Dispositivo

Para usar el dispositivo, conéctalo a un Power Bank (o cargador) compatible QC. Por defecto, el voltaje del USB del Power Bank QC será 5,0 voltios.

Todos los jumpers deben estar conectados tras subir el código, para que el MCU pueda comunicarse por D+/D- con la fuente QC.

El regulador LM1117 3.3V se enciende y alimenta al ATtiny85. Este MCU empieza a ejecutar el código. 4 pines I/O del ATtiny85 están conectados a redes divisoras de tensión que se usan como Salida Alta y Baja. Otro pin I/O va a un pulsador que se inicializa como entrada Pull-Up. Este pulsador toma la entrada del usuario para cambiar el voltaje de la fuente QC.

Antes de entrar en detalles, es importante saber cómo cambiará la salida. Hay al menos 4 líneas comunes a todo tipo de USB (USB A, B, C, 1.1, 2.0, 3.0+):

En un cargador/Power Bank normal, VBUS es fijo, limitando la entrega de potencia por corriente (500mA, 1A, 2A = 2,5W, 5W, 10W).

Pero en fuentes QC, hay un convertidor boost interno que puede subir el voltaje según la petición del dispositivo receptor (PD)!!!

QC 2.0 (y 3.0) usa D+ y D- del USB para comunicarse con el PD. El PD envía señales de voltaje en D+/D- y el cargador QC entrega potencia cambiando el voltaje de VBUS. Según la hoja de datos CHY, esta tabla explica qué par de señales en D+/D- hará que el QC entregue qué voltaje:

Ingeniería Inversa de Qualcomm Quick Charge 2.0/3.0 con ATtiny85: Guía Práctica

El soporte QC 2.0 se inicia cuando el voltaje en D+ y D- coincide con la 4ª fila de la tabla y se mantiene al menos 1,25 segundos. Si D+ cae a 0,0V (en realidad por debajo de 0,325V), el soporte QC se detiene y la salida vuelve a 5,0V. Estableciendo voltajes según esta tabla, se puede cambiar la salida en VBUS.

Aquí, las 4 salidas del ATtiny85 están conectadas a 2 redes divisoras de tensión con dos resistencias de 10k y dos de 2,2k para generar estas señales de voltaje para las líneas D+/D-.

Ingeniería Inversa de Qualcomm Quick Charge 2.0/3.0 con ATtiny85: Guía Práctica

Por ejemplo, para generar 3,3V en D+, ambas resistencias superior e inferior conectadas a dos pines de salida del ATtiny85 (PB3 y PB4) se ponen en Alto desde el código.

Para generar 0,6V en D-, las resistencias conectadas a los otros dos pines (PB1 y PB3) se ponen en Alto y Bajo respectivamente.

Así el cargador QC 2.0 recibe la petición de cambio de voltaje y cambia accordingly. El pulsador está configurado como Entrada PULLUP; sin pulsar, lo lee ALTO y el código se queda en bucle while manteniendo el voltaje actual. Al pulsar, se rompe el bucle y se establece el siguiente voltaje. Luego vuelve a entrar en el siguiente bucle while para mantener el nuevo voltaje VBUS.

Hay un LED que brilla tenue (5V), medio (9V) y fuerte (12V) para dar indicación visual del voltaje de salida.

Aplicaciones Posibles

Soporte para otras clases QC

Como QC 2.0 Clase B, QC 3.0 y QC 4.0 son retrocompatibles con QC 2.0 Clase A, este dispositivo podría funcionar con todos los cargadores y power banks recientes. Pero las opciones de voltaje serán 5,0, 9,0 y 12,0 voltios. Si se necesitan otros voltajes, lee las hojas de datos CHY 100, 101, 103 y modifica el código.

¡Advertencia!

Nota: Se Aconseja No Replicar este Proyecto si los Puntos Anteriores no son Entendidos por alguien, de lo contrario ¡Riesgo de Peligro de Incendio o Pérdida de Equipo!

Es posible cambiar los voltajes manualmente sin microcontrolador. Solo se necesitan 4 cables jumper para imitar las condiciones de la tabla D+/D- conectando a Vcc (3,3V) y Gnd (0V) las resistencias en secuencia adecuada. Porque usar MCU puede ser excesivo para transiciones tan simples.

Referencias

Código

Código ATtiny85 C/C++

Controlador QC

///========================= Algoritmo ========================/// 
/* Primero, conecta pin D+ a voltaje 0.325-2V y deja D- flotando, espera al menos 2s. 
Dos acciones en estos 2s: D+ y D- igualan voltaje 0.325-2V por 1.25s 
(porque D+ y D- se conectan dentro del CHY100 al principio). 
Luego D+ mantiene 0.325-2V y D- cae a cero 
(porque D+ y D- se desconectan y una resistencia interna del CHY100 descarga D-).
*** CHY100 es chip interfaz protocolo QC 2.0 dentro del Power bank/cargador... 
otros chips QC 2.0 probablemente similares.
Pon D+ above 3.0V primero y luego conecta D- a voltaje 0.325-2V. VBUS salta a 9V.
Manteniendo D- en 0.325-2V, pon D+ en 0.325-2V. VBUS salta a 12V.
(porque D+ y D- están entre 2V y 0.325V).
Desconecta D+ de 0.325-2V. VBUS vuelve a 5V, porque QC2.0 sale del modo cambio voltaje.
Empieza desde el principio para entrar en QC2.0 de nuevo).
*/
// ============ NOTA IMPORTANTE ================
// *** Secuencia de poner pines HIGH y LOW es importante
// *** Si D+ cae bajo 0.325V durante transición por secuencia GPIO incorrecta
// *** QC 2.0 saldrá del Modo Alto Voltaje y VBUS volverá a 5 Voltios
// ==============================================
#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);
  // Iniciando handshake QC poniendo D+ 0.6v manteniendo D- en 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();
}

///********************** Funciones **********************///
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);
  // ahora protocolo QC activo
}

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() {
  // ¡Cambia Regulador de Voltaje! ¡Bajo tu propio riesgo!
}

Esquemáticos

https://circuits.io/circuits/5830928-qc-chargeing-hack

Ingeniería Inversa de Qualcomm Quick Charge 2.0/3.0 con ATtiny85: Guía Práctica

Proceso de manufactura

  1. Pantalla LED Interactiva con Giroscopio, Anillo NeoPixel y Arduino
  2. Disfraz de nube DIY: Tira LED, Arduino Nano y componentes SparkFun
  3. Sensor de obstáculos IR casero con Arduino – Tutorial fácil con LED IR y fotodiodo
  4. Kit de Batería MIDI Compacto con Impresión 3D y Arduino
  5. Dominando reconocimiento y síntesis de voz en Arduino Due
  6. S-Meter Externo para Radios Icom usando CI-V y Arduino
  7. Mini Radio Estéreo Compacta RDA5807 – Proyecto con Arduino Nano
  8. IoT4Car: Telemetría Vehicular OBD-II con Arduino MKR1000 – Captura y Análisis en la Nube
  9. Sellado de piezas FDM con Stratasys Insight: Guía práctica
  10. La Mark Two de Markforged acelera la innovación en el Hackathon de Hardware 2016 del MIT
  11. Qualcomm Lanza Plataforma Drone IA con 5G para Impulsar Innovación UAV Autónomo