[Из песочницы] Как получить 9В/12В от зарядного с Quick Charge (на примере STM32)
Чем может быть полезна быстрая зарядка
С увеличением ёмкости аккумуляторов телефонов потребовалось увеличить и мощность зарядных устройств, чтобы достичь маленького времени зарядки, для чего и нужно было увеличивать выходную мощность: напряжение, ток. Таким образом зарядные с Quick Charge 3.0 кроме 5 В могут выдавать 9В/12В/20В +возможность регулировки с шагом 0.2 В (до 12 В).
Ввиду распространенности ЗУ с этой технологией появляется интерес использовать их для получения повышенного напряжения без дополнительных преобразователей.
Схема подключения
Представленная схема позволит выводам, настроенным как двухтактный выход подавать на выводы DN, DP нужные значения напряжения:
Настройка в STM32CubeMX
Нужно настроить четыре любые выводы общего назначения как двухтактный выход (Output Push Pull) без подтяжки (No pull-up and no pull-down) с соответствующими названиями (ПКМ → Enter User Label).
Описание протокола Quick Charge
QC 2.0 (из документа CHY100)
После включения в сеть замыкаются выводы DP, DP и начинает следить за уровнем на выводе DP, подаем на него напряжение от 0.325 В до 2 В (обычно 0.6 В) на время не менее 1.25 с и таким образом происходит вход в режим Быстрой Зарядки. Теперь на DN нужно подать минус (чтобы напряжение на нем упало ниже 0.325 В) на время не менее 1 мс. Остается выставить сочетание напряжения, соответствующее необходимому, согласно таблице:
QC 3.0 (из документа FAN6290Q)
В этой версии есть возможность изменять значение напряжения с шагом 200 мВ, для этого нужно выставить сочетание, соответствующее режиму Continuous Mode:
Перейти в него можно из любого другого (5В/9В/12В), а потом для увеличения выходного напряжения (DN: 3.3 В, DP: импульс 0.6–3.3–0.6В), а для уменьшения (DP: 0.6 В, DN: 3.3–0.6–3.3В).
Программирование
Остается завернуть изменение уровней сигнала согласно алгоритму в код с использованием библиотеки 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):
Сработало:
Причем выходное напряжение можно изменить в любой момент:
При использовании разъема USB Type-C обязательно нужно добавить два резистора 5.1 кОм между CC1, CC2 и GND, чтобы устройство определялось как UFP (Upstream Facing Port).
Определение подключения
В случае, если питание будет подаваться на микроконтроллер уже после подключения, то выполнение нужной функции может выполнятся перед главным циклом один раз.
Если микроконтроллер питается от независимого источника, то выполнение функции можно назначить по внешнему прерыванию (вывод VBUS подключается через стабилизатор 3.3 В) или просто с помощью кнопки — можно сделать свой «триггер».
Проверка на разных ЗУ с USB-A и USB-C
Работоспособность проверена на различных недорогих зарядных, а также на мощных ноутбучных зарядок 65Вт с USB Type-C.
При этом наименьшее выходное напряжение может различаться, так обычные имели нижний порог 4.2 В, а продвинутые 3.7 В.
Подробнее в видео
Итого
Хоть стандартом становиться технология Power Delivery (PD), но куча современных сетевых зарядных устройств как и многие переносные аккумуляторные ЗУ поддерживают в том числе Quick Charge (QC), что позволит с легкостью получить повышенное напряжения без использования дополнительных преобразователей.
Несмотря на то, что в теории можно получить даже 20 В, но на практике таких зарядок почти нет. Также стоит учесть, что при подключении слишком мощной нагрузки напряжение будет сильно просаживаться, а некоторые ЗУ вообще уйдут в защиту.