![]() |
![]() |
|||||||||||||||||||||||||
Управление макетом железной дороги. Диспетчерский пульт на основе DCC.
Автор: Engineer_Keen Управление макетом железной дороги. Диспетчерский пульт на основе DCC. С Днем Рождения Кот! Если ты любишь подолгу наблюдать за движением поездов на макете так же как за пробежками ничего не подозревающих мышей на кухне, то эта статья для тебя! Представленный в статье диспетчерский пульт позволяет автоматизировать управление такими устройствами на макете железной дороги как светофоры и стрелки, а также отображать состояние занятости путей и положение стрелок. Для передачи команд управления на стрелки и светофоры используется хорошо известный в ЖД-моделизме протокол DCC (Digital Command Control). Преимуществом этого протокола является то, что для питания и управления всеми устройствами используется всего 2 провода. Итак, что же умеет этот пульт:
Чего не умеет:
Описание работы пульта Устройство по сути представляет собой ПЛК (программируемый логический контроллер). В процессе работы контроллер опрашивает датчики обратной связи (ОС) и кнопки пульта, вычисляет значение всех функций, в которых они участвуют, и на основе значений этих функций управляет индикацией на пульте или посылает команды на шину DCC. Так же в процессе работы возможно подключение компьютера, в этом случае в свободные промежутки времени контроллер занимается и обработкой команд, поданных с компьютера (ручное управление индикацией и устройствами DCC, запись конфигурационной информации). Теперь рассмотрим типовую схему макета и укажем на ней положение нашего пульта. На схеме приведена минимальная конфигурация, которая позволяет нормально управлять макетом. В нее всходит:
Схемотехника Схема пульта состоит из двух модулей, модуля управления (в ЖД-моделизме он обычно называется командной станцией) и модуля ввода-вывода, соединенных между собой шлейфом. Рассмотрим для начала модуль ввода-вывода. В качестве управляющего устройства используется контроллер Tiny2313, он имеет 2 SPI порта, один из которых полностью программный и используется для связи с модулем управления. Второй порт, на основе USI, служит для сканирования матриц кнопок и индикаторов. К этому порту подключены 2 регистра 74HC595, один из которых отвечает за коммутацию строк индикаторов, а второй за коммутацию столбцов индикаторов и кнопок. Считывание строк кнопок осуществляется оставшимся 8-битным портом контроллера. Для индикации процесса опроса контроллера модулем управления предусмотрен светодиод. В модуле присутствуют 2 макетных поля с контактами по 8 строк и 8 столбцов для подключения кнопок и индикаторов. Таким образом возможно подключить 64 кнопки и 64 индикатора). Индикаторы подключены через ключи (через PNP транзисторы на +5В и через сборку ULN2003+1 NPN транзистор на землю), поэтому количество и тип индикаторов в каждой из 64 групп полностью зависят от допустимых токов этих ключей. Модуль не имеет своего источника питания, оно осуществляется через 7 контактный разъем от модуля управления, поэтому суммарный потребляемый индикаторами ток зависит от мощности стабилизатора в модуле управления. Переходим к самому главному – модулю управления. Модуль управления, или как было написано выше - командная станция, состоит из управляющего контроллера и драйвера. Помимо этого, для связи с компьютером используется микросхема преобразователь USB-UART FT232RL, а для связи с модулями ОС – MAX487. Если компьютер имеет настоящий COM-порт, то вместо микросхемы FT232 можно использовать более дешевую и распространенную MAX232 или ее аналоги с соответствующей обвязкой. В модуле управления используется контроллер ATMega8 с кварцевым резонатором на 16МГц. Для опроса модулей обратной связи используется интерфейс RS485. Все модули подключаются в параллель к 4 проводной линии (RS-A,RS-B, +V, GND). Каждый обмен данными между контроллером и модулями ОС сопровождается индикацией на плате. Можно подключить 8 модулей, опрос происходит по очереди с интервалом примерно пол секунды (для 8 адресов, адрес опрашивается каждые 50мс). Кратко об обратной связи. Обратная связь на макете как и на реальной железной дороге, используется для того, чтобы знать свободен ли участок пути. При этом существуют разные методы определения занятости. Самый простой - это контакт на рельсе или геркон, который при проезде замыкается колесной парой (в случае геркона – от магнита под дном вагона). Этот сигнал можно использовать для переключения светофора, но у него есть существенный недостаток – невозможно достоверно установить свободен ли участок изначально, т.к. в начальный момент времени вагон или локомотив находятся в произвольном месте. Этого недостатка лишены схемы на основе датчиков тока, ведь ток будет идти через рельсы участка независимо от того, в каком его месте находится локомотив или вагон, который этот ток потребляет. Причем для того, чтобы датчик срабатывал на обычный вагон без света или иных потребителей – достаточно подключить между колес небольшой резистор на несколько десятков килоом. Отдельный модуль для опроса кнопок и индикации разработан с целью разгрузить основной контроллер и сэкономить его выводы. Входы Reset контроллеров объединены через межплатный разъем, это сделано для того, чтобы контроллер модуля индикации не мешал программированию основного контроллера. Контроллер формирует сигналы для управления шиной DCC. Это противофазные сигналы DCC и nDCC и сигнал включения драйвера DCC_EN. Они поступают на драйвер L298, который и формирует на выходе сигнал DCC. Кратко о протоколе DCC. Протокол DCC разработан в Национальной Ассоциации Моделей Железных Дорог (NMRA). При использовании этого протокола на рельсы подается двухполярный сигнал, информация кодируется длительностью импульсов, а питание для управляемых устройств получается простейшим выпрямлением этого сигнала диодным мостом. Пример кодовой посылки приведен ниже. Адрес конкретного устройства содержится внутри пакета, поэтому всего по двум проводам можно управлять независимой работой множества устройств. Скорость передачи данных не велика, всего около 5кбит/с, но ее легко хватает для управления всеми устройствами макета. Драйвер имеет 4 выхода, что позволяет использовать либо 2 отдельных шины DCC, либо одну, но с бОльшим током, для чего предусмотрены 2 джампера (J1-J2), которые запараллеливают выходы драйвера. Драйвер L298 позволяет подключать токоизмерительные резисторы, эта возможность была использована для измерения тока и детектирования короткого замыкания. Сигнал с токоизмерительных резисторов поступает на вход компаратора и сравнивается с заданным (переменным резистором R4). При превышении тока, компаратор срабатывает и контроллер отключает драйвер. При этом зажигается индикатор ошибки на плате (работоспособность можно восстановить перезапуском пульта вручную или с ПК). Для связи с компьютером используется преобразователь интерфейса FT232RL, так как UART контроллера задействован для опроса модулей обратной связи, то связь с компьютером происходит во время простоя UART по запросу от компьютера. Запрос и разрешение на обмен информацией происходят по линиям DTR и DSR, для развязки линий RXD от MAX487 и FT232 используется буфер на микросхеме 74HC1G125. Это микросхема содержит всего один элемент в корпусе. Можно использовать и обычную 74HC125 с несколькими элементами в ДИП или СОИК корпусе, хотя это увеличит габариты платы. На плате присутствуют 4 светодиода. Светодиод PWR отображает наличие питания 5В. Светодиод USB_LED светится во время обмена информацией между ПК и пультом. RS485_LED светится во время опроса модулей ОС. Светодиод ERR горит при возникновении какой-либо программной или аппаратной ошибки, например КЗ. Питается устройство от 14-18В через стабилизатор 7805. Мощность блока питания следует выбирать с учетом подключаемой по шине DCC нагрузки. Сам же драйвер L298 выдает до 2А на канал. Если нагрузка превышает это значение, то следует использовать дополнительный блок питания, а в платах декодера убрать соответствующие перемычки и сделать гальваническую развязку шины DCC от этого БП (см. описание декодеров ниже). Напряжение питания снизу ограничивается напряжением срабатывания стрелочных приводов макета. Часть напряжения (от 2 до 5В, в зависимости от нагрузки) падает на драйвере L298, и еще 0,5-1В на диодных мостах декодеров. Если же для питания декодеров используется отдельный блок питания, то напряжение питания пульта можно снизить до 10-12В. Теперь опишем устройства, которые располагаются непосредственно на макете (а точнее под ним). Модуль обратной связи Модуль обратной связи служит для определения занятости блок участков или положения стрелочных переводов. В схеме модуля используется контроллер ATtiny2313, микросхема интерфейса MAX487, стабилизатор 7805, и пары диодных мостов с опторазвязкой на каждом входе (опционально). Всего у модуля 8 пронумерованных входов. Вход модуля может быть обычным контактным, например для определения положения стрелки, или же токовым датчиком – для определения занятости пути. Во втором случае датчик подключается в разрыв между контролируемым участком рельса и одним из питающих рельс проводов. Используемые в токовом датчике оптопары позволяют детектировать только одну полярность напряжения на рельсах, поэтому в случае аналогового управления, нужно использовать другие (с двойным, включенным встречно-параллельно светодиодом), либо две отдельные оптопары. Детекция тока происходит следующим образом: когда на рельсах появляется локомотив или вагон со встроенным в колесную пару резистором, в цепи рельс появляется ток, который создает падение напряжения на диодном мосту. Диоды моста подключены таким образом, что падение напряжения создается на 2х последовательно включенных диодах, этого достаточно для срабатывания подключенной параллельно мосту оптопаре. Схема и плата разработана одновременно для обоих вариантов входов. В случае использования токового датчика не устанавливаются пары резисторов R15-R30, при этом блок-участки получаются гальванически развязаны между собой и модулем. В случае использования входа как контактного датчика, не устанавливаются оптопары D1-D8, мосты BR1-BR8 и резисторы R3-R10 между ними. При этом резисторы R23-R30 представляют собой перемычки 0Ом, соединяющие первые входы датчиков между собой и землей. В качестве резисторов R15-R22 также используются перемычки, но в целях зашиты входов контроллера можно использовать резисторы 1к. Для идентификации модуля в системе служит микропереключатель адреса. Адреса задаются двоичным кодом (0-выкл, 1-вкл) в диапазоне 0-31. Модуль отвечает только на запрос, в котором присутствует его адрес. Два модуля с одинаковыми адресами будут мешать друг-другу. Корректная работа модуля при опросе сопровождается миганием светодиода на его плате. Резистор R1 служит для согласования линии RS485 и ставится на последнем модуле на шине. Для соединения можно использовать витую пару, две жилы из которой использовать для RS485, а остальные распределить между сигналами DCC и линиями «+питания» и «земля». Светофорный декодер Это одно из тех устройств, которое наравне с поездами позволяет “оживить” макет. Такие устройства, работающие по протоколу DCC выпускают многие фирмы и макетостроители знакомые с разработкой микроконтроллерных устройств. Обычно для настройки таких декодеров используют разные варианты прошивок или программируют внутренние переменные с помощью командной станции. Особенность этой схемы декодера в возможности запомнить адрес и конфигурацию светофора замыканием всего пары джамперов на плате декодера. Т.е. чтобы запомнить адрес достаточно замкнуть адресную перемычку AD (Address Detect) и послать с командной станции любую команду на этот адрес (в случае диспетчерского пульта это можно сделать из программы конфигуратора). К декодеру можно подключать несколько светофоров, например 3 пятизначных, 4 4х-значных, 5 3х-значных или 6 двузначных. Каждому из них будет автоматически присвоен свой адрес (по порядку). Для определения типа светофора нужно перед включением замкнуть перемычку SD (Signal Type Detect), при удачном определении светофор по очереди включит все цвета первого в группе светофора. Это можно сделать сразу после прошивки контроллера, если заранее известно какими светофорами будет управлять данный декодер. Основой декодера является контроллер ATTiny24. Узел питания содержит перемычки выбора источника, диодный мост и стабилизатор типа 7805. Плата спроектирована таким образом, чтобы питать декодер можно было либо от самой шины DCC либо от отдельного источника. Во втором случае сигнал DCC будет развязан оптопарой, а само питание будет браться с разъемов AC1 или AC2, резистор R12 устанавливать не нужно. При питании от шины DCC необходимо установить перемычки выбора питания, оптопара и элементы R11-VD2 не устанавливаются. Для корректной работы светофоры подключаются к декодеру в определенной последовательности. К первому выходу в параллель подключаются верхние сигналы светофоров, потом нижние и т.д. Затем по одному подключаются общие выводы светофоров (подразумевается использование светодиодных светофоров с общим катодом или анодом) см. рисунок. Перемычки или параллельные им резисторы на выходах декодера ставятся в зависимости от схемы светофора и параметров используемых в нем светодиодов, с учетом того, что используется динамическая индикация. Стрелочный декодер Это то устройство, которое определяет, куда поедет поезд на развилке. Как и в случае со светофорным декодером, такие устройства можно найти у многих производителей, и как и в случае со светофорным декодером, адрес можно настроить просто замкнув джампер (AD) и подав команду на переключение. Данный вариант предназначен для управления стрелками с электромагнитами (соленойдами), поэтому при подаче команды декодер выдает на соленойд импульс длительностью 500 мс. Как правило, для перевода стрелки нужен довольно мощный импульс, поэтому чтобы не перегружать шину питания (или шину DCC, если питание берется от нее), используется электролитический конденсатор. На плате предусмотрен разъем для подключения внешнего конденсатора. Причем контроллер (который как и в светофорном декодере – ATTiny24) проверяет заряд конденсатора и не выдаст импульс на привод стрелки, пока зарядка не закончится (выходы, которые нужно переключить, контроллер при этом будет помнить). Это сделано для большей гарантии переключения стрелки. Всего у декодера 8 выходов, это значит, что к нему можно подключить от одной до четырех стрелок. Входная часть практически идентична светофорному декодеру, за исключением использования LM1117 в качестве стабилизатора (это сделано для удобства разводки). Сборка Разработка плат была проведена в САПР Proteus, файлы проекта размещены в конце статьи. Вместо дорожек с обратной стороны можно использовать перемычки. В некоторых местах использованы SMD-перемычки типоразмеров 0805 и 1206. Платы практически полностью собраны на SMD элементах с одной стороны, при этом выводные детали (индикаторы, разъемы, кварцы) находятся с другой стороны. Самым сложным может быть пайка микросхем преобразователя USB-UART в корпусе SSOP28 и главного контроллера пульта в корпусе TQFP32. Практически все детали можно найти в большинстве магазинов, за исключением разве что микросхемы 74HC1G125, вместо нее можно применить полноразмерную 74HC125, с соответствующей переразводкой платы. Все резисторы и керамические конденсаторы размера 0805, танталовые конденсаторы в цепях 5В – тип А, в цепях +14В – тип С. Большинство соединений осуществляется клеммами. Платы пульта имеют размер 55х85мм.
Для подключения кнопок и индикаторов служит макетное поле на плате индикации (см. рисунок платы). Конкретную позицию для подключения можно узнать в программе-конфигураторе (меню проект-схема подключения кнопок/индикаторов). Соединение плат пульта между собой 7 жильным шлейфом следует вести с учетом имен линий (см. схемы и сборочные чертежи выше)! Линии DI-DO должны быть соединены крест-накрест, остальные линии соединяются напрямую.
Платы модулей ОС и декодеры размером 60х60мм.
, Для декодеров и модулей ОС корпуса не подразумеваются, т.к. они обычно крепятся внутри макета. Корпус самого пульта зависит от размеров передней панели, в случае маленькой путевой схемы можно использовать корпуса от старой оргтехники (как это сделал я) или найти в продаже новый. Все схемы и чертежи плат в формате пакета Proteus и прошивки модулей находятся в конце статьи. Конфигурации фьюз-битов в модулях ОС и на модуле ввода-вывода можно оставить заводскими, в декодерах – рекомендуется включить BOD на 4.3В. В главном контроллере – включить BOD на 2.7В, установить источником тактирования внешний ВЧ-кварц и задать размер boot секции в 128 слов (фьюз биты в аннотации Atmel: 0x2F 0xD7).
А этот бардак представлял собой тестовый макет (слева можно наблюдать стрелочный декодер с батареей конденсаторов, по середине 2 модуля обратной связи, а справа светофорный декодер): Настройка
Интерфейс незамысловатый, вся программа в основном состоит из окон со списками разнообразных объектов из которых состоит проект. Рассмотрим основные этапы работы.
Имя светофора это то самое имя, которое мы дали ему на чертеже путевой схемы, адрес это адрес на шине DCC, ну а тип определяется его функциональным назначением. Под окном выбора типа светофора располагается таблица функций. В зависимости от типа, каждая из 8 функций декодера может иметь разное имя или вообще его не иметь. Функции как бы соответствуют цветам светофора, но каждая из них может быть ответственна за горение или мигание одновременно нескольких цветов. Такие функции называют Аспектами. Например для маневрового светофора существует 2 аспекта: синий и белый, а для проходного могут быть красный, желтый, зеленый и желтый+зеленый. При добавлении стрелочного декодера окно свойств имеет немного другой вид, например там нет выбора типа и можно написать любые названия функций. Так как стрелочный декодер может управлять 8ю выходами, каждую из функций можно назвать тем, чем она и управляет на макете, т.е. таким именем, какое ей дано на чертеже. Допустим, что все декодеры мы добавили, теперь можно пока этот список закрыть. Не забываем сохранить то, что сделали. Сам проект сохраняется с расширением .dcs (особо любознательные могут открыть его любым текстовым редактором, структура очень простая, но редактировать его не советую, можно все испортить и придется начинать сначала). Следующий список – список кнопок. Это кнопки, которые находятся на пульте и управляют переключением стрелок, открытием или закрытием светофоров ну или какими-либо другими событиями. При добавлении или редактировании кнопки можно изменять только ее имя, а ID назначается автоматически. Добавьте в список столько кнопок, сколько вам нужно на пульте (до 64 штук). Далее идет список индикаторов. Это все те светодиоды на пульте, которые отображают значения светофоров, занятость пути и положения стрелок. Все индикаторы делятся на 2 группы. Одиночные – это индикаторы которые работают независимо от других и горят только тогда, когда отвечающая за них функция принимает значение «1», например это индикаторы занятости пути и индикаторы положения стрелки. Как только поезд покидает блок-участок, или стрелка переводится в другое положение, на это реагирует модуль обратной связи. Контроллер опрашивает модуль, вычисляет функцию для индикатора и в соответствии с ее значением зажигает или гасит индикатор. Последний список служит лишь для информационной цели, в нем содержится краткая информация обо всех задействованных в проекте функциях. Даже в пустом проекте могут быть заданы некоторые функции, например это встроенные в прошивку пульта сигналы для мигания индикаторов (меандр низкой частоты). Простое логическое умножение функции на такой сигнал заставит соответствующий индикатор мигать. Сверху отображается ее внутреннее имя, которое состоит из имени декодера и имени конкретной функции. Ниже находится надпись Fx и столбец с кнопками и именами слагаемых. Если функция не задана, то кнопок всего 2 – «=» и «END». Кнопки задают операцию со слагаемыми, находящимися справа от них. Операции бывают следующие: NOT - логическое отрицание, только для первого слагаемого, AND – логическое умножение, OR – логическое сложение, AND NOT – умножение с инвертированным слагаемым и OR NOT – сложение с инвертированным слагаемым. Переключаются они циклически, через еще одно значение – «END», которое означает, что больше слагаемых не нужно. Сами слагаемые задаются нажатием на их название справа от кнопки (если слагаемое еще не задано, то там будет надпись «Set…». При этом появляется окно выбора слагаемого в одном из 3х списков. Это либо одна из линий обратной связи, либо кнопка, либо уже определенные (встроенные) функции. Функция выбирается либо щелчком и нажатием на ОК, либо двойным щелчком, после чего это окно исчезает, а новое слагаемое появляется на своем месте рядом с кнопкой операции. Если функция не нужна, ее можно совсем удалить кнопкой «Очистить», если функция готова, можно нажать внизу кнопку «Задать» - окно исчезнет, а напротив функции появится ее внутреннее имя. Информация о внешнем виде пульта, сохраняется в том же самом файле dcs. Теперь остается только привести данные проекта в понятный для контроллера вид, и залить в него. Для начала нужно скомпилировать проект («Проект – компилировать), если все настроено верно, ошибок нет и количество объектов не превышает возможности контроллера, то появится зеленая надпись «Compilation Complete» и будет создан файл с именем проекта и расширением bin. Его можно использовать как для прошивки программатором, так и из этой программы, по интерфейсу USB/COM через меню «Загрузить». При загрузке имя файла выбирать не нужно, в контроллер будет загружен текущий проект. Загрузка занимает некоторое время (около 30 сек), при этом на плате должен мигать светодиод USB, а на экране будет отображаться прогресс загрузки.
Ну вот вроде и все. Желаю удачи в сборке и настройке! PS: Просьба настоящих желедорожников-профессионалов сильно не ругаться, если я что-то напутал в терминологии или принципах работы ЖД, для меня это всего лишь хобби. Некоторые полезные ссылки: Вики о DCC - https://ru.wikipedia.org/wiki/Digital_Command_Control Сайт NMRA, там можно найти стандарты, в том числе по протоколу DCC - https://www.nmra.org/ Сайт FTDI, где можно найти драйвер для FT232 - https://www.ftdichip.com/FTDrivers.htm
Файлы: Все вопросы в Форум.
|
|
|||||||||||||||||||||||||
![]() |
![]() |


![]() |
![]() |
|||
|
||||
![]() |
![]() |