Електроника и Електротехника | Electronics and Electrical Engineering > Цифрово / дигитално управление | Digital Command Control
DCC декодер за стрелки и други принадлежности по макетите
IvanC:
ПРОГРАМА - БИБЛИОТЕКИ
Програмата използва следните библиотеки:
1. NmraDcc.h - библиотека за DCC декодер по изискванията на NMRA
ИЛИ
2а. EEPROM.h - библиотека за работа с EEPROM
2b. DCC_Decoder.h - библиотека за DCC декодер
Коя от двете библиотеки се използва се задава в частта от програмата с коментар Указател за използвана DCC библиотека:.
Първата от двете библиотеки използва CV-та, т.е. чете и запомня параметрите, въвеждани от потребителя в CV-та. Тези CV-та на практика се четат от и запазват в EEPROM-а на Ардуиното, но това става "прозрачно" за програмата.
От друга страна, втората библиотека (2b) не използва CV-та, което налага програмата да се грижи за четенето и запазването на параметрите в EEPROM-a, което пък налага използването на библиотеката за работа с EEPROM (2a).
Така, както е написана програмата по-горе, тя използва първата библиотека - NmraDcc.h. Как да инсталираме тази библиотека описах в това мнение:
http://www.railwaypassion.com/forums/index.php/topic,5553.msg123157.html#msg123157
Библиотеката EEPROM.h идва заедно с Ардуино средата и се инсталира автоматично при инсталирането на средата. Ако някой реши да използва библиотеката DCC_Decoder.h, да каже и ще пусна препратка към файловете й, както и указания как да се "инсталира".
ПРОГРАМА - НАСТРОЙКИ И РАЗЯСНЕНИЯ
Програмата започва с най-важните за крайния потребител настройки, последвани от разяснения (help) как да се използва Ардуиното и декодера.
1. Задаване функциите на изводите:
В тази група настройки се задават изводите на Ардуиното, към които са свързани входа за DCC сигнала и изходите за сервата и светодиодите. Изводите за светодиодите могат да се използват и за управление на релета за превключване на захранването на сърцата на стрелките.
2. Константи за формиране на импулсите:
Тук се задават основните параметри на ШИМ импулсите, подавани към сервата - период на ШИМ-а и минималната и максималната продължителност на импулсите. Крайните позиции на сервата се задават в интервала от 0 то 100 включително, като стойност 0 отговаря на продължителност на импулса, зададена от pwmLo, а стойност 100 отговаря на продължителност, зададена от pwmHi. В повечето случаи няма нужда от промяна на тези стойности. Ако обаче по някаква причина, ходът на някое серво не е достатъчен, за да превключи напълно езика на някоя стрелка, то стойностите на тези два параметъра могат да бъдат променени. Това трябва да се предприеме само като крайна мярка, ако не може механично да се настрои хода на езика - премествне на рогчето с един (или повече) зъба на оста на сервото, преместване на тягата от рогчето на сервото към езика на стрелката на отвор на рогчето по-отдалечен от оста на завъртане на сервоти и т.н.
Последният параметър задава времето, след което Ардуиното спира да подава импулси към всяко едно серво след като сервото е завършило превключване от едното крайно положение в другото. С това се намалява значително консумацията от сервата, когато са в покой.
3. Свързване на светодиод:
Тук съм показал как да бъдат свързани светодиодите към изводите на Ардуиното, както и номерацията на изводите на Ардуиното.
4. Команди за управление през серийния интерфейс:
Стрелките могат да се превключват през серийния монитор на Ардуино средата, както и да се променят някои от параметрите на сервата, като крайните положения на сервата, времето за превключване на сервата от едното крайно положение в другото. Също от серийния монитор на Ардуино средата може да се зададе основния адрес на декодера и да се възстановят "заводските" настройки на декодера.
5. CV-та
Описани са всички CV-та, използвани от програмата, тяхното значение и "заводските" им стойности. Описанието е на български и английски езици.
Следващите параметри са вече във втората част на програмата.
6. Указатели за дебъгване на програмата:
Тези указатели са необходими само ако някой реши да променя кода на програмата. При разрешаване на някои от указателите, Ардуиното изпраща информация за състоянието на съответни параметри по серийния интерфейс, които могат да бъдат прочетени в серийния монитор на Ардуино средата.
7. Указател за използвана DCC библиотека:
Тук се задава коя DCC библиотека да бъде използвана (виж по-горе в това мнение) и съответно се забраняват някои от указателите за дебъгване на програмата (ако са разрешени), които не работят с библиотеката DCC_Decoder.h.
Останалите части от програмата не трябва да се променят, освен ако някой реши да експериментира с промяна на самата програма. Програмата е напълно функционална в този си вид и няма нужда да бъде променяна. Има едно изключение (за един параметър), което ще опиша по-нататък, когато стигна до управлението на релета за превключване на сърцата на стрелките.
Иван
IvanC:
РЕЛЕТА
Стигнах до добавянето на релета към декодера. Релетата могат да се използват за захранване на сърцата на стрелките или ако използваме декодера да включваме други принадлежности, това става с контактите на релетата. Разбира се ако консуматорите са в рамките на допустимите напрежение (5 волта) и ток (максимум 20 мА) на изход на Ардуиното, това може да стане и без релетата, като свържем товара между изход за светодиод и масата на декодера.
Схемата на декодера с релетата:
Така начертана, схемата е за управление на сърца на стрелки. Ако трябва да включваме или превключваме друг вид верига, нормално отвореният (NO) и нормално затвореният (NC) контакти на съответното реле не трябва да са свързани към DCC сигнала (или към релсите), а да са изведени самостоятелно на отделни изводи (клеми, конектор) на декодера.
На схемата съм използвал двойни MOSFET транзистори. Причината за това, е че са малки, нямат нужда от съпротивления в гейта и поради това се опроводяват по-лесно. Недостатъкът им е, че точно този вид двоен MOSFET (NX3020NAKS) е наистина много малък и може да се използва само със заводски произведена платка. Иска и много внимание и търпение при запояване на ръка с поялник. Разбира се, MOSFET-ът може да се замени с биполярен NPN транзистор - емитер към масата на декодера, колекторът към релето и анода на шунтиращия диод и базата през съпротивление 3,3 килоома към джъмпера.
С помощта на джъмпера за канала на всяко реле се избира в кое състояние на изхода на този канал да се включи релето (контактът превключва общия извод на релето от нормално затворения (НЗ) към нормално отворения (НО) извод на релето). Обикновено при "включено" състояние на канала, изходът на Ардуиното, свързан към извод 1 на джъмпера (вдясно на схемата) получава високо ниво и ако искаме да затворим веригата на това, което управляваме със свързване на НО-ия контакт с общия такъв на релето, трябва джъмперът да окъсява изводите 1 и 3, а 2 да остане свободен. Ако искаме обратното - свързваме 2 с 3, а 1 остава свободен. Разбира се ако използваме НЗ извода вместо НО, логиката на джъмперите се обръща.
При захранването на сърца на стрелки, ако на някоя стрелка сърцето е захранено погрешно, просто трябва да превключим джъмпера от позиция 1-3 в 2-3 или обратно.
В програмата има една променлива, наречена LED_flasher. Намира се в "раздела" под коментара Константи за нормалната работа на програмата - да не се променят!!! и по-точно на ред 264 (ако не променяте програмата с добавяне или изтриване на редове). Този ред изглежда така:
const int LED_flasher = 10; // LED flash length: 10 for moderate flashing, 1000 for no flashing.
Тази константа указва колко бързо да мига светодиодът за новото положение на сервото по време на превключване на състоянието на сервото. Идеята за мигането е, докато сервото се завърта плавно от едното до другото крайно положение (това времето се задава със CV за всеки канал), понеже стрелката все още не е напълно превключила, светодиодът за новото положение мига, т.е. указва, че стрелката е все още в преходен режим, но също показва какво би било новото положение на стрелката. Като завърши завъртането на сервото, т.е. превключването на стрелката, светодиодът светва постоянно.
Това поведение би водило до няколкократно превключване на релето за захранване на сърцето. За да го избегнем, трябва да променим стойността на LED_flasher от 10 на 1000.
На показаната схема релетата са с бобинки за 5 волта и са свързани към регулираното от IC1 напрежение. По принцип, за един вид релета, колкото по-ниско е номиналното напрежението на бобинката, толкова по-голям е консумираният от бобинката ток. Ако и четирите релета са задействани едновременно, сумарният им ток се осигурява от регулатора на напрежение и ако този регулатор е линеен същият този ток се консумира от централата или бустера. Ако се използва импулсен регулатор, токът консумиран от централата/бустера намалява почти пропорционално на съотношението на напреженията на централата/бустера и регулатора, така че това не е проблем.
Може да използваме релета за по-високо напрежение, които да са свързани към входящото за регулатора напрежение, т.е. след Греца. В този случай обаче има "малък" проблем... Напрежението от централата/бустера може да варира от 13 до 19-20 волта за различните марки и модели, а за някои може да достигне и до 24 волта. Това е и "малкият" проблем - какви релета да използваме, с бобинки за какво напрежение? Ако напрежението на централата/бустера е до около 15 волта, спокойно може да използваме релета с бобинки за 12 волта. Ако е повече? Не всички видове релета се предлагат във вариант за 18 волта. Дори и с релета за 18 волта, те може да не превключват надеждно при напрежение на централата от 16 волта (в Греца има 1-2 волта пад на напрежение в зависимост от използваните диоди). Затова съм се спрял на релета за 5 волта. Тези, които използвам са много малки и съответно за малък комутиран ток - 1 А. Максималният ток, който могат да прокарат без повреда на контактите е 2 А. Това е достатъчно за преминаване на локомотив през правилно превключена стрелка. Ако стрелката бъде "разрязана", колелото разрязващо езика ще дъде накъсо станцията/бустера. Ако станцията/бустерът са настроени за малксимален ток по-голям от 2 А, това може да доведе до стопяване на контакта на релето, така че го имайте предвид.
Друга особеност на релетата е, че някои имат две версии - нормална, с по-голям консумиран от бобинката ток и "чувствителни" с по-малък ток на консумация от бобинката. Препоръчвам да си вземете от втория тип, ако имате такава възможност. Консумираният ток от "нормално" реле за 5 волта може да достигне 90-100 мА, докато реле с "чувствителна" бобинка консумира наполовина, т.е. между 30 и 50 мА. Дейташийтите на релетата дават тези параметри.
Иван
IvanC:
На основата на декодера, описан по-горе, направих DCC декодер за стрелки тип "паркетбан". Стрелките, на които монтирах декодерите, са моя разработка, "произведени" от брат ми Владо:
Схемата на декодера е много подобна на тази, описана по-горе, но само с едно реле и изходи само за едно серво:
Иван
IvanC:
Проблемът при управлението на "паркетбан" стрелки със серва е, че сервата и управлението им не могат да се монтират "под плота". Декодерът за 4 серва може да се сложи някъде встрани от релсите, но тогава възниква проблемът за опроводяването - 3 проводника към серво и евентуално още 3 за захранване на сърцето на една стрелка. Част от проблема е прекарването на проводниците под релсите, за свързване на стрелки на вътрешни коловози и то така, че проводниците да не надигат релсите. Затова реших да разработя декодера така, че да се монтира за постоянно на една стрелка и следователно да не се налага свързване и разкачане на връзките към декодера при построяване и разглобяване на "паркетбана".
И така, всяка стрелка си има собствен декодер, който е монтиран и свързан към стрелката. Захранването на декодера се взема от двете релси. И тук DCC сигналът се изправя от Греца и се подава на входа на регулатора за 5 волта. За регулатор на напрежение използвам импулсен такъв с MP2307, изграден като модул. Модулът е с малки размери и не се нуждае от радиатор, което е важно при това разположение на декодера.
Преди да разработя платката потърсих подходящи релета с бобинки за 5 волта, ток на контактите 2 А и минимални размери. Намери тези, които са на снимките (в зелен корпус) и разработих платката за тях. Бобинката на релето черпи около 90 мА ток при 5 волта. Тъй като регулаторът на напрежение е импулсен, общият ток на декодера, релето и сервото в покой, който те черпят от станцията/бустера, е около 40 мА при включено реле и около 10 мА при изключено реле, при напрежение на станцията/бустера около 16 волта.
Иван
IvanC:
Програмата в Ардуиното е същата, като публикуваната по-горе. За да не превключва релето няколкократно, докато стрелката преминава от направо в отклонение, както вече писах по-горе, промених стойността на константата LED_flasher, обявена на ред 264 от 10 на 1000:
const int LED_flasher = 1000; // LED flash length: 10 for moderate flashing, 1000 for no flashing
Програмата си е все още за управление на 4 стрелки. Сервото и релето са свързани към изходите на Ардуиното за първата стрелка, така че декодерът "изхабява" останалите 3 адреса. За "паркетбан", където броят на стрелките е сравнително малък, това не е проблем.
Зелените релета, показани на снимките са FEME ESH A 001 5, но свършиха там, откъдето ги взех. Търсенето на други такива не се увенча с успех. Поразрових се повече и намерих релета с още по-малки размери, за които се наложи да променя платката:
XML (eagle)
PDF
Няколко производителя правят релета, които могат да се монтират на платката:
Omron G5V-1-T90 DC5
Fujitsu SY-4.5-K или SY-5-K
Panasonic HY1-5V
NAIS HD1E-M-DC5V
Иван
Навигация
[0] Списък на темите
Премини на пълна версия