/QuickCharge

Библиотека для управления адаптерами с поддержкой технологии QuickCharge 2.0/3.0

Primary LanguageC++MIT LicenseMIT

latest PIO Foo Foo Foo

Foo

QuickCharge

Библиотека для управления адаптерами с поддержкой технологии QuickCharge 2.0/3.0

  • QC 2.0: фиксированное напряжение 5V, 9V, 12V (класс A/B) и 20V (класс B)
  • QC 3.0: фиксированное (как в QC 2.0) + настраиваемое напряжение с шагом 200mV: 3.6-12V (класс A/B) или 3.6-20V (класс B)
  • Определение версии QC из программы
  • Поддерживает "горячее" подключение
  • Напряжение питания МК: 3.3-3.6В или 5V (см. схемы)
  • Для работы необходимо 4 цифровых пина

Совместимость

Совместима со всеми Arduino платформами (используются Arduino-функции)

Содержание

Установка

  • Библиотеку можно найти по названию QuickCharge и установить через менеджер библиотек в:
    • Arduino IDE
    • Arduino IDE v2
    • PlatformIO
  • Скачать библиотеку .zip архивом для ручной установки:
    • Распаковать и положить в C:\Program Files (x86)\Arduino\libraries (Windows x64)
    • Распаковать и положить в C:\Program Files\Arduino\libraries (Windows x32)
    • Распаковать и положить в Документы/Arduino/libraries/
    • (Arduino IDE) автоматическая установка из .zip: Скетч/Подключить библиотеку/Добавить .ZIP библиотеку… и указать скачанный архив
  • Читай более подробную инструкцию по установке библиотек здесь

Обновление

  • Рекомендую всегда обновлять библиотеку: в новых версиях исправляются ошибки и баги, а также проводится оптимизация и добавляются новые фичи
  • Через менеджер библиотек IDE: найти библиотеку как при установке и нажать "Обновить"
  • Вручную: удалить папку со старой версией, а затем положить на её место новую. "Замену" делать нельзя: иногда в новых версиях удаляются файлы, которые останутся при замене и могут привести к ошибкам!

Подключение

  • Первая схема - МК питается от внешнего источника 3.3V
  • Вторая схема - МК питается от внешнего источника 5V (например от соседнего USB порта)
  • Третья схема - МК питается от этого же порта QC с высоким напряжением через стабилизатор

scheme

Инициализация

QuickCharge adapter(uint8_t DP_H, uint8_t DP_L, uint8_t DM_H, uint8_t DM_L);                // указание пинов
QuickCharge adapter(uint8_t DP_H, uint8_t DP_L, uint8_t DM_H, uint8_t DM_L, bool CLASS);    // + класс

Использование

uint8_t begin();        // Выполнить согласование с адаптером, вернет версию адаптера:
  - QC_NA (0): не поддерживает быструю зарядку
  - QC_GEN1 (1): (QC 1.0) поддерживает быструю зарядку большим током - 5V 2A
  - QC_GEN2 (2): (QC 2.0, QC 3.0) поддерживает быструю зарядку высоким напряжением
  
void setClass(class);   // Установить класс адаптера (по умолчению QC_CLASS_A). class:
  - QC_CLASS_A: макс. напряжение  12V
  - QC_CLASS_B: макс. напряжение  20V
  
void setMode(mode);     // Установить фиксированное напряжение или режим настраиваемого напряжения. mode:
  - QC_5V, QC_9V, QC_12V, QC_20V - фиксированное напряжение (QC 2.0/3.0)
  - QC_VAR - настраиваемое напряжение (QC 3.0)
  
void set(int);          // Установить выходное напряжение в милливольтах (необходим режим QC_VAR и QC3.0)
void inc();             // Увеличить выходное напряжение на 200мВ (необходим режим QC_VAR и QC3.0)
void dec();             // Уменьшить выходное напряжение на 200мВ (необходим режим QC_VAR и QC3.0)
int voltage();          // Получить текущее напряжение адаптера

Дополнительно:

  • Выйти из режима QC_VAR можно только переключением в режим QC_5V
  • Вход в режим QC_VAR сохраняет уже установленное напряжение (например, при переходе из QC_9V)
  • Из программы невозможно определить различие между QC 2.0 и QC 3.0, версия адаптера указана на корпусе. Соответственно режим QC_VAR просто не будет работать на адаптерах с версией QC меньше 3.0
  • Не все адаптеры могут выдать напряжение ниже 5V, см. наклейку на корпусе

Пример

#define DP_H_PIN  2
#define DP_L_PIN  3
#define DM_H_PIN  A4
#define DM_L_PIN  A5

/* Подключаем либу и создаем обьект */
#include <QuickCharge.h>
QuickCharge QC(DP_H_PIN, DP_L_PIN, DM_H_PIN, DM_L_PIN, QC_CLASS_B);

void setup() {
  // QC.setClass(QC_CLASS_A);         // При желании класс адаптера можно поменять
  
  Serial.begin(9600);                 // Открываем Serial port
  Serial.print(F("Charger type: "));  // Выводим сообщение о типе адаптера

  int type = QC.begin();              // Обязательно вызываем begin, вернет тип адаптера
  switch (type) {                     // Выводим тип обнаруженного адаптера
    case QC_NA:   Serial.println(F("QC is not available")); break;
    case QC_GEN1: Serial.println(F("QC1.0 - (5V 2A)")); break;
    case QC_GEN2: Serial.println(F("QC2.0 or QC3.0")); break;
  }
  
  // ФИКСИРОВАННОЕ НАПРЯЖЕНИЕ
  QC.setMode(QC_9V);              // Получаем 9В
  Serial.print("Voltage: ");      // Выводим текущее напряжение
  Serial.println(QC.voltage());
  delay(3000);                    // Ждем

  QC.setMode(QC_12V);             // Получаем 12В
  Serial.print("Voltage: ");      // Выводим текущее напряжение
  Serial.println(QC.voltage());
  delay(3000);                    // Ждем
  
  QC.setMode(QC_VAR);             // устанавливаем режим настраиваемого напряжения
}

void loop() {
  /* Управляем выходным напряжением при помощи Serial монитора, отправляя напряжение в целых милливольтах! */
  if (Serial.available() > 1) {           // Пришло сообщение по Serial
    int mv = Serial.parseInt();           // Парсим напряжение в милливольтах
    QC.set(mv);                           // Устанавливаем нужное напряжение
    Serial.print(F("Set voltage to: "));  // Выводим текущее напряжение
    Serial.print(QC.voltage());
    Serial.println(F(" mV"));
    /*
      Также напряжение можно увеличивать / уменьшать вручную:
      QC.inc();  // Увеличить напряжение на 200 мВ
      QC.dec();  // Уменьшить напряжение на 200 мВ
    */
  }
}

Версии

  • v1.0

Баги и обратная связь

При нахождении багов создавайте Issue, а лучше сразу пишите на почту alex@alexgyver.ru
Библиотека открыта для доработки и ваших Pull Request'ов!

При сообщении о багах или некорректной работе библиотеки нужно обязательно указывать:

  • Версия библиотеки
  • Какой используется МК
  • Версия SDK (для ESP)
  • Версия Arduino IDE
  • Корректно ли работают ли встроенные примеры, в которых используются функции и конструкции, приводящие к багу в вашем коде
  • Какой код загружался, какая работа от него ожидалась и как он работает в реальности
  • В идеале приложить минимальный код, в котором наблюдается баг. Не полотно из тысячи строк, а минимальный код