====== TreinPrutser ====== De TreinPrutser is een systeem om de [[Afdeling:Modelbaan]] met behulp van de computer te besturen. ===== Inleiding ===== ==== Historie ==== Een heel aantal jaren geleden hebben enkele oud-vrijwilligers een systeem in elkaar gezet om de modelbaan te besturen. Dit systeem was gebaseerd op een [[http://en.wikipedia.org/wiki/Intel_8051|80C32]] microcontroller, en zelf ontwikkelde randapparatuur die de wissels (en seinen) aanstuurde, en op elk baanvak de snelheid van de trein regelde. Dit apparaat werd de TreinPrutser genoemd. Samen met de Wizznik (de wisselsturing) en de BlokPower modules werden respectievelijk de wissels en de baanvakken aangestuurd. Natuurlijk kon de TreinPrutser het niet alleen af. Via een seriele kabel werd de TreinPrutser op een "gewone" computer aangesloten, en daar kon men met de muis, of het toetsenbord wissels omzetten, en de treinsnelheid regelen. ==== Nu! ==== Op dit moment is er geen computergestuurd systeem voor de modelbaan. Hier wilde [[Users:alx|ik]] een verandering in maken. Omdat er bij de [[Afdeling:Robotica]] al ervaring is opgedaan met de [[http://www.atmel.com/products/avr/default.asp|Atmel AVR microcontrollers]] dacht ik deze te gaan gebruiken voor een nieuw TreinPrutser systeem. Versie 2.0. ==== Microcontrollers ==== Omdat microcontrollers tegenwoordig niet zo duur meer zijn als vroeger is het makkelijker om het hele systeem op te bouwen uit allemaal kleine modules met allemaal een microcontroller, en die met een soort van netwerk met elkaar te verbinden, dan een centrale computer te maken met allemaal enorme kabels naar stuur-elektronica onder de baan. ===== Het plan ===== Het TreinPrutser systeem bestaat uit een aantal besturingsmodules. Dit zijn de * [[#BlokPrutser]] (met zijn [[#BlokPower]] modules), die de snelheid regelt op de baanvakken, maar ook kan zien of er een trein (of sommige wagons) staat. * [[#RelaisPrutser]], die kan allerlei dingen schakelen, zoals wissels, seinen, verlichting * [[#ServoPrutser]], die kan een aantal servo's besturen (bekend van modelvliegtuigen en -auto's). Handig voor zelfgemaakte wissels of spoorbomen. Deze modules zijn verbonden met, wat ik het [[#PrutsNet]] heb genoemd. Op elke module kun je een kabel aansluiten die je op een [[#NetwerkPrutser]] kan aansluiten. Als het aantal aansluitingen op een NetwerkPrutser op zijn, kun je deze weer op een andere NetwerkPrutser aansluiten, net zoals een boom, waarbij de besturingsmodules de bladeren zijn, de PrutsNet kabels de takken, en alle takken bij elkaar komen in NetwerkPrutsers. En dan komt de meest "centrale" NetwerkPrutser, de stam van de boom, via een kabeltje aan een PC, waar je dan precies kan zien hoe de wissel staat, waar de treinen rijden, en je kan hier ook de boel bedienen. ===== Onderdelen ===== ==== BlokPrutser ==== ==== BlokPower ==== ==== RelaisPrutser ==== ==== ServoPrutser ==== ==== NetwerkPrutser ==== ==== PrutsNet ==== Het PrutsNet is een netwerk met een boom-topologie. Elke netwerkverbinding zit tussen een "master" en een "slave". Een master zit dichter bij de stuur-PC en de slave zit dichter bij de modelbaan. Hieronder is een voorbeeldschema getekend (nou ja, getekend...) hoe het aangesloten kan zitten. Elke kabel zit tussen twee Prutsers, aan de bovenkant aan de master, en aan de onderkant aan de slave. Een NetwerkPrutser kan dus zowel een master zijn van bijvoorbeeld een BlokPrutser, maar ook een slave van waarschijnlijk de SuperPrutser. [ PC ] | [ SuperPrutser ] / \ / \ / \ [ BlokPrutser ] [ NetwerkPrutser ] / | \ / | \ / | \ [ RelaisPrutser ] [ ServoPrutser ] [ Blokprutser ] === Kabel === De bekabeling is gebaseerd op een 8-polige kabel. Deze kabel bevat de volgende signalen: ^ Pin ^ Signaal ^ Beschrijving ^ ^ 1 | GND | Ground (signaal en voeding) | ^ 2 | ATTN | Attention Request | ^ 3 | SS | Slave Select | ^ 4 | MOSI | Master Out - Slave In (Data naar slave) | ^ 5 | MISO | Master In - Slave Out (Data naar master) | ^ 6 | SCK | Serial Clock (voor MISO en MOSI data) | ^ 7 | RESET | Slave reset (o.a. voor ISP programmeren) | ^ 8 | VCC | 5V power (voeding voor controller) | == ATTN == Voor de communicatie gebruiken we SPI, dit zit in de AVR controller ingebouwd. Omdat dit protocol gemaakt is om vanuit de master een slave aan te sturen, en niet andersom, moeten we de master wel vertellen dat een slave iets te melden heeft. Dit noemen we "Attention", afgekort ATTN. Dit signaal wordt dus door de slave naar de master gestuurd. == SS == Het Slave Select-signaal, afgekort SS, is een standaard signaal van SPI. Hiermee geeft de master aan dat de slave moet opletten. == MOSI == Dit signaal is de data die van de master naar de slave gestuurd wordt. De naam "Master Out - Slave In" geeft dit al aan. == MISO == Hier wordt data teruggestuurd van de slave naar de master. "Master In - Slave Out" geeft hier ook al aan wat de bedoeling is. == SCK == Met de "Serial Clock" wordt de data van de MOSI en de MISO de controllers ingeschoven. De MOSI en MISO verbindingen zijn seriele verbindingen, dit betekent dat van een byte (8 bits) elke keer één bit wordt opgestuurd. De SCK geeft dus als een soort dirigent de maat aan waarbij dit gebeurt. == RESET == Hiermee wordt de Prutser (de slave dus) opnieuw opgestart. == VCC == Natuurlijk moeten de Prutser ergens hun energie vandaan krijgen. VCC is de 5 Volt voedingsspanning, die een controller mag gebruiken (hoeft niet, als die een eigen voedingsaansluiting heeft). Als een Prutser 12 Volt (of iets anders) nodig heeft, moet die zelf maar zorgen dat die er aan komt. == GND == Dit is de centrale aarde van alle signalen en de voedingsspanning VCC. === Protocol === == Master naar Slave == Als een slave gestuurd moet worden, wordt een standaard SPI verbinding opgebouwd, waarbij de master de SS activeert, en met MOSI een commando-byte verstuurd. Afhankelijk van dit commando-byte wordt de rest van de communicatie afgehandeld door meer gegevens te verzenden (met MOSI), of gegevens te ontvangen (MISO). In sommige gevallen kan dit zelfs tegelijkertijd. == Slave naar Master == Als een slave iets wil vertellen aan de master, dan geeft die dat aan door de ATTN te activeren. De master weet dan dat de slave iets te vertellen heeft en start dan de verbinding, op de zelfde manier als hierboven beschreven. Het commando-byte zal dan iets als "Vertel Maar" betekenen of zo.