Интерфейс для зарядных устройств USB типа C с PD/PPS
Этот проект возникает в колонизации с Empres GmbH.
Они проделали отличную работу в
Есть несколько интересных досок, чтобы запустить источники питания типа C USB. Такие как Zy12pdn.
Вы можете найти много деталей в Manuel BL. Эти модули позволяют вам пройти через доступные фиксированные профили, которые включают 5 В, 9 В, 12 В, 15 В и 20 В. Есть много других, некоторые имеют выбираемое напряжение через резисторы или прыгуны.
Мне удалось взять в руки один, который использует чип HUSB238 от Hynetek. Этот программируется либо через резисторы, либо через микроконтроллер с использованием i2c.
К сожалению, это значительно ниже возможностей блока питания, соответствующего PD 3.0. Все эти модули используют только так называемые фиксированные профили. Но есть режим PPS (порграмный источник питания). Это использует дополненный профиль. Дополненные профили ограничены от 3,3 В до 21 В и до 5 A. Напряжение может быть выбрано на шагах 20 мВ, и максимальный ток может быть выбран в течение 50 мА.
А вот моя идея: вы когда -нибудь использовали один из тех коренастых лабораторных источников питания, которые съедают большую часть места на вашем столе? Эти источники питания часто варьируются от 0 до 30 В и 0 - 5 A. Насколько я понимаю, я в основном использую 5 - 15 В при нескольких усилителях.
Что если мы сможем использовать этот дополненный профиль, чтобы имитировать лабораторный источник питания? Нам понадобится чип, который способен запросить этот профиль из подходящего PPS, способного USB -типа C.
Ну, есть легкий и трудный путь:
Прощевым способом было бы сообщить какой -то чипу запросить желаемое напряжение формировать источник питания.
Такой чип является AP33772, доступным от Diodes Incorporated. Вы можете получить выделенные диоды формы оценки или других производителей, например. Микроэ. Это USB-C Sink 2 Click Form Microe: 
Этот чип был отмечен как NRND и был заменен AP33772S. Версия «S» еще проще в использовании, но имеет огромный недостаток: она позволяет всего 100 мВ и 250 мА.
Трудный способ-использовать один из тех USB-C PD Phys. Они предоставляют интерфейс OSI 0 + 1 для источника питания. Более высокие уровни должны быть реализованы в SW. Наиболее часто используемым чипом, по -видимому, является форма FUSB302 на полупроводнике. Этот чип использовался в оригинальном ZY12PDN.
И вот это: 
Это PD-Micro, соблюдаемый Райан Ма. Это Aruduino Pro Micro с FusB302, некоторыми светодиодами, выключателем питания и регулятором напряжения. Райан позволил легко выбрать профили для одобрения. Кай Клеменс Либич сделал некоторые улучшения в Fusb302 Ryan302.
Единственная проблема - стабильность напряжения. Даже при использовании 5 кабелей USB C, падение напряжения довольно значительное. Таким образом, нам может потребоваться измерить выходное напряжение, чтобы тонко отрегулировать напряжение питания. Идея Фриста состояла в том, чтобы использовать внутренний АЦП с внешним напряжением 2,048 В. Проблема в том, что это всего лишь 10 -битная АЦП, но нам нужно измерить напряжения до 21 В. При условии, что мы зажимаем при 20,48 В, у нас будет разрешение на 20 мВ. Кажется, этого достаточно, но мы можем легко сделать лучше. При использовании выделенного АЦП, например, INA219
Мы можем повысить точность до 4 мВ. Это значительно ниже 20 мВ шагов. Мы получаем датчик тока сверху.
Предупреждение о текущем датчике ACS712
ACS 712 является простым в использовании изолированного датчика тока. Но:
Теперь мы можем установить напряжение, включить выход и измерить выходное напряжение и ток. Таким образом, мы можем написать несколько строк кода для реализации постоянного источника напряжения / тока. Что ж, время отклика реакгулятора будет ограничено скоростью источника питания, но он находится в разумных ограничениях, если не раскрывать ваш источник питания. Мой PS - устаревший Ugreen Nexode 2 с 100 Вт, который переключается за ~ 40 .. 50 мс.
Но как находится Slectet напряжения и тока? Ну, мы могли бы использовать последовательный интерфейс и компьютер для «удаленного управления» схемой. Но как насчет ЖК -дисплея с вращающимся переключателем в качестве пользовательского интерфейса?.
И это приводит меня к моему первому прототипу.

А вот компоненты по часовой стрелке, начинается с верхним левым.

Это датчик напряжения и тока. Шункно -резистор был уменьшен до R015, чтобы получить 5 полномасштабного чтения.
На доске есть серийный EEPROM 24C256. Это используется для хранения параметров. Я мог бы использовать Atmel на Chip eeprom, но это гораздо меньше износостойкость. Я не знал, сколько циклов записи потребуется, поэтому я выбрал Externel eeprom

Это сердце цепи.
Порт USB - C PD -Micro занят источником питания. USB -интерфейс не может быть использован для связи. Поэтому серийный интерфейс HW подключается к USB -USB FT232 для серийного чипа.

Это совместимый дисплей HD44780 20x4 с PCF8574, инвертор напряжения и источник тока для контраста, как описано в моей LCD -библиотеке.
Оставленный на дисплее, есть переключатель роторного энкодера KY-040. Прямо над переключателем есть только автовокзал I2C и VCC.
Какие функции нуждаются в лабораторном питании?












При запуске система отобразит версию и создаст сообщение перед началом главного меню.
PD/PPS-Controller
====================
Ver. : 3.3 nbl
Build: mmm dd yyyy
После завершения инициализации будет отображаться основное меню
Mode (x:...) [UI^] !
UU.UU V I.II A
OUT UU.UU V I.II A
[i i i i i] (i)
Последняя строка I: значки меню
Чтобы выбрать элемент меню, нажмите кнопку, появится курсор. Поверните вращающийся переключатель, пока курсор не окажется в положении желаемого элемента. Нажмите кнопку еще раз, чтобы выбрать меню. В этом меню «V» и «A» во второй строке тоже пункты меню. Выберите, чтобы настроить желаемое напряжение или ток.
Это меню используется для выбора желаемого профиля PD.
# 1 / n (...)
U= UU.UU V - UU.UU V
I= I.II A max
[i i i] (i)
Последняя строка I: значки меню
Чтобы выбрать профиль, нажмите кнопку, перейдите к символу «#» в первой строке и нажмите еще раз, чтобы ввести выбор профиля. Поворот пройдет через профили Avalabla. Чтобы выбрать профиль снова нажмите и перейдите к галочке в линии Buttom или выберите «X», чтобы прервать.
Это меню используется для изменения режима работы или значения калибровки.
(i)=auto (*)=. *
(i)=auto
(i)=auto
[i i i x] (i)
[i] или (i) значки в скобках
I= I.III A: I.III A
[i i i x] (i)
[i] или (i) значки в скобках
Чтобы отрегулировать ток калибровки измерения, включите выходной выход с нагрузкой и используйте калиброванный метр ампер для измерения тока.
Введите меню «Настройки» и перейдите в меню калибровки. Введите измеренный ток и выберите галочку, чтобы выбрать как можно высокий ток, чтобы получить максимальную точность.
AVR SW написан с Arduino IDE. При разработке SW я узнал несколько вещей о системе:
После первоначального успеха быстро столкнулся с проблемами со Flash и RAM. Возможно, вы сможете запустить код AVR, но я рекомендую уменьшить функциональность бесплатной памяти.
И это приводит меня к второму прототипу с использованием ATSAMD21G18.
Программное обеспечение в папке AVR есть как есть. В этой отрасли не будет дальнейшего развития. Это как бы работает, но используйте свой собственный риск. Он только компилируется без загрузки, вам нужно будет добавить файл boards.local.txt из папки конфигурации в
C:Users_user_AppDataLocalArduino15packagesarduinohardwareavr1.8.6
(По крайней мере, на машинах Windows) и выберите Arduino Leonardo без загрузчика на доступных досках.
Вам понадобится Avrdude и USBASP
Подсказка: будьте осторожны при покупке одного из дешевых клонов. Они часто идут с устаревшим SW и не будут работать. Нет проблемы обновлять их, но вам понадобится работающий адаптер USBASP.
Программист, чтобы мигать SW. Для пользователей без CLI: Avrduess - отличный графический интерфейс для Avrdude.
С таким же успехом вы можете использовать Arduino Uno в качестве USB -моста ISP.
После моих неудач я попробовал arduino Zero. Эта плата использует ATSAMD21G18, который представляет собой контроллер ARM Cortex M0+, работающий на 48 МГц. Он имеет 256 КБ вспышкой и 32 КБ оперативной памяти и много интерфейсов. Быстрый порт показал, что SW может быть легко перенесен из AVR в руку практически без проблем.
Это был момент, когда мы решили начать нашу первую пользовательскую печатную плату, избегая всех проблем, с которыми сталкиваются с первым портотипом.
Некоторая головная боль вызывает поставку VCC. Большинству схем преобразователя Buck необходимо несколько запасных заповедников для работы и «функционировать» цепь блокировки недоедания. Но это не идти для этой схемы. Он должен работать до 3,3 В VBU. Нам нужен проходный обход за пределами напряжения, чтобы гарантировать операцию на уровне 3,3 В VBU. В противном случае схема будет заблокироваться, когда VBU падает ниже Thresholt, который обычно составляет 4 В - 4,7 В при 3,3 В.
Эта проблема была немного решена. Мы использовали два регулятора 3,3 В, которые предназначены для идеальных диодов.
TPS62932 настроен на вывод 3,45 В. UVLO устанавливается на 4,55 В, а включение установлено на 5,06 В. Это гарантирует, что преобразователь Buck работает выше 5 В, а выходы немного выше 3,3 В, поэтому 3,3 В LDO отключен. LDO представляет собой NCV2951ACDMR2G на 3,3 В. Обратное напряжение составляет максимум 450 мВ при 100 мА. Текущее потребление схемы ниже 50 мА, поэтому у нас будет предполагаемое максимальное отступление на 300 мВ.
Когда входное напряжение выше 5,06 В, LDO простаивает, а VCC составляет 3,45 В. Когда входной Voltag падает ниже 4,55 В, преобразователь Buck отключен, а LDO принимает OVE, что приводит к тому, что VCC 3,3 В. Когда входной вольтог продолжает падать, VCC будет падать до ~ 3 V в 3 v VBU.
ЦП будет резко работать до 2,7 В в зависимости от настройки продукции.
PCBA: 
Рабочий прототип: 
Current Calibration
internal I.III A
reference I.III A
[i i i x] (i)
Текущее чтение и справочное значение были реорганизованы.
SW был рефактор и теперь является USB-PD2. В первом SW контроль над источником питания был реализован в классе меню. Это было перемещено в собственный класс контроллера.
Заголовок для напоминаний TODO был добавлен. Класс тестирования источника питания был добавлен для тестирования изменений профиля.
Для того, чтобы прошить SW в первый раз, вам понадобится интерфейс отладки JTAG, такой как
Вы можете использовать Atmel Studio или Arduino IDE, чтобы вспыхивать загрузчик Arduio Zero.
Вы также можете использовать демонстрацию Blink. Выберите «Эскиз» -> Экспорт двоичного файла. IDE создаст файл xxx.ino.with_bootloader.arduino_zero.bin. Просто проверните файл. Возможно, вам придется скопировать биты предохранителей из Arduino Zero.
В папке предохранителей есть несколько образцов. Некоторые из предохранителей настроены на завод и не могут быть перезаписаны.
Как только загрузчик работает, вы можете прошить SW, используя загрузчик Sam-BA. У SW, предоставленной Microchip, есть CLI, который подходит для всех устройств SAM, поддерживающих SAM-BA, и, следовательно, немного сложно использовать. Гораздо более простой инструмент - Босса из Shumatech.
Мое зарядное устройство поддерживает 5 В / 9 В / 12 В / 15 В @ 3A и 20 В @ 5A фиксированные профили и 3,3 В - 21 В @ 5 A дополненный профиль. Будьте осторожны. Они могут не поддаваться напряжениям ниже 3,3 В. Некоторые даже будут иметь два профиля PPS с различными рейтингами напряжения / тока.
Ugreen Nexode 2 Port 100W PD-Charger (Model CD254 #50827) Поддерживаемые профили:
Ugreen Nexode 100W настольного зарядного устройства (Model CD328 #90928) Поддерживаемые профили:
Anker Powerport I 30W PD
Поддерживаемые профили:
ilepo usb c быстрое зарядное устройство 65 w
Поддерживаемые профили
INIU Power Bank 20000MAH, 22,5 Вт
Поддерживаемые профили
Некоторая мощность, кажется, сбрасывает мощность, когда ток не нарисуется.
Мое настольное зарядное устройство Nexode 100W P/N 90928 сбрасывается через ~ 1 ч без нагрузки. Другие зарядные устройства этого не делают.
Мой банк мощности INIU сбрасывается без нагрузки в течение ~ 10 с
Войдите с загрузкой 20R
0006: FUSB302 ver ID:B_revA
0118: USB attached CC1 vRd-3.0
0172: RX Src_Cap id=1 raw=0x53A1
0172: obj0=0x2A01912C
0172: obj1=0x0002D0E9
0172: obj2=0x0003C096
0172: obj3=0xC076323C
0172: obj4=0xC0DC3228
0172: [0] 5.00V 3.00A
0172: [1] 9.00V 2.33A
0172: [2] 12.00V 1.50A
0172: [3] 5.00V-5.90V 3.00A PPS *
0172: [4] 5.00V-11.00V 2.00A PPS
0176: TX Request id=0 raw=0x1082
0176: obj0=0x42022628
0186: RX GoodCRC id=0 raw=0x0121
0192: RX Accept id=2 raw=0x05A3
0210: RX PS_RDY id=3 raw=0x07A6
0212: PPS 5.50V 2.00A supply ready
0214: Load SW ON
5214: TX Request id=1 raw=0x1282
5214: obj0=0x42022628
5222: RX GoodCRC id=1 raw=0x0321
5228: RX Accept id=4 raw=0x09A3
5246: RX PS_RDY id=5 raw=0x0BA6
5246: PPS 5.50V 2.00A supply ready
10248:TX Request id=2 raw=0x1482
10248: obj0=0x42022628
10256:RX GoodCRC id=2 raw=0x0521
10262:RX Accept id=6 raw=0x0DA3
10280:RX PS_RDY id=7 raw=0x0FA6
10280:PPS 5.50V 2.00A supply ready
...
журнал без загрузки:
0006: FUSB302 ver ID:B_revA
0118: USB attached CC1 vRd-3.0
0172: RX Src_Cap id=1 raw=0x53A1
0172: obj0=0x2A01912C
0172: obj1=0x0002D0E9
0172: obj2=0x0003C096
0172: obj3=0xC076323C
0172: obj4=0xC0DC3228
0172: [0] 5.00V 3.00A
0172: [1] 9.00V 2.33A
0172: [2] 12.00V 1.50A
0172: [3] 5.00V-5.90V 3.00A PPS *
0172: [4] 5.00V-11.00V 2.00A PPS
0176: TX Request id=0 raw=0x1082
0176: obj0=0x42022628
0186: RX GoodCRC id=0 raw=0x0121
0192: RX Accept id=2 raw=0x05A3
0210: RX PS_RDY id=3 raw=0x07A6
0212: PPS 5.50V 2.00A supply ready
0214: Load SW ON
5214: TX Request id=1 raw=0x1282
5214: obj0=0x42022628
5222: RX GoodCRC id=1 raw=0x0321
5228: RX Accept id=4 raw=0x09A3
5248: RX PS_RDY id=5 raw=0x0BA6
5248: PPS 5.50V 2.00A supply ready
10250:TX Request id=2 raw=0x1482
10250: obj0=0x42022628
10258:RX GoodCRC id=2 raw=0x0521
10264:RX Accept id=6 raw=0x0DA3
10284:RX PS_RDY id=7 raw=0x0FA6
10284:PPS 5.50V 2.00A supply ready
==> The Power bank resets and defaults to 5V only.
0006: FUSB302 ver ID:B_revA
0118: USB attached CC1 vRd-3.0
0352: TX Get_Src_Cap id=0 raw=0x0087
0704: TX Get_Src_Cap id=0 raw=0x0087
1056: TX Get_Src_Cap id=0 raw=0x0087