Styrning av två motorer med servosignaler [KLART april 2004]
Detta projekt gick ut på att koppla ihop två vanliga elmotorer med en mottagare för rc-modeller. Bygget har två grundinställningar, som gör att det uppför sig på två olika sätt.
Första läget styr de två motorerna individuellt: första signalen från mottagaren styr första motorns hastighet, och andra servosignalen styr andra motorns hastighet.
När lådan jobbar i andra läget, så immiteras larvbandsstyrning: Första servosignalen bestämmer totala hastigheten frammåt, och andra servosignalen bestämmer hur stor hastighetsskillnaden skall vara mellan de två motorerna. När motorerna kör snabbt minskas inflytandet från servosignalen som styr i sidled, så att svängradien vid hög hastighet ökas. Monteras motorerna mitt emot varandra, så kan man styra sitt bygge på samma sätt som en bandvagn. Bygget kan köra och svänga nästan hur som helst.
Kontrollerdelen
Här är en miniatyr av schemat på kontrollerdelen. (En större version finns här)
Några förklaringar är på sin plats:
- +12V är den spänning som man matar både bygget och motordrivarna med.
- GND är givetvis jordningen för kretsen.
- Servo0 och Servo1 är ingångar som kopplas till
mottagarens utgångar för servon. Observera att en
annorlunda skarvsladd med honkontakter i bägge ändarna
behövs.
Observera också att alla servon inte har samma anslutningar. Vanligtvis finns det en svart sladd (som skall anslutas till GND), en röd sladd (som inte skall kopplas in över huvud taget). Ibland har den ledning som skall anslutas gul färg, men det är inte givet. //FIXME - Bygeln sätts i för att styra motorerna på samma sätt
som man styr en bandvagn (kan vända på en femkrona).
När man trycker spaken frammåt kommer modellen man
byggt att åka framåt. Trycker man styrspaken åt sidan,
så svänger man. (Blir det tvärtom är det bara att
byta plats på sladdarna servo0 och servo1.
Bygeln dras ut för att styra stegmotorerna var och en för sig, så att vardera kanalen styr enbart en motors hastighet. - /disable är en port som har inbygt pull-upp motstånd,
och när denna pinne kopplas till jord så stopas alla
motorerna. Den skulle kunna användas för att stänga av
kretsen om spänningen till motorerna är för hög.
/disable är inte 100% pålitligt, för det verkar som om
min prototyp kan få mikrokontrollerns oscillator att
stoppa om man misshandlar kretsen, och då spelar det
ingen roll vad man gör. Detta problem har dock inte
inträffat i den verkliga användningen av kretsen än...
Detta problem är också orsaken till att kretsen har en utsignal kallad "square wave". Denna signal skulle kunna kopplas till en extern watchdog-timer, om någon tycker att det är bättre.
Jag kan också påpeka att i detta schema är kondensatorerna kring kristallen på 33pF, medan de bara var på 18pF i min prototyp. Det högre värdet på 33pF ger en mer pålitlig oscillator, samtidigt som strömförbrukningen höjs (omärkbart jämfört med vad motorerna som styrs drar). - AT90S2313 är en mikrokontroller, som måste programmeras innan projektet fungerar. Hexfilen kan laddas ned här. Hela källkoden kan laddas ned här
Motordrivardelen
Här är en miniatyr av schemat på en halva av motordrivardelen. (En större version finns här)
Detta var som sagt bara ena halvan av schemat. Andra halvan ser exakt likadan ut, förutom att " /M0" i alla anslutningar bytts ut mot "/M1". Det kanske ser lite klent ut att bara ha zener-dioder för att ta upp strömpulserna som skapas när motorerna pulsbreddsmoduleras, men de MOSFET-transistorer jag använt har inbyggda avalanche-dioder som matar tillbaka de induktiva strömpulserna från motorn in i batteriet.
Den maximala spänningen till motorerna är satt till 3,6V i schemat, eftersom jag provade kretsen med en skruvdragarmotor, och såg att alla induktiva elakheter inte kom upp i nivåer som är skadliga för kretsen. Men troligen kan spänningen höjas, speciellt om du har motorer med låg induktans (fråga mig inte var gränsen går). Det viktiga är att höga sidans gatespänning på c:a 12V minus ett framspänningsfall på c:a 0,7V ska vara absolut minst 5V högre än source-spänningen på samma transistor när den leder. Hellst ska skillnaden vara större, men inte större än 12V.
Men höjs 12V-spänningen för mycket får man för höga strömar i zenerdioderna som ser till att gate-source-spänningarna inte blir för höga. Det skulle man kunna fixa genom att lägga till zenerdioder mellan kollektorn och basen på PNP-transistorerna så att spänningen begränsas redan vid ingången till push-pull förstäraren. Men man måste fortfarande ha kvar zenerdioderna mellan source och gate. Hur som helst kanske detta kommer med i en senare version om man vill höja matningen från 12V till t.ex 30V, så att man kan driva motorer som vill ha 20V...
Du ansvarar själv för risken att skada dig själv/andra/saker/datorer/eller annat!