Arduino:Хакинг/Сборка Minty Boost/Зарядка устройств от Apple

Материал из Онлайн справочника
Перейти к навигации Перейти к поиску

Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Зарядка устройств от Apple[1][2]

Видео ниже рассказывает не только об «айфонах» и зарядке, но и об использовании термовоздушных паяльных станций:

Тут видео

Хотите поподробнее? Листайте дальше!

Краткое введение в USB

У каждого компьютера есть один или несколько USB-коннекторов, и все они, в принципе, одинаковые – имеют по 4 контакта. Один для заземления (Ground), два – для передачи данных (D+ и D-) и еще один – для 5-вольтового питания (5V). Контакты Ground и 5V используются, чтобы обеспечивать питанием устройство, подключенное к USB-разъему, будь то клавиатура, мышь, USB-флэшка или что-то еще. Два других контакта используются для передачи информации туда-сюда – какая клавиша нажата или файлы, сохраняемые на USB-флэшку и т.д.

Adafruit products USB Front Port 1.jpg

Все эти четыре линии показаны выше. Красная – это питание, черная – «земля», а белая и зеленая – линии для передачи данных.

Использование USB для питания

Некоторые дешевые USB-устройства (вроде USB-вентилятора или мини-охладителя для газировки) не передают никаких данных, а просто используют USB-порт для подпитки энергией. То есть в данном случае они не подключены и не используют контакты для данных, так что эти контакты работают как бы вхолостую.

Технически USB-порт может обеспечить силу тока в 500 миллиампер и, опять же, технически каждый девайс должен обмениваться с компьютером хотя бы самыми базовыми данными (это называется «энумерацией»). То есть устройство как бы говорит компьютеру «эй, я тяну от тебя 500 мА, ну, чтоб ты знал», а компьютер может ответить «ладненько» или «не в мою смену!» (это называют «power negotiations» или «переговорами по питанию»).

Тем не менее, мы обнаружили, что если девайсу не нужно передавать никаких данных (это может быть USB-вентилятор или USB-зарядник), то он не беспокоит компьютер лишними расспросами, а просто начинает тянуть у него питание через USB-порт – до 500 мА (или даже больше!). В общем, если такое устройство не подключено к компьютеру через хаб, не имеющий функционал для самостоятельного питания, то все должно быть нормально. У всех компьютеров на USB-портах стоят самовосстанавливающиеся предохранители, поэтому если устройство начнет тянуть через USB-порт более 1000 мА, то питание будет прекращено. Это защита от короткого замыкания, которое может произойти на вашем маленьком 5-долларовом вентиляторе, но способное испортить целый компьютер!

Проблема с устройствами от Apple

Зная, как работает USB, мы сделали так, чтобы у первого Minty Boost вообще не было линий для передачи данных. Мы посчитали, что любой зарядник или другой похожий девайс просто проигнорирует эти контакты, потому что они, как правило, не используются.

К примеру, в CAD-файле для первого Minty Boost коннектор USB – это большой квадрат, находящийся вверху. Четыре овальных контакта, находящиеся в нижней части этого квадрата – это контакты коннектора USB. Контакты #1 и #4 используются для питания (к ним подключены синие линии), но к двум средним контактам (для передачи данных) никаких линий не ведет. Они простаивают.

Adafruit products usbinner 2.jpg

Когда мы выпустили первую версию Minty Boost, то люди, владеющие устройствами от Apple, начали писать нам, что их девайсы не заряжаются. То есть старые модели заряжались без проблем, а новые, вроде iPod Mini, это делать отказывались. Хм... Расчехляем паяльник!

Первая попытка

Мы обнаружили, что для того, чтобы Apple-устройства начали заряжаться, нужно сделать что-то очень простое, и это что-то определенно связано с линиями для передачи данных (линии для питания – это фиксированные «земля» и 5V). Тогда мы подумали: «Может, внутри каждого зарядника стоит чип для энумерации?». Но проверять это было дорого (и «убивать» зарядник тоже не хотелось), поэтому мы просто решили почитать о том, как работает протокол USBэтой книге Яны Акселсон). В частности, в ее фантастической книге есть фрагмент о низкоуровневых сигналах-состояниях. То есть, если мы хотим зарядить iPod, но чтобы он при этом НЕ ДЕЛАЛ энумерацию, то нам нужно было отыскать специальное сигнал-состояние, которое говорило бы «соединения с компьютером нет, но зато есть питание». И, как выяснилось, такой сигнал есть! Он называется SEI и образуется, когда обе линии данных имеют напряжение в 3 вольта.

Но это нужно проверить. Мы украли у друга iPod и надрезали кабель, чтобы была возможность экспериментировать с линиями для данных. Мы попробовали 3 разных варианта – соединение с «землей», c 3 вольтами и без соединения (вхолостую). Одновременно с этим мы измеряли силу тока, идущую через линию для питания. Обнаружилось следующее:

iPod Mini Контакт D- / R4
Контакт D+ / R5 X 0 вольт Без соединения Более 3 вольт
0 вольт X X 100 мА
Без соединения X X 250 мА
Более 3 вольт X 250 мА 250 мА

Итак, если контакты работают вхолостую, то зарядки нет. Еще одно наблюдение: когда контакты притянуты к «земле» или 3 вольтам, начинает идти ток. Поскольку это был первый Minty Boost, оснащенный MX756, мы хотели использовать более низкую силу тока (100 мА), поэтому один контакт был притянут в нижней части вольтового диапазона, а другой – к верхней. Это поспособствовало бы более эффективному использованию батареи и предотвратило бы нагревание чипа (он может выдавать и 250 мА, но нам этот вариант не слишком нравился).

И так родился Minty Boost версии v1.1!

Adafruit products mintyboost1pcb 3.jpg

Minty Boost работает от двух AA-батареек, поэтому необходимые 3 вольта мы можем получить от них напрямую. Поэтому мы подключили подтягивающий резистор прямо к входному контакту батареи.

iPhone и более крупные модели iPod

Эта версия нормально работала примерно год, но затем люди начали покупать новые «айподы» и обнаружили, что Minty Boost их больше не заряжает.

Время тестов!

iPod Nano 2G Контакт D- / R4
Контакт D+ / R5 X 0 вольт Без соединения Более 3 вольт
0 вольт X X X
Без соединения X X 250 мА
Более 3 вольт X 250 мА 250 мА


iPod Shuffle 2G Контакт D- / R4
Контакт D+ / R5 X 0 вольт Без соединения Более 3 вольт
0 вольт X X X
Без соединения X X X
Более 3 вольт X X 100 мА (макс)

Хмм.. кажется, теперь нам нужно два подтягивающих резистора. Мы сделали новую версию, у которой теперь на линии D+ есть и подтягивающий, и стягивающий резисторы.

Adafruit products mintyv11 4.png

«Айфоны»

Это сработало, но потом начали выходить «айфоны». Батареи у них были большие, поэтому им не очень нравилось заряжаться на 250 мА – они хотели 500 мА или даже 1000 мА! Мы начали искать замену MAX756 и нашли LT1302, который выдавал 500 мА безо всяких проблем.

Adafruit products iPhonecharging 5.jpg

Резисторы на 1000 кОм, стоящие на линиях для передачи данных, работали отлично, и все были счастливы. Но потом вышел iPhone 3G и...

Adafruit products nocharge 6.png

Apple перестала халтурить с зарядным интерфейсом и стала очень придирчивой к зарядникам, отдавая предпочтение своим собственным (т.е. официальным). Мы по-прежнему сомневаемся, что в их зарядниках стоят чипы для энумерации – слишком сложно и дорого. Но что тогда происходит на линиях для передачи данных?

Ну что ж... видимо, настало время пожертвовать зарядником к Apple iPhone 3G!

Adafruit products applecharger 7.jpg

Разобрав его, распаяв 4 резистора, стоящих на линиях для данных, и померив их мультиметром, мы обнаружили, что схема выглядит следующим образом:

Adafruit products usb4res 8.png

Эти 4 резистора создают напряжение на каждой линии для данных, которое равно не 3,3 вольта, а 2,8 и 2,0 вольта (или около того). Но проблема в том, что в таком случае iPhone начинает тянуть целый 1 ампер!

Это гораздо больше, чем могут дать LT1302 и две AA-батарейки. В общем, получалось, что Minty Boost нельзя было заставить работать с «айфонами», и мы расстроились, но потом решили прогуляться в магазин J&R и нашли там штуковину под названием TuneJuice. Это зарядник для iPhone, использующий четыре AAA-батарейки. Нам это показалось интересным, потому что получить 1 ампер из AAA-батареек нельзя – они попросту очень маленькие. И это значило, что в этом заряднике происходит что-то еще, не дающее iPhone «сожрать» батарейки. Самое время взяться за отвертку!

Adafruit products tunejuice 9.jpg

И вот что мы обнаружили (в этой схеме указаны немного другие значения для резисторов, мы заменили их ближайшими аналогами с допуском 1%):

Adafruit products usb4res500mA 10.gif

То есть здесь напряжение на обеих линиях для данных составляет 49,9 кОм / (49,9 кОм + 75 кОм) х 5,0 вольт = 2,0 вольт.

Мы немного поэкспериментировали (см. видео выше) и обнаружили, что разные напряжения/сопротивления влияют на силу тока. При использовании 2,8 и 2,0 вольт получается 1 ампер, а при использовании 2,0 и 2,0 вольт получается 500 миллиампер.

Здорово! Потому что чип Minty Boost может работать с 500 мА. Мы переделали печатную плату, чтобы к линиям для данных можно было подключить 4 резистора, а также стали класть в каждый набор 2 резистора на 75 кОм и 2 резистора на 49,9 кОм. До сих пор никаких проблем с зарядкой iPhone не возникало. Ура!

См.также

Внешние ссылки