4927 subscribers

Микроконтроллеры для начинающих. Часть 49. Бегущие огни. Анализ задачи и схемотехника

2,3k full reads
3,3k story viewsUnique page visitors
2,3k read the story to the endThat's 69% of the total page views
2 minutes — average reading time

Перерыв несколько затянулся, но мы продолжаем. Как я и обещал, теперь мы немного отдохнет от теории и займемся практикой. Но поскольку мы пока изучили лишь малую часть возможностей микроконтроллеров, то и практические задачи не могут быть сложными. Да и описывать решение этих задач я буду используя лишь те знания, которые у нас есть на данный момент.

Это важно! Сразу хочу предупредить тех, кто будет категорично заявлять, что все это можно сделать совсем не так и гораздо проще и лучше. В статье используется лишь то, что уже ранее описано в данном цикле статей. Поэтому пока не будет ни таймеров, ни прерываний. Вообще ничего из ранее не изученного! Всему свое время...

Но начинать с привычной всем начинающим задачки "Помигаем лампочкой" не интересно. Вот совсем не интересно. Но и слишком сложную задачу выбирать не стоит. А еще, эта первая задача должна быть "развиваемой". То есть, по мере дальнейшего изучения микроконтроллеров, мы должны иметь возможность улучшать наше первоначальное решение.

Да и Новый Год скоро! Поэтому нашей первой задачей, которая вполне может стать полноценным готовым устройством, будут "Бегущие огни". Думаю, всем известен этот тип гирлянд. Но мы добавим сюда и небольшую возможность управления работой гирлянды.

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

Формализация и детализация

Постановка задачи и подготовка ТЗ (технического задания) это первые этапы, которые многие не любят и зачастую пропускают. Что впоследствии не редко приводит к многочисленным переделкам, "костылям" и странностям в поведении устройства.

Но и для столь простой, к тому же учебной, задачи вряд ли имеет смысл слишком серьезно и формализовано подходить к этим этапам. Поэтому давайте просто немного формализуем нашу задачу.

В общем и целом, "Бегущие огни" это оптическая иллюзия направленного движения (бега) светящихся точек (источников света). При этом сами источники света остаются неподвижными. Этот эффект достигается специальным переключением источников света. Для простоты я в дальнейшем буду источники света называть просто лампами.

Для создания иллюзии именно направленного движения необходимо как минимум три источника света. Можно и больше, но меньше нельзя. Так как теряется эффект направления бега.

Создание эффекта направленного бега светящихся точек коммутацией источников света. Красным цветом показана включенная лампа.
Создание эффекта направленного бега светящихся точек коммутацией источников света. Красным цветом показана включенная лампа.
Создание эффекта направленного бега светящихся точек коммутацией источников света. Красным цветом показана включенная лампа.

Бегущие огни широко применяются для праздничной иллюминации. При этом гирлянда состоит из последовательно размещенных групп переключаемых ламп. Длина гирлянды (количество групп ламп) может быть, теоретически, неограниченным.

Соединение групп ламп в единую гирлянду. В данном случае группа состоит из 3 ламп. F1, F2 и F3 это фазы, а С это общий провод.
Соединение групп ламп в единую гирлянду. В данном случае группа состоит из 3 ламп. F1, F2 и F3 это фазы, а С это общий провод.
Соединение групп ламп в единую гирлянду. В данном случае группа состоит из 3 ламп. F1, F2 и F3 это фазы, а С это общий провод.

Как видно, напряжение для работы гирлянды будет таким же, как и для одиночной лампы. А вот ток будет больше.

Есть и альтернативный вариант объединения групп ламп для построения гирлянды требуемой длины.

Альтернативное соединение групп ламп в единую гирлянду. В данном случае группа состоит из 3 ламп. F1, F2 и F3 это фазы, а С это общий провод.
Альтернативное соединение групп ламп в единую гирлянду. В данном случае группа состоит из 3 ламп. F1, F2 и F3 это фазы, а С это общий провод.
Альтернативное соединение групп ламп в единую гирлянду. В данном случае группа состоит из 3 ламп. F1, F2 и F3 это фазы, а С это общий провод.

В данном случае ток потребляемый гирляндой (каждой фазой) будет таким же, как для одиночной лампы. А вот напряжение будет больше.

Какой вариант выбрать решать разработчику, исходя из требований к иллюминации, используемых источников света, и личных предпочтений.

В большинстве случаев группа состоит из 3 ламп. Гораздо реже используются группы из 4, или даже 5, ламп. Мы не будем отступать от традиции и примем, что в нашем случае будет 3 лампы в группе.

Для управления гирляндой потребуется всего 4 провода. А если точнее, то количество проводов будет равно количеству ламп в группе плюс общий провод. На практике, количество групп ламп в гирлянде ограничивается мощностью выходного каскада устройства управления.

В качестве источников света, в общем случае, могут использоваться не только классические лампочки (лампы накаливания), но и очень популярные сегодня светодиодные лампы. Причем как в виде собственно светодиодов, так и в виде готовых ламп. В качестве своеобразных "ламп" могут выступать и струи фонтана. А можно выстроить в ряд множество пушек и устроить настоящий бегущий огонь.

Поэтому требования к выходному каскаду устройства могут быть самыми разными. Но для определенности давайте выделим лишь некоторые основные варианты.

Во первых, нагрузка (лампа) может питаться постоянным или переменным током. Для постоянного тока включать лампу можно транзистором или реле. Причем дополнительно может использоваться и оптронная развязка. Для переменного тока можно использовать симистор (тиристор) или реле. Причем тут уже с очень большой вероятностью будет использоваться оптронная развязка.

Кроме того, может потребоваться коммутация высокого напряжения и/или большого тока.

Но для нашего учебного проекта мы используем упрощенные требования. Для экспериментов и макетирования мы будем использовать одиночные светодиоды. Причем по одному на каждую фазу. Однако, мы обязательно предусмотрим и возможность управления самыми различными нагрузками. Это позволит легко превратить макет в готовое законченное устройство, если вы захотите это сделать.

Ну и наконец, о "небольшой возможности управления работой гирлянды". Давайте добавим в устройство кнопку, которая позволит изменять направление "бега огня". При включении устройства будет анализироваться состояние кнопки. Если кнопка не нажата, то "огонь" будет бежать слева направо. Но есть, фазы будут переключаться так: F1-F2-F3. Если же кнопка нажата, то "огонь" будет бежать в обратном направлении: F3-F2-F1. При работе устройства кнопка не будет ни на что влиять.

Теперь, рассмотрев основные подробности и приведя задачу к более формализованному состоянию, мы можем приступать к проектированию устройства. И начну я со схемотехники.

Схемотехника устройства управления "Бегущими огнями"

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

Тем не менее, начнем мы именно со схемотехники. И для нашего простого устройства мы можем сразу предусмотреть все, так что никаких изменений и итераций не потребуется.

Итак, для макета нам вообще никакого выходного каскада не потребуется. Мы просто подключим светодиоды к выводам порта микроконтроллера через резисторы. Однако, как я и обещал, мы предусмотрим возможность управления самыми разными нагрузками.

А значит нам нужно рассмотреть хотя бы несколько вариантов подключения выходного каскада к микроконтроллеру

Некоторые варианты подключения выходных каскадов к микроконтроллеру. Иллюстрация моя
Некоторые варианты подключения выходных каскадов к микроконтроллеру. Иллюстрация моя
Некоторые варианты подключения выходных каскадов к микроконтроллеру. Иллюстрация моя

Безусловно, это лишь часть возможных вариантов, но нам этого достаточно.

Итак, самый простой случай, просто одиночные светодиоды, дают два различных варианта. В первом случае, светодиод подключается между положительным выводом источника питания микроконтроллера и выводом порта. Для зажигания светодиода мы должны установить на выводе порта низкий уровень напряжения (логический 0).

Во втором случае, светодиод подключается между выводом порта и общим проводом. Для зажигания светодиода мы должны установить на выводе порта высокий уровень напряжения (логическую 1).

Для управления выходным каскадом может использоваться оптрон. Одновременно это обеспечит и гальваническую развязку. С точки зрения микроконтроллера оптрон не отличается от обычного светодиода. Поэтому все, сказанное выше о светодиоде, будет полностью применимо и к этому случаю. Я показал на иллюстрации оптрон с транзисторным выходом. Однако, оптрон может быть любым. Например, с динистором на выходе, что бы управлять симистором. Все равно, с точки зрения микроконтроллера это будет эквивалентно простому светодиоду.

Остались два варианта, когда микроконтроллер управляет транзисторами. Или классическим биполярным, или полевым с изолированным затвором. В обоих случаях транзистор следует подключать к микроконтроллеру через резистор. Поскольку у нас частота переключения будет не высокой, использовать драйвер для управления затором полевого транзистора не обязательно.

На первый взгляд кажется излишней установка резисторов с базы/затвора на землю, так как выходной каскад двухтактный. Но вспомните, что я говорил о состоянии выводов портов при включении питания микроконтроллера. Выводы настроены как входы, причем внутренние подтягивающие резисторы, в большинстве случаев, отключены. А значит, затвор или база транзисторов окажутся подвешенными в воздухе до того момента, пока ваша программа не выполнит настройку портов.

Причем с момента включения питания до передачи управления вашей программе может пройти довольно много времени. Вплоть до десятков миллисекунд. В нашем случае это не критично, но в общем случае нужно обязательно предусматривать подтяжку к нужному уровню для выводов, состояние которых должно быть четко определено даже в момент подачи питания и начальной инициализации микроконтроллера.

Коллектор или сток транзистора могут подключаться к любой допустимой нагрузке, например, светодиодам или реле. Причем напряжение питания нагрузки может быть гораздо выше напряжения питания микроконтроллера.

Я не стал показывать подключение, например, PNP транзистора для управления нагрузкой требующей отрицательной полярности напряжения. Или управления тиристором подключенным без оптронной развязки. Приведенных выше вариантов подключения выходного каскада достаточно для подавляющего большинства случаев, возможных в любительской практике.

Таким образом, требования к схемотехнике подключения выходного каскада оказываются очень простыми. И достаточно рассмотреть всего лишь варианты подключения светодиодов или транзисторов. Но вот выбор конкретного варианта определяет и требования к программе!

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

Таким образом, гораздо целесообразнее выбрать именно высокий активный уровень. То есть, у нас остаются только такие варианты подключения выходных каскадов

Варианты подключения выходных каскадов с управлением высоким уровнем напряжения на выводе порта микроконтроллера. Иллюстрация моя
Варианты подключения выходных каскадов с управлением высоким уровнем напряжения на выводе порта микроконтроллера. Иллюстрация моя
Варианты подключения выходных каскадов с управлением высоким уровнем напряжения на выводе порта микроконтроллера. Иллюстрация моя

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

Осталось рассмотреть подключение кнопки, которая позволит управлять направлением "бега огня" при включении устройства.

Yandex ZEN в очередной раз исковеркал требования к изображениям в статьях. Поэтому пришлось сделать иллюстрацию такой вот излишне большой и широкой...
Yandex ZEN в очередной раз исковеркал требования к изображениям в статьях. Поэтому пришлось сделать иллюстрацию такой вот излишне большой и широкой...
Yandex ZEN в очередной раз исковеркал требования к изображениям в статьях. Поэтому пришлось сделать иллюстрацию такой вот излишне большой и широкой...

Здесь все легко и просто, мы подключаем кнопку между выводом микроконтроллера и землей. А что бы уровень напряжения при не нажатой кнопке был четко определен, подтягиваем вывод порта к положительному выводу источника питания микроконтроллера.

Почему не использован внутренний подтягивающий резистор? Во первых, они есть не во всех микроконтроллерах и не для всех портов. Во вторых, их сопротивление довольно высоко, что снижает помехоустойчивость. В третьих, в момент начальной инициализации микроконтроллера подтягивающие резисторы отключены. Но вы можете, если захотите, не ставить внешний подтягивающий резистор, а обойтись внутренним.

Гашения дребезга кнопки в нашем случае не потребуется. Дело в том, что кнопка должна быть нажата до включения питания. А значит, все переходные процессы, которые и приводят к явлению дребезга, уже завершатся к моменту опроса состояния кнопки нашей программой. А отпускание кнопки нас вообще не будет интересовать.

Заключение

Мы проделали достаточно большой объем работы по анализу и формализации задачи нашего первого учебного проекта. Я прекрасно понимаю, что очень многое было и так известно и понятно большинству читателей. Но уровень знаний и опыта новичков может быть очень разным. И для кого то такой подробный разбор вопросов, которым стоит уделять внимание, может оказаться полезным.

В следующей статье мы будем рассматривать программу для нашего учебного устройства. Как всегда, для различных микроконтроллеров. И станет видно, что значительная часть программы будет мало зависеть от конкретного микроконтроллера.

До новых встреч!