РадиоКот :: Управление макетом железной дороги. Диспетчерский пульт на основе DCC.
Например TDA7294

РадиоКот >Конкурсы >пкпч2014 >

Теги статьи: Добавить тег

Управление макетом железной дороги. Диспетчерский пульт на основе DCC.

Автор: Engineer_Keen
Опубликовано 11.09.2014
Создано при помощи КотоРед.
Участник Конкурса "Поздравь Кота по-человечески 2014"

Управление макетом железной дороги. Диспетчерский пульт на основе DCC.

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

Представленный в статье диспетчерский пульт позволяет автоматизировать управление такими устройствами на макете железной дороги как светофоры и стрелки, а также отображать состояние занятости путей и положение стрелок. Для передачи команд управления на стрелки и светофоры используется хорошо известный в ЖД-моделизме протокол DCC (Digital Command Control). Преимуществом этого протокола является то, что для питания и управления всеми устройствами используется всего 2 провода. Итак, что же умеет этот пульт:

  • Управлять 32-мя устройствами по протоколу DCC. Это может быть 32 светофора или 128 стрелок (32 стрелочных декодера на 4 стрелки) или 256 любых устройств с функцией вкл-выкл или любые комбинации этих устройств
  • Считывать данные с 64 датчиков. Это могут быть датчики занятости пути, датчики положения стрелок или любые другие датчики
  • Опрашивать 64 кнопки и управлять работой 64 групп индикаторов на пульте управления
  • Возможна работа как в автономном режиме (после настройки через программу-конфигуратор), так и с подключением к компьютеру через COM порт или USB
  • Отключение нагрузки при возникновении КЗ

Чего не умеет:

  • Управлять локомотивами
  • Настраиваться без компьютера

Описание работы пульта

Устройство по сути представляет собой ПЛК (программируемый логический контроллер). В процессе работы контроллер опрашивает датчики обратной связи (ОС) и кнопки пульта, вычисляет значение всех функций, в которых они участвуют, и на основе значений этих функций управляет индикацией на пульте или посылает команды на шину DCC. Так же в процессе работы возможно подключение компьютера, в этом случае в свободные промежутки времени контроллер занимается и обработкой команд, поданных с компьютера (ручное управление индикацией и устройствами DCC, запись конфигурационной информации).

Теперь рассмотрим типовую схему макета и укажем на ней положение нашего пульта.

На схеме приведена минимальная конфигурация, которая позволяет нормально управлять макетом. В нее всходит:

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

Схемотехника

Схема пульта состоит из двух модулей, модуля управления (в ЖД-моделизме он обычно называется командной станцией) и модуля ввода-вывода, соединенных между собой шлейфом.

Рассмотрим для начала модуль ввода-вывода.

В качестве управляющего устройства используется контроллер 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 модуля обратной связи, а справа светофорный декодер):

Настройка


По сути, кроме джамперов для запараллеливания каналов в модуле управления существует только один орган настройки, это настройка ограничения тока КЗ. Для того, чтобы его отрегулировать, нужно подключить все декодеры и начать вращать переменный резистор (влево или вправо, уточнить!), пока не произойдет отключение и не загорится индикатор ERR, после этого следует немного открутить резистор в противоположную сторону, выключить и включить питание пульта.
И так, все собрано, и соединено, кроме индикаторов и кнопок самого пульта, что делать дальше?
Для того, чтобы настроить и запустить всю эту систему, я написал специальную программу.
Вот как она выглядит:

Интерфейс незамысловатый, вся программа в основном состоит из окон со списками разнообразных объектов из которых состоит проект.

Рассмотрим основные этапы работы.
1) Для начала (даже до сборки пульта, т.к. этот пункт позволяет определить возможность использования этой системы) нужно нарисовать на листе бумаги схему путей и вид панели пульта. На схеме нужно пронумеровать все светофоры и стрелки и дать им имена. Номера (адреса) должны быть больше 128 (это особенности протокола DCC). У каждого светофора должен быть свой адрес. У стрелок может быть один адрес на 4 штуки и номер выхода декодера, (например: стрелка1 – адрес 129, выход1 – отклонение, выход2 – прямо; стрелка2 – адрес 129, выход3 – отклонение, выход4 – прямо; стрелка10 – адрес 140, выход7 - прямо, выход8 - отклонение и т.д.). Стрелки и светофоры имеет смысл группировать с целью уменьшения длинны соединительных проводов.
Если у вас количество адресов не превысило 32, значит все в порядке, в противном случае у этой системы не хватит адресного пространства и схему придется разбивать на 2 или использовать другой пульт.
Следующим шагом разбиваем макет на блок-участки, подписываем названия всех блок-участков и выходы переключателей положения стрелок. Каждый блок-участок и выход положения стрелки тоже нужно пронумеровать. Номера состоят из адреса (0-31) и бита, это как раз те адреса, и номера входов модулей ОС. Как и декодеры, линии ОС можно группировать по адресам или типам датчика (стрелка или токовый датчик). Если общее количество линий ОС не превысило 64, то можно работать дальше.
Когда все устройства на макете именованы и адресованы, можно переходить к самому пульту. На нем точно также нужно нарисовать все нужные индикаторы кнопки и подписать их имена (чтобы не путать со светофорами и линиями ОС, можно использовать префиксы, например И_ для индикаторов и К_ для кнопок). Адресация тут уже не нужна, так как этим в автоматическом режиме займется программа. Но общее количество кнопок и индикаторов должно быть не более чем по 64 шт.
2) Проверяем связь с пультом. Запустите программу, соедините пульт с компьютером и включите его. В случае подключения по USB, возможно потребуется установка драйверов FTDI. После этого у вас появится новый COM-порт, запомните его.
В программе зайдите в меню настройки – настройки связи и выберите там этот порт, если все в порядке, появится сообщение «открываю порт COMх. готово». Теперь проверим связь с контроллером пульта. Нажмите «подключить» в том же окне. Если все в порядке, появится что-то вроде «Dispatcher Command Station V1.0».


Теперь можно задать адреса декодерам. В окне настройки соединения нужно поставить галку «прямое управление», ввести адрес, установить перемычку на соответствующем декодере и нажать любую кнопку F0-F7, при этом пульт передаст команду с этим адресом в шину DCC, а декодер с замкнутой перемычкой запомнит адрес как свой. Переставьте перемычку на следующий декодер и программируйте следующий адрес.
3) Теперь можно приступить непосредственно к проекту. Пульт на этом этапе можно отключить. Выберите в меню файл – новый, и введите имя проекта. Теперь приступим к добавлению устройств.
Первым в меню «объекты» идет список устройств DCC – это те самые светофорные и стрелочные декодеры. Добавьте в список новое устройство, при этом будет предложен выбор что добавлять, светофор или стрелочный декодер.
Если выбран светофорный декодер, то появляется окно свойств светофорного декодера, где можно ввести имя светофора, адрес и тип, а так же задать логику работы, но об этом позже.

Имя светофора это то самое имя, которое мы дали ему на чертеже путевой схемы, адрес это адрес на шине DCC, ну а тип определяется его функциональным назначением. Под окном выбора типа светофора располагается таблица функций. В зависимости от типа, каждая из 8 функций декодера может иметь разное имя или вообще его не иметь. Функции как бы соответствуют цветам светофора, но каждая из них может быть ответственна за горение или мигание одновременно нескольких цветов. Такие функции называют Аспектами. Например для маневрового светофора существует 2 аспекта: синий и белый, а для проходного могут быть красный, желтый, зеленый и желтый+зеленый.

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

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

Следующий список – список кнопок. Это кнопки, которые находятся на пульте и управляют переключением стрелок, открытием или закрытием светофоров ну или какими-либо другими событиями. При добавлении или редактировании кнопки можно изменять только ее имя, а ID назначается автоматически. Добавьте в список столько кнопок, сколько вам нужно на пульте (до 64 штук).

Далее идет список индикаторов. Это все те светодиоды на пульте, которые отображают значения светофоров, занятость пути и положения стрелок. Все индикаторы делятся на 2 группы. Одиночные – это индикаторы которые работают независимо от других и горят только тогда, когда отвечающая за них функция принимает значение «1», например это индикаторы занятости пути и индикаторы положения стрелки. Как только поезд покидает блок-участок, или стрелка переводится в другое положение, на это реагирует модуль обратной связи. Контроллер опрашивает модуль, вычисляет функцию для индикатора и в соответствии с ее значением зажигает или гасит индикатор.
Групповые индикаторы работают по другому принципу. Дело в том, что светофоры переключают цвет (точнее, как мы говорили выше – аспект) по команде. А команда для определенного аспекта формируется как только соответствующая функция переключается в «1». Если она переключится обратно в «0», то никакая команда сформирована не будет и светофор продолжит гореть теми же цветами. Для одиночных индикаторов такой подход не годится. Групповые индикаторы как и светофорные декодеры работают по принципу переключателя. Если для какого-либо индикатора функция примет значение «1», то он загорится сам, и при этом отключатся все остальные индикаторы его группы.
Группировать можно от 2 до 8 индикаторов. Всего на пульте можно разместить максимум 64 индикатора, однако на реальной панели пульта можно использовать различные варианты параллельного и последовательного включения нескольких светодиодов для одной контактной пары.

Последний список служит лишь для информационной цели, в нем содержится краткая информация обо всех задействованных в проекте функциях. Даже в пустом проекте могут быть заданы некоторые функции, например это встроенные в прошивку пульта сигналы для мигания индикаторов (меандр низкой частоты). Простое логическое умножение функции на такой сигнал заставит соответствующий индикатор мигать.
Если все составные части макета и пульта описаны, можно приступать к самой важной части.
3) Программирование функций.
Что же такое функция в данной программе? Дело в том, что пульт ничего не знает о том, как расположены светофоры, стрелки и датчики обратной связи, он (пока еще) не знает какими кнопками управляются стрелки, он ничего не знает о правилах светофорной сигнализации (тем более он не знает в какой стране находится, а ведь правила в разных странах отличаются). А может это и не макет вовсе? Но ему этого знать и не нужно! Все что ему нужно знать – это как реагировать на определенные сочетания входных сигналов (от линий ОС и кнопок). Вот для этого и нужны функции. В процессе работы контроллер пульта по очереди вычисляет каждую функцию, и если это одна из 256 функций, которые касаются декодеров (т.е 32 декодера, по 8 функций на каждый = 256 шт.), то в случае, когда она становится «1», пульт посылает в шину DCC команду на включение этой функции, а если это одна из 64 функций индикаторов – включает или выключает индикатор.
Теперь о том, как задавать эти самые функции. Сначала для DCC декодеров. Вернемся к их списку. Открываем (2жды щелкнув в списке) свойства декодера. Напротив названия каждой функции (аспекта если это светофор или выхода если это стрелочный декодер) находится кнопочка Set… и далее несколько прочерков, это значит что данная функция не задана. Чтобы ее задать, жмем кнопку Set… Появляется окно задания функции.

Сверху отображается ее внутреннее имя, которое состоит из имени декодера и имени конкретной функции. Ниже находится надпись Fx и столбец с кнопками и именами слагаемых. Если функция не задана, то кнопок всего 2 – «=» и «END». Кнопки задают операцию со слагаемыми, находящимися справа от них. Операции бывают следующие: NOT - логическое отрицание, только для первого слагаемого, AND – логическое умножение, OR – логическое сложение, AND NOT – умножение с инвертированным слагаемым и OR NOT – сложение с инвертированным слагаемым. Переключаются они циклически, через еще одно значение – «END», которое означает, что больше слагаемых не нужно. Сами слагаемые задаются нажатием на их название справа от кнопки (если слагаемое еще не задано, то там будет надпись «Set…». При этом появляется окно выбора слагаемого в одном из 3х списков. Это либо одна из линий обратной связи, либо кнопка, либо уже определенные (встроенные) функции.

Функция выбирается либо щелчком и нажатием на ОК, либо двойным щелчком, после чего это окно исчезает, а новое слагаемое появляется на своем месте рядом с кнопкой операции. Если функция не нужна, ее можно совсем удалить кнопкой «Очистить», если функция готова, можно нажать внизу кнопку «Задать» - окно исчезнет, а напротив функции появится ее внутреннее имя.
Рассмотрим пример задания функции для простого 3х-значного светофора.
Допустим у нас есть светофор (светофор1, адрес 129), и 2 датчика занятости (ДЗ_1, адрес1 бит0; ДЗ_2, адрес1, бит1), подключенные к блок-участкам за этим светофором (ДЗ_1 –ближний из двух). Логика такого светофора следующая:
- если занят следующий за светофором блок-участок, то горит красный;
- если следующий свободен, а за ним занят, то горит желтый;
- если свободны оба блок-участка, то горит зеленый.
Как теперь это задать? Добавляем в список ОС два наших участка и даем им имена (как есть). Добавляем в список DCC светофорный декодер, даем ему имя, адрес и выбираем тип – проходной. У него появляются 4 аспекта. «Желтый+зеленый» рассматривать не будем для упрощения. Напротив красного жмем Set и задаем простую функцию: Fx=ДЗ_1, т.е жмем Set напротив кнопки «=» и выбираем из списка ОС наш датчик. Жмем задать, и переходим к «желтому», там уже нужно во-первых задать первый оператор «=NOT», т.к. первый блок участок должен быть свободен и выбираем опять же ДЗ_1, далее переключаем второй оператор на «AND» («END» переместится на следующую строку), и выбираем второй датчик. Теперь задаем для зеленого: Fx=NOT ДЗ_1 AND NOT ДЗ_2. Вот и все, алгоритм работы этого светофора запрограммирован.
Теперь что касается заранее заданных функций. Они нужны для упрощения программирования и снижения нагрузки на контроллер. Например, если мы хотим на пульте продублировать показания нашего светофора, мы можем опять задать функции через датчики и контроллер их конечно опять просчитает, но можно просто использовать сами готовые функции (светофор1#красный, светофор1#желтый, светофор1#зеленый), да и контроллер не будет их считать, а просто возьмет готовые значения. Кстати, обратное сделать нельзя, т.к. функции индикаторов из-за ограничений программы контроллера использовать в других функциях невозможно, так что сначала нужно всегда задавать функции для декодеров!
Теперь переходим к редактору панели пульта. Она находится в самом низу меню «Проект». Тут можно разместить все необходимые органы управления и индикаторы, а так же задать им соответствия с проектными. Чтобы задать соответствия, нужно щелкнуть по объекту правой кнопкой, при этом для индикатора можно будет выбрать имя индикатора из ранее созданного списка, а для кнопки соответственно имя кнопки. Различных индикаторов можно поставить 256 штук и любому назначить любое из 64 заданных имен. Кнопок же должно быть столько, сколько задано в проекте (максимум 64).

Информация о внешнем виде пульта, сохраняется в том же самом файле dcs.
Когда все расставлено в программе, то и на реальной панели нужно все объекты соединить. Сделать это можно при помощи меню «Схема подключения кнопок и индикаторов» того же меню «Проект». В окне отображается контактная матрица, расположенная на модуле индикации. Кнопки подключаются к контактам KX-KY, светодиоды к контактам IX-IY. При подключении светодиодов необходимо соблюдать полярность и ставить токоограничительные резисторы, впрочем, это будет отображено на схеме.

Теперь остается только привести данные проекта в понятный для контроллера вид, и залить в него. Для начала нужно скомпилировать проект («Проект – компилировать), если все настроено верно, ошибок нет и количество объектов не превышает возможности контроллера, то появится зеленая надпись «Compilation Complete» и будет создан файл с именем проекта и расширением bin. Его можно использовать как для прошивки программатором, так и из этой программы, по интерфейсу USB/COM через меню «Загрузить». При загрузке имя файла выбирать не нужно, в контроллер будет загружен текущий проект. Загрузка занимает некоторое время (около 30 сек), при этом на плате должен мигать светодиод USB, а на экране будет отображаться прогресс загрузки.
В программе есть еще один полезный пункт меню – просмотр памяти контроллера. Он позволяет проконтролировать работоспособность датчиков ОС, кнопок и индикаторов пульта в реальном времени. Для чтения памяти нужно нажать кнопку «Обновить» или поставить галку в пункте «автообновление». При этом в ячейках памяти, ответственных за хранение данных о линиях ОС (FB_ADR) или кнопках (KBRD_ADR) будет отображаться их текущее состояние. А щелчок по ячейкам DISPL_ADR будет переключать индикаторы пульта.
Программа не требует установки, для запуска достаточно скопировать в любую папку все файлы программы и запустить исполняемый файл. Настройки программы (активный ком-порт и язык интерфейса) сохраняются в той же папке. При запуске возможно появление ошибки открытия ком-порта, это значит что в списке портов произошли изменения (например не подключен пульт или на него не подано питание), чтобы подключить пульт в этом случае нужно устранить неисправность (включить питание пульта) и перезапустить программу. Тестовый проект приложен отдельным архивом. А вот как он работает:


Более подробное описание займет наверно слишком много места и выйдет за рамки одной статьи, поэтому все вопросы касательно данной системы можно задать в соответствующей теме форума.

Ну вот вроде и все. Желаю удачи в сборке и настройке!

PS: Просьба настоящих желедорожников-профессионалов сильно не ругаться, если я что-то напутал в терминологии или принципах работы ЖД, для меня это всего лишь хобби.

Некоторые полезные ссылки:

Вики о DCC - https://ru.wikipedia.org/wiki/Digital_Command_Control

Сайт NMRA, там можно найти стандарты, в том числе по протоколу DCC - https://www.nmra.org/

Сайт FTDI, где можно найти драйвер для FT232 - https://www.ftdichip.com/FTDrivers.htm

 

 

 

 


Файлы:
Программа конфигуратор
Прошивки
Схемы_и_платы(Proteus)
Схемы_и_сборочные_чертежи(PNG)
Тестовый проект (из видео)


Все вопросы в Форум.




Как вам эта статья?

Заработало ли это устройство у вас?

27 18 5
0 1 0