web counter

Analoge servosturing

Beladen kolenwagons

Digitale servosturing via Marklin Motorola protocol

Wissels aansturen met een MS1

S88 Terugmelders


Zelfbouw LocoNet projecten

Contact:
Geert.Giebens(at)gmail.com

Digitale servosturing met PIC microcontroller voor wisselaandrijving (modeltrein).

 

NIEUW: LocoNet projecten

! Omwille van overschakelen naar LocoNet protocol wordt tijdelijk deze webpagina niet meer geüpdate. 

Wensen:

1.  Trage overgang tussen pulsen bv: 1ms puls naar 2ms puls in 2,5sec.
2.  Terugkoppeling stand servo via 2 eindeloopcontacten. Bij bereiken eindeloopcontact stopt de beweging van de servo.
3.  Zelftest: bij het op spanning komen schakeling gaat het programma na of de servo’s en de eindeloopcontacten goed werken + foutindicatie. (rode LED)
4.  Onthouden laatste stand servo (in EEPROM) Dit voorkomt hevig bewegen servo bij onder spanning brengen schakeling en servo.
5.  Op verzoek alle servouitgangen op middenstand brengen: 1,5ms pulsen. Dit maakt het instellen van wissels gemakkelijker. (zie verder)

Werking Servo zie bij Analoge servosturing

De mechanische overbrenging tussen servo's en wissels + eindeloopcontacten staan in testopstelling, meer hierover later.


Principe schema servosturing:


 

Uitleg programma servosturing:

De basis bestaat uit 2 tellers die met elkaar vergeleken worden. Een teller telt van 0 tot 255 in 2ms. (TEL 0-255) Een andere teller telt tussen 128 en 255 (Up) of tussen 255 en 128 (Down) met een telfrequentie van 50Hz (TEL POSSERV). Om bijvoorbeeld van 128 naar 255 te tellen heb je ongeveer 2,5sec nodig.
TEL 0-255 wordt aan ingang A van een vergelijker gebracht TEL POSSERV aan ingang B. Zolang A kleiner is dan B (A<B) zal: ‘Servo’ uitgang hoog zijn (+5V) Als A groter wordt dan B dan zal: ‘Servo’ uitgang laag worden (0V)
Deze vergelijking(en), waarbij TEL telt tussen 0 en 255, voert het programma maar één keer uit elke 20ms. Omdat het programma 8 servo’s kan aansturen zal het program per cycli van 2ms een andere servo aansturen. Softwarematig gebeurd dit door ‘SERVO MASK’ een schuifregister die aangeeft welke servo aangestuurd wordt.
Teller POSSERV kan Up of Down tellen aan 50Hz onder volgende voorwaarde: Up: als schakelaar ‘schak ‘ open is EN ingang ‘rechts’ open is. Down: als schakelaar ‘schak’ gesloten is EN ingang ‘links’ open is.
Het Up of Down tellen (respectievelijk langere of kortere pulsen) zal blijven doorgaan tot ingang ‘rechts’ (bij Tel Up) gesloten wordt of ingang ‘links’ (bij tel Down) gesloten wordt. (zie ook mechanische uitleg wisselaandrijving hoe deze ingangen laag worden)
Omdat we geen stuurpulsen op uitgang ‘servo’ willen als de servo zijn positie heeft bereikt, gaan we de 'vergelijker' enkel maar laten werken als beide ingangen ‘links’ en ‘rechts’ open zijn. (dit is niet helemaal correct, immers bij omschakelen schakelaar staat één ingang altijd gesloten. Dit wordt softwarematig opgelost.)

In de software zit ook nog een zelftest (bij opstart of bij RESET) ingebouwd nl: alle servo’s eerst naar links laten bewegen dan alle servo’s naar rechts laten bewegen om daarna naar de gewenste positie (schakelaar) te gaan. Wordt er tijdens de zelftest (aangeduid met oranje LED) een eindeloop niet bereikt, dan geeft de software een foutindicatie (rode LED) Ook is er in de software een mogelijkheid voorzien dat alle ‘servo’ uitgangen 1,5ms pulsen geven.

De PIC microcontroller 16F887 is goedkoop te bestellen in Amerika (rond de 2$ bij microchip), zelf heb ik deze gekocht bij Ditronic in Merksem dan wel voor 6€ stuk. De PIC programmer is deze van Velleman 35€ (eenmalige aankoop). Met deze programmer kan je eenvoudig grote PIC microcontrollers (tot 40 pinnen!) programmeren. Je kan de PIC programmer ook zelfbouwen, zie internet voor meer info hierover. De PIC MPASM assembler is gratis te downloaden op de site van Microchip.
 

Aansluitschema PIC microcontroller:

Rechts bovenaan worden de servo's (8 stuks) aangestuurd (pin 33-44) . De pulsen komen vanuit de microcontroller, de voeding Massa en +5V extern.
Links bovenaan zijn de keuzeschakelaars (pin3-10): open links, gesloten rechts (of andersom als de servo anders draait...)
Recht en links onderaan de eindeloop contacten horende bij elke servo sturing: 2 per servo (pin13-28)
Op pin 1 en 2 kunnen via een brugje (of zij die dat wensen een schakelaar) respectievelijk een reset software of 1,5ms pulsen op uitgang geforceerd worden.

De blokjes met 8x10k of 9x10k Ohm zijn SIL netwerkweerstanden. Alle weerstanden zijn via een gemeenschappelijke pin aan de plus verbonden.  De RESET ingang is intern verbonden met een weerstand naar de +5V.


 

PIC assembler program:  Assembler program
 

Gebruik servo sturing:

ZELFTEST:

Opstart sequentie controller na RESET of bij opzetten spanning op het IC:

- Oplichten ZELFTEST LED (oranje)
- Test FOUT LED (rood)  1sec.
- Alle servo’s naar links sturen  2,5sec test eindeloop contact Links
- Alle servo’s naar rechts sturen  2,5sec test eindeloop contact Rechts
- Alle servo’s naar de stand sturen in overeenstemming met stand schakelaar  2,5sec
- Als er een eindeloop schakelaar niet opkomt, dan FOUT LED (rood) aan
- Doven ZELFTEST LED


NORMAAL BEDRIJF PER SERVO:

Een schakelaar aan ingang geeft gewenste stand servo weer:
- bij open contact Rechts
- bij gesloten contact Links


Bij het omzetten van de schakelaar gaat de servo naar de andere stand:
- Bij stand links worden de pulsen verkort over een tijd van ongeveer 2,5sec (max)
- Bij stand rechts worden de pulsen verlengd over een tijd van ongeveer 2,5sec (max)
- De pulsen blijven verkorten (of verlengen) tot eindeloop contact bereikt wordt
- Indien eindeloop contact niet opkomt dan FOUT LED (rood) aan
- Indien eindeloop contact wel opkomt dan:
- De stand (pulstijd) van de Servo wordt opgeslagen in de EEPROM
- De pulsen worden gestopt.


AFSTELLEN EINDELOOP CONTACTEN:

- Zet hiervoor uw eindeloop contacten in de middenpositie.
- Zet dan spanning op de schakeling.
- Na de zelftest zal de servo naar de gewenste stand volgens schakelaar gaan.
- Nu kan de bijbehorende eindeloop contact verzet worden. De servo zal volgen tot gewenste positie bereikt wordt.
- Zet schakelaar om en doe het zelfde met de andere eindeloop contact.
- Herhaal dit voor elke servo.


OPMERKING:

Een FOUT melding kan enkel gedoofd worden na zelftest (RESET)

Indien een servo niet gebruikt wordt, dan moeten beide eindeloop contacten aan de massa gelegd worden. (anders continue een fout LED)

De 2,5sec omzettijd is gerekend van 1ms pulsen tot 2ms pulsen (of andersom). Afhankelijk van de positie eindeloop contacten zal deze tijd iets verkorten.

Mogelijkheid tot visuele terugkoppeling:

Je kan op de eindeloopschakelaars ook LED's plaatsen voor visuele terugkoppeling, bv. naast de keuzeschakelaar.

zie schema:



Contactgegevens: geert.giebens@gmail.com