Artiekel in Robobits:  Een Motorcontroller

Toen ik met mijn kleinzoons naar zo’n graafmachine stond te kijken bekroop me de gedachte: "Wat zou het leuk zijn als ik hydraulische cilinders in een robot zou kunnen gebruiken, klein van omvang en met grote kracht".
Omdat dat wel een illusie zal blijven, bedacht ik dat een elektromotor die aan een M3 draadeind draait (als worm), het meest haalbare alternatief is.
Een vlugge telling leerde dat er aan de graafmachine meer dan tien cilinders zaten.
Om zoveel motoren met 1 PC of microcontroller te besturen zou er aardig wat circuit moeten worden gebouwd, zeker als je zoals ik meer wilt dan alleen uit, linksom en rechtsom”.
Het kiezen tussen een stappenmotor en een elektromotor was voor mij niet moeilijk. Ik gebruikte ze beide bij het automatiseren van een freesmachine waarover ik in de RoboBits nr 35 al schreef (zie ook: www.henkzelf.nl/MijnFreesMach.htm).

Met een stappenmotor kun je wel precies sturen, maar bij eenzelfde volume leveren ze veel minder vermogen dan een elektromotor en ze verbruiken meer stroom. Verder: hoe hoger de gevraagde snelheid, hoe kleiner wordt de kracht die ze kunnen leveren zonder stappen te missen. Daar staat tegenover dat bij gebruik van een elektromotor een hoeksensor en aardig wat regelsoftware nodig is om die motor te sturen. Regelsoftware had ik voor mijn freesmachine al eens gemaakt maar de daarbij gebruikte hoeksensoren en microcontroller waren nogal duur. Met die hardware kan ik maar 2 motoren tegelijk regelen per microcontroller. Om meer dan 10 “cilinders” te kunnen besturen met een PC moet er dus erg op de kosten worden gelet en de PC moet eigenlijk niet belast worden met het bijhouden van de positie en snelheid van de “cilinders”. Dus: Hoeksensoren zelf maken en meten en regelen met een heel goedkope microcontroller. Tijdens mijn werk in de bedrijfsmechanisatie heb ik het gebruik van PIC microcontrollers altijd bestreden (en weten te voorkomen) maar ik ben, voor een klein systeempje als dit, bekeerd door het boek van Bert van Dam: “PIC Microcontrollers en vooral door de gebruiksklare ontwikkelomgeving die hij er bij levert. JAL 2.3 heeft ten opzichte van C natuurlijk zijn beperkingen, maar deze zijn allemaal het gevolg van de beperkte (goedkope) architectuur van kleine PICs. De makers van deze ontwikkelomgeving hebben knap werk verricht en gezorgd dat U zich geen zorgen hoeft te maken over de meeste onhebbelijkheden van PICs (of moet ik zeggen: eigenschappen die PICs goedkoop maken). Ik gebruik per motor een printje met een 18 pins PIC 16f648a en als U wilt stuur ik het schema en de software ( bijna 1000 regels source). Mail maar naar henk@henkzelf.nl. Maar voor U dit doet, lees even door want ik aarzel niet voor niets om die gegevens direct op mijn website te zetten. Voor nabouwen heeft U in ieder geval het spul van Bert van Dam nodig, of U moet een oude rot zijn met PIC en JAL.Het principe van een hoeksensor is redelijk eenvoudig en al eens in RoboBits besproken meen ik. Zie eventueel ook http://en.wikipedia.org/wiki/Rotary_encoder
Simpel samengevat: Twee lichtsluizen (A en B) zenden hun signaal naar de microcontroller. Het licht in de sluizen wordt onderbroken door een schijf met sleuven die aan de motor zit, en wel op zo’n manier dat de stand van de signalen om en om veranderen als de motor draait. Bijvoorbeeld: A naar 1, B naar 1, A naar 0, B naar 0, en dan weer A naar 1 enz. Met deze signalen kan de microcomputer de draairichting bepalen en het aantal signaalveranderingen tellen. Hij kan dus de verplaatsing van af een beginstand bijhouden en niet de absolute positie meten. Dat is echter geen bezwaar als een extra inputsignaal van de microcontroller op een bepaalde stand van de “cilinder” van stand verandert. We kunnen die positie dan als referentie gebruiken. Aangezien een PIC ook timers heeft, kunnen we de tijd meten die de motor gebruikt voor een aantal veranderingen van de signalen A en B. Hiermee kunnen we de snelheid berekenen. De PIC heeft een PWM circuit waarmee we het vermogen van de Motor kunnen regelen, en zo kan de software de “cilinder” met een gewenste snelheid naar een gewenste positie sturen. Het principe van een hoeksensor mag eenvoudig zijn, het maken niet. Er zijn er een aantal moeilijkheden te overwinnen. Je moet een schijf met sleuven hebben en de lichtsluizen moeten dan ook nog precies zo gemonteerd worden dat beide signalen even lang 1 als 0 zijn en dat het ene signaal halverwege de 1 en de 0 van het andere signaal verandert. Het eerste wordt beïnvloed door het veranderen van afstand van de lichtsluizen tot het midden van de schijf. Als de afstand tussen de sleuven en de breedte van de sleuf niet gelijk zijn, dan krijg je het nooit voor elkaar. Het tweede wordt beinvloed door het veranderen van de afstand tussen de sensoren. Deze laatste afstand is theoretisch 0.75 of 1,25 maal de ‘steek’ (afstand van het begin van de ene sleuf tot het begin van de volgende sleuf). Hierbij mag je een geheel aantal keren de ‘steek’ optellen dus 1,75 2,25 2,75 3,25 3,75 of 4,25 maal werkt ook. Het aantal sleuven in de schijf is een kwart van het aantal stappen dat je per omwenteling wilt. De omtrek van de cirkel waarop de sleuven zitten is dus de ‘steek’ afstand maal het aantal stappen. Om de schijf voor een aantal stappen klein te houden, moet ‘steek’ dus ook klein zijn. Maar de sleuf moet natuurlijk wel breed genoeg zijn om voldoende licht door te laten. Bij een sleufbreedte van 0, 8 mm is de ‘steek’ 1,6 mm en een stap 0.4 mm. De afstand tussen de lichtsluizen moet dan toch minstens +/- 0,1 mm nauwkeurig zijn. Als U nu de neiging hebt om op te houden met lezen omdat U denkt: “Dat lukt me toch niet”, dan zou ik toch maar even doorlezen. Ik beschrijf straks hoe ook U hoeksensoren kunt maken voor € 1,20 per sensor aan onderdelen, waardoor de totale kosten voor de onderdelen (excl. motor en print) uitkomt rond € 10,- .De meeste onderdelen kocht ik via www.Voti.nl. Voor een dubbele lichtsluis, IR-SENS-3, betaal je € 0.80.Twee aanzichten van motor met print.
                                                                                        FOTO 1

Voor de prototypes (zie foto 1) kocht ik daar Copal motoren met vertraging bij Voti, (MOT-11, (nu € 7.14). In latere versies ook sterkere en minder sterkere motoren die bij CONRAD waren gekocht. Na het meten van de afstand tussen de gevoelige punten van de IS-SENS-3 berekende ik de maten van een schijf met 25 sleuven en maakte die met mijn freesmachine. De schijf (los op foto 1) heeft flenzen aan elke kant van de schijf. In de ene past de as van de motor. In de andere zit M3 draad om een stuk draadeind vast te zetten. Aangezien 25 sleuven 100 stappen per omwenteling betekent, en de spoed van M3 0.5 mm is, is de verplaatsing van een moer op het draadeind, in theorie, te meten in stappen van 0,005 mm. Dit is nauwkeuriger dan alle andere (mechanische) toleranties. Dat is gewenst omdat een meetfout dan de tolerantie van het hele systeem niet sterk beïnvloed. Ik kreeg de prototypes aan de gang maar heb maar een paar seconden gedacht om daarover in RoboBits te schrijven.
De redenen daarvoor zijn:
Ik moest de IR-SENS-3 zelfs doorzagen om zo de twee lichtsluizen apart te kunnen positioneren (soldeer laten vloeien en bijbuigen). Leuke ervaring hierbij was dat je de IR-SENS-3 inderdaad kunt doorzagen en zo dus twee lichtsluizen a € 0,40 krijgt.Afgezien van deze problemen was het resultaat toch zo inspirerend dat ik tijd stak in verbeteringen. Zo heb ik de volgende oplossingen gevonden voor bovenstaande problemen :
Motoren met lichtsluizen
                                                                            FOTO 2

Over het schema en de software kan ik nog wel een paar RoboBits vol schrijven. Dat doe ik alleen bij voldoende belangstelling. Hier volsta ik met het opnoemen van de functionele eigenschappen. Alle motorcontrollers worden bestuurd via commando’s die een PC (of microcomputer) via een enkele seriële interface verstuurt. Naast 2 voedingsdraden lopen er maar 2 extra draden langs alle printjes. Voor het testen hoef je dus geen PC programma te kopen. Iedere terminal emulator is bruikbaar (Hyperterminal van Windows of ‘Mini Terminal’ die bij Bert’s boek is geleverd). Op twee uitzonderingen na, hebben de commando’s de vorm van: 1 letter voor “Wie”, 1 letter voor “Wat”, optioneel gevolgd door een getal, en een <line-feed> karakter (type met de Enter toets. Voorbeelden van enkele van de ~20 commando’s: snelheidsinstelling op 500 stappen per seconde.

 bg13000 betekent: Controller ‘b’ ga met ingestelde snelheid naar positie 13000.
 ap betekent: Controller ‘a’ rapporteer je huidige positie.
 bh betekent: Controller ‘b’ halt, dus stop ogenblikkelijk.

Op alle commando’s uit bovenstaande voorbeelden wordt ogenblikkelijk gereageerd ook tijdens het uitvoeren van een beweging. Je kunt dus doel-positie en snelheid zelfs tijdens een beweging aanpassen. Het bereik van het getal weermee je een positie opgeeft is -32768 .. +32767 (een 16 bits getal). Het ‘speelveld’ is echter niet beperkt, want je kunt het nulpunt (zelfs tijdens een beweging) corrigeren.
 De controller voor wie een commando bestemd is, bevestigt de ontvangst met het versturen van 1 letter (zijn eigen “Wie” letter, of formeler gezegd: Controller ID). Alleen als via dat commando gevraagd wordt om een antwoord, zoals bij bovenstaand voorbeeld “ap” wordt dit gevolgd door dat antwoord afgesloten met <return><line-feed>.

Uitzondering op al het bovenstaande zijn de commando’s H en M. Deze commando’s bestaan slechts uit 1 letter. Op deze commando’s wordt door alle controllers gereageerd. Commando H betekent: “Alle controllers: Halt” dus te gebruiken als noodstop. Commando M betekent: “Memoriseer (opslaan in geheugen) je huidige positie. Hierna kunnen de opgeslagen waarden bij de verschillende controllers worden opgevraagd om te vergelijken. (b.v. linker en rechter wiel, om als ze niet gelijk lopen de snelheid van een van hen aan te passen). De controllers antwoorden niet bij ontvangst van commando H of M want dan zouden ze door elkaar gaan praten.
 De nauwkeurigheid van het positioneren is +/- 1 stap.
 Het gedrag tijdens het bewegen hangt af van: Motortype, wat de motor moet bewegen, en uw eisen aan de beweging. Daarom kunt u de parameters voor positie- en de PID snelheidsregeling instellen. Net als voor het positioneren van de lichtsluizen is er software gemaakt voor het experimenteren met deze parameters.
Zoals aan het begin van dit artikel is geschreven, het is nu aan u om een mail te sturen naar henk@henkzelf.nl als u meer wilt weten of schema en software (source) wilt ontvangen.