Område 5 · lektion 26
Motordrivare och PWM
Med en transistor kan motorn gå eller stå still, åt ett
håll. Den här guiden lägger till de två saker som gör den användbar:
riktning, genom fyra transistorer kopplade som en
H-brygga, och hastighet, genom att slå på och av
matningen hundratals gånger i sekunden. Det andra är det som förvirrar
mest, för analogWrite() heter fel: den lämnar ingen analog
spänning.
Mål
- Du kan förklara vilka fyra lägen en H-brygga ger och vilken insignalskombination som ger vilket, för just den drivkrets du har.
- Du kan räkna ut hur mycket spänning din drivkrets tar av motorn, och välja matningsspänning med det fallet inräknat.
- Du kan räkna om ett
analogWrite-värde till pulsförhållande och medelspänning, och säga varför motorn ändå ser fulla pulser. - Du kan känna igen brownout i ett motorbygge och veta vad matningen och den gemensamma nollan har med saken att göra.
Genomgång
H-bryggan: fyra brytare kring en motor
En likströmsmotor byter riktning när du byter polaritet på den. Det går att göra med händerna genom att kasta om två sladdar, men det ska koden kunna göra. Kopplingen som löser det heter H-brygga, efter hur den ser ut på ett schema: fyra brytare kring motorn, som bildar bokstaven H.
- S1 och S2 sitter mot plus, S3 och S4 mot jord. Varje brytare är i verkligheten en transistor, inte en mekanisk kontakt.
- Motorn hänger mellan de två grenarnas mittpunkter. Det är därför den kan få spänning åt båda hållen utan att någon sladd flyttas.
- Sluter du S1 och S4 går strömmen från plus, genom motorn från vänster till höger, ned till jord. Motorn går åt ett håll.
- Sluter du S2 och S3 går strömmen tvärtom genom motorn. Motorn går åt andra hållet.
- Sluter du S3 och S4 samtidigt är motorns båda anslutningar kopplade till jord. Ingen ström kommer utifrån, men motorns egen rörelse alstrar en spänning som nu har en sluten krets att driva ström i — och den strömmen bromsar. Det är elektrisk broms.
- Öppnar du alla fyra är motorn kopplad till ingenting och rullar vidare av sin egen rörelse. Det kallas frihjul.
S1 och S3 får aldrig slutas samtidigt Då går det en rak väg från plus till jord, förbi motorn. Kortslutningen förstör bryggan på bråkdelen av en sekund. Det är skälet till att en färdig drivkrets inte har fyra separata insignaler utan två per motor: elektroniken inuti chippet gör den kombinationen omöjlig åt dig. Bygger du en H-brygga av lösa transistorer är det däremot ditt ansvar, och det är ett av flera skäl att inte göra det i den här kursen.
Broms eller frihjul — två olika sätt att stanna
Det här är en skillnad som syns direkt i ett bygge och som förvånar första gången. Ett tåg som ska stanna på ett streck och en kran som ska släppa ned en last mjukt vill ha olika saker.
| Läge | Vad som händer | Passar när |
|---|---|---|
| Broms | Lindningen kortsluts, rörelsen bromsar sig själv. Motorn står nästan direkt | Mekanismen ska stanna där den är, eller inte glida tillbaka |
| Frihjul | Lindningen kopplas bort. Motorn rullar ut på sin egen rörelseenergi | Stoppet ska bli mjukt, eller mekanismen ska gå att vrida för hand |
Två drivkretsar, och vad de kostar i spänning
De två moduler du med störst sannolikhet möter är L298N och TB6612FNG. De gör samma sak och kopplas nästan likadant, men de är byggda med olika sorters transistorer, och det syns i ett enda tal: spänningsfallet över utgångssteget.
| L298N | TB6612FNG | |
|---|---|---|
| Utgångssteg | Bipolära darlingtontransistorer | MOSFET |
| Spänningsfall över bryggan | Typiskt 2–3 V vid 1 A, mer vid högre ström, och upp mot 5 V på ett dåligt exemplar | Omkring 0,5 Ω totalt, alltså 0,5 V vid 1 A |
| Ström per motor | Upp till 2 A | 1,2 A kontinuerligt, 3,2 A kortvarigt |
| Matningsspänning till motorn | Upp till 46 V | 2,5 till 13,5 V |
| Frihjulsdioder | Krävs externt. Modulkortet har dem monterade | Inbyggda i chippet |
| Kylning | Kylfläns behövs. Chippet blir varmt | Behövs normalt inte i vår storleksordning |
Talen ovan är hämtade ur databladen och ska kontrolleras mot ditt eget. Modulerna säljs i många varianter, och särskilt L298N-kortens spänningsfall varierar med ström och temperatur.
Räknat exempel: vad motorn faktiskt får. Matning 6,0 V, motorn drar 1 A. Med en L298N:
Umotor = 6,0 − 2,5 = 3,5 V
2,5 / 6,0 = 0,42 = 42 % av matningen försvinner i drivkretsen
Effekten som blir värme i chippet:
P = U · I = 2,5 V · 1 A = 2,5 W
Motorn får
P = 3,5 V · 1 A = 3,5 W
så drivsteget har verkningsgraden
3,5 / 6,0 = 0,58 = 58 %
Fyra tiondelar av batteriet går alltså åt att värma en kylfläns. Med en TB6612FNG, där fallet är resistivt:
U = R · I = 0,5 Ω · 1 A = 0,5 V
Umotor = 6,0 − 0,5 = 5,5 V
P = I² · R = 1² · 0,5 = 0,5 W i chippet
Motorn får då
5,5 / 3,5 = 1,57, alltså över 50 % mer spänning
av exakt samma batteri, och drivkretsen värms med en femtedel så mycket. Det är hela skälet till att den äldre L298N håller på att försvinna ur nya konstruktioner.
Räkna in fallet när du väljer batteri
En motor märkt 6 V bakom en L298N behöver en matning på ungefär
6 + 2,5 = 8,5 V för att få sina sex volt — och marginal
uppåt, eftersom fallet varierar mellan exemplar. Sex alkaliska AA-celler i
serie ger 6 · 1,5 = 9,0 V, alltså
9,0 − 2,5 = 6,5 V till motorn med ett typiskt fall men bara
9,0 − 5,0 = 4,0 V med ett dåligt. Bakom en TB6612 räcker
fyra celler: 4 · 1,5 = 6,0 V och
6,0 − 0,5 = 5,5 V till motorn, och spridningen mellan
exemplar är dessutom mycket mindre. Två batterier mindre att bära,
och ett tal du kan lita på. Laddningsbara NiMH-celler
ger 1,2 V styck, alltså 4 · 1,2 = 4,8 V, och då märks fallet
ännu mer.
Sanningstabellen — läs din egen
Båda kretsarna styrs med två riktningssignaler och en hastighetssignal per motor. Namnen skiljer sig, och det gör beteendet också i ett av lägena. Här är TB6612FNG, med STBY hög:
| AIN1 | AIN2 | PWMA | Motorn |
|---|---|---|---|
| HIGH | LOW | puls | Går åt ena hållet, med farten som pulsen ger |
| LOW | HIGH | puls | Går åt andra hållet |
| HIGH | HIGH | vad som helst | Broms |
| HIGH eller LOW | tvärtom | LOW | Broms |
| LOW | LOW | HIGH | Frihjul |
Och här är en L298N-modul, där hastighetssignalen heter ENA:
| IN1 | IN2 | ENA | Motorn |
|---|---|---|---|
| HIGH | LOW | puls | Går åt ena hållet |
| LOW | HIGH | puls | Går åt andra hållet |
| lika | lika | HIGH | Broms |
| vad som helst | vad som helst | LOW | Frihjul |
Jämför de två sista raderna i tabellerna. Kombinationen "båda riktningssignalerna låga" ger frihjul på en TB6612 — så länge PWM-signalen är hög, annars bromsar den — och broms på en L298N. Samma kod, två chip, två olika beteenden — och skillnaden syns bara när mekanismen ska stanna. Det är precis den sortens detalj som står i databladet och ingen annanstans, och att hitta den där är ett belägg för F2. Skriv in din egen tabell i dokumentationen, med chipets beteckning ovanför.
PWM: analogWrite lämnar ingen analog spänning
Funktionen ser ut som motsatsen till analogRead, och det är
den inte. analogRead mäter en verklig spänning.
analogWrite slår i stället pinnen på och av mycket snabbt, och
det du styr är hur stor andel av tiden den är på. Andelen
heter pulsförhållande eller pulskvot.
analogWrite(pin, varde) där varde går från 0 till
255. Värdet 0 betyder alltid av, 255 alltid på, och däremellan är
pulsförhållande ≈ varde / 255
Medelspänningen över motorn blir pulsförhållandet gånger den spänning som faktiskt ligger på — alltså matningen minus drivkretsens fall.
Räknat exempel. En TB6612 på 6,0 V matning ger 5,5 V ut
när den är på. Med analogWrite(PWM_PIN, 128):
128 / 255 = 0,502 = 50,2 %
Umedel = 0,502 · 5,5 V = 2,76 V
Med värdet 200:
200 / 255 = 0,784 = 78,4 %
Umedel = 0,784 · 5,5 V = 4,31 V
Och med värdet 64:
64 / 255 = 0,251 = 25,1 %
Umedel = 0,251 · 5,5 V = 1,38 V
Men motorn ser aldrig 2,76 V. Den ser 5,5 V i lite drygt halva tiden och 0 V i resten. Att medelvärdet blir 2,76 V är en räkning, och den stämmer med vad en multimeter i likspänningsläge visar — instrumentet medelvärdesbildar nämligen också. Det är två olika påståenden, och skillnaden mellan dem är hela poängen med PWM: en transistor som är antingen helt på eller helt av blir aldrig varm, medan ett motstånd som sänker spänningen till hälften gör sig av med lika mycket effekt som motorn får.
Var 490 och 980 hertz kommer ifrån
Talen ser godtyckliga ut men går att räkna fram, och räkningen är värd att göra en gång. Uno-kortets klocka går på 16 MHz, alltså 16 000 000 gånger i sekunden. Kortets timrar delar ned den med 64 innan de räknar:
16 000 000 / 64 = 250 000 räknesteg i sekunden
Pinne 5 och 6 räknar 0 till 255 och börjar om, alltså 256 steg per period:
250 000 / 256 = 976,6 Hz ≈ 980 Hz
De övriga PWM-pinnarna räknar upp och ned igen, alltså 510 steg per period:
250 000 / 510 = 490,2 Hz ≈ 490 Hz
| Pinnar med PWM på Uno | Frekvens | Periodtid |
|---|---|---|
| 5 och 6 | omkring 980 Hz | 1 / 980 = 0,00102 s = 1,02 ms |
| 3, 9, 10 och 11 | omkring 490 Hz | 1 / 490 = 0,00204 s = 2,04 ms |
Andra pinnar än de sex har ingen PWM alls. analogWrite på en
av dem ger bara HIGH över 127 och LOW under, och
det är ett tyst fel som ser ut som en trasig motor.
Servo och PWM slåss om pinne 9 och 10
Det här stod redan i
servoguiden
och blir konkret först nu. Servo-biblioteket tar kortets Timer1
i anspråk, och det är samma timer som ger PWM på pinne 9 och 10. Så länge
ett servo är anslutet — även om det sitter på en helt annan pinne —
fungerar inte analogWrite() på D9 och D10. Bygge 4 kan mycket
väl innehålla både ett servo och en motor. Lägg då motorns
PWM-signal på 3, 5, 6 eller 11. Symtomet annars är en motor som
bara går för fullt eller inte alls, med kod som ser helt riktig ut.
En sak till om pinne 5 och 6: de sköts av samma timer som
millis(). Att använda analogWrite på dem stör
inte tidmätningen — timern räknar vidare precis som förut, och det
är bara jämförelsevärdet som ändras. Påståendet att man inte får blanda dem
dyker upp ibland och stämmer inte.
Varför motorn inte hackar, och varför den inte startar på låg puls
Vid 490 Hz slås matningen av och på 490 gånger i sekunden. Att motorn ändå går jämnt beror på två sorters tröghet.
- Den elektriska trögheten ligger i lindningens
induktans, samma induktans som gav spänningsspiken i förra guiden. Med
L = 2 mHochR = 5 Ωhinner strömmen ändra sig på en tid av storleksordningenL / R = 0,002 / 5 = 0,0004 s = 0,4 ms, alltså en femtedel av en 490-hertzperiod på 2,04 ms. Strömmen hinner därför krusa sig en del inom varje period — den blir inte helt jämn, men den går heller aldrig ned till noll. - Den mekaniska trögheten ligger i rotorns massa och är mycket större, storleksordningen tiotals millisekunder. Axeln hinner alltså inte reagera på enskilda pulser alls. Det är den som gör rörelsen jämn.
- Strömmen måste ha någonstans att ta vägen under pausen. När transistorn stänger fortsätter lindningen driva ström, precis som i förra guiden — men nu händer det 490 gånger i sekunden. Frihjulsdioderna i bryggan är alltså inte bara ett skydd vid avstängning: de är strömmens väg i varje paus. Det är därför en drivkrets alltid har dem inbyggda, och varför den snabba Schottkydioden är rätt val i ett eget bygge.
Det finns ett lägsta pulsförhållande som gör något alls. Under det står motorn still och surrar, eftersom medelmomentet inte räcker för att bryta vilofriktionen i lager och växlar. Var gränsen ligger beror på din motor och din mekanik — storleksordningen är 25 till 40 procent på en liten växelmotor, och du ska mäta din egen. Är gränsen 90 av 255 är
90 / 255 = 0,353 = 35,3 %
ditt lägsta användbara värde, och allt under det är slöseri med rader i koden. Ett vanligt knep är att låta koden hoppa direkt från 0 till det värdet i stället för att kliva sig upp genom ett område där ingenting händer.
Strömförsörjning och brownout
Brownout förklarades i servoguiden, och den förklaringen gäller ordagrant här. Symtomen är desamma: seriemonitorn tappar förbindelsen och börjar om, lysdioder blinkar till i takt med rörelsen, programmet ser ut att starta om. Det gör det också — men inte för att koden är fel, utan för att matningen dyker. Testet är detsamma: ta bort lasten. Försvinner felet var det aldrig i koden.
Tre saker är nya när det är en motor och inte ett servo.
- Startrycket är lika stort som stoppströmmen. Motorn står
ju stilla i det ögonblick du slår på. Med de tal du räknade i förra
guiden — lindningen 5 Ω, matningen 6 V — blir det
6 / 5 = 1,2 Ai den första tiondelen av en sekund, mot USB:s hela budget på 500 mA. Kortet klarar det inte, och det gäller även om motorn sedan bara drar 0,3 A. - Motorn ska ha en egen matning. Batteriets plus till drivkretsens motorspänning, aldrig till kortets 5 V. Kortet får sin ström från USB eller från sitt eget uttag. De två matningarna hålls isär överallt utom i en enda punkt.
- Den punkten är GND, och den är obligatorisk. Batteriets minuspol, drivkretsens GND och kortets GND ska sitta ihop.
Gemensam nolla är det vanligaste felet i hela området Utan en gemensam GND har drivkretsens insignaler ingenting att mäta sina 5 V mot. Symtomet är ingenting alls, eller något som fungerar ryckigt och slumpmässigt och blir bättre när du råkar hålla i sladden. Det ser ut som ett glapp eller ett kodfel och är ingetdera. En sladd mellan batteriets minuspol och kortets GND löser det, och den ska ritas ut i schemat — annars finns den inte när någon annan bygger efter din ritning.
Ett bra sätt att mäta problemet i stället för att gissa: sätt multimetern över batteriet medan motorn startar. Sjunker spänningen från 6,0 V till under 4,5 V i startögonblicket är batteriet, och inte koden, det du ska arbeta med. Alkaliska AA-celler har relativt hög inre resistans; laddningsbara NiMH-celler och ett litet blybatteri klarar strömryck betydligt bättre.
Koden, i sin minsta form
Tre pinnar per motor: två riktningar och en fart. Här på en TB6612, med STBY på en fjärde pinne.
const int IN1_PIN = 7; // riktning A
const int IN2_PIN = 8; // riktning B
const int PWM_PIN = 5; // fart. Pinne 5: 980 Hz, och inte upptagen av Servo
const int STBY_PIN = 4; // hog = drivkretsen vaken
void setup() {
pinMode(IN1_PIN, OUTPUT);
pinMode(IN2_PIN, OUTPUT);
pinMode(PWM_PIN, OUTPUT);
pinMode(STBY_PIN, OUTPUT);
digitalWrite(STBY_PIN, HIGH);
analogWrite(PWM_PIN, 0); // sakert utgangslage: motorn star still
}
void loop() {
digitalWrite(IN1_PIN, HIGH); // framat
digitalWrite(IN2_PIN, LOW);
analogWrite(PWM_PIN, 180); // 180 / 255 = 70,6 procent
}
Två saker i den koden är viktigare än de ser ut. Den första är att
setup() sätter farten till 0 innan någonting annat
händer — ett bygge som rusar i väg i det ögonblick du sätter i strömmen är
farligt och svårt att felsöka. Den andra är att riktningen sätts med
digitalWrite och farten med analogWrite: det är två
skilda beslut, och de ska stå på skilda rader.
Byt riktning gör du genom att kasta om de två raderna. Men gör det aldrig
medan motorn snurrar för fullt — det är ungefär som att lägga i backen i
full fart. Stanna först, vänta en kort stund, och starta åt andra hållet.
Väntetiden ska mätas med millis() och en tidsstämpel, som i
område 3,
inte med delay().
I industrin och i vardagen
I industrin: en eldriven lagertruck har körmotorer på 24 V som kan dra 100 A när den drar i väg med last. Bryggan som styr dem är byggd av MOSFET:ar med en kanalresistans på storleksordningen 2 mΩ, alltså 0,002 Ω. Strömmen går genom två transistorer på vägen, så fallet över hela bryggan blir
2 · 0,002 Ω · 100 A = 0,4 V
P = 0,4 V · 100 A = 40 W
Fyrtio watt värme, vilket redan kräver en rejäl kylplåt. Hade samma brygga varit byggd med darlingtontransistorer och deras fasta fall på ungefär 2 V hade det blivit
P = 2,0 V · 100 A = 200 W
alltså 160 W mer, som måste tas ur samma batteri:
160 W / 24 V = 6,7 A extra ur batteriet, hela tiden
Det är därför truckens drivsteg är byggt precis som din TB6612, fast större — samma resonemang, tusen gånger strömmen. Switchfrekvensen väljs dessutom medvetet till 16–20 kHz, i eller strax ovanför övre kanten av vad ett ungt öra hör: en truck som visslar hela arbetsdagen är en arbetsmiljöfråga, och högre frekvens än så kostar mer i switchförluster utan att ge något.
I vardagen: fläkten över processorn i en dator har fyra sladdar, och den fjärde är en PWM-signal. Standarden ligger på omkring 25 kHz, alltså en periodtid på
1 / 25 000 = 0,00004 s = 40 µs
Frekvensen är vald av exakt samma skäl som truckens: under ungefär 20 kHz hörs pulsandet som ett tjut, och en dator på ett skrivbord får inte tjuta. Två saker till är värda att notera. PWM-signalen går inte ut i motorns lindning utan in i fläktens egen lilla styrelektronik, som läser den som ett önskemål om varvtal — precis som servots pulser i område 2 är ett önskemål om vinkel, inte en matning. Och den tredje sladden går åt andra hållet: den lämnar två pulser per varv tillbaka till datorn. En fläkt som går 1 200 varv per minut ger alltså
1 200 / 60 · 2 = 20 · 2 = 40 pulser i sekunden
vilket datorn räknar och jämför med vad den bad om. Där sitter hela kedjan sensor → styrenhet → aktuator i en pryl för hundra kronor, och den kan dessutom larma när fläkten kärvar — eftersom varvtalet då sjunker medan begäran är oförändrad.
Prova själv
- Koppla in drivkretsen utan mekanik. Motorn fri i luften, egen matning till motorn, gemensam GND. Kör exempelkoden ovan och kontrollera att motorn går åt det håll du väntade dig. Gör den inte det byter du de två riktningsraderna — det är rätt sätt, inte att vända sladdarna.
- Gå igenom alla fyra lägen. Framåt, bakåt, broms, frihjul. Snurra axeln med fingrarna i bromsläget och i frihjulsläget och känn skillnaden. Skriv ned vilken kombination som gav vad — det är din egen sanningstabell, och den ska in i dokumentationen.
- Mät medelspänningen. Multimetern i likspänningsläge
rakt över motorn. Skriv ut ett värde i taget: 64, 128, 192, 255. Jämför
med
varde / 255gånger den spänning du mätte vid 255. Gör en tabell med fyra rader — beräknat mot uppmätt, precis som i bygge 0. - Hitta ditt lägsta pulsförhållande. Kör från 0 uppåt i steg om 10 tills axeln börjar röra sig, med den mekanik du tänker använda. Anteckna värdet och räkna om det till procent. Gör om samma sak efter att du monterat lasten — talet blir högre, och det är en av de mätningar som gör dokumentationen bra.
- Lyssna på frekvensen. Kör motorn på ungefär halv fart med PWM på pinne 9 och sedan på pinne 5. Hör du skillnad mellan 490 och 980 Hz? Tonen kommer från lindningen som rör sig i takt med pulserna.
- Mät matningen under start. Multimetern över batteriet, motorn med last. Läs av precis när den drar i väg. Hur mycket sjunker spänningen? Om kortet startar om har du nu ett mätvärde i stället för en gissning.
- Prova felet med flit. Slå först av motorns matning, lyft bort GND-sladden mellan batteriets minuspol och kortet, och slå på igen. Se vad som händer, och sätt tillbaka sladden inom någon sekund. Ordningen spelar roll: lyfter du nollan medan motormatningen är på får styrsignalerna sin återväg genom drivkretsens ingångsskydd, och det är inte den vägen de är byggda för. Nu känner du igen symtomet nästa gång det uppstår av misstag klockan nio på kvällen.
Kontrollfrågor
Din matning är 7,2 V och drivkretsen är en L298N. Vad får motorn, och hur mycket effekt blir värme i chippet vid 0,8 A?
Umotor = 7,2 − 2,5 = 4,7 V. Värmen i chippet blir
P = 2,5 V · 0,8 A = 2,0 W, och motorn får
4,7 · 0,8 = 3,76 W. Drivsteget har alltså verkningsgraden
4,7 / 7,2 = 0,65 = 65 %. En kylfläns behövs.
Vad blir medelspänningen över motorn vid
analogWrite(PWM_PIN, 100) om det ligger 5,5 V på när pulsen
är hög?
100 / 255 = 0,392 = 39,2 % och
0,392 · 5,5 = 2,16 V. Men motorn ser inte 2,16 V — den ser
5,5 V i knappt fyra tiondelar av tiden och 0 V i resten. 2,16 V är
medelvärdet, och det är också vad en multimeter i likspänningsläge
visar.
Varför blir en transistor som pulsar mycket kallare än ett motstånd som sänker spänningen lika mycket?
Effekt är spänning gånger ström. En transistor som är helt på har nästan ingen spänning över sig, och en som är helt av har ingen ström genom sig — i båda lägena blir produkten nästan noll. Ett motstånd som halverar spänningen har däremot halva spänningen över sig och hela strömmen genom sig hela tiden, och gör sig alltså av med lika mycket effekt som motorn får.
Motorn på pinne 9 går bara för fullt eller inte alls, fast koden skriver 120. Vad är fel?
Ett servo är anslutet någonstans i bygget.
Servo-biblioteket tar Timer1, som är samma timer som ger PWM
på pinne 9 och 10, och då blir analogWrite där bara
HIGH eller LOW. Flytta motorns PWM till 3, 5, 6
eller 11.
Varför skiljer sig frekvensen mellan pinne 5 och pinne 9?
De sköts av olika timrar som räknar på olika sätt. Båda får 250 000
räknesteg i sekunden ur klockan, men pinne 5 räknar 256 steg per period
och ger 250 000 / 256 = 977 Hz, medan pinne 9 räknar upp och
ned igen, alltså 510 steg, och ger
250 000 / 510 = 490 Hz.
Bygget fungerar när kortet sitter i datorn men inte när det körs på batteri, och tvärtom fungerar motorn ibland utan att koden ändrats. Vad letar du efter först?
Den gemensamma nollan. Så länge datorn är inkopplad kan det finnas en oavsiktlig jordförbindelse via USB-kabeln som döljer att din egen GND-sladd saknas. Dra en riktig sladd mellan batteriets minuspol, drivkretsens GND och kortets GND, och rita in den i schemat.
Vad är skillnaden på broms och frihjul, och när vill du ha vilket?
Broms kortsluter lindningen, så att motorns egen rörelse driver en ström som motverkar rörelsen. Mekanismen stannar nästan direkt och står emot att vridas. Frihjul kopplar bort lindningen, och mekanismen rullar ut. Broms vill du ha när något ska stanna på ett bestämt ställe eller inte glida tillbaka; frihjul när stoppet ska bli mjukt eller mekanismen ska gå att flytta för hand.
Vanliga fel
- GND är inte gemensam. Ingenting, eller något slumpmässigt som blir bättre när du håller i sladden. Det här är områdets vanligaste fel och det första du ska utesluta.
- Motorns matning kopplad till kortets 5 V. Kortet startar om vid varje start, eller kortets spänningsregulator blir brännhet. Motorn ska ha en egen källa.
- PWM-signalen sitter på pinne 9 eller 10 med ett servo inkopplat. Motorn går bara för fullt eller inte alls. Flytta till 3, 5, 6 eller 11.
- PWM-signalen sitter på en pinne som inte har PWM. Samma symtom som ovan, av en annan orsak. Bara 3, 5, 6, 9, 10 och 11 kan pulsa.
- ENA- eller ENB-byglingen sitter kvar på L298N-modulen.
Bygeln håller ingången fast hög, så motorn går alltid för fullt oavsett
vad
analogWritesäger. Dra av bygeln och koppla en sladd dit. - Matningen är för låg för att drivkretsens fall ska rymmas. Motorn går, men trögt, och du letar efter felet i koden. Mät spänningen rakt över motorn medan den går och jämför med batteriet.
- Riktningen byts medan motorn går för fullt. Ett
strömryck som är värre än start, och som ofta fäller matningen. Stanna,
vänta, starta åt andra hållet — med en tidsstämpel, inte med
delay(). - Pulsförhållandet ligger under motorns tröskel. Motorn står still och surrar, och det låter som att den är trasig. Mät ditt lägsta värde och låt koden aldrig lämna något däremellan.
- Kylflänsen på L298N saknas. Chippet blir brännhet och stänger av sig själv efter en stund. Symtomet är ett bygge som fungerar i två minuter och sedan slutar.
Vidare
analogWrite() är ett funktionsanrop, inte en ny
språkkonstruktion, så inget nytt kapitel i språkreferensen öppnar här. De
två som blir aktuella igen är
Tid — för väntan mellan
riktningsbyten och för mjukstart utan delay() — och
Villkor, för de beslut som
avgör riktning och fart.
Nästa guide är Utväxling och kraft. Där lämnar vi elektroniken och tar tillbaka mekaniken från din tidigare kurs: kugghjul, moment och varvtal, och hur du väljer en utväxling så att motorn orkar det du tänkt. Där kravställs också bygge 4.
Två veckor till nästa pass Mellan den här lektionen och nästa ligger påsklovet, alltså två veckor. Det är gott om tid att koppla drivkretsen, mäta ditt lägsta pulsförhållande och leta fram kugghjul eller remskivor — och kort om tid om du börjar veckan innan bygget. Kravlistan för bygge 4 kommer först nästa pass, men de tre mätningarna i Prova själv kan du göra nu.