Светодиодный драйвер из Samsung E250

Принесли как то мне Samsung E250 на ремонт, с диагнозом: разбит дисплей. Ну я дисплей заменил. Разбитый дисплей остался у меня. Перед тем как его выкидывать, я решил посмотреть что в нём интересного…

Фото разбитого дисплея:



Я обратил внимание на микросхему в корпусе DFN-12, выводы которой соединяются с выводами светодиодов подсветки. Очевидно, что это LED-драйвер. Маркировка на корпусе микросхемы — NLA, NLV, BW, итд. Длительный поиск даташита в гугле ничего не дал, и я забил на это гиблое дело. Но вот недавно (спустя год) перебирал всякий хлам, и нашел ещё пару дисплеев от E250. Маркировка на микросхемах уже другая — NLW 7Y.



Всёже мне стало интересно, что же это за хитрая микруха-драйвер, и я опять полез искать даташит. Спустя 1,5 часа поисков даташит был найден. Микросхемой оказалась AAT3151 производства Advanced Analogic Technologies.
Микросхема представляет собой 4-канальный драйвер светодиодов. Работает на переключаемых конденсаторах, может как понижать, так и повышать напряжение. Предназначен для питания нескольких белых светодиодов, например, для подсветки ЖК-дисплея.

Особенности микросхемы:
* напряжение питания 2,7… 5,5В
* 4 канала с независимой стабилизацией по току
* максимальный выходной ток 15/20/30 мА на канал (настраивается)
* регулировка тока группы каналов (1,2,3) и суб-канала (4)
* каналы можно соединять параллельно для питания «жирных» светодиодов
* в спящем режиме жрёт менее 1 мкА
* мягкий старт
* частота преобразователя 1 МГц
* защита от перегрева микросхемы
* защита от короткого замыкания выходных каналов
* обвязка микрухи — 4 мелких конденсатора



Микросхема управляется через хитрый однопроводной интерфейс c непонятным названием «AS2CWire». Так как интерфейс однопроводной, принцип передачи данных завязан на временнЫе интервалы. Передача данных выполняется посылками. Каждая посылка состоит из полей адреса и данных, также разделённых временнЫм интервалом. Обратной связи в этом интерфейсе нету, тоесть мы можем только записывать данные, считывать не можем. Для настройки микросхемы необходимо записать данные по нескольким адресам:



Расскажу подробно про каждый адрес.
Адрес 1 — Установка выходного тока для всех каналов одновременно (1,2,3,4).
Адрес 2 — Установка выходного тока группы (1,2,3). Ток суб-канала (4) при этом не меняется.
Адрес 3 — Установка выходного тока суб-канала (4). Ток группы (1,2,3) при этом не меняется.
Адрес 4 — Установка диапазона регулировки тока (для всех каналов).
Адрес 5 — Установка выходного тока для «экономичного режима».

Для правильной работы драйвера необходимо задать диапазон регулировки выходного тока для всех каналов (адрес 4). По умолчанию, если ничего не настраивать, активен диапазон регулировки 0...20 мА. Можно изменить диапазон на 0...15 или на 0...30 мА. Также можно активировать «экономичный режим».



При использовании «экономичного режима» необходимо настроить выходные токи каналов (адрес 5). По умолчанию выходной ток экономичного режима 0 мА, без настройки этого регистра светодиоды светиться в «экономичном режиме» не будут.



Ну а выходной ток каналов (яркость светодиодов) задаётся при помощи адресов 1...3. Адрес 1 задаёт ток всех каналов (1...4), адрес 2 задаёт ток группы каналов (1...3), адрес 3 задаёт ток суб-канала (4). При записи числа «1» получаем максимальный ток на выходе, при записи «16» — минимальный ток. Диапазон регулировки тока зависит от выбранного режима (0...15мА, 0...20мА, или 0...30мА). Так как каналы 1,2,3 входят в группу, они имеют одинаковый ток, который может быть изменён только для всей группы. То есть настроили на 20 мА, каждый канал в группе будет отдавать ток 20 мА. Ток 4-го канала настраивается независимо от группы.



Чтобы погасить все светодиоды и перевести микросхему в спящий режим, необходимо на управляющую ногу (EN/SET) подать логический «0». При переходе в спящий режим, все настройки сбрасываются в исходное состояние. На фотках — исходные значения отмечены красным.

Чтобы выйти из спящего режима и зажечь светодиоды, необходимо на управляющую ногу (EN/SET) подать логическую «1». При этом микруха заведётся с настройками «по умолчанию» — диапазон регулировки 0...20 мА, установка тока — на максимум.

Благодаря такой логике работы, можно управлять яркостью светодиодов при помощи ШИМ. Если частота ШИМ будет не слишком высокой, и не слишком низкой, то микросхема будет успевать «засыпать» и «просыпаться» синхронно с ШИМ сигналом. Я проверил — действительно, регулировка яркости при помощи ШИМ работает. Если частота ШИМ будет слишком низкой, то светодиоды будут неприятно «мерцать», а если частота ШИМ будет слишком высокой, микросхема начнёт воспринимать ШИМ как управляющий сигнал «AS2CWire» шины, и начнёт безбожно глючить и хаотично менять настройки.

Чтобы поиграться с микросхемой, я набросал демонстрационную программку под AVR ATmega32. В программе используется ногодрыг для эмуляции «AS2CWire» интерфейса, реализовано полноценное управление драйвером. Микроконтроллер тактируется от встроенного генератора 1 МГц. Схему подключения микроконтроллера к AAT3151 не привожу, так как задействована всего одна ножка МК — PD5, её подключаем напрямую к выводу «EN/SET» AAT3151, и готово. В исходнике можно поменять ножку на любую другую. Также можно поменять тактовую частоту, главное чтобы она была не менее 1 МГц. Ну и естественно, код может быть с лёгкостью адаптирован под любой МК AVR.

Демонстрационная программа работает по следующему алгоритму:
— Настраивает группу каналов (1,2,3), отключает неиспользуемый суб-канал (4);
— Включает «режим энергосбережения», демонстрация 2 секунды;
— Включает спящий режим, демонстрация 2 секунды;
— Включает режим «15 мА», яркость на максимум, демонстрация 2 секунды;
— Включает режим «20 мА», яркость на максимум, демонстрация 2 секунды;
— Включает режим «30 мА», яркость на максимум, демонстрация 2 секунды;
— Начинает плавно уменьшать яркость до минимума, затем увеличивать яркость до максимума, демонстрация зациклена.

Демонстрация на видео:


Фото демонстрационного макета:


Микросхему можно использовать, например, в качестве подсветки дисплея для самодельного проекта, в качестве мини-фонарика, итд… Вобщем думаю что применение данному девайсу найдётся.

P.S.
Первоначально материал сливал сюда
С уважением, Zlodey
Май 2013… Сентябрь 2014г.
  • +4
  • 28 сентября 2014, 15:03
  • Zlodey
  • 2
Файлы в топике: AAT3151IWP-T1.zip, AAT3151_ATmega32_Zlodey.zip

Комментарии (19)

RSS свернуть / развернуть
Почему на втором фото обозначены контакты шлейфа рядом с микрой, а на третьем провода припаяны с другой стороны?
Что из себя предсталяет микра? Многоканальный линейный стабилизатор тока вроде MBI50xx?
+1
  • avatar
  • Vga
  • 28 сентября 2014, 15:19
Спасибо, на фотке с проводами — подпайка правильная. На фотке с распиновкой- ошибка, исправлю.
Микра- многоканальный преобразователь на переключаемых конденсаторах, со стабилизацией по току.
0
Гм. Но судя по шлейфу — СИДы включены параллельно и работает оно от 3.5В, т.е. напряжение вполне достаточное для линейного драйвера. Зачем там зарядовый насос?
Если уж пишешь в детальку — напиши основные параметры микросхемы, такие как количество каналов, напряжение, ток, все такое. Это же относится к соседнему топику про микрочиповский зарядник.
0
  • avatar
  • Vga
  • 28 сентября 2014, 15:36
СИДы включены каждый к своему каналу, между собой связаны только общим проводом, читай, не связаны вообще
0
Я имел в виду, что каналы включены параллельно, т.е. минимальное требуемое напряжение питания — Vf+Vdrop, для белых диодов это как раз примерно 3.5В. Даташит пишет о том, что микра работает от 2.7В, и может питать диоды с Vf до 4.3В — это объясняет, зачем нужен зарядовый насос.

Алсо, любопытный интерфейс. Микра стартует в режиме 20мА/максимальная яркость. Вход управления выполняет как функции EN, так и цифрового интерфейса (микра управляется пачками коротких импульсов на частоте до 1МГц, данные кодируются числом импульсов). Хотя интерфейс не слишком удобен — частота слишком мала, чтобы дергать GPIO на максимальной скорости без задержек и слишком велика, чтобы использовать неблокирующие задержки.
0
  • avatar
  • Vga
  • 28 сентября 2014, 16:15
зарядовый насос затем, что у микры питающее 2,7...5,5 а у белого светодиода падение 3,2...3,6
0
УРРРРАААААА!!! Раскурил управление и реализовал его ногодрыгом на AVR. Чуть позже полностью перепишу статью.
0
Готово!
0
Каждая посылка состоит из полей адреса и данных, также разделённых временнЫм интервалом.
Не совсем. Тип посылки определяется по ее содержимому (17+ — адрес). Адрес достаточно установить один раз, все последующие записи будут идти по нему. К тому же, по дефолту выставляется адрес самого используемого регистра (1), так что адресная посылка может вообще не потребоваться (ток и так настроен на самое часто используемое значение в 20мА).

И ты не описал самое главное — собственно интерфейс.
0
  • avatar
  • Vga
  • 04 октября 2014, 17:14
for (uint8_t i=1; i<15; i++)	// Уменьшаю яркость до минимума
{
	aat_write_reg (CH_123_CURRENT_REG, i);
	_delay_ms(100);
}

Незачем каждый раз адрес передавать Можно сделать так:
aat_write_pulses(CH_123_CURRENT_REG); // Set address
for(uint8_t i=1; i<15; i++)
{
	aat_write_pulses(i);
	_delay_ms(100);
}
0
  • avatar
  • Vga
  • 04 октября 2014, 17:23
У такого способа тоже есть минус- мы должны помнить, какой адрес мы устанавливали в последний раз. ИМХО вариант не очень удобный. Проще обратиться по конкретному адресу с конкретными данными.

Цикл уменьшения яркости и задержки типа «delay» исключительно для примера. В реальном девайсе такого не будет, и придётся обращаться по конкретному адресу с кустановкой соответствующего параметра. Ведь можно не только регулировать яркость, но и пользоваться экономичным режимом. А это уже другой адрес.
0
В реальном устройстве будет так:


aat_write_reg (CH_123_CURRENT_REG, i);    // Установили яркость, работаем
//
// какой то кусок кода
//
aat_write_reg (MAX_CURRENT_REG, MODE_LOW_CURRENT);    // Мало заряда аккумулятора, вкл Экономичный режим
//
// какой то кусок кода
//
aat_off();		// Батарея села, Ушли в спящий режим
0
Яркость дисплея ведь никто не будет менять 150 раз в секунду :) Установил и всё, микросхема автономна.
0
мы должны помнить, какой адрес мы устанавливали в последний раз
В простейшем случае, если устраивает «все по дефолту» можно вообще никакие адреса не передавать. В противном случае можно задать в ините требуемые настройки, переключить на регистр яркости и дальше работать только с ним. Не канает только при управлении главным и дополнительным каналами по отдельности или при применении экономичного режима (не слишком частая потребность).
Яркость дисплея ведь никто не будет менять 150 раз в секунду :) Установил и всё, микросхема автономна.
у, во первых, это необязательно дисплей. Во вторых, ЕМНИП самсуи с этим дисплеем зажигают его плавненько. Типа:
bl_enable();
a2sc_send(ADDR_MAIN_BRIGHTNESS);
for(int i = 16; i > 0; i--){
  a2sc_send(i);
  delay(20);
}

Собственно, именно для таких анимаций режим многократной записи в регистр и предусмотрен.
В случае, если передачи занимают заметное время процессора — можно в драйвере A2SC хранить текущий регистр передавать адрес только если он изменился.
0
Если устраивает всё «по дефолту» — микросхеме достаточно обычного ШИМ сигнала, никакие хитрые интерфейсы не нужны.

ЕМНИП самсуи с этим дисплеем зажигают его плавненько
Неа, подсветка у таких самсуней резко включается/выключается, проверенно.

… для таких анимаций...
15 достаточно резких изменений яркости — заметны на глаз. Для нормальной плавности надо минимум 128-256 градаций. А с пятнадцатью градациями там не плавное включение получится, а мудня какая то… На камере ещё не так заметно, а в реале отстойно смотрится.
0
Микросхема требует минимум 0.5мс задерживаться в каждом состоянии — ШИМ получается очень медленный. Ну и это именно то, для чего даташит предлагает такую фичу юзать.
Неа, подсветка у таких самсуней резко включается/выключается, проверенно.
Но у каких-то аппаратов я это видел. А чтобы оно не было заметно на глаз — нужно просто быстрее их проматывать. Миллисекунд 10-20 на шаг, я думаю, дадут эффект плавного и достаточно быстрого зажигания.
0
Побыстрее проматывать 15 шагов? Хм, интересно. А то, что на первой градации дисплей уже уверенно ярко светит- ничего страшного???
0
Нулевая градация- дисплей не светится совсем, первая градация- дисплей уверенно светится. Нормальной плавности не получится.
0
А ты попробуй.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.