Встраиваемый плеер jq6500-28p для говорящего ежа [и не только]
Давным-давно, настолько что уже кажется неправдой, на соседнем ресурсе рассказывали про чудесный
встраиваемый MP3-плеер
, которым можно оснащать все, что угодно, даже MP3-плееры, если из них сначала вынуть собственный, а потом поставить этот. Короче, полезная вещь. Особенно, если хочется сделать детскую игрушку во-первых, своими руками, а, во-вторых — правильно, а не так, как думают те, кто их делает в промышленном масштабе.
Выглядел этот плеер как типичное китайское изделие, и я был очень признателен продавцам за то, что они не стали скрывать маркировку чипа, благодаря чему на Ebay я нашел даже более интересный вариант этой железки. Именно — со слотом microSD вместо флешки фиксированного объема (хотя флешка здесь тоже имеется).
И подумал, что раз у китайцев говорящие игрушки мне не слишком нравятся, то я сделаю свою. С Емелей, так сказать, и щуками.
И заодно видео для того же самого привлечения внимания, пусть даже без купальников и шкафов.
Развлекательные фразы при ожидании:
Переключение сказок, громкости и выключение карточками и встряхиванием:
Беспроводная зарядка:
Но вернемся к плееру. Помимо моей модификации с microSD, они выпускаются c флеш-памятью по крайней мере от 16Мбит до 64Мбит (т.е. от 2 до 8 мегабайт). Зачем я это говорю? Затем, что продавцы, бывает, сами не в курсе, что продают и могут настаивать, что модуль укомплектован 16 мегабайтами или даже 64 мегабайтами, тогда как это совсем не так.
Характеристики вкратце:
- Формат MP3: все битрейты, стандарты 11172-3 и ISO13813-3 layer3
- Частота дискретизации (КГц): 8/11.025/12/16/22.05/24/32/44.1/48
- Эквалайзер: Normal, Jazz, Classic, Pop, Rock
- Последовательный UART-интерфейс с уровнями TTL
- Напряжение питания: 3,5 В — 5 В, оптимальное значение 4,2 В
- Ток: 20 мА
- Прямое подключение динамической головки 8 Ом, 3 Вт
Интересно, что и свой модуль я покупал с приключениями. Заказал, приготовился ждать. Ближе к моменту окончания защиты PayPal предупредил продавца, что ничего не получил и посетовал, что при таком раскладе, наверное, придется этой защитой воспользоваться.
Продавец сообщил, что раз так, то вышлет мне еще один, если меня устроит такой вариант. Меня такой вариант устраивал, и спустя некоторое время я таки получил модуль. Из первой посылки или из второй (если она была) — мне неведомо.
Что огорчило при распаковке, так это уже заботливо распаянные гребенки. Вот честное слово, я бы хотел, чтобы их распаивали, скажем, на Arduino Pro Mini, а здесь бы клали рядом. Но в жизни все почему-то все шиворот навыворот.
Короче, печаль, если учесть, насколько муторно удалять гребенку только паяльником. Мое разрушающее ноу-хау: греем пин и дергаем его через размягченный пластик гребенки. Понятное дело, что воспользоваться ей уже не получится, но меня это уже не волновало.
По счастью на плате модуля размещаются и более полезные компоненты. Например, чип-декодер JQ6500 и флэш-память 25L3205 емкостью 32 Мбит (4 Мбайт), если меня не обманывает документация.
С оборотной стороны мы с неземной радостью наблюдаем слот для карт microSD и уже не такой оптимистичный, но все же разъем miniUSB, который служит для загрузки треков во флэш-память (но не на microSD, если, опять же, я все правильно понял). С другой стороны, кому надо пользоваться старым разъемом и непонятной реализацией USB-стыка, когда можно запросто записать все необходимое напрямую на карту?
Здесь же можно видеть светодиод состояния — он горит во время воспроизведения. И нельзя видеть маркировку пинов. С обратной стороны ее тоже не увидишь, поскольку есть она только на картинке продавца:
Превосходная (на мой взгляд) интерпретация назначения выводов представлена автором библиотеки JQ6500 для Arduino.
Вкратце о чем там. Полагаю, что о смысле VCC и GND догадываются все. Я только отмечу, что эти пины сквозным образом соединены на плате (не КЗ, а попарно — VCC-VCC, GND-GND), поэтому при необходимости плеер можно использовать как кросс питания для самоделок: подводим ток к нему и забираем с соседних выводов на другие потребители.
Пины SPK и SPK- служат для подключения динамика сопротивлением 8 Ом без дополнительного усилителя. Но это только монозвук, а для стерео служат выходы DAC-L и DAC-R (левый и правый каналы), которые следует использовать с внешним стереоусилителем.
Выводы Pl/Pause, Next/V и Pr/V- предоставляют базовое управление воспроизведением. Именно: воспроизведение/пауза, следующий трек (увеличение громкости), предыдущий трек (уменьшение громкости).
При этом воспроизведение/пауза переключается последовательным кратковременным соединением с землей, тогда как комбинация переключения трека и громкости использует два типа «нажатия» — короткое и длинное.
Примерная китайская схема выглядит так:
Также сразу на плате выведены контакты K1 — K5 для прямого воспроизведения пяти треков из памяти и примерный аналог этих пинов ADKEY с резистивным управлением:
Т.е. как видите, чтобы запустить плеер по минимуму, достаточно подключить к нему несколько кнопок, батарейку и динамик. И, конечно, не забыть про карточку памяти с музыкой или книжками — кому что по душе.
Полагаю, именно по этой причине чуть не в каждом описании этого модуля пишется о его применении в различных автономных автоинформаторах на транспорте, предприятиях и т.п.
Вывод VPP/IR служит для управления ИК-пультом, причем (все там же) сообщают, что туда можно подключить простой ИК-приемник, рассчитанный на модуляцию 38 КГц и пользоваться дешевым пультом.
Также выведены контакты для переключения режима воспроизведения и выбора источника воспроизведения (microSD/встроенная память). Должен заметить, что еще упоминается о нераспаянном сопротивлении, площадки которого размещаются над правым верхним углом чипа JQ6500. В зависимости от номинала им можно жестко задать режим переключения файлов при воспроизведении:
Но если честно, то для меня в свете наличия библиотеки для Arduino и желания сделать игрушку более полезными оказались последовательный порт (контакты RX/TX) и сигнал занятости модуля (BUSY).
Тем не менее, минимальный функционал модуля я проверил и получилось следующее. Как можно ожидать, если карты памяти нет, то воспроизведение работает с флэш-памяти, куда были записаны какие-то китайские треки. Если же карта памяти установлена, тогда играть плеер будет именно с нее.
Кнопочки воспроизведения/паузы, переключения треков и громкости работают без сюрпризов. То есть, как положено — переключают и регулируют.
Что касается порядка воспроизведения, то надо понимать, что плеер умеет играть не только из корня microSD, но также из папок. Насколько мне удалось сопоставить результаты, схема здесь следующая.
При последовательном воспроизведении сначала отыгрывается корень, затем — папки. Файлы сортируются по дате модификации. При этом что первым было записано на карту памяти, то первым и воспроизводится.
Что касается форматов, то из общения с китайскими плеерами я вынес, что обычный комплект декодеров это MP3, WMA и WAV. Этот оказался немного нестандартным и может MP3 и WAV. Windows Media, как ни старался, играть заставить не мог (пробовал тестовые файлы 8, 9 и 10 версии — без толку). Возможно, я, конечно, что-то делал не так.
В режиме ожидания плеер потребляет примерно 16 мА, тогда как при воспроизведении в зависимости от установленной громкости (декларируется 30 ступеней) и материала потребляемый ток легко уходит за 100 мА.
Максимальной громкости при этом вполне достаточно, чтобы даже попросить сделать потише, качество звука при использовании встроенного усилителя и более-менее приличного динамика вполне приемлемое для чего-нибудь простого вроде фоновой музыки или аудиокниг.
Теперь что касается управления через последовательный порт. Автор библиотеки рекомендует следующее подключение: TX напрямую к контроллеру, а RX — напрямую, если контроллер работает от 3,3 В и через резистор 1 кОм, если от 5 В.
Для хадкорных программистов тот же автор библиотеки публикует разбор протокола модуля. Но я, повторюсь, подошел к вопросу по-любительски, т.е. использовал готовую библиотеку.
И по этому поводу позволю себе дальше процитировать самого себя, который рассуждал, что нехорошо ограничиваться только плеером и Arduino и добавил в конструкцию простейший вибродатчик SW-18010P и всем известный считыватель карточек RC522.
Все только для того, чтобы полностью избавиться от кнопок, которые в развлекательной игрушке я посчитал лишними. Сами посудите: если кнопки есть, ребенок так или иначе будет их нажимать, причем чаще — случайно, чем сознательно. А сверхчастое переключение сказок все же не совсем правильно.
Здесь же получается как: вибродатчик служит для включения игрушки, когда ребенок берет ее в руки. Тот же датчик не даст игрушке выключиться, пока ребенок ее не положит на достаточно длительное время.
По поводу датчика также хочу заметить, что SW-18010P — более продвинутая версия очень распространенного SW-520 (который я хотел купить поначалу). Что важно для игрушек, так то, что они оба без ртути.
Но при этом конструкция SW-520d подразумевает замыкание контактов при перекатывании шариков:
А SW-18010P состоит из тонюсенькой пружинки, в просвете которой проденут более капитальный контакт. При покачивании контакт замыкается на пружинку — датчик срабатывает.
Кстати, срабатывает абсолютно незаметно для моего тестера, и я поначалу даже подумал, что китайцы прислали брак. Но потом взял себя в руки, подключил датчик к контроллеру и убедился, что он очень даже ничего.
Настолько ничего, что его можно использовать даже в простой охранной сигнализации. То есть, понятно, что кто знает — обойдет. Но по факту штука реагирует даже на несильные удары по поверхности, на которой располагается и на физическое перемещение в пространстве.
Имейте в виду, если что.
Что касается читалки карточек Mifare, то эта штука, на мой взгляд, крайне удобна для переключения сказок. Например, карточки можно прикрепить к книжкам, и тогда ребенок сможет послушать сказку, поднеся игрушку к книжке.
А еще карточки можно прикрепить к различным предметам, и тогда ребенок сможет послушать их описание и правила использования. Например, что вот эта белая фиговина — холодильник, и что мы там храним продукты, чтобы они не испортились, и что по этой причине открывать его почем зря не стоит. Или что вот то — духовка, и она может быть горячей, поэтому не нужно висеть на ее ручке и прикладывать ладошки к стеклу. Много чего можно придумать, тем более, что карточками служат использованные билеты метро (да, мне повезло, я в Москве), которые можно запросто насобирать в нужном количестве.
Поэтому пока я придумывал, как мы теперь заживем, то между делом достал из запасов контроллер ATmega328p, напаял его на макетную платку и прошил загрузчик Adruino через Arduino Mega 2560.
Для удобства вывел последовательный порт, сброс и землю на отдельный разъем для быстрого перепрограммирования. А то знаю себя — залью скетч, а потом одно не то, другое не так.
Рядом распаял еще и стабилизатор на 3.3В, так как RC522 по недоразумению питается именно от этого напряжения, тогда как остальные компоненты прекрасно чувствуют себя на универсальных 5В, которые я предполагал брать от простенького пауэрбанка на аккумуляторах типа 18650.
Решение использовать такой пауэрбанк, а не типичный плоский аккумулятор может показаться нелогичным. Но я подумал, что так как игрушка будет потреблять довольно приличный ток (только контроллер и плеер в режиме ожидания кушают около 40 мА), то возможность быстро заменить пустую батарейку на полную весьма кстати.
А еще мне пришлось добавить пьезокерамическую пищалку для звуковой индикации некоторых событий (чтение карточки, например). Это, скажете, вообще смешно — есть же динамик, так? Ну так, да не так. Динамик ведь подключен к плееру, а не к контроллеру. И еще добавил транзистор в качестве ключа, который отключает MP3-плеер во время сна, чтобы снизить потребление энергии.
Внимательный читатель может заметить, что плеер можно было бы запитать от цифрового пина контроллера, который прекрасно справился бы с включением и выключением. Я бы сам того хотел, но напоминаю, что это только в режиме ожидания плеер потребляет 16 мА. А когда музыка, то он легко забирает больше 100 мА, что уже как минимум вдвое превышает возможности ATmega. Поэтому я взял «любой» npn-транзистор с током коллектора 300 мА и подвел его к цифровому пину контроллера через резистор около 200 Ом.
Зато картридер потребляет в пределах 40 мА, поэтому питающий его стабилизатор можно подключать к цифровому пину контроллера. Так и сделал, но все равно не получилось, о чем — в конце.
Еще такой момент: плееру требуется динамическая головка сопротивлением не ниже 8 Ом. У меня такая была (динамик из системного блока), но звук у нее не очень. Еще были динамики сопротивлением 4 Ом (от типичной китайской колонки). В общем, соединил оба последовательно: один дает больше высоких, другой — низких, а вместе они просто классно звучат.
Осталась мелочь, т.е. зеркало души. Которое проще всего смастерить из пары соединенных последовательно светодиодов. Брутально-красные брать не стал — очень уж страшно. А вот янтарно-желтые глаза — самое оно.
Итак, макет игрушки собран и отлажен. Теперь самое главное: нужен донор телесной оболочки. Вообще, мне очень хотелось птицу-говоруна, но судя по цене соседних игрушек, удовольствие не совсем бюджетное. Особенно если учесть, что интерес ребенка — вещь непрогнозируемая.
Поэтому для начала я стал искать более доступного кандидата на трансплантацию. И такой нашелся: очаровательный еж Ивлин, продающийся в Детском мире.
Конечно, пришлось практически целиком избавиться от богатого внутреннего мира ежа. И заменить его самодельным, упакованным в обычную мыльницу. Впрочем, не совсем обычную. Дело в том, что в отличие от многих, у этой мыльницы плоская задняя сторона, поэтому там удобно размещать считыватель карточек — получится минимальная дистанция. С другой же стороны у мыльницы что-то вроде массажной щетки и даже есть отверстия, т.е. там идеально размещается динамик: звук будет выходить через отверстия, которые не будут перекрыты благодаря массажным шипам. Отверстий, правда, оказалось маловато, но не беда — я еще насверлил.
Тяжелее всего, должен признать, далась хирургия ежа. Во-первых, я не люблю шить. А пришлось прилично: сначала распорол, потом скрепил края, затем пришил шесть кнопок. Потом отпорол шесть кнопок и пришил четыре кнопки. Все почему? Потому что сначала пришил маленькие и неправильно, так что еж расстегивался.
Во-вторых, глаза. Светодиоды я, конечно, предусмотрительно приобрел диаметром 3 мм, чтобы уж гарантированно можно было изобразить ими зрачки. Однако высверлить отверстия в имеющихся глазах ежа Ивлина оказалось не так-то просто. Казалось бы: берешь гравер, ставишь в него нужное сверло — и вперед. Но выяснилось, что во время сверления пластик превращается в вязкую массу, где сверло слабенького гравера вязнет намертво.
И, должен сказать, еж со сверлом, торчащим из глаза, зрелище инфернальное.
Кстати, по этому поводу даже не знаю, что посоветовать. Я как-то извернулся и все-таки проделал отверстия, вставил в них светодиоды и залил эпоксидкой, а сверху покрыл бесцветным лаком для ногтей. Глаза также приклеил к ежу эпоксидкой, поскольку родное крепление погибло в процессе сверления. Результат получился не идеальным, но вполне терпимым.
Как еж работает, вы уже видели. Поэтому могу только продублировать текстом его текущую логику. Изначально еж находится в режиме сна. Если его взять в руки (или просто пошевелить, или пошевелить поверхность, на которой он лежит и т.п.), он проснется по прерыванию, которое сгенерирует датчик вибраций.
После этого через заданные интервалы еж будет говорить заранее заданные фразы, и если в течение некоторого времени ежа не трогать, он снова уснет. А если трогать — не уснет. А если потрясти некоторое время — начнет рассказывать сказку, выбранную в случайном порядке.
Если же к ежу (когда он не спит) поднести карточку, то еж начнет рассказывать сказку, которая ассоциирована с этой карточкой. Жесткой привязки нет, порядок будет меняться при замене сказок. Фиксированы только две служебные карточки: для регулировки громкости и принудительного усыпления ежа. Громкость, к слову, настраивается последовательным переключением трех ступеней (тихо — средне — громко).
Что до янтарных глаз, то они мигают по два раза (в цикле), когда еж проснулся, но молчит и меняют яркость, когда еж рассказывает сказку. Мне это показалось оптимальным вариантом.
В процессе сборки попробовал еще одну новацию: так как у пауэрбанка два разъема (вход и выход), то ко входу подключил имеющийся у меня адаптер беспроводной зарядки Qi. И таким образом получилось, что для перезарядки ежа, его совсем не нужно расстегивать — достаточно просто положить на ночь на беспроводной зарядник. Впрочем, как раз эта функция пока что в режиме тестирования.
Вообще, несмотря на кажущуюся простоту, некоторые вещи меня озадачили. Например, из кода вы можете заметить, что некоторые команды я отправляю плееру несколько раз подряд, да еще ставлю в конце таймаут. А все потому, что на практике в моей конфигурации только так и можно.
Также видно, что я зачем-то контролирую окончание воспроизведения по аппаратному сигналу плеера вместо того, чтобы простой командой включить ему режим воспроизведения только одного файла. Это тоже не просто так: почему-то у меня этот режим не работает, поэтому при окончании одной композиции плеер начинает играть следующую.
Еще любопытным может показаться то, что функция random для воспроизведения случайной композиции постоянно крутится в loop, вместо того, чтобы вызываться лишь когда она действительно нужна. Но тут такое дело: если вызывать ее только когда она нужна, то она почему-то в подавляющем большинстве случаев возвращает одно и то же значение. Зато если поставить в loop, тогда генерируются действительно псевдослучайные значения. Собственно, это я тоже на практике выяснил, когда пытался понять неадекватное поведение ежа.
Наконец, что меня совсем поставило в тупик, так это неспособность справиться с выключением картридера с помощью цифрового пина контроллера, от которого ридер и питается. Почему-то выходит так, что если пин выставить в LOW и затем в INPUT, то ридер не выключается.
При этом, если просто выставить LOW, то светодиод картридера «горит» вполнакала, напряжение на выходе стабилизатора, питающего ридер — около вольта. Если затем на пине контроллера сделать INPUT, это напряжение вырастает примерно до 3В.
Еще интереснее, что если сначала выставить пины контроллера, подключенные к SS и RST ридера в LOW и INPUT, а затем в это же положение перевести питающий пин контроллера, то ридер выключается. И даже потом включается после сна, если питающий пин перевести в OUTPUT и HIGH.
Однако при этом случается что-то непоправимое с таймерами. То есть, это я так считаю, потому что после такого финта (сна с отключением ридера) неадекватно работают глаза и счетчик встряхиваний, а оба эти процесса завязаны на millis(). Что происходит и как восстановить работу таймера, я не знаю, поэтому пока оставил, как есть — картридер продолжает питаться даже во время сна.
Если старшие товарищи помогут найти выход — буду очень признателен. Хотя с трудом верю, что старшие товарищи дочитают до этого места.
С учетом вышесказанного, код ежа Ивлина совсем неидеален, но вы всегда можете причесать его (код или ежа — выбирайте сами), оптимизировать, дополнить, сократить или иным образом приспособить к своим потребностям. Именно поэтому я его и прилагаю. А чтобы было проще использовать то, что есть, максимум настроек (старался вообще все, но получилось как обычно) находится не в коде, а в секции определения переменных. Там и конфигурация пинов, и временные задержки, и количество треков.
В секции описания номеров карточек следует понимать, что последние две карточки всегда «зарезервированы» для внутренних функций — переключения громкости и режима сна.
Программа действий
/* A0 — проверка состояния MP3 (играет или стоп)
* pin 0, 1 — последовательный порт (перепрошивка)
* pin 2 — прерывание на проснуться
* pin 4 — включение питания MP3 (через транзистор)
* pin 5 — пищалка
* pin 6 — питание кардридера
* pin 7, 8 — управление MP3
* pin 9 — сброс кардридера
* pin 10 — выбор кардридера
* pin 11, 12, 13 — SPI кардридера
*/
#include <Arduino.h>
#include <SoftwareSerial.h>
#include <JQ6500_Serial.h>
#include <avr/pgmspace.h> // для PROGMEM
#include <SPI.h>
#include <MFRC522.h>
#include <avr/sleep.h>
#include <avr/power.h>
#define adc_disable() (ADCSRA &= ~(1<<ADEN)) // disable ADC (before power-off)
#define adc_enable() (ADCSRA |= (1<<ADEN)) // re-enable ADC
#define RST_PIN 9
#define SS_PIN 10
#define mp3Pin 4
#define mp3Busy A0
#define readerPin 6
#define tonePin 5
#define ledPin 3
#define offDelay 70000 // таймаут автовыключения
#define winkStep 1500 // пауза между морганиями
#define on 150 // глаза «открыты»
#define off 80 // глаза «закрыты»
#define tOut1 0 // таймауты для воспроизведения определенных фраз в режиме ожидания (x — начало/ x1 — конец интервала)
#define tOut11 500
#define tOut2 14000
#define tOut21 15000
#define tOut3 29000
#define tOut31 30000
#define tOut4 44000
#define tOut41 45000
#define tOut5 60000
#define tOut51 65000
#define tShake 2000 // время тряски для включения воспроизведения
#define nShakeQ 10 // количество встряхиваний для включения воспроизведения
#define introQ 5 // количество файлов-заставок
#define minVol 18 // низкая громкость
#define midVol 22 // средняя громкость
#define maxVol 25 // высокая громкость
unsigned long dimDelay, winkStepDelay, onDelay, ledOffDelay, tShakeDelay;
boolean ledOn, ledOff, eyes, pwm;
int wink;
int pwmVal;
boolean playON = false;
boolean pwmUp = false;
byte pwmStep = 1;
unsigned int playFile;
MFRC522 mfrc522(SS_PIN, RST_PIN); // объект MFRC522
unsigned long uidDec, uidDecTemp; // для отображения номера карточки в десятичном формате
byte bCounter, readBit, nShake, rnd;
byte vol = midVol; // уровень громкости при включении средний
unsigned long ticketNumber;
unsigned long offTimeOut = 0; // счетчик таймера автовыключения
boolean mp3ON = false; // флаг включенного плеера
boolean isInt = false; // флаг прерывания
byte ticketQ = 32; // количество карточек минус два (резерв на карточку-выключатель и громкость)
byte fileQ = 0; // счетчик MP3-файлов
// массив номеров карточек (в десятичном виде, написан на самой карточке), последние две служат для переключения громкости и режима сна. Заполните своими номерами, текущие только для примера
PROGMEM const uint32_t ticketSet[] = {2515217196, 2540548337, 2490970856, 2486466332, 2485920633, 35870611, 37836807, 37836806, 2377004330, 2522873668, 2514304566, 23472725, 2485702426, 2374853555, 2374391583, 2492957469, 2486467162, 2489280075, 2488031661, 2491726641, 2491720238, 2490968782, 2490968783, 2488900952, 2489969016, 2506562651, 2375447052, 2375449579, 2489276180, 2483389692, 2486466331, 2484789326};
JQ6500_Serial mp3(8,7); // объект плеера
void enterSleep()
{
mp3.playFileNumberInFolderNumber(01, 005); // файл-заставка
mp3.playFileNumberInFolderNumber(01, 005); // файл-заставка
delay(2500);
tone(tonePin, 800, 500);
delay(500);
digitalWrite(readerPin, LOW);
digitalWrite(mp3Pin, LOW);
digitalWrite(ledPin, LOW);
pinMode(ledPin, INPUT);
pinMode(readerPin, INPUT);
pinMode(mp3Pin, INPUT);
adc_disable();
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_enable();
sleep_mode();
sleep_disable();
power_all_enable();
adc_enable();
tone(tonePin, 450, 500);
pinMode(ledPin, OUTPUT);
pinMode(readerPin, OUTPUT);
pinMode(mp3Pin, OUTPUT);
digitalWrite(ledPin, LOW);
digitalWrite(readerPin, HIGH);
digitalWrite(mp3Pin, HIGH);
SPI.begin(); // инициализация SPI
mfrc522.PCD_Init(); // инициализация MFRC522
mp3Init();
offTimeOut = millis();
ledOffDelay = millis();
mp3.playFileNumberInFolderNumber(01, 001); // файл-заставка
mp3.playFileNumberInFolderNumber(01, 001); // файл-заставка
delay(500);
playON = false;
mp3ON = true;
}
void wakeUp() {
detachInterrupt(0);
ledOffDelay = millis();
if (isInt == false) { // флаг прерывания
isInt = true;
}
attachInterrupt(0, wakeUp, LOW);
}
void setup() {
pinMode(2, INPUT_PULLUP);
attachInterrupt(0, wakeUp, LOW);
pinMode(readerPin, OUTPUT);
digitalWrite(readerPin, HIGH);
SPI.begin(); // инициализация SPI
mfrc522.PCD_Init(); // инициализация MFRC522
pinMode(mp3Pin, OUTPUT);
mp3Init();
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
eyes = false;
ledOn = false;
ledOff = false;
dimDelay = millis();
winkStepDelay = millis();
wink = 0;
pwmUp = true; // начинать с повышения яркости
pwmVal = 0;
ledOffDelay = millis();
offTimeOut = millis();
mp3.playFileNumberInFolderNumber(01, 001); // файл-заставка
mp3.playFileNumberInFolderNumber(01, 001); // файл-заставка
delay(500);
playON = false;
mp3ON = true;
}
void loop() {
rnd = random(1, fileQ-1);
if ((millis() — offTimeOut) > offDelay) { // таймер выключения
enterSleep();
} else {
ledWink(); // моргание при паузе
if (isInt == true) {
offTimeOut = millis(); // сброс таймера выключения — не выключаться, пока игрушка в руках
if (nShake == 0) {
tShakeDelay = millis();
}
if ((millis() — tShakeDelay) < tShake){
nShake = nShake 1;
} else {
tShakeDelay = millis();
nShake = 0;
}
isInt = false;
}
if (nShake > nShakeQ) {
playRandom();
nShake = 0;
}
// КОГДА НЕ ИГРАЕТ МУЗЫКА
playPreset(); // воспроизведение заданных фраз при паузе
// КОГДА ИГРАЕТ МУЗЫКА
if (mp3ON == true) {
if (playON == true) { // включена сказка, а не фраза
offTimeOut = millis(); // сброс таймера выключения
}
nShake = 0;
eyesPWM(); // мерцание глаз
// Воспроизведение MP3
if(analogRead(mp3Busy) < 250) { // если на паузе — сброс флагов, выключение лампочек
mp3ON = false;
playON = false;
digitalWrite(ledPin, LOW);
}
}
scanPlay(); // воспроизведение по карточке
}
}
void setBitsForGood(byte daBeat) {
if (daBeat == 1) {
bitSet(ticketNumber, bCounter);
bCounter=bCounter 1;
}
else {
bitClear(ticketNumber, bCounter);
bCounter=bCounter 1;
}
}
// ВКЛЮЧЕНИЕ И ИНИЦИАЛИЗАЦИЯ MP3
void mp3Init() {
digitalWrite(mp3Pin, HIGH);
delay(100);
mp3.begin(9600);
mp3.reset();
mp3.setVolume(vol);
mp3.setLoopMode(MP3_LOOP_NONE);
fileQ = mp3.countFiles(MP3_SRC_SDCARD); // количество файлов в плеере
fileQ = fileQ — introQ; // минус заставки
}
// ВОСПРОИЗВЕДЕНИЕ СЛУЧАЙНОГО ФАЙЛА
void playRandom() {
tone(tonePin, 450, 500);
delay(500);
playFile = rnd;
mp3ON = true;
playON = true;
mp3.playFileByIndexNumber(playFile);
mp3.playFileByIndexNumber(playFile);
mp3.playFileByIndexNumber(playFile);
delay(500);
}
// МОРГАНИЕ
void ledWink() {
// Моргание диодами в режиме ожидания
if ((millis() — winkStepDelay) > winkStep) { // длинный таймер
// зажигание
if (eyes == true) { // если диоды включены
if (ledOn == false) {
onDelay = millis(); // заводим таймер
ledOn = true; // признак того, что диоды горели
}
if ((millis() — onDelay) > on) { // если таймер сработал
digitalWrite(ledPin, LOW); // выключение диодов
eyes = false; // признак выключенных диодов
}
}
// гашение
if (eyes == false) { // если диоды выключены
if (ledOff == false) {
ledOffDelay = millis(); // заводим таймер
ledOff = true; // признак того, что диоды горели
}
if ((millis() — ledOffDelay) > off) { // если таймер сработал
digitalWrite(ledPin, HIGH); // включение диодов
eyes = true; // признак включенных диодов
}
}
if (ledOn == true && ledOff == true) { // подсчет количества включений (каждая пара вкл/выкл)
wink = wink 1;
ledOn = false;
ledOff = false;
}
if (wink == 4) { // две пары вкл/выкл
winkStepDelay = millis();
wink = 0;
}
}
}
// ВОСПРОИЗВЕДЕНИЕ ЗАДАННЫХ ФРАЗ ПРИ ПАУЗЕ
void playPreset() {
if (mp3ON == false) {
if ((millis() — offTimeOut) > tOut2 && (millis() — offTimeOut) < tOut21) {
mp3.playFileNumberInFolderNumber(01, 002); // воспроизведение файла /001/002.mp3 если от включения прошло около tOut21 сек.
mp3ON = true;
delay(500);
}
if ((millis() — offTimeOut) > tOut3 && (millis() — offTimeOut) < tOut31) {
mp3.playFileNumberInFolderNumber(01, 003); // воспроизведение файла /001/003.mp3 если от включения прошло около tOut31 сек.
mp3ON = true;
delay(500);
}
if ((millis() — offTimeOut) > tOut4 && (millis() — offTimeOut) < tOut41) {
mp3.playFileNumberInFolderNumber(01, 004); // воспроизведение файла /001/004.mp3 если от включения прошло около tOut41 сек.
mp3ON = true;
delay(500);
}
}
}
// МЕРЦАНИЕ
void eyesPWM(){
if ((millis() — winkStepDelay) > (pwmStep)/4) {
// мерцание диодами пока играет MP3
if (pwmUp == true) {
if (pwmVal < 128) { // диапазон меньше 254 из-за крутой ВАХ светодиода (нет смысла крутить до 255, когда светодиод уже горит на полную)
analogWrite(ledPin, pwmVal);
pwmVal = pwmVal 1;
pwmStep = pwmStep — 1;
winkStepDelay = millis();
} else {
pwmUp = false;
pwmStep = 1;
pwmVal = 128;
}
}
if (pwmUp == false) {
if (pwmVal > pwmStep) {
analogWrite(ledPin, pwmVal);
pwmVal = pwmVal — 1;
pwmStep = pwmStep 1;
winkStepDelay = millis();
} else {
pwmUp = true;
pwmStep = 128;
pwmVal = 1;
}
}
}
}
// ФУНКЦИИ ПО КАРТОЧКЕ
void scanPlay() {
if (fileQ > 0) {
// Поиск новой карточки
if (! mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Выбор карточки
if (! mfrc522.PICC_ReadCardSerial()) {
return;
}
uidDec = 0;
// сюда мы приедем, если чип правильный
byte status;
byte byteCount;
byte buffer[18]; // длина массива (16 байт 2 байта контрольная сумма)
byte pages[2]={4, 8}; // страницы с данными
byte pageByte; // счетчик байтов страницы
byteCount = sizeof(buffer);
byte bCount=0;
mfrc522.MIFARE_Read(4, buffer, &byteCount);
bCounter = 0; // 32-битный счетчик для номера
// биты 0-3
for (bCount=0; bCount<4; bCount ) {
readBit = bitRead(buffer[6], (bCount 4));
setBitsForGood(readBit);
}
// биты 4 — 27
for (pageByte=5; pageByte > 2; pageByte–) {
for (bCount=0; bCount<8; bCount ) {
readBit = bitRead(buffer[pageByte], bCount);
setBitsForGood(readBit);
}
}
// биты 28-31
for (bCount=0; bCount<4; bCount ) {
readBit = bitRead(buffer[2], bCount);
setBitsForGood(readBit);
}
for (byte ticketNum = 0; ticketNum < ticketQ; ticketNum ) {
unsigned long ticketTemp = pgm_read_dword_near(ticketSet ticketNum);
if (ticketTemp == ticketNumber) {
tone(tonePin, 450, 500);
delay(500);
if (ticketNum < (ticketQ — 2)) {
if ((ticketNum 1) < fileQ) {
digitalWrite(ledPin, HIGH);
playFile = ticketNum 1;
mp3ON = true;
playON = true;
mp3.playFileByIndexNumber(playFile);
mp3.playFileByIndexNumber(playFile);
mp3.playFileByIndexNumber(playFile);
delay(500);
}
return;
} else {
if (ticketNum == ticketQ-1) {
enterSleep(); // сон
}
if (ticketNum == ticketQ-2) {
setVol(); // регулировка громкости
}
}
}
}
// }
// Halt PICC
mfrc522.PICC_HaltA();
}
}
// РЕГУЛИРОВКА ГРОМКОСТИ ПО КАРТОЧКЕ
void setVol() {
switch (vol) {
case maxVol:
vol = minVol;
break;
case midVol:
vol = maxVol;
break;
case minVol:
vol = midVol;
break;
}
mp3.setVolume(vol);
}
Схема, примерно восстановленная по коду должна выглядеть таким образом (прошу прощения, если ошибся, но очень старался не ошибаться):
Здесь:
При текущей конфигурации аккумулятора емкостью порядка 2500 мАч хватает примерно на сутки использования ежа. Не сказать, чтобы много, но надо понимать, что график все время разный и большая часть энергии тратится, надеюсь, в активном режиме. Что в некоторой степени позволяет пренебречь несостоявшимся полным уводом в сон всей электроники ежа.
Если дать себе труд посчитать примерный бюджет, то получится что-то вроде этого (в USD):
- Плеер: 8,9
- ATmega328p: 1,1
- Макетная плата: 0,28
- Считыватель RC522: 2,21
- Динамическая головка: 0,99
- Пьезокерамический излучатель: 0,77
- Светодиоды: 0,12
- Транзистор: 0,14
- Стабилизатор: 0,13
- Вибродатчик: 0,13
- Мыльница: 0,99
- Пауэрбанк: 0,75
- Аккумулятор 18650: 3,9
- Зарядный адаптер Qi: 1,65
- Карта памяти: 3
- Еж Ивлин: 6
Итого 31,06, но на деле чуть больше, потому что еще нужен провод для соединений и другие мелочи вроде термоклея, двустороннего скотча
и синей изоленты
.
Наверное, должна быть какая-то особо важная заключительная фраза, но у меня в голове ее точно нет. Наверное, имеет смысл сказать, что ребенка игрушка вполне устраивает, и это точно лучше (а часто — и быстрее), чем включать ноутбук.
ps. про Bluetooth-колонки я в курсе, это немного не то, даже если поместить такого милого ежа.
pps. вообще, существуют и другие модули с microSD, но о них мне сказать нечего, поскольку купил я, как обычно, что первое увидел.
Доработка панели авр для генератора huter dy6500lx(а)
Здравствуйте, уважаемые форумчане. Сегодня я завершил доработку, настройку и запуск генератора Huter DY6500LX(А). Поскольку на просторах интернета я не смог найти ничего вообще по переделке Huter DY6500LX в Huter DY6500LXА, то решил сам описать весь пройденный путь. Сразу хочу предупредить, что генераторами я не занимался до этого и возможно не все мои решения верны, но результат есть — генератор сам запускается даже на холодную и генератор сам останавливается. П.С. будет очень много текста….
Итак предыстория:
Обратился ко мне заказчик с просьбой установить генератор в загородный дом так, чтобы он сам запускалсяостанавливался при прекращениивозобновлении подачи электропитания из городской сети. Мной было предложено установить бензиновый генератор и блок автоматического ввода резерва.
Исходные данные: Дом примерно на 250-350 квадратов с баней и с бассейном, ввод 3 фазы (15кВт), в доме газовый котел отопления. Заказчик живет в доме с марта по ноябрь, в остальное время необходимо обеспечить бесперебойное питание газового котла (возле котла установлен ИБП, которого хватает на 15-20 м), чтобы температура в доме не опускалась ниже 10 градусов.
Поскольку сеть трехфазная, а генератор был выбран заказчиком однофазный, то я предложил купить АВР фирмы ЧИНТ, на сайте было расписано, что АВР способен обеспечить безопасное переключение с основного ввода на резервный, также обещали возможность запуска генератора с последующим переходом на питание от него-же. В общем переписывался я с менеджерами и они меня заверили, что их АВР сможет завести и заглушить генератор. АВР был куплен NZ7-63S/3P 63A(CHINT) когда он приехал, то я был удивлен практически полным отсутствием инструкции…(кто хоть раз собирал китайскую люстру по инструкции — меня поймет), в общем начал я распрашивать специалистов чинт о способе запуска генератора, после 2 месяцев переписки они решили нахамить, со словами — мы ничего Вам не обязаны объяснять, схема как схема, вызовите более квалифицированного электрика, он сможет подключить (к слову у меня диплом по эксплуатации и ремонту электромеханического оборудования и автоматических устройств, у меня 5 разряд с допуском на подземные работы и куча всяких корочек), в общем я понял, что они ужасно некомпетентны в этом вопросе. Было принято решение покупать заводской однофазный АВР к генератору, думал что уж там, подключу и все заработает, в общем пришло вот это и все началось…..:
Блок АВР Huter комплект из коробки:
- Панель АВР
- Соленоид управления воздушной заслонкой с кронштейном
- Кронштейн для штепсельного разъема
- Штепсельный разъем с проводами
- Кабель управления
- Замок зажигания
Поскольку я не захотел возиться со всем этим инструкции как таковой вообще нет(даже намека на то, как и куда все это лепить), было решено отдать весь комплект в сервис, там ребятки пообещали справиться за день, но в итоге потратили 3 дня и все это «приколхозили» как смогли, при этом не смогли подключить разъем для кабеля управления АВР. В общем я сказал, что сам все подключу, главное, чтобы сам генератор работал нормально. На следующий день я пришел и понял, что они что-то не так подключили, поскольку при переключении в режим «работа» сразу срабатывал стартер и генератор запускался, после нескольких экспериментов я настоял, чтобы «сервисмены» приехали и все переделали, поскольку в таком режиме АВР не может заглушить генератор или не может его завести (получалось если ключ в режиме «стоп» — АВР запускал генератор и генератор сам себя успешно глушил, если ключ в положении «работа», то АВР пытался заглушить генератор, но ничего не удавалось) в общем сервисмэны сказали, что ничего не понимают и вернули деньги, я залез в разъем и просто переподключил его, как был подключен старый (то есть в положении «СТОП» — первые и второй контакты замкнуты, третий и четвертый — замкнуты, пятый и шестой — разомкнуты, в положении «РАБОТА» все контакты разомкнуты, все 6 контактов, в положении «СТАРТ» — замкнуты только пятый и шестой контакты — это контакты стартера)
На фото видно, что разъем замка зажигания не подходит и вставлен задом на перед, поэтому сервисмэны не смогли ничего сделать, я же все прозвонил и просто переставил пины как положено
В общем после этих манипуляций генератор стал заводиться, хотя на холодную без подсоса вообще не хотел… в общем начал дальше копать… Изучив поведение соленоида при пуске и при остановке от блока АВР понял, что блок АВР пытается подсосом залить свечу, чтобы генератор заглох, все бы хорошо, но в генераторе установлен электронный дросель и генератор спокойно поддавал газку, чтобы не заглохнуть… посмотрев на четные попытки АВР заглушить генератор — я понял, что схема работает коряво. В итоге было принято решение взять плюс от релле стартер аи подать его на соленоид заслонки, в итоге я получил отличный запуск генератора на холодную (пока стартер крутит заслонка держет подсос и генератор запускается, после запуска генератора заслонка снова открывается и генератор работает как часики, почему этой функции нет в заводской комплектации не понимаю….) в общем с пуском я разобрался так:
С пуском я разобрался, теперь нужно было его заглушить. Я вспомнил, что для выключения генератора на ключе зажигания замыкаются 1 и 2, 3 и 4 контакты попарно, я не стал выяснять для чего именно 2 пары и можно ли обойтись одной парой, просто поехал в ближайший автомагазин и купил 2 четырехконтактных релле и установил их параллельно. в итоге получается, что при подаче сигнала с блока АВР срабатывают 2 релле и глушат генератор, как по мне — то это на много надежнее и безопаснее, чем глушить с помощью подсоса… Поскольку клемников я не нашел, то принял решение просто припаять провода к контактам релле и получилось вот такое изделие:
Вот теперь АВР может спокойно завести и заглушить генератор. В итоге мы получили генератор с АВР, который работает как положено, функции переключения между городской сетью и генератором выполняет АВР ЧИНТ, сам АВР весьма компактен и работает как положено, есть возможность настройки времени задержки и еще кучи параметров, построен на микропроцессоре и смотрится очень даже хорошо (фото сделаю через пару недель, поскольку пока все наладил на улице стало темно). Заводской АВР Huter в данный момент используется только для запуска и остановки генератора, у данного АВР огромное количество недостатков и если честно, то я бы никому и никогда такое не посоветовал (начнем с самой сборки — провода на разъемах перепутаны, цветовая маркировка не соответствует той, которая указана в инструкции, сам АВР если не смог запустить генератор с 3 попыток выдает аварию и больше не пытается, настроить что либо нереально, в ручном режиме нагрузку не переключил… в общем странный АВР)
Всем спасибо за внимание, простите за кучу лишнего текста, но мне бы только такое описание помогло бы… готов принять критику и ответить на вопросы)
Схемы led драйверов и блоков питания светодиодных лент
Светодиоды заменяют таким типы источников света, такие как люминесцентные лампы и лампы накаливания. Практически в каждом доме уже есть светодиодные лампы, они потребляют гораздо меньше двух своих предшественников (до 10 раз меньше чем лампы накаливания и от 2 до 5 раз меньше, чем КЛЛ или энергосберегающие люминесцентные лампы). В ситуациях, когда необходим длинный источник света, или нужно организовать подсветку сложной формы в ход идёт светодиодная лента.
Led лента идеальна для целого ряда ситуаций, главное её преимущество перед отдельными светодиодами и светодиодными матрицами являются источники питания. Их легче найти в продаже почти в любом магазине электротоваров, в отличие от драйверов для мощных светодиодов, к тому же подбор блока питания осуществляется только по потребляемой мощности, т.к. подавляющее большинство светодиодных лент имеют напряжение питания в 12 Вольт.
В то время как для мощных светодиодов и модулей при выборе источника питания нужно искать именно источник тока с требуемой мощностью и номинальным током, т.е. учитывать 2 параметра, что усложняет подбор.
В этой статье рассмотрены типовые схемы блоков питания и их узлы, а также советы по их ремонту для начинающих радиолюбителей и электриков.
Содержание статьи
Типы и требования к источникам питания для светодиодных лент и 12 В led ламп
Основное требование к источнику питания как для светодиодов, так и для светодиодных лент – качественная стабилизация напряжения/тока, вне зависимости от скачков сетевого напряжения, а также низкие выходные пульсации.
По типу исполнения блоки питания для LED продукции различают:
Герметичные. Они сложнее в ремонте, корпус не всегда поддаётся аккуратной разборке, а внутри и вовсе может быть залит герметиком или компаундом.
Негерметичные, для применения в помещении. Лучше поддаются ремонту, т.к. плата изымается после откручивания нескольких винтов.
По типу охлаждения:
Пассивное воздушное. Блок питания охлаждается за счёт естественной конвекции воздуха через перфорацию его корпуса. Недостаток – невозможность достигнуть высоких мощностей сохранив массогабаритные показатели;
Активное воздушное. Блок питания охлаждается с помощью кулера (небольшого вентилятора, как устанавливают на системных блоках ПК). Такой тип охлаждения позволяет достичь большей мощности при аналогичных размерах с пассивным блоком питания.
Схемы блоков питания для светодиодных лент
Стоит понимать, что нет в электронике такого понятия как «блок питания для светодиодной ленты», в принципе к любому устройству подойдёт любой блок питания с подходящим напряжением и током большим чем потребляемый прибором. Это значит, что информация описанная ниже применима к практически любым блокам питания.
Однако в обиходе проще говорить о блоке питания по его предназначению для конкретного устройства.
Общая структура импульсного блока питания
Для питания светодиодных лент и другой техники последние десятилетия применяются импульсные блоки питания (ИБП). Они отличаются от трансформаторных тем, что работают не на частоте питающего напряжения (50 Гц), а на высоких частотах (десятки и сотни килогерц).
Поэтому для его работы нужен генератор высокой частоты, в дешевых и рассчитанных на малые токи (единицы ампер) блоках питания часто встречается автогенераторная схема, она применяется в:
электронных трансформаторах;
электронных балластах для люминесцентных ламп;
зарядных устройствах для мобильного телефона;
дешевых ИБП для светодиодных лент (10-20 вт) и других устройствах.
Схему подобного блока питания можно увидеть на рисунке (для увеличения нажмите на картинку):
Его структура следующая:
1. Голубым цветом выделен диодный мост, стоящий на входе блока питания он выпрямляет входное переменное напряжение, для питания следующих узлов постоянным напряжением величиной 220*1.41=310 В. В случае поломки – проверьте наличие и величину напряжения ДО моста и ПОСЛЕ него, если оно отсутствует – потребуется замена диодов или моста, если он собран в отельном корпусе.
На схеме не указан, но по линии 220 В может присутствовать предохранитель или низкоомный резистор, прежде чем приступать к ремонту проверьте его целостность.
2. Коричневым обведен фильтр пульсаций, его главным элементом является C4 – электролитический конденсатор. Его ёмкость зависит от того, насколько сэкономил производитель, обычно до 220 мкФ на 400 Вольт. L1 – фильтр пульсаций и электромагнитных помех, которые возникают при работе импульсного блока питания. В большинстве дешевых блоков питания он отсутствует.
Частая проблема фильтра – высыхание, взрыв или вздутие электролитического конденсатора, приводит к некачественной работе всего импульсного блока питания в целом или его полной неработоспособности. Заменить его можно таким же и большей ёмкости, но подходящим по размеру.
3. Зеленым цветом выделена силовая часть VT1 силовой транзистор, в данном случае полевой, но может быть и биполярный. T1 – импульсный трансформатор с тремя обмотками: первичной, вторичной и базовой.
Третья обмотка необходима для генерации высокочастотных колебаний – если интересен принцип работы автогенераторного блока питания лучше прочитать книги Моина, Зиновьева и другие учебники по источникам питания импульсного типа.
Импульсные трансформаторы гораздо меньше по габаритам, чем сетевые, опять же из-за работы на высоких частотах и выполнены не из железа, а из феррита. Чаще всего выходит из строя силовой ключ.
Прозвоните транзистор мультиметром в режиме проверки диодов, и вы сразу обнаружите его пробой или обрыв. Остальные элементы – это обвязка этого узла, по отдельности редко выходит из строя, в основном вслед за силовым транзистором. Однако всегда стоит убедиться в соответствии номинальным значениям резисторов и конденсаторов.
Диоды в обвязке трансформатора VD7 и VD5 выполняют роль снаббера защищая цепи от всплесков противо-ЭДС, в моменты переключения транзистора. Являются тоже довольно нагруженным и ответственным узлом.
4. Красным цветом выделена цепочка обратной связи по напряжению на базе регулируемого стабилитрона TL431 и их аналогов (любые буквы в обозначении с цифрами «431»). Дополнительная информация про TL431: Легендарные аналоговые микросхемы
В состав ОС включена оптопара U1, с её помощью в силовую часть автогенератора поступает сигнал с выхода и поддерживается стабильное выходное напряжение. В выходной части может отсутствовать напряжение из-за обрыва диода VD8, часто это сборка Шоттки, подлежит замене. Также часто вызывает проблемы вздутый электролитический конденсатор C10.
Как вы видите всё работает с гораздо меньшим количеством элементов, надёжность соответствующая…
Подборка материалов про виды, устройство и схемы светодиодных лент:
Какие бывают виды светодиодных лент
Как устроены и работают RGB-ленты
Как устроены и работаю ленты с адресными светодиодами
Как определить мощность светодиодной ленты
Ремонт светодиодных лент:
Наиболее распространенные неисправности и советы по ремонту светодиодных лент
Более дорогие блоки питания
Схемы, которые вы увидите ниже часто встречаются в блоках питания для светодиодных лент, DVD-проигрывателей, магнитол и других маломощных устройств (десятки Ватт).
Прежде чем перейти к рассмотрению популярных схем, ознакомьтесь со структурой импульсного блока питания с ШИМ-контроллером.
Верхняя часть схемы отвечает за фильтрацию, выпрямление и сглаживание пульсаций сетевого напряжения 220, по сути аналогична как в предыдущем типе, так и в последующих.
Самое интересное – это блок ШИМ, сердце любого достойного блока питания. ШИМ-контроллер – это устройство управляющие коэффициентом заполнения импульсов выходного сигнала на основании уставки, определенной пользователем или обратной связи по току или напряжению. ШИМ может управлять как мощностью нагрузки с помощью полевого (биполярного, IGBT) ключа, так и полупроводниковым управляемым ключом в составе преобразователя с трансформатором или дросселем.
Изменяя ширину импульсов при заданной частоте – вы изменяете и действующее значение напряжение, сохраняя при этом амплитудное, вы можете проинтегрировать его с помощью C- и LC-цепей для устранения пульсаций. Такой метод называется Широтно-Импульсное Моделирование, то есть моделирование сигнала за счёт ширины импульсов (скважности/коэффициента заполнения) при постоянной их частоте.
На английском языке это звучит, как PWM-controller, или Pulse-Width Modulation controller.
На рисунке изображен биполярный ШИМ. Прямоугольные сигналы – это сигналы управления на транзисторах с контроллера, пунктиром изображена форма напряжения в нагрузке этих ключей – действующее напряжение.
Более качественные блоки питания малой средней мощности часто построены на интегральных ШИМ-котроллерах со встроенным силовым ключом. Преимущества перед автогенераторной схемой:
Ниже будут расположены несколько типовых схем блоков питания (для увеличения нажмите на картинку):
Здесь RM6203 – и контроллер и ключ в одном корпусе.
В этой схеме используется внешний MOSFET ключ.
То же самое, но на другой микросхеме.
Обратная связь осуществляется с помощью резистора, иногда оптопары подключенной к входу с названием Sense (датчик) или Feedback (обратная связь). Ремонт таких блоков питания в общем аналогичен. Если все элементы исправны, и напряжение питания поступает на микросхему (ножка Vdd или Vcc), значит дело скорее всего в ней, более точно можно определить с помощью осциллографа просмотрев сигналы на выходе (ножка drain, gate).
Практически всегда заменить такой контроллер можно любым аналогом с подобной структурой, для этого нужно сверить datasheet на тот, что установлен на плате и тот, что у вас в наличии и впаять, соблюдая распиновку, как это изображено на следующих фотографиях.
Или вот схематически изображена замена подобных микросхем.
Мощные и дорогие блоки питания
Блоки питания для светодиодных лент, а также некоторые блоки питания для ноутбуков выполняются на ШИМ-контроллере UC3842.
Схема более сложная и надежная. Основным силовым компонентом является транзистор Q2 и трансформатор. При ремонте нужно проверить фильтрующие электролитические конденсаторы, силовой ключ, диоды Шоттки в выходных цепях и выходные LC-фильтры, напряжения питания микросхемы, в остальном методы диагностики аналогичны (смотрите также – Как проверить микросхему).
Однако более подробная и точная диагностика возможна лишь с использованием осциллографа, в противном случае – проверьте короткие замыкания платы, пайку элементов и обрывы дороже. Может помочь замена подозрительных узлов на заведомо рабочие.
Более совершенные модели источников питания для светодиодных лент выполнены на практически легендарной микросхеме TL494 (любые буквы с цифрами «494») или её аналоге KA7500. Кстати на этих же контроллерах построено большинство компьютерных блоков питания AT и ATX.
Вот типовая схема блока питания на этом ШИМ-контроллере (нажмите на схему):
Такие блоки питания отличаются высокой надёжностью и стабильностью работы.
Краткий алгоритм проверки:
1. Запитываем микросхему согласно распиновки от внешнего источника питания 12-15 вольт (12 ножка – плюс, а на 7 ножку – минус).
2. На 14 ножки должно появиться напряжение 5 Вольт, которое будет оставаться стабильным при изменении питания, если оно «плавает» – микросхему под замену.
3. На 5 выводе должно быть пилообразное напряжение «увидеть» его можно только с помощью осциллографа. Если его нет или форма искажена – проверяем соответствие номинальным значениям времязадающей RC-цепи, которая подключена к 5 и 6 выводам, если нет – на схеме это R39 и C35, их под замену, если после этого ничего не изменилось – микросхема вышла из строя.
4. На выходах 8 и 11 должны быть прямоугольные импульсы, но их может не быть из-за конкретной схемы реализации обратной связи (выводы 1-2 и 15-16). Если выключить и подключить 220 В, на какое-то время они там появятся и блок снова уйдёт в защиту – это признак исправной микросхемы.
5. Проверить ШИМ можно закоротив 4 и 7 ножку, ширина импульсов увеличится, а закоротив 4 на 14 ножки – импульсы исчезнут. Если у вас получились другие результаты – проблема в МС.
Это наиболее краткая проверка данного ШИМ-контроллера, о ремонте блоков питания на их основе есть целая книга «Импульсные блоки питания для IBM PC».
Хоть и посвящена она компьютерным блоками питания, но там много полезной информации для любого радиолюбителя.
Вывод
Схемотехника блоков питания для светодиодных лент аналогична любым блокам питания с подобными характеристиками, довольно хорошо поддаётся ремонту, модернизации и перестройки на необходимые напряжения, разумеется, в разумных пределах.
Алексей Бартош
Смотрите также у нас на сайте:
Схемы блоков питания переносных электронных устройств
Что такое импульсный блок питания и чем он отличается от обычного аналогового
Советы по ремонту импульсных блоков питания
Видеозаписи процесса ремонта различной бытовой техники