Motor draadjes
In de tutorial om een licht-etende robot te bouwen wordt er gewerkt met een paar lege motortjes.
Nu wil ik echter doodgewone motortjes aansturen uit een oude rc auto.
Helaas hebben deze maar 2 draadjes.
Hoe moet ik deze nu aansluiten om deze toch te kunnen gebruiken zo als in die tutorial uitgelegd?
De motors van de power functions serie van lego hebben 4 draden, maar er zijn er in feite maar 2 aangesloten intern in de motor. De overige 2 kabels zijn er enkel om compatibel te zijn met andere lego power functions modules, zoals sensors. Het is dus normaal dat je motor uit je rc auto 2 aansluitingen heeft. De motordriver op het dwengobordje kan 2 dergelijke motoren onafhankelijk aansturen. Als je naar de motor-connector kijkt, zal je zien dat hier M1 en M2 te vinden is bij 2 paar aansluitingen. Op beide paar pinnen kun je je motor aansluiten.
Ik weet niet over welk kaliber race auto je spreekt, maar zorg er wel voor dat je de motordrivers niet te zwaar belast. Ze kunnen een piekstroom van 2A leveren. Voor zwaardere motoren zul je een externe motordriver moeten voorzien.
Op deze pinnen bevinden zich eenvoudigweg de massa en de voedingsspanning van het bordje. Deze kunnen enerzijds gebruikt worden om gemakkelijk externe clamping diodes toe te voegen om beter met inductieve lasten overweg te kunnen. Anderzijds laten deze toe om 4 onafhankelijke uitgangen aan te sturen ten opzichte van + of -, bijvoorbeeld 4 powerleds, waarvan je 1 kant gemeenschappelijk met + of - verbindt, of 1 unipolaire stappenmotor, of 4 motoren die enkel in 1 richting moeten kunnen draaien, enz...
Om twee (niet te zware) motoren in beide richtingen te laten ronddraaien, zul je die + en - pinnen dus niet gebruiken. Maar het bordje is flexibel opgezet en voorziet dus ook in andere toepassingen voor de drivertrap, waarbij deze pinnen handig kunnen zijn.
Nee, de maximale waarde die je doorgeeft aan de PWM-module is 1023 (en de minimale waarde is 0). De PWM-module is immers slechts 10-bit. Als je de motoren niet aansluit en de 2 PWM-modules instelt op 1023 terwijl je de pinnen RA4 en RB3 op 0 zet. Wat is de spanning dan die je meet over de twee pinnen van M1 en over de twee pinnen van M2?
En zet eens een while(TRUE); na lijn 44. Want nu stopt de uC met werken na lijn 44 omdat je geen oneindige lus hebt. Hierdoor wordt de main opnieuw opgeroepen. En zo de hele tijd door waardoor je de PWM-modules geen kans geeft om een PWM-signaal te genereren.
Daarnaast moet je de spanning meten over de twee pinnen aangeduid met M1. Vervolgens meet je de spanning over de twee pinnen aangeduid met M2. Tenslotte is het ook eens interessant de spanning te meten over de + en de - maar die is 3,77 V zeg je wat bijzonder laag is (staan alle jumpers goed?). Wat voor spanningsbron heb je aangesloten op het bord? Je moet een spanningsbron van meer dan 7 V gebruiken (anders zal de microcontroller niet werken), bvb een 9 V battery-pack van lego ofzo. Voed het bord ook nooit met meer dan 20V!
Ohja, en als je RC-motor al werkt op 1,5 V kan het zijn dat de spanning van 9 V te hoog is voor je motor. Je moet eens kijken wat die maximaal aankan. Indien hij maar maximaal 5V aankan dan kan je best Jumper 2 uit het bord halen (zie http://www.dwengo.org/nl/board/jumpers) dan werken de motoren op 5V ipv de batterij-spanning.
Dat klopt, als je geen externe voedingsbron "Vin" aanlegt en jumper 2 staat in de stand "Vin", dan wordt de motordriver gevoed rechtstreeks uit de externe bron, en krijgt dus geen spanning. De USB-voedingsspanning is ook niet geschikt voor het leveren van de benodigde stroom om zware lasten zoals motors aan te drijven. Dus steeds een externe voedingsbron aanleggen als je met de motordriver werkt.
Om de motor in de andere richting te laten draaien moet je eenvoudigweg RA4 en RB3 hoog zetten. De PWM die je nu aanlegt, moet complementair zijn aan de PWM die je in de ene richting aanlegde om dezelfde snelheid te krijgen. Als je dus bv. snelheid 700 aanlegde in de ene richting, moet je nu (1023-700) = 323 instellen.
BInnenkort komen op de site een aantal bibliotheken beschikbaar, die o.a. het aansturen van de motor nog eenvoudiger maken. Dus zeker de site in de gaten houden.
Tof dat het probleem is opgelost. Ter aanvulling van Michiel hier een stukje code waar je je kan op baseren:
void instellenSnelheidMotor1(short snelheid, short richting) { if (richting == 1) { SetDCPWM1(snelheid); // instellen PWM duty cycle, snelheid <1024 en > 0 PORTAbits.RA4 = 0; // of RB3 (kijk naar schema voor exacte pin) } else { SetDCPWM1(1023-speed); PORTAbits.RA4 = 1; } }
Succes met je robot!
PS: laat hem ook eens zien als hij af is, ben wel benieuwd!
Dag Stienoo
Wat is juist de bedoeling van het stukje code? Volgens mij wil je dat als je op het S knopje drukt dat de motor even in de ene richting draait en als je op het N knopje drukt even in de andere richting.
Hiervoor vertrek je het best van de broncode van de licht-etende robot. Je verwijder daaruit al de code binnnen de while(TRUE) lus, maar laar de lus zelf staan. Binnen die lus plaats je jouw eigen code. Ik heb ze een beetje aangepast.
while(TRUE) { if(S_S == 0){ SetDCPWM2(600); PORTAbits.RA3 = 0; } if(S_N == 0){ SetDCPWM2(1023-600); PORTAbits.RA3 = 1; } Delay10KTCYx(240); SetDCPWM2(0); PORTAbits.RA3 = 0; }
De while(TRUE)-lus zorgt ervoor dat je programma telkens opnieuw controleert of een van de knopjes ingedrukt is. Zonder die lus gebeurt dat maar 1 maal en moet je heel veel geluk hebben als je op dat moment het knopje aan het indrukken bent.
Ik kan de code op dit moment niet controleren dus er zou nog een foutje in kunnen zitten.
Groeten
Karel
Dag Stienoo
Vervang eens overal RA3 door RB3?
Karel
Dag Stienoo
Je hebt waarschijnlijk PORTAbits.RB3 gebruikt. Het moet PORTBbits.RB3 zijn. Subtiel verschil, maar wel belangrijk.
Groeten
Karel
Hallo
Ik denk toch dat je een foutje getypt hebt. Ik heb de code gecompileerd en bij mij werkt het. Als ik daarentegen een fout schrijf in PORTBbits dan krijg ik dezelfde error als jij. Let ook op de hoofdletters C-code is hoofdletter-gevoelig.
Als dit niet lukt stuur dan je code eens naar
info@dwengo.org .
Karel
Dag Stienoo
Ik heb jouw code eens getest en die doet wat ze hoort te doen.
Ik vrees dus dat je de motordriver stuk gemaakt hebt, door hem te overbelasten. Dat is geen groot probleem, want je kan hem eenvoudig verwisselen. Hij zit onder het display. Haal hem eruit en ga ermee naar de dichtstbijzijnde elektronica winkel. Normaal kost hij een 3-tal euro, denk ik. Als ze die specifieke chip niet hebben kan je ook een L293D kopen, die is pin-compatibel.
Om in de toekomst te vermijden dat je nieuwe driver stuk gaat, zal je best andere motoren gaan gebruiken. De motoren die je nu gebruikt vragen waarschijnlijk teveel stroom. Die stroom moet door de motordriver. Hij kan maximaal 1.2A voeren.
Groeten
Karel
Hallo
Je moet naar een SN754410NE vragen. Zeg erbij dat het een motordriver is.
Een voorschakelweerstand zal de stroom beperken, maar ook het vermogen van de motor. Dat laatste wil je misschien niet.
Het kan ook zijn dat de motor die je gebruikt voor een lagere spanning ontworpen is. Bij een te hoge spanning zal zon'n motor veel stoom vragen.
Heb je de specificaties van die motor? Typenummer?
Groeten
Karel
Weet je nog de batterij-indeling van deze RC-auto? Bijvoorbeeld 4 AA-batterijen geeft 6V.
Let er ook op dat wanneer je de motor van volle snelheid vooruit onmiddellijk naar volle snelheid achteruit schakelt, er een grote stroompiek optreedt, omdat de motor even blijft verder werken als generator in de voorwaartse richting. Vermijd dergelijke situaties dus.
Inderdaad, dan heb je motors voor maximum 6V. Bij gebruik van oplaadbare batterijen is dit zelfs slechts 4.8V. Je zal dus ofwel andere motors moeten gebruiken, ofwel de stroom door je motors beperken, bv. met een serieweerstand van enkele ohms. Deze laatste oplossing is niet bijster efficient, maar wel eenvoudig.
Dag Stienoo
5 ohm gaat te veel zijn omdat er ook spanning over de motor zal staan, maar je kan daar mee beginnen. Let wel op dat de stroom die door de motor gaat ook door de weerstand gaat en dat deze daar moet op voorzien zijn. Als 1A door een weerstand van 5ohm loopt dan moet die 5 Watt dissiperen, wat veel te veel is voor een standaard elektronica weerstandje.
Groeten
Karel
Elke driveruitgang kan 1.2A leveren. Dit staat ook beschreven bij de sectie over de functionaliteit van het bord. Dus dat is 1.2A per motor.

Your shopping cart
En waar dienen die + en die - dan voor naast M1 en M2?