[Из песочницы] Как получить 9В/12В от зарядного с Quick Charge (на примере STM32)

Чем может быть полезна быстрая зарядка

С увеличением ёмкости аккумуляторов телефонов потребовалось увеличить и мощность зарядных устройств, чтобы достичь маленького времени зарядки, для чего и нужно было увеличивать выходную мощность: напряжение, ток. Таким образом зарядные с Quick Charge 3.0 кроме 5 В могут выдавать 9В/12В/20В +возможность регулировки с шагом 0.2 В (до 12 В).


image

Ввиду распространенности ЗУ с этой технологией появляется интерес использовать их для получения повышенного напряжения без дополнительных преобразователей.


Схема подключения

Представленная схема позволит выводам, настроенным как двухтактный выход подавать на выводы DN, DP нужные значения напряжения:


image


Настройка в STM32CubeMX

Нужно настроить четыре любые выводы общего назначения как двухтактный выход (Output Push Pull) без подтяжки (No pull-up and no pull-down) с соответствующими названиями (ПКМ → Enter User Label).


8u46n6fhmb6rxqwl-lvcgpinmxg.png


Описание протокола Quick Charge


QC 2.0 (из документа CHY100)


image

После включения в сеть замыкаются выводы DP, DP и начинает следить за уровнем на выводе DP, подаем на него напряжение от 0.325 В до 2 В (обычно 0.6 В) на время не менее 1.25 с и таким образом происходит вход в режим Быстрой Зарядки. Теперь на DN нужно подать минус (чтобы напряжение на нем упало ниже 0.325 В) на время не менее 1 мс. Остается выставить сочетание напряжения, соответствующее необходимому, согласно таблице:


image


QC 3.0 (из документа FAN6290Q)

В этой версии есть возможность изменять значение напряжения с шагом 200 мВ, для этого нужно выставить сочетание, соответствующее режиму Continuous Mode:


image

Перейти в него можно из любого другого (5В/9В/12В), а потом для увеличения выходного напряжения (DN: 3.3 В, DP: импульс 0.6–3.3–0.6В), а для уменьшения (DP: 0.6 В, DN: 3.3–0.6–3.3В).


image


Программирование

Остается завернуть изменение уровней сигнала согласно алгоритму в код с использованием библиотеки HAL, учитывая понятные ярлыки-названия, установленные в Кубе:

void QC_GPIO_9V(void){

    /* DP: 0.6V; DN: 0.6V - preset */
    HAL_GPIO_WritePin(QC_DP_UP_GPIO_Port, QC_DP_UP_Pin, GPIO_PIN_SET);
    HAL_GPIO_WritePin(QC_DP_DOWN_GPIO_Port, QC_DP_DOWN_Pin, GPIO_PIN_RESET);

    HAL_GPIO_WritePin(QC_DN_UP_GPIO_Port, QC_DN_UP_Pin, GPIO_PIN_SET);
    HAL_GPIO_WritePin(QC_DN_DOWN_GPIO_Port, QC_DN_DOWN_Pin, GPIO_PIN_RESET);

    HAL_Delay(1250); /* min 1.25s */

    /* DP: 0.6V; DN: 0V */
    HAL_GPIO_WritePin(QC_DN_UP_GPIO_Port, QC_DN_UP_Pin, GPIO_PIN_RESET);
    HAL_Delay(1); /* min 1ms */

    /* DP: 3.3V; DN: 0.6V for 9V */
    HAL_GPIO_WritePin(QC_DP_UP_GPIO_Port, QC_DP_UP_Pin, GPIO_PIN_SET);
    HAL_GPIO_WritePin(QC_DP_DOWN_GPIO_Port, QC_DP_DOWN_Pin, GPIO_PIN_SET);

    HAL_GPIO_WritePin(QC_DN_UP_GPIO_Port, QC_DN_UP_Pin, GPIO_PIN_SET);
    HAL_GPIO_WritePin(QC_DN_DOWN_GPIO_Port, QC_DN_DOWN_Pin, GPIO_PIN_RESET);
}

Таким образом получились функции:

QC_GPIO_5V();
QC_GPIO_9V();
QC_GPIO_12V();
QC_GPIO_20V();

QC_GPIO_Reg();
QC_GPIO_Dec();
QC_GPIO_Inc();

Скачать проект в STM32CubeIDE можно на GitHub: Quick-Charge-STM32-HAL


Проверка работы

Остается подключить всё согласно схеме и выполнить функцию для получения нужного напряжения (для испытания используется безымянная китайская зарядка с QC 3.0):


image

Сработало:


image

Причем выходное напряжение можно изменить в любой момент:


image

При использовании разъема USB Type-C обязательно нужно добавить два резистора 5.1 кОм между CC1, CC2 и GND, чтобы устройство определялось как UFP (Upstream Facing Port).


5100.svg


Определение подключения

В случае, если питание будет подаваться на микроконтроллер уже после подключения, то выполнение нужной функции может выполнятся перед главным циклом один раз.
Если микроконтроллер питается от независимого источника, то выполнение функции можно назначить по внешнему прерыванию (вывод VBUS подключается через стабилизатор 3.3 В) или просто с помощью кнопки — можно сделать свой «триггер».


Проверка на разных ЗУ с USB-A и USB-C

Работоспособность проверена на различных недорогих зарядных, а также на мощных ноутбучных зарядок 65Вт с USB Type-C.


0x93-tlh0ot6mhok-y3dscbn2fi.jpeg

При этом наименьшее выходное напряжение может различаться, так обычные имели нижний порог 4.2 В, а продвинутые 3.7 В.


onsxde3yf8aducxr4nneng1yv3c.jpeg


Подробнее в видео


Итого

Хоть стандартом становиться технология Power Delivery (PD), но куча современных сетевых зарядных устройств как и многие переносные аккумуляторные ЗУ поддерживают в том числе Quick Charge (QC), что позволит с легкостью получить повышенное напряжения без использования дополнительных преобразователей.

Несмотря на то, что в теории можно получить даже 20 В, но на практике таких зарядок почти нет. Также стоит учесть, что при подключении слишком мощной нагрузки напряжение будет сильно просаживаться, а некоторые ЗУ вообще уйдут в защиту.

© Habrahabr.ru