Automatiseren van een analoge baan met µC

Gestart door Geert, 14 juni 2016, 07:13:11 AM

Geert

Automatiseren van wisselstraten zonder PC.

De hierna voorgestelde schakeling kan gebruikt worden in meerdere toepassingen om wisselspoelen aan te sturen.  Het basisidee is dat een wisselspoel maximum een schakelpuls krijgt van 1s en eenmaal een wissel in een bepaalde stand staat, de wisselspoel niet meer bekrachtigd wordt bij een nieuwe aanvraag voor dezelfde wisselstand.  Verder bestaat de mogelijkheid dat een ingang meerdere wissels kan omzetten, niet tegelijkertijd, maar sequentieel.


Alles begon met een project:

Naar aanleiding van een project, op vraag van een bevriende modelbouwer, lijkt het me nu het goede moment dit project hier al deels voor te stellen.

Welke situatie heeft hij nu: zijn modelbaan bestaat uit een 2-rail  en een 3-rail deel volledig analoog aangestuurd. Elk deel heeft een schaduwstation van 8 à 9 opstelsporen. Nu moet elk opstelspoor,  en al de benodigde ingaande en uitgaande wissels via een klemmenstrookje manueel aangestuurd worden.

Hij wilde dit automatiseren zonder gebruik te maken van een PC.  En wel zodanig dat hij bij een keuze van een opstelspoor er automatisch wissels juist gezet worden, en er rijspanning op het geselecteerde spoor komt te staan. Het is ook van belang dat de wissels, het kan immers voorkomen dat er meerdere verzet moeten worden, niet allen tegelijkertijd bekrachtigd worden. Dit om de voeding niet te overbelasten.

In eerste instantie wilde hij dit doen met meerdere draaischakelaars en een diodematrix op een strokenprintje waarvan elke  uitgang  van de diodematrix ingelezen wordt door een microcontroller (µC). De  µC zal dan schakelpulsen opwekken om zo de wissels in de juiste stand te plaatsen. Deze schakeling heb ik ook ontworpen en getest, maar die draaischakelaars en de diodematrix zaten me wat dwars. Waarom deze diodematrix niet vervangen door wat extra  programmatie in de µC, en de draaischakelaars vervangen door gebruik te maken per opstelspoor van een dubbelpolige tuimelschakelaar (of drukknop). Eén pool van de tuimelschakelaar voor de selectie wissels en één pool om rijspanning op het geselecteerde spoor te plaatsen.


Wat kan de aangepaste schakeling nu:

Elke ingang kan aangestuurd worden door deze naar de massa te schakelen. Dus ook door rollend materiaal via massadetectie, met reed-contacten, drukknoppen,  schakelaars, draaischakelaars, stroomdetectie enz...

De schakeling kan tot 8 wissels (16 spoelen) aansturen, waarbij er maar één wisselspoel tegelijkertijd bekrachtigd wordt. Elke geselecteerde wisselspoel wordt  om de seconde aangestuurd. In kombinatie met extra schakelingen kunnen meerdere wissels aangestuurd worden.

Standaard wissels hebben twee spoelen en worden door de µC als paar behandeld zoals een flip-flop. De µC onthoud welke spoel als laats bekrachtigd is zodat deze niet steeds opnieuw aangestuurd wordt. Dit is handig bij toepassingen waarbij spoelen aangestuurd worden zonder eindafschakeling. Ook voorkom je zo dat een spoel bekrachtigd blijft als de lok (of wagon) stil staat op een schakelpunt in je modelbaan. Al het voorgaande komt zeker ten goede aan de levensduur van de spoelen.

Het kan zijn dat bij onderhoud werkzaamheden aan je spoor je per ongeluk de manuele bediening verzet van een wissel. Dit is geen probleem, want na inschakelen van de voedingsspanning op de print, zal de eerstvolgende aanvraag om een wisselstand te verzetten wel altijd uitgevoerd worden. Als je de stand van de wissel manueel verzet als de schakeling wel onder spanning blijft, dan heb je mogelijk wel een probleem.

Het programmeren per ingang welke spoelen aangestuurd moeten worden, is zeer eenvoudig gehouden.

Een print (PCB) met mogelijkheid om tot 0,5A of tot 1A per spoel te schakelen. Uit praktische testen is gebleken dat kortstondig hogere schakelstromen ook mogelijk zijn, lees verder. De schakeling kan meerdere voedingsspanningen aan, zowel gelijkspanning als wisselspanning.

Om rijspanning op het spoor te plaatsen komt er een aangepaste schakeling die rekening houd met de schakeltijd van de wissels.

Vereenvoudigd schema:

Onderstaand vereenvoudigde voorstelling geeft de belangrijkste delen van de schakeling weer. Bovenaan de voeding, onderaan in het midden een µC voor verwerking signalen en rechts daarvan ULN2803 IC's met daarin schakeltransistors om de spoelen aan te sturen, rechts de ingangen. Verder zijn er nog een 3 tal plaatsen waar een brugje kan geplaatst worden voor programmatie schakeltabel. Ook is er een LED voor indicatie dat er een uitgang aangestuurd is en voor weergave status programmeerstap.



Basis mogelijkheden:

Standaard is de schakeling zodanig uitgevoerd dat elke ingang een wisselspoel kan bekrachtigen. Ingang 1 (IN1) stuurt wisselspoel1 rechts (W1R) aan; Ingang 2  (IN2) stuurt wisselspoel2 links (W1L) aan enz... (noot: ik spreek hier over links en rechts i.p.v. rechtdoor en afbuigende stand wissel)

Deze schakeling geeft volgende schakeltabel 1. In de verticale tabel links staat elke ingang. In de horizontale tabel kan je per ingang terugvinden welke wisselspoel deze aanstuurt. (rood kruisje) De horizontale blauwe balk, waarin ook IN1 tot IN16 voorkomt wordt enkel gebruikt bij programmatie.




De bruine pijlen hierboven geven visueel weer welke ingang welke wisselspoel aanstuurt. Ingang7  (IN7) stuurt wisselspoel 4 rechts (W4R) aan.

Instelling per ingang naar meerdere uitgangen:

Het is mogelijk per ingang meerdere wisselspoelen aan te sturen. Hiervoor moeten we de EEPROM in de µC programmeren. Dit programmeren stelt niet veel voor zoals we zullen zien.

We gaan een fictief voorbeeld nemen, een station met 5 opstelsporen met een in- en een uitgangsspoor die in beide richtingen bereden kan worden. Zie tekening hieronder.





Op de tekening van het sporenplan zien we een vereenvoudigd bedieningspaneel met 5 opstelsporen SPOOR1 tot SPOOR5. Van links uit hebben we wisselstraat bestaande uit Wissel1 tot Wissel4 en van rechts uit hebben we wisselstraat bestaande uit Wissel5 tot Wissel8. Om tot SPOOR1 te geraken moeten we wisselstraat links als wisselstraat rechts, volgens het sporenplan, zodanig de wissels schakelen dat dit spoor bereikbaar wordt. Op elk spoor op het bedieningspaneel staat een tuimelschakelaar (of drukknop) om een spoor te selecteren (S1 tot S5). Onderstaande schakeltabel geeft aan welke wissels er geschakeld moeten worden per spoor.





Om SPOOR1 te bereiken vanuit links  moet  wissel1 links schakelen (W1L), wissel3 links schakelen (W3L) en wissel4 links schakelen (W4L). Vanuit rechts moet enkel Wissel8 rechts schakelen (W8R). Al de overige wissels zijn niet van toepassing om SPOOR1 te bereiken. Zo kunnen we verder gaan zodat we uiteindelijk een tabel krijgen uit 5 ingangen die elk afzonderlijk de wisselstraat anders schakelt om dat spoor te kunnen bereiken.

Nu brengen we deze tabel over in het geheugen van de µC. Dit gaat als volgt, we zetten de schakeling eerst onder spanning  ;)   . Hierna plaatsen we een brugje op ingang PROGRAM µC, zie oranje pijl op onderstaande foto1. Tijdens het gehele programmeer proces blijft dit brugje aanwezig. (het is wel mogelijk in delen te programmeren, zodat je niet heel de schakeltabel aan één stuk moet invoeren)



Foto1


Hierna zetten we één brugje op Ingang1 (IN1) gele pijl op onderstaande foto2. Als dit brugje geplaatst is, dan plaatsen we daarna een brugje op ingang PROGRAM IN, oranje pijl foto2. Vanaf dan gaat de LED branden en kunnen de brugjes op Ingang1 en PROGRAM IN verwijderd worden.


Foto2

Nu gaan we brugjes aanbrengen op de ingangen volgens horizontale kolom schakeltabel2 die geschakeld moeten worden door Ingang1.  (zie deel schakeltabel2)




Nu gebruiken we de blauwe horizontale balk waar ook IN1 tot IN16 voorkomt. En dit als volgt: W1L komt overeen met IN2, W3L komt overeen met IN6, W4L komt overeen met IN8 en W8L komt overeen met IN15.  Foto3 maakt dit duidelijk, we plaatsen eerst de brugjes op de ingangen (gele pijlen) voor we overgaan tot de volgende stap. De volgende stap bestaat er in dat we deze selectie invoeren in het geheugen van de µC. Dit doen we door een brugje te plaatsen op INGANG SPOEL, oranje pijl. Hierbij gaat de LED uit en is de schakeltabel horende bij Ingang1 opgenomen in het geheugen van de µC.


Foto3

Hierna kunnen we Ingang2 programmeren, met dezelfde procedure als ingang1, dus eerst de gele pijl, daarna de oranje pijl voor programmatie welke ingang. zie foto4


Foto4

Ik ga van al de verdere tussenstappen nu geen foto meer tonen, maar om af te ronden wel één van de laatste stap nl. schakeltabel horende bij Ingang5 zie foto5


Foto5

De stappen zijn dus:

-selecteer met één brugje de Ingang en plaats dan een brugje op PROGRAM IN LED gaat aan. Verwijder dan de 2 brugjes.
-plaatst brugjes op de ingangen welke spoelen de hiervoor geselecteerde Ingang moet aansturen en plaatst dan een brugje op PROGRAM SPOEL  LED gaat nu uit. Al de brugjes mogen nu verwijderd worden.
-Nu kan je verder met de volgende lijn in schakeltabel.


Als heel de tabel geprogrammeerd is, dan kunnen alle brugjes verwijderd worden met als laatste het brugje op PROGRAM µC (niet echt van belang dat deze de laatste is, maar anders begint de schakeling al wisselspoelen aan te sturen als er nog brugjes zitten op de ingangen...)

Vanaf nu kan je per ingang een volledige wisselstraat aansturen. Het volgende filmpje geeft de geprogrammeerde µC weer met schakeltabel 2. De wisselspoelen zijn voor visualisatie vervangen door LED's.  Je kan duidelijk zien dat uitgang per uitgang geschakeld wordt. Je kan ook opmerken dat niet altijd elke uitgang aangestuurd wordt volgens schakeltabel, dit komt doordat een wissel al in de juiste stand staat uit een vorige opdracht.


http://www.youtube.com/watch?v=P_uX952MTQI

Stel nu dat je fouten hebt gemaakt, of je wil grondige wijzigingen aanbrengen, dan kan je altijd teruggaan naar de standaard instelling. Dit kan door de schakeling spanningsloos te maken. Dan een brugje te plaatsen op INGANG IN en INGANG SPOEL. Nu breng je de schakeling onder spanning, en de µC is gereset. (visueel te volgen doordat LED 3xknippert). Hierna mag je de brugjes verwijderen.

Printontwerp:

Het elektronisch schema bestaat uit twee delen, het voedingsgedeelte en het µC gedeelte. Het voedingsgedeelte spreekt voor zich (zie bovenste tekening hieronder) Het µC deel (onderste tekening) heeft zijn 16 ingangen links en zijn 16 uitgangen rechts. Elke uitgang stuurt een ingang aan van 2 ULN2803 IC. De uitgangen van de 2 ULN2803 IC worden gekoppeld naar een klemmenstrook gebracht. (ze staan gewoon parallel)









Diverse uitvoedingen hieronder: links voor 3-rail massa detectie, rechts voor schakelaar gestuurd.




Testen PCB en µC-software in combinatie met diverse wisselspoelen.

Om de schakeling te testen heb ik allerlei wissels genomen die ik ter beschikking had. Deze voor Marklin M-rail en deze voor Marklin K-rails met eindafschakeling.  Andere heb ik (nog) niet getest.  (zie foto testopstelling)




Deze testen zijn uitgevoerd met 1 ULN2803 aan de uitgang. Een ULN2803 kan tot 0,5A schakelen.

Als voedingspanning om te testen gebruik ik 17V gelijkspanning Met de spanningsverliezen over de gelijkrichterbrug en over de collector-emitter overgang transistor in ULN2803 komt er over elke spoel 14V te staan als deze moet schakelen.

De weerstand van een M-rail wisselspoel is 30 Ohm, dit geeft een stroom van 14/30=0,46A.

Via een scoop heb ik deze stroom gemeten door de spoel. Dit heb ik gedaan door een precisieweerstand van 1 Ohm/1W  in serie te plaatsen met de spoel en de spanning erover te meten.
Dit gaf het volgende spanningsverloop.




Je ziet dat de schakeling ongeveer 0,8sec de uitgang aanstuurt. Je ziet ook dat de spanningsval over de weerstand van 1 Ohm ongeveer 420mV is wat overeenkomt met een stroom van 0,42A.

De weerstand van een K-rail wisselspoel is 18 Ohm. Hierbij verwacht ik een stroom van 14/18=0,78A. Veel te veel voor de ULN2803. Toch heb ik deze getest met 1 ULN2803 aan de uitgang. Dit gaf het volgende beeld op de scoop:




Het eerste wat je al opmerkt is dat de stroom door de spoel oploopt tot 0,75A (wat overeenkomt met de berekening hiervoor) Wat je ook ziet is dat de stroompiek, door de eindafschakeling in de wissel, maar 20ms duurt. Het is wel degelijk mogelijk dat een ULN2803 meer dan 0,5A kan aansturen, als deze maar kort is, anders wordt de ULN2803 mogelijk te warm?

Om de schakeling grondiger te testen heb ik deze wisselspoelen laten schakelen over een lange tijd en dit met 1 ULN2803 aan de uitgang. Elke 8sec worden 4 spoelen van een M-rail 3-weg wissel, en 2 spoelen van een K-rail wissel aangestuurd, en dit meer dan 10000 keer na elkaar. Als het 10000 keer na elkaar lukt zonder schade, dan kan je ervanuit gaan dat de schakeling goed werkt  :D . Het volgende filmpje geeft een indruk van deze test over lange duur. De schakeling heeft de test goed doorstaan.

http://www.youtube.com/watch?v=gwluTruu6pI


Gebruik je K-rail wissels waarbij de eindafschakeling overbrugt is (blijkbaar zijn die eindafschakelingen rot dingen) dan kan je best wel een tweede ULN2803 parallel gebruiken. Na 0,8sec wordt de spanning toch uitgeschakeld en zal de levensduur van de spoel en de ULN2803 IC's daar niet onder leiden.


PIC Software en Eagle PCB tekeningen kan je later hier vinden.

Kostprijs (juni 2016):





Wordt vervolgd

Geert
Schaal HO - digitaal zelfbouw - Favoriete Lok: V200 DB
Huidig project: LocoNet 16 poorten ingangen/uitgangen

loebaske

Dat spreek me wel aan, bedankt om het te delen met ons Geert...


bekie

 

PietB

Ziet er prima de luxe uit Geert.
Petje af hoor.

grt Piet.

Geert

Uitbreidingen 1 juli 2016: (Deze update moest al enkele maanden eerder verschijnen...) 


Een test gebruiker had de opmerking dat hij moeilijk een juiste programmering kon nagaan omdat niet altijd elke spoel wordt aangestuurd bij een test. Hiervoor heb ik een kleine wijziging aangebracht in de software. Als de schakeling onder spanning komt, en er staat enkel een brugje op PROGRAM IN, dan zal elke spoel van een wissel wel 'ALTIJD' aangestuurd worden als deze geselecteerd wordt. Ook al is deze ervoor al goed gezet. Dit brugje kan je ook laten staan als je toch graag altijd de spoelen wil aansturen.

Een bijkomende optie is dat er ook indicatie LED's van de uitgangen op de PCB geplaatst kunnen worden.

Een andere wijziging is een 'TEST' instelling van al de spoelen. Als je enkel een brugje plaatst op PROGRAM UIT, voor je de schakeling onder spanning plaatst, dan zal de schakeling één voor één elke spoel aansturen (spoel 1 tot 16). Nadat elke spoel is aangestuurd, begint de schakeling weer opnieuw elke spoel aan te sturen totdat je het brugje op PROGRAM UIT verwijderd. Zo kan je de bekabeling naar elke spoel testen. Maar eventueel ook zo nagaan, na onderhoud aan je wissels, of deze wissels nog goed werken. (zie onderstaande video)

Filmke



Een andere bijkomende optie is dat er ontstoorcondensators van 100nF op de ingangen PCB kunnen geplaatst worden. Kan eventueel nodig zijn bij schakel-leidingen die mogelijk gestoord kunnen worden als deze samen lopen met andere leidingen.





Verder is er ook een (rode) LED aangebracht die aangeeft dat 5V voedingsspanning aanwezig is. Bij voorgaande testen is vastgesteld dat er bij onderbreken voedingsspanning naar de schakeling er nog lang 5V bleef staan op de pinnen van de µC (µC hebben een zeer laag stroom verbruik). Hierdoor herstart de µC niet bij het terug onder spanning brengen schakeling.  (spanningsloze pinnen µC is nodig voor herstart of reset µC om software terug op te starten vanaf initiatie) Wat soms wel nodig is om een nieuwe instelling met een al of niet extra geplaatst brugje uit te kunnen voeren.
De bijkomende LED zorgt niet enkel alleen voor indicatie 5V, maar ook voor extra stroom verbruik 5V voeding, zodat de Elco's ontladen worden.

Hierbij ook de software en Eagle file's:

ASM program

HEX file program

Koperzijde print PDF

EAGLE brd file

EAGLE sch file



Bij de volgende update gebruik ik relaiskaarten, deze testen zijn afgerond.


Geert
Schaal HO - digitaal zelfbouw - Favoriete Lok: V200 DB
Huidig project: LocoNet 16 poorten ingangen/uitgangen

dani

een heel fijn project Geert !!

In wezen is het een beetje gelijkaardig aan wat ik bezig ben te ontwikkelen voor mijn wisselstureing met Master/Slave Arduino's, maar dan enkel voor schaduwstations.
Mijn systeem gaat een stapje verder en laat ALLE wissels bedienen, maar dan wel weer via een PC, OF een IR afstandsbediening, OF een DCC commando OF een 4X4 klavier of een combi ervan.   Een van de functionaliteiten in de sturing is de  "preset" of  "route"  die ik kan programmeren, en oproepen.   Dat is in feite wat jouw schakeling (op basis van de schakelmatrixen) ook doet.  Elke toets is een preset of route en stuurt sequentieel een aantal wissels aan.

Great minds Think Alike ...    weeral bewezen.    Alleen gebruiken we andere Microprocessor platformen maar de eind bestemming is hetzelfde:   semi-digitaal   de wissels sturen.

Mooi werk van gemaakt met die printjes en  darlington arrays...     Ik gebruik BD139's, maar dat maakt niet zo heel veel uit.



Om dat "probleem" van  "welke heeft er nu geschakeld"  of   "welke wissel staat nu hoe ?" op te lossen  heb ik een  "wissel geheugen" ontwikkeld op basis van een ATTiny85  die gebruikt 2 ingangen met optocouplers en stuurt 3 uitgangen met LED's.

Ingang 1 staat via OC  parallel over de ene spoel van de wissel
Ingang 2 staat via OC  parallel over de andere spoel van de wissel

Uitgang 1 : groene LED   (wissel staat "rechtdoor")
Uitgang 2 : rode LED   (wissel staat afbuigend)
Uitgang 3 : hartbeat.  Elke 2 seconden een knipper die aangeeft dat alles "live" is.


Bij elke puls van de master (stuurpuls voor je wisselspoel)  ziet de µC dit en zet de juiste LED  aan en houdt die aan tot volgende puls.

Misschien kan je die functionaliteit ook gebruiken ... ?   De spanning van de "geheugens"  komt gewoon van de sporen met een gelijkrichter en een 78L05  (tot 100mA want een ATT85 en een paar LEDs gebruiken maar 50 mA)

De kruik is te water gegaan...
De kruik is niet meer.

raf

ongeveer het zelfde als ik gebruik voor mijn verzorgigs depot
alleen ik heb de programmeer functie er niet op zitten maar wel een display welke aan geeft welke wissels worden verzet en welke baan vakken van spanning worden voor zien
wissels werken met servo motoren en baanvakken via relais schakelingen

de reden van niet de programmeer functie is dat ik geen pennen meer over heb om dit te initialiseren
ik werkte met een weerstand array maar dat bleek te onbetrouwbaar wegens temperatuur verschillen
daarom heb ik dus nu allemaal druk schakelaars welke als vertrek en eind punt worden gebruikt
maar blijft plezant die te programmeren

gr raf
If I make mistakes in "spelling"
Remember it's the pen, that's bad
Don't lay the blame on me.