USB-C для хакерів: створіть свій власний блок живлення

25 грудня 2024 3 хвилин Автор: Lady Liberty

Ви дізнається, як працює стандарт USB-C і технологія Power Delivery, що дозволяє узгоджувати напругу між пристроями. У статті пояснюється, як можна адаптувати старий блок живлення до сучасного стандарту, використовуючи спеціалізовані компоненти, такі як контролери PD та MOSFET-и.

Розпочнемо

Що робити, якщо виникла потреба створити власний блок живлення USB-C? Хороша новина — це дійсно просто! Наприклад, якщо є блок живлення Lenovo, HP чи Dell з напругою 19-20 В, його можна перетворити на USB-C без особливих зусиль. Модернізація такого пристрою потребує лише кількох простих кроків і невеликих модулів, які забезпечать відповідність стандарту USB-C. Цей підхід дозволяє досягти бажаного результату без зайвих ускладнень чи суттєвих відхилень від специфікації.

Перетворення блоку живлення на 20 В у блок живлення USB-C — цілком логічне рішення, особливо якщо потрібно заряджати ноутбук. Більшість ноутбуків працюють саме з 20 В через USB-C, але тут є одна важлива деталь. Просто підключити 20 В до роз’єму USB-C не вийде — необхідно додати певну логіку, щоб зробити такий блок живлення безпечним для пристроїв, які потребують 5 В. Крім того, перед подачею 20 В на VBUS необхідно виконати кілька додаткових кроків.

За стандартом USB-C будь-який блок живлення має спершу видавати 5 В, щойно підключається пристрій. Лише після цифрового узгодження блоку живлення з підключеним пристроєм допускається перемикання на вищу напругу, якщо це потрібно.

Для цього блок живлення пропонує набір профілів. Кожен профіль описує напругу, максимальний струм для цієї напруги та кілька додаткових параметрів. Згідно зі специфікацією USB-C, окрім базових 5 В, можна також передбачити 9 В, 15 В та 20 В, що робить блок живлення універсальним для різних типів пристроїв.

Згідно зі специфікацією USB-C, якщо блок живлення підтримує певну напругу, наприклад 15 В, він також повинен підтримувати всі напруги, що є нижчими за цю межу, визначені стандартом. Наприклад, для 15 В обов’язково повинна бути підтримка і 9 В. Це більше UX-вимога, ніж технічна: такий підхід спрощує взаємодію між пристроями й блоками живлення, адже менший набір напруг полегшує роботу з різними зарядними пристроями. Однак, технічно блок живлення може запропонувати будь-яку напругу. У найгіршому випадку пристрій відмовиться приймати її й заряджатиметься повільніше від базових 5 В, які обов’язково мають бути реалізовані.

Далі розглядається, як працюють стандартні USB-C блоки живлення, які параметри можна використовувати для їхнього створення. Зрештою, це відкриває можливість побудувати власний блок живлення USB-C з нуля, враховуючи всі вимоги та рекомендації стандарту.

Усі готові варіанти

Ці кілька застережень уже вбудовані в блоки живлення USB-C. Зрештою, із сучасними чіпами контролерів не потрібно багато, щоб додати підтримку виходу USB-C до загального блоку живлення під час виробництва – все, що вам справді потрібно, це використовувати мікросхему контролера PD, яка підключається до лінії зворотного зв’язку блока живлення, додає вбудований датчик струму та керує транзистором MOSFET для вмикання та вимикання живлення, а також ця мікросхема відповідає за правила та норми USB-C. Під контролем контакту FB контролер PD бере на себе процес регулювання вихідної напруги блока живлення та створює будь-яку напругу, яка йому може знадобитися, в розумних межах.

Виробникам значно спростили виробництво блоків живлення USB-C завдяки інтеграції спеціалізованих PD-контролерів. Замість того щоб підключати сигнал зворотного зв’язку вашого джерела живлення до звичайного дільника напруги, його можна підключити до окремого модуля, який відповідає за виконання всіх функцій Power Delivery. В результаті блок живлення стає універсальним і готовим до використання з USB-C пристроями без додаткових складнощів.

Сьогодні для багатьох проєктів вигідніше придбати вже готовий USB-C блок живлення разом із платою тригера, ніж працювати зі старими моделями блоків із циліндричними роз’ємами. Це простіше, дешевше і дозволяє легко налаштовувати напругу для різних пристроїв.

Використовуючи правильну конфігурацію лінії зворотного зв’язку, можна отримати будь-яку потрібну напругу, позбувшись обмежень на дивні статичні напруги на кшталт 7,5 В або 11 В. Такий підхід дозволяє реалізувати функції PPS (змінна напруга та постійний/змінний струм), що залежить лише від контролера PD, інтегрованого в блок живлення. Сучасні мікросхеми PD-контролерів майже завжди підтримують PPS, і тому знайти зарядний пристрій USB-C із цією функцією стає дедалі простіше.

На ринку доступні численні мікросхеми, які дозволяють швидко перетворити старий або новий блок живлення на USB-C. Для цього можна підключити їх до лінії зворотного зв’язку або використати готові модулі, що приймають постійний струм, містять PD-контролер і перетворювач напруги (понижуючий або навіть понижуючий/підвищуючий). Такі модулі створюють усі потрібні для USB-C напруги, що робить процес модернізації максимально зручним.

Такі модулі є своєрідною протилежністю тригерних модулів PD. Замість того щоб отримувати постійний струм із порту USB-C PD, вони дозволяють створити порт PD із джерела постійного струму, додаючи етап понижуючого або підвищуючого перетворення напруги. Це може трохи знижувати ефективність у порівнянні з прямим перетворенням, але при цьому забезпечує чудовий результат. Такі плати легко знайти на Aliexpress, і їх можна відрізнити від тригерних модулів PD за наявністю великого індуктора, який є обов’язковим компонентом для роботи цих плат.

Щоб знайти потрібні модулі, достатньо пошукати «модуль зарядного пристрою PD» і перевірити зображення на наявність індукторів. Одним з винятків можуть бути зарядні пристрої LiIon із входом USB-C PD, але їх легко відфільтрувати, звернувши увагу на згадки про літій-іонні батареї в описах товарів.

Якщо потрібен швидкий вихід USB-C і немає часу чекати на доставку з Aliexpress, можна використовувати автомобільний зарядний пристрій USB-C для прикурювача. Головне, щоб він підтримував вихідну напругу вище 5 В (наприклад, 15 Вт). Такі пристрої часто позначаються як ті, що підтримують більші напруги на USB-C, і їх легко знайти в продажу. По суті, це ті ж самі модулі PD, але вони інтегровані в корпус автомобільного зарядного пристрою, який підключається до джерела напруги 12 В або 24 В.

Як адаптер прикурювача, так і опції Aliexpress технологічно дуже схожі на рідну опцію USB-C PSU – ви отримуєте понижуючий/підвищувальний перетворювач із тією самою мікросхемою, що підключається до його сигналу FB, або навіть універсальну мікросхему, яка робить усе для вас, якщо ви просто дасте йому індуктор і кілька інших частин. Але якщо живлення 5 В або 20 В — це все, що є у вашому випадку використання, ви можете зробити це ще простіше!

Специфікація проти реальності

Якщо здається, що блок живлення на 20 В можна просто підключити до USB-C без додаткових складнощів, або ж ви хочете уникнути втрат ефективності через перетворення, існує простий спосіб створити базовий USB-C блок живлення. Технічно можна обмежити його вихід лише на 5 В і 20 В, перемикаючи напругу за допомогою польових транзисторів. Якщо пристрій не підтримує профіль на 20 В, він просто не запитуватиме цю напругу, що робить такий підхід ідеальним для ноутбуків. Щоправда, це може ускладнити зарядку пристроїв, як-от Nintendo Switch або смартфонів, які зазвичай працюють із 5 В або іншими напругами.

Цікаво, що навіть не визначені стандартом USB-C напруги, як-от 12 В, широко використовуються в багатьох блоках живлення. Це пояснюється тим, що багато контролерів Power Delivery вже запрограмовані на роботу з 12 В, навіть якщо це не є офіційним профілем. Традиція підтримки 12 В настільки поширена, що вона стала основою для багатьох тригерних плат.

Приклад такого підходу можна знайти у Dell. Вони випустили адаптер, який дозволяє перетворити стандартний блок живлення ноутбука на зарядний пристрій USB-C, що працює з 5 В і 20 В, використовуючи польові транзистори для перемикання між напругами. Такі адаптери, які можна знайти на Aliexpress або у Dell, стали чудовим джерелом натхнення для створення власних блоків живлення USB-C. Цей підхід простий, ефективний і довів свою надійність на практиці.

Для створення адаптера живлення, який перетворює джерело постійного струму на блок живлення USB-C, можна реалізувати пристрій, здатний взаємодіяти з USB-C пристроями та надавати високовольтний вихід, коли це необхідно. Такий адаптер буде ефективним, легко модифікуватиметься та стане корисним навчальним інструментом.

Основним кроком є забезпечення вихідної напруги 5 В із заданим струмом. Для базової реалізації достатньо 500 мА при 5 В, що дозволяє використовувати менш потужний знижувальний регулятор. Наприклад, можна застосувати імпульсний регулятор AP63200, який підтримує вихідну напругу 5 В і струм до 2 А, працюючи з вхідною напругою 20 В. Це дозволяє стабільно забезпечувати базові потреби пристроїв USB-C.

Подальші кроки передбачають інтеграцію мікросхеми Power Delivery (PD), яка забезпечить можливість перемикання на високі напруги, коли це буде запитано підключеним пристроєм. Такий підхід дозволяє створити адаптер, що відповідає стандартам USB-C і підходить для живлення або зарядки широкого спектра пристроїв.

Щоб створити адаптер живлення, що відповідає стандартам USB-C, важливо забезпечити стабільність і безпеку при роботі з високою напругою. Зокрема, 20 В мають бути достатньо «чистими» з мінімальним рівнем шумів, оскільки стандарт USB-C висуває суворі вимоги до якості напруги. Найкращим вибором у цьому випадку є використання OEM-блоків живлення від HP, Dell або Lenovo. Вони забезпечують високу якість і надійність у порівнянні з дешевими аналогами сторонніх виробників.

Важливим аспектом є перевірка потужності вашого блоку живлення. Пристрої USB-C покладаються на точну інформацію про доступний струм. Наприклад, якщо блок живлення здатний видавати максимум 5 А, але адаптер повідомить пристрою некоректні дані, це може спричинити перевантаження та активацію захисту. OEM-блоки живлення від тріади HP/Dell/Lenovo зазвичай мають механізм передачі даних про споживаний струм, що дозволяє з допомогою GPIO і АЦП перевіряти доступну потужність.

Перемикання між 5 В і 20 В

Для плавного перемикання між вихідними напругами 5 В і 20 В потрібні надійні польові транзистори. Важливо уникнути зворотного потоку напруги, щоб 20 В не потрапляли у 5-вольтову шину, а також забезпечити обробку струму в діапазоні 3 А – 5 А без перегріву. Для цього підійдуть транзистори SI4909DY (пара P-FET у компактному корпусі SO8), які добре працюють із напругою на затворі до 10 В. Їх можна використовувати окремо для 5 В і 20 В виходів, забезпечуючи плавний перехід між напругами без втрати VCC.

Ключові моменти в схемі

  • Забезпечити, щоб 20 В не подавалися на 5-вольтову шину.

  • Використовувати правильні значення напруги на затворі транзисторів для їх оптимальної роботи.

  • Налаштувати схему так, щоб переходи між напругами були швидкими та точними, без переривань у живленні пристроїв.

Цей підхід дозволяє створити адаптер, що підтримує вимоги стандарту USB-C, забезпечуючи стабільну роботу пристроїв при перемиканні між напругами.

Загальна схема
+5V_EN, +5V_DIODE і VDC_EN низький
+5V_EN і +5V_DIODE високий, VDC_EN низький
+5V_EN і +5V_DIODE високий, VDC_EN низький

Для запобігання зворотному живленню можна використовувати ідеальну діодну схему, але простіше застосувати пару зворотних польових транзисторів, керованих NPN транзисторами через окремі GPIO. Для 20 В використовується два польових транзистори, з’єднаних паралельно, що дозволяє знизити Rds і теплові втрати. Польові транзистори, з’єднані паралельно, зазвичай врівноважують струм між собою, забезпечуючи рівномірний розподіл. Для 5 В використовується пара SI4909DY, підключена послідовно, тоді як для 20 В – транзистори, підключені паралельно.

Спочатку схема передбачала використання одиночного польового транзистора для 20 В із додатковим захистом на випадок замикання, але це спричиняло значні теплові втрати. Удосконалення включає перевірку VBUS під час запуску, щоб у разі замикання блок живлення вимикався і відображав повідомлення про помилку.

Схема блоку живлення підтримує три стани: повна відсутність напруги на VBUS, вихід VBUS 5 В і вихід VBUS 20 В. Перемикання між цими станами забезпечується чотирма польовими транзисторами, що ізолюють VBUS від джерел 5 В і 20 В. У режимі 5 В обидва транзистори проводять, а корпусний діод використовується як резерв. Для більшої надійності додається діод Шотткі, щоб мінімізувати падіння напруги в перехідний період. У режимі 20 В використання паралельно з’єднаних транзисторів дозволяє уникнути теплових перевантажень і забезпечує стабільність.

Можливий витік 5 В на рейку 20 В через специфіку джерела живлення не викликає проблем, адже 5 В виробляються з 20 В. Такий підхід дозволяє уникнути втрат стабільності та забезпечити коректну роботу схеми навіть за складних умов.

Схема була реалізована на протоплаті для експериментів з Power Delivery (PD), і тепер залишилося написати програмний код для її роботи. Як і в попередніх розробках, вибір зроблено на користь MicroPython, що забезпечує зручність і швидкість створення високорівневого коду. Код буде запущено на контролері RP2040 із підключеним модулем FUSB302, а розробка інтегрується в наявний стек PD, який поступово розширюється.

Для входу 20 В було вирішено додати два роз’єми, які підтримують три популярні типи зарядних пристроїв для ноутбуків: великий круглий штекер, що підходить для Dell і HP, а також квадратний штекер Lenovo. Ці зарядні пристрої зручні тим, що мають третій контакт для визначення потужності. Наприклад, Dell використовує EEPROM з інтерфейсом One-Wire, HP — високе значення витягування з VCC, а Lenovo — витягування до GND.

Оскільки старі блоки живлення Dell і HP зазвичай працюють на напрузі 19 В або 18,5 В, це стане цікавим тестом для перевірки того, як USB-C пристрої реагуватимуть на напругу, що трохи відрізняється від стандартних 20 В. У разі невдачі з визначенням параметрів блока живлення буде встановлено струм за замовчуванням у 3 А, що гарантує безпечну роботу. Такий підхід також дозволяє підключити загальний барабанний роз’єм паралельно для забезпечення зарядки потужністю 60 Вт без ідентифікації, що може бути корисним у критичних ситуаціях, наприклад, коли під рукою лише автомобільний акумулятор і попередньо запрограмована плата.

Після створення схеми на протоплаті експериментів PD наступним кроком є написання програмного коду. Для реалізації програмної частини буде використано MicroPython на RP2040 у поєднанні з контролером FUSB302. Цей код інтегрується у власний PD-стек, який поступово розширюється, забезпечуючи функціональність і відповідність стандартам.

Програмуйте свій власний блок живлення

Логіка коду

У базовій конфігурації VBUS залишається відключеним і подає 5 В лише тоді, коли FUSB302 виявляє падіння опору 5,1 кОм на одній із ліній CC. Після активації 5 В відбувається передача реклами можливостей блоку живлення, про яку вже згадувалося в статті Replying PD. Коли надходить запит від підключеного пристрою, схема перемикається на потрібний профіль напруги, з’єднуючи відповідну шину з FET.

Контроль споживання струму в цій конструкції вирішено не реалізовувати, виходячи з припущення, що підключені пристрої належним чином регулюють споживання. Проте теоретично це можна додати, використовуючи датчик високого струму, наприклад, від Analog Devices. У цьому випадку від цього відмовлено, оскільки вже задіяно всі доступні контакти АЦП на RP2040. Два з них використовуються для виявлення можливостей блоків живлення HP та Lenovo, один — для вимірювання VBUS, а четвертий — для рейки VIN на 20 В.

У майбутніх версіях конструкції, якщо виникне потреба у більшій кількості АЦП, можна інтегрувати аналоговий мультиплексор, наприклад, 4051, що розширить можливості схеми для додаткових вимірювань і функцій. Це дозволить підвищити гнучкість і функціональність без значного ускладнення базового дизайну.

Вибір перевірки кабельного emarker, який вказує, чи кабель підтримує струм 5 А, було відкладено. Emarker є мікросхемою всередині кабелю USB-C, яка містить інформацію про його характеристики, зокрема про максимальний безпечний струм. Згідно зі стандартом, блок живлення повинен перевіряти наявність emarker перед тим, як запропонувати профіль із вищим струмом, проте наразі ця функція не реалізована.

Наявність маркування кабелю можна визначити, перевіривши резистор Ra (1 кОм), який свідчить про потребу в VCONN, що є індикатором підтримки 100 Вт при струмі 5 А. Кабелі на 60 Вт зазвичай не мають маркування, якщо вони не є високошвидкісними. Використання кабелів без маркування з цим пристроєм не рекомендується, доки перевірку emarker не буде інтегровано в мікропрограму. У разі відсутності emarker струм слід обмежити до 3 А. Також необхідно переконатися, що роз’єм USB-C на платі розрахований на струм 5 А, оскільки багато з них підтримують лише 3 А.

Під час запуску код перевіряє можливості підключеного блоку живлення. Для Dell це передбачає зчитування однопровідної EEPROM, а для Lenovo або HP – визначення опору між контактом ID і GND або VIN. Це можна виконати за допомогою дільника напруги, АЦП і стабілітрона для захисту. Якщо параметри блоку живлення не виявлені, струм встановлюється за замовчуванням на 3 А, оскільки блоки живлення для ноутбуків із меншою потужністю зустрічаються рідко. Потім формується профіль PD, який містить дані про напругу та струм, і відбувається очікування підключення пристрою до USB-C порту.

Після підключення пристрою профіль USB-C періодично передається, а після отримання повідомлення Request від пристрою проводиться його аналіз. Якщо запит підтверджується, надсилається повідомлення Accept. Після отримання відповіді GoodCRC від пристрою подається напруга 20 В, і надсилається повідомлення PS_RDY, яке сигналізує, що 20 В доступні.

У цій реалізації можливе відхилення від специфікації, наприклад, подача напруги після короткої затримки замість очікування GoodCRC. Також не використовується таймер «вимкнення VBUS», який є вимогою специфікації. Незважаючи на такі відхилення, вони не викликають значних проблем і забезпечують стабільну роботу з більшістю пристроїв.

На що варто звернути увагу

Дотримання вимог безпеки є обов’язковим етапом при створенні USB-C блоку живлення. Використання мікросхеми інтерфейсу FUSB302B PD включає особливість під назвою «розряджена батарея», яка автоматично застосовує підтягування 5,1 кОм до своїх контактів, коли живлення вимкнено. Це важлива функція, але для роботи як блоку живлення USB-C необхідно вимкнути це підтягування та замість цього активувати підтягування, що сигналізує про профіль 5 В / 1,5 А. Таке переключення є частиною аналогової сигналізації USB-C PD і легко реалізується через програмне забезпечення за допомогою FUSB302.

Однак, виникає потенційна проблема: якщо блок живлення USB-C або подвійний порт підключено до адаптера, коли 20 В ще не подано, а код ще не виконується, це може спричинити завантажувальний цикл. Ця ситуація може бути виявлена в програмному забезпеченні, що дозволяє адаптеру зачекати, поки 20 В буде подано.

Для вирішення цієї проблеми можна використовувати версію мікросхеми FUSB302T, у якій функцію «розряджена батарея» не активовано. Ця версія підходить для створення професійних плат живлення USB-C. Для поточного проєкту, якщо мікросхеми FUSB302B вже використовуються, їх можна замінити на версію 302T. Визначити, яка саме мікросхема використовується (-B або -T), можна через читання реєстру версій FUSB302 у коді, що додає зручності при налагодженні. Такий підхід забезпечує більшу стабільність і гнучкість у реалізації проєкту.

Після відключення підтягування 5,1 кОм необхідно забезпечити повернення VBUS до стану 0 В, щоб запобігти залишенню 20 В на роз’ємі після від’єднання живленого пристрою. Якщо напруга 20 В залишається на VBUS, а пристрій уже не під’єднаний, це може призвести до подачі 20 В на контакти іншого пристрою під час підключення. Стандарт USB-C дозволяє це лише для 5 В, тому такий сценарій необхідно виключити. Для забезпечення безпеки рекомендується реалізувати сторожовий таймер, який повертає систему в безпечний стан у разі збою коду. Реалізація сторожового таймера в MicroPython є ефективним рішенням для таких ситуацій.

Захист від перевантаження по струму також є важливим аспектом. Для захисту від короткого замикання на шині 5 В можна використовувати перемикач обмеження струму, наприклад, SY6820, встановлений безпосередньо перед парою FET на 5 В. Встановлення обмеження трохи вище 1,5 А дозволить забезпечити стабільність роботи, навіть якщо VBUS вийде з ладу. У новій схемі передбачено цей елемент, тоді як у попередній його не було.

Щодо перевищення струму на вході постійного струму, можна розглянути його обмеження, але зазвичай достатньо покладатися на вихідні обмеження струму джерела живлення. Крім того, якщо вимірюються VBUS і VDC, а резисторні дільники точно відкалібровані, можна оцінити струм через різницю між VBUS і VDC, використовуючи FET як шунт. Якщо падіння напруги на FET між VDC і VBUS перевищує кілька вольт, це є ознакою перевантаження, і в такому разі варто вимкнути його для захисту системи. Це підхід, який дозволяє забезпечити стабільну і безпечну роботу схеми навіть у разі виникнення позаштатних ситуацій.

Поступова зустріч з реальністю

Код для реалізації поведінки USB-C PD насправді не є складним, особливо з урахуванням того, що FUSB302 надає переривання для подій USB-C. Завдання зводиться до обробки цих переривань і вхідних повідомлень PD у FIFO. Написаний фрагмент коду дозволяє створювати профілі USB-C PD зі списку, використовуючи функцію, що конвертує значення в байти. Вона базується на функції синтаксичного аналізу профілів PD із попередньої статті «Відповідь на PD», але зворотного напрямку: замість вилучення байтів функція перетворює значення в байти.

Щоб забезпечити коректність, кожен новостворений профіль проходить перевірку через той самий аналізатор, і за допомогою assert() перевіряється відповідність результатів. Формування повідомлень PS_RDY і Accept також є доволі простим завданням завдяки наявності загальної функції, що надсилає будь-яке командне повідомлення. Вона була створена на основі функції Request із попередніх етапів роботи.

Код циклу поведінки блоку живлення розроблявся поступово, із постійним тестуванням. Для тестування базових сценаріїв, як-от підключення, відключення або обробка переривань FUSB302, використовувався простий пристрій USB-C, який має резистори на 5,1 кОм. Це зводить ризик пошкодження до мінімуму, навіть якщо випадково буде подано 20 В.

Одним із перших пристроїв для тестування став Pinecil, відомий своєю терпимістю до різноманітних джерел живлення PD. Його стек PD з відкритим кодом адаптований для роботи з широким діапазоном нестандартних джерел живлення, що робить його чудовим вибором для тестування пристроїв із потенційними недоліками. Pinecil також є безпечним для експериментів: він не виходить з ладу, якщо на VBUS подати 20 В, тоді як багато ноутбуків можуть не тільки не прийняти це, але й вийти з ладу в найгіршому випадку.

Тестування за допомогою Pinecil дозволило перевірити основну функціональність блоку живлення, включаючи поведінку під час підключення та відключення, надсилання профілів PD і їх правильне розпізнавання. Тестові функції Pinecil показали, що всі профілі, створені кодом, були коректно оброблені. Завершальним етапом стало тестування з ноутбуком Framework, для якого цей блок живлення й був розроблений. Однак робота з ним не пройшла гладко з першої спроби, оскільки контролери PD Framework суворо дотримуються специфікацій USB-C, що потребувало додаткового налагодження.

Одна з проблем полягала в тому, що реклама PD надсилалася занадто рано після підключення пристрою. Це стало очевидним, коли Pinecil потребував близько п’яти секунд для узгодження з блоком живлення, тоді як звичайний зарядний пристрій узгоджувався за одну секунду. Виправлення цього затримало відправлення першої реклами, що дозволило ноутбуку правильно отримувати профілі та запитувати 20 В. Проте після подачі 20 В на VBUS Framework все одно від’єднувався. Проблема полягала у недостатній затримці між надсиланням Accept і подачею 20 В. Після збільшення затримки блок живлення почав працювати коректно. Чекання відповіді GoodCRC було б більш точним рішенням, але навіть спрощений підхід виявився ефективним.

Хоча уважне вивчення специфікацій USB-C і правильна реалізація всіх обмежень могли б полегшити процес, результати роботи блоку живлення виявилися чудовими. Навіть збільшення струму до 5 А не викликало проблем за умови використання кабелів, що підтримують 100 Вт. Однак деякі елементи все ще залишаються на стадії розробки. Наприклад, перевірка emarker або можливостей блоку живлення ноутбука ще не реалізована, тому профілі PD поки що жорстко закодовані, замість динамічного обчислення під час запуску. Попри це, блок живлення стабільно працює з ноутбуком у певних конфігураціях кабелів і адаптерів, а перший створений власноруч блок живлення USB-C на 100 Вт справляється із завданням ідеально.

Увесь код реалізовано на MicroPython, що забезпечує зручність і простоту роботи для високорівневих завдань. При бажанні код можна перенести на C і адаптувати для менших пристроїв, таких як ATTiny або CH32V003, які мають достатньо GPIO, ADC та I2C для виконання необхідних завдань. Це дозволяє створити недорогий адаптер, що перетворює будь-який блок живлення постійного струму на USB-C з мінімальними вимогами до напруги, яка хоча б наближається до профілю USB-C.

Один із секретів реалізації полягає в тому, що хоча адаптер пропонував профілі 5 В і 20 В, у тестах він успішно працював із блоком живлення на 19 В, оскільки саме така напруга була доступна. Навіть при нестандартній напрузі 19 В ноутбук Framework прийняв профіль і почав заряджатися на потужності близько 95 Вт. Це відкриває можливість використовувати різноманітні блоки живлення з нестандартною напругою.

Хоча створення профілів із напругою понад 20 В може бути ризикованим, зниження до нижчих напруг, наприклад 19 В, працює добре. Проте існують певні обмеження, такі як апаратні помилки в деяких материнських платах Framework, які можуть ускладнювати роботу з напругою нижче 18 В. Після заміни польового транзистора ці проблеми усуваються, і адаптер може працювати з будь-яким джерелом постійного струму 10–20 В, забезпечуючи заряджання ноутбука.

Окрім Framework, використання адаптера з іншими ноутбуками залежить від їхнього PD-контролера та прошивки. Наприклад, підключення послідовно чотирьох чи п’яти елементів 18650 до VIN адаптера дозволяє використовувати їх для заряджання ноутбука, динамічно оновлюючи дані про доступну напругу та струм у міру зниження напруги батареї.

У майбутньому планується створення кількох версій адаптера для підтримки різних форматів блоків живлення постійного струму. Також це може допомогти у живленні нових пристроїв, таких як Pi 5, які очікують на PD-профілі для використання 5 А при 5 В. Хоча можливо, що Pi 5 також підтримуватиме живлення через GPIO, більше деталей буде відомо, коли пристрій і його специфікації будуть ретельно досліджені.

Деякі проєкти, натхненні цією схемою, вже перетворили її на функціональні плати завдяки зусиллям друзів і колег. Наприклад, [Wificable] створив плату розширення для ноутбука Framework, яка дозволяє використовувати блоки живлення Dell і HP як зарядні пристрої USB-C. У перспективі така плата може отримати підтримку додаткових функцій, як-от MagSafe, що відкриває ще більше можливостей для інтеграції.

Цей проєкт продемонстрував вражаючі результати: він дозволив повторно використовувати велику кількість старих блоків живлення, виявив несподівану функцію контролера Framework PD і став основою для створення простого та ефективного блоку живлення USB-C, який також можна адаптувати для роботи з LiIon батареями. Схоже, що ця плата сама стане основою для багатьох інших цікавих розробок.

Щодо кабелів, USB-C стає універсальним стандартом, і це природно, адже їх зручно використовувати у різних проектах завдяки високій якості виготовлення, доступності та відносно низькій ціні. Для порівняння, хоча кабелі USB 3.0 теж виготовляються за високими стандартами і можуть використовуватися навіть для підключення PCIe, кабелі USB-C перевершують їх за багатьма параметрами.

Варто детально вивчити можливості кабелів USB-C. Незалежно від того, чи це простий кабель USB 2.0 CC для живлення автомобільного пристрою, чи надсучасний кабель Thunderbolt на 240 Вт із підтримкою високошвидкісного передавання даних, USB-C здатний задовольнити більшість потреб. Шукаєте кабель, який можна адаптувати для власних схем, або хочете забезпечити швидкісне з’єднання для серйозних завдань? Цей стандарт пропонує універсальність і функціональність для будь-яких інженерних викликів.

Всюдисущі кабелі

Найменш цікавими є кабелі USB-A – USB-C. Вони еквівалентні кабелю microUSB – USB-A, за винятком того, що на штекері USB-C є резистор, підключений від VBUS до одного з контактів CC. Ось і все. Кабель чотирижильний, нового насправді небагато. Збережіть ці кабелі для всіх пристроїв, створених без резисторів 5,1 кОм.

Тепер, кабель USB-C – USB-C – скажімо, 60 Вт максимум, здатність кабелю USB-C за замовчуванням. Якщо на вашому кабелі вказано менше 60 Вт, скажімо, «2 A» або «15 Вт», це брехня – він без проблем витримує 60 Вт, усі кабелі USB-C до C можуть витримувати 60 Вт. Цей кабель також прохолодний – для одного має п’ять провідників; GND, VBUS, D+, D- і CC. Два з них (GND і VBUS) гарантовано мають достатню товщину, щоб перенести 3 А без значного падіння напруги, якщо воно взагалі є!

Повторне використання кабелів

Для вашого проекту потрібен кабель, і оскільки кабелі USB-C зараз є всюдисущими, цілком природно захотіти повторно використовувати їх для своїх злих схем. Ви коли-небудь бачили кабелі USB 3.0, які використовуються для підключення PCIe? Це пов’язано з тим, що кабелі USB 3.0 створені за досить високими стандартами, і роз’єми, і кабелі легко знайти, і вони дешеві. Що ж, кабелі USB-C перемагають кабелі USB 3.0 за всіма можливими показниками.

Давайте детально розберемося з повторним використанням кабелю USB-C і побачимо, що саме ви отримаєте, купивши або кабель USB 2.0 CC для АЗС, або наймодніший кабель Thunderbolt потужністю 240 Вт із підтримкою всіх функцій, який можна купити за гроші. Шукаєте кабель, щоб перерізати, або щось, щоб передати серйозно високошвидкісне з’єднання? Ви читаєте правильну статтю.

Всюдисущі кабелі

Найменш цікавими є кабелі USB-A – USB-C. Вони еквівалентні кабелю microUSB – USB-A, за винятком того, що на штекері USB-C є резистор, підключений від VBUS до одного з контактів CC. Ось і все. Кабель чотирижильний, нового насправді небагато. Збережіть ці кабелі для всіх пристроїв, створених без резисторів 5,1 кОм.

Тепер, кабель USB-C – USB-C – скажімо, 60 Вт максимум, здатність кабелю USB-C за замовчуванням. Якщо на вашому кабелі вказано менше 60 Вт, скажімо, «2 A» або «15 Вт», це брехня – він без проблем витримує 60 Вт, усі кабелі USB-C до C можуть витримувати 60 Вт. Цей кабель також прохолодний – для одного має п’ять провідників; GND, VBUS, D+, D- і CC. Два з них (GND і VBUS) гарантовано мають достатню товщину, щоб перенести 3 А без значного падіння напруги, якщо воно взагалі є!

Що це означає? Якщо вам потрібен п’ятижильний кабель, щоб закріпити навушники, і ви хочете щось міцне, кабель USB-C, ймовірно, стане вашим найкращим вибором – і тут у вас є маса вибору. Ви неминуче отримаєте купу зламаних кабелів USB-C, а це означає, що вам ніколи не бракуватиме 5-жильних кабелів – кабелю, який завжди був рідкістю, якщо тільки ви не крадете кабелі навушників для ваші проекти.

п’ять провідників, з них два товстіші – так, ви знаєте, де знайти заміну!

Як щодо кабелів від 100 до 240 Вт? Є хороші та погані новини. Хороша новина полягає в тому, що кабель, ймовірно, містить шість проводів. Один додатковий дріт призначений для VCONN – живлення для мікросхеми emarker всередині штекера кабелю, мікросхеми пам’яті, яку можна зчитувати через лінію CC, повідомляючи блоку живлення, чи справді кабель здатний передавати понад 5 А – потрібно для 61 Вт до Діапазон 240 Вт.

Погана новина полягає в тому, що все ще може бути п’ять проводів, якщо кабель побудовано за альтернативною схемою з двома маркерами, по одному на штекер. Тоді дроту VCONN не буде, і неможливо дізнатися, доки ви не розріжете дріт, тому, якщо ви шукаєте шестижильний кабель, можливо, вам доведеться спробувати кілька різних кабелів. Крім того, провід VCONN не з’єднує дві вилки разом – він ізольований на одному кінці, тому не очікуйте, що це допоможе, якщо ви використовуєте роз’єми USB-C замість того, щоб обрізати кабель.

Тепер вам не завжди хочеться обрізати кабель – ви можете використовувати роз’єми USB-C і застосувати до них власну п’ятипровідну схему. Ідея полягає в тому, щоб використовувати кабелі USB-C для 3D-принтерів. Це має сенс – такі кабелі витримують 60 Вт потужності без жодних потовиділень, і ви, ймовірно, могли б зробити трохи більше. Подайте живлення екструдера на контакти VBUS і GND, а три дроти, що залишилися, використовуйте для термістора та кінцевого вимикача. Але механічні елементи кабелю та розетки можуть порушити угоду. Якщо ваш кабель живлення екструдера вібрує з розетки, у вас на руках може виникнути контакт із високим опором і сильним струмом – рецепт розплавленого пластику та, можливо, полум’я. Спробуйте на свій страх і ризик!

Ви також не зможете зробити такий кабель сумісним зі стандартом повторного використання, і такий порт не буде безпечним для будь-яких пристроїв USB-C, які хтось може підключити до нього, тому, будь ласка, позначте його відповідним чином.

Що щодо напруги?

Як щодо встановлення довільної напруги на VBUS без узгодження PD? Знову ж таки, він не відповідатиме стандартам, якщо ви справді не докладете зусиль – відповідним чином позначте свої розетки та кабелі, налаштовані журі, або вони з’їдять ваші пристрої на сніданок. Крім того, кабелі SPR (100 Вт) містять конденсатори 30 В 10 нФ на кожному кінці штекера, а кабелі EPR містять конденсатори на 63 В – досягайте цих обмежень на свій страх і ризик, відомо, що ці конденсатори виходять з ладу через коротке замикання.

Іншим фактором є те, якщо ви вирішите вибрати ціль 48 В / 5 А, минаючи стандарт USB-C, оскільки підтримка 48 В не така проста, як підключення 48 В до VBUS. Якщо ви просто підключите 48 В до контактів VBUS, вам справді захочеться з’ясувати керування іскрою, щоб раптове від’єднання кабелю не спалило ні вилку, ні розетку, ні те й інше – у PD є способи впоратися з цим, але вони вимагають, щоб ви фактично запровадили PD, зокрема, EPR, що забезпечує купу гарантій безпеки через перевищення обмеження 20 В.

Це приблизно все, коли справа доходить до повторного використання найдешевших типів кабелів USB-C – ви отримуєте додатковий провід порівняно з попередніми стандартами USB, він може витримувати трохи більше енергії, і ви навіть можете використовувати роз’єми USB-C. Однак це вб’є ваші пристрої, якщо ви не будете обережні, і вам потрібно бути особливо обережним, якщо ви перевищите 25 В або близько того. Що робити, якщо ви хочете отримати більше проводів і натомість витягнути кілька диференціальних пар?

Підніміть швидкість

Повнофункціональні кабелі та роз’єми USB-C справді чудові для високошвидкісного зв’язку. Вони створені за надійним стандартом, з належним контролем імпедансу, екрануванням і сучасним розумінням стандартів цифрової передачі. Що саме ви отримуєте від повнофункціонального кабелю USB-C?

Коротка відповідь: ви отримуєте шість диференціальних пар і один односторонній дріт (CC), на додаток до VBUS і GND. Можливо, ви захочете підтримувати GND на стабільному рівні тут і, можливо, не надто возитися з VBUS. З цими шістьма парами відмінностей можна багато чого зробити – два порти USB3, або з’єднання PCIe x2, або два SATA, або HDMI, або CSI/DSI. Ви навіть можете використовувати Ethernet, якщо дійсно цього хочете – просто не очікуйте, що гальванічна розв’язка спрацює.

HDMI через USB C – передача сигналів HDMI через кабелі USB-C.

Є нюанси, звичайно! Ви коли-небудь бачили демонтаж або рентгенівський знімок модного повнофункціонального кабелю? Зазвичай всередині кожного штекера є всілякі мікросхеми. Перший — це мікросхема emarker, про яку цікаво пам’ятати. Для початку це призведе до появи деяких ESD-діодів між GND і CC – обережно, не опускайте CC нижче 0 В або вище 5 В.

Другий тип мікросхем – це драйвер повторного сигналу, який використовується в активних кабелях. Ви повинні забезпечити живлення цих редрайверів через VBUS або VCONN, як і emarkers. Якщо ви цього не зробите, ваші високошвидкісні лінії можуть просто не реагувати на будь-який високошвидкісний сигнал, який ви подаєте на контакти.

А як щодо ротації? Це складно – якщо ваш сигнал не дуже схожий на USB3/DisplayPort/Thunderbolt, можливо, ви не зможете знайти відповідний чіп мультиплексора для обертання ваших сигналів. Таким чином, ви, ймовірно, захочете дотримуватися єдиного обертання та підключати сигнали напряму. Тоді, якщо ви під’єднаєте кабель несподіваним чином, він не працюватиме, тож вам, ймовірно, варто розглянути можливість використання контакту CC або двох контактів SBU для підсвічування світлодіодів. показуючи, чи ви в порядку, чи вам слід від’єднати кабель, повернути його та підключити знову, як у старі добрі часи.

Існує важливий момент, який варто врахувати при роботі з кабелями USB-C: вони з’єднують TX на одному кінці з RX на іншому та навпаки. Це зручно для використання в PCIe, оскільки назви пар змінюються автоматично. Проте для інших типів сигналів це може стати проблемою. Наприклад, RX1 не з’єднається з RX1 на протилежному кінці, а буде підключений до TX1. Відповідно, при проєктуванні слід враховувати це та налаштовувати схему відповідно до специфіки кабелю.

Щодо активних кабелів, ситуація ускладнюється. Через недостатнє розуміння внутрішньої роботи таких кабелів важко точно сказати, чи будуть мікросхеми активного перезавантаження обмежувати певні типи сигналів, які не відповідають стандартам USB3, DisplayPort або Thunderbolt. Це залишається відкритим питанням, яке може вимагати додаткових досліджень і тестувань.

І останній хак

Це основи того, що ви повинні знати, перш ніж спробувати повторно використовувати кабель USB-C, незалежно від його складності. Тим не менш, ось додатковий хак, перш ніж ми закінчимо!

Лише одна пара USB2 фактично підключена до кінця кабелю USB-C – пара з того самого боку, що й контакт CC. Припускаэмо, що спочатку це було зроблено, щоб уникнути проблем із заглушками та кабельними штекерами на друкованій платі, а також для відповідності стандартам, таким як VirtualLink. На жаль, ми так і не отримали кабелі VirtualLink, які дозволили б нам використовувати сім диференціальних пар одночасно, але є ще один хак, який ми все одно виходимо з цього!

Що це означає для вас? Якщо ви використовуєте два мультиплексори класу USB2 2:1, ви можете отримати два додаткових диференціальних сигналу з повністю сумісного роз’єму USB, і вони навіть не заважатимуть кабелям, що відповідають стандартам. Використовуйте це для SWD, JTAG або будь-якого іншого, з вашими сигналами, що пробиваються через спеціальний штекер – просто переконайтеся, що ви сумлінно перемикаєте мультиплексори залежно від орієнтації кабелю, тоді ви зможете залишити свій торт USB2 і з’їсти його.

Інші статті по темі
Знайшли помилку?
Якщо ви знайшли помилку, зробіть скріншот і надішліть його боту.