Innehållsförteckning:

Använd Arduino för att visa motorvarvtal: 10 steg (med bilder)
Använd Arduino för att visa motorvarvtal: 10 steg (med bilder)

Video: Använd Arduino för att visa motorvarvtal: 10 steg (med bilder)

Video: Använd Arduino för att visa motorvarvtal: 10 steg (med bilder)
Video: Using BTS7960 BTN8982TA PWM H Bridge motor controller module with Arduino library 2024, Juli
Anonim
Använd Arduino för att visa motorvarvtal
Använd Arduino för att visa motorvarvtal
Använd Arduino för att visa motorvarvtal
Använd Arduino för att visa motorvarvtal
Använd Arduino för att visa motorvarvtal
Använd Arduino för att visa motorvarvtal

Den här guiden beskriver hur jag använde en Arduino UNO R3, en 16x2 LCD -skärm med I2C och en LED -remsa som ska användas som motorvarvtalsmätare och växelljus i min Acura Integra -spårbil. Det är skrivet i form av någon med viss erfarenhet eller exponering för Arduino -programvara eller kodning i allmänhet, den matematiska programvaran MATLAB, och som skapar eller modifierar elektriska kretsar. I framtiden kan detta revideras för att vara lättare att förstå för någon med liten eller ingen erfarenhet av dessa ämnen.

Steg 1: Välj en Sigal Wire

Välj en Sigal Wire
Välj en Sigal Wire

Du måste få en signal som korrelerar till motorvarvtalet. Det är möjligt att lägga till ett system som mäter motorvarvtalet, men det är mycket mer praktiskt att slå på en befintlig tråd som bär information om motorvarvtal. En enda bil kan ha flera källor för detta, och den kan variera väldigt mycket från år till år på en enda fordonsmodell. För denna handledning kommer jag att använda exemplet på min bil, ett spår som ändrades 2000 Acura Integra LS. Jag upptäckte på min motor (B18B1 med OBD2) att det finns en oanvänd spänning som är 12V hög och sjunker till 0V efter att ha fullbordat ett varv.

Saker som hjälper till att identifiera en potentiell motorvarvtalssignal:

  • Kopplingsschema för ditt fordon
  • Söker forum efter ditt fordon med motor-/ECU -signaler
  • En vänlig mekaniker eller bilentusiast

Steg 2: Förläng tråd till Arduino Board

Förläng tråd till Arduino Board
Förläng tråd till Arduino Board
Förläng tråd till Arduino Board
Förläng tråd till Arduino Board

När du har valt en lämplig signal måste du förlänga den till var du än placerar ditt Arduino -kort. Jag bestämde mig för att placera min inuti fordonet där radion brukade vara, så jag ledde den nya tråden från motorn, genom en gummikanal i brandväggen och direkt till radioområdet. Eftersom det redan finns en överflödig mängd handböcker om avskalning, lödning och skydd av ledningar kommer jag inte att förklara denna process.

Steg 3: Signalanalys

Signalanalys
Signalanalys

Det är här saker kan bli komplicerade. Att ha en allmän förståelse för signalanalys och kontroller hjälper dig långt, men är genomförbart med lite kunskap.

Signaltråden som väljs kommer troligen inte att spotta ut det exakta värdet på motorvarvtalet. Den måste formas och modifieras för att ge det exakta antalet motorvarvtal du vill ha. På grund av det faktum att alla olika bilar och signalkablar valde kan vara annorlunda, kommer jag från och med nu att förklara hur jag använde positionssignalen från distributören på min Integra.

Min signal är normalt 12V och sjunker till 0V när jag fullbordar en hel rotation. Om du vet tiden för att slutföra en hel rotation, eller en hel cykel, kan detta enkelt översättas till varv/min med hjälp av några grundläggande begrepp.

1 / (sekunder per cykel) = cykler per sekund eller Hz

Varv per minut = Hz * 60

Steg 4: Koda din signalanalys

Kod din signalanalys
Kod din signalanalys

Denna metod kräver att man får den tid det tar för insignalen att slutföra en hel cykel. Lyckligtvis har Arduino IDE -programvaran ett kommando som gör exakt det, PulseIn.

Detta kommando väntar på att en signal ska passera ett tröskelvärde, börja räkna och sluta räkna när tröskeln överskrids igen. Det finns några detaljer som bör noteras när du använder kommandot, så jag kommer att inkludera en länk till information om PulseIn här:

PulseIn returnerar ett värde i mikrosekunder, och för att hålla matten enkel bör detta omedelbart konverteras till normala sekunder. Efter matematiken i föregående steg kan denna tidsperiod likställas direkt med varvtal.

Obs: efter försök och fel upptäckte jag att distributören genomför två varv för varje varv på motorns vevaxel, så jag delade mitt svar helt enkelt med 2 för att ta hänsyn till det.

Steg 5: Identifiera ett filter

Identifiera ett filter
Identifiera ett filter

Om du har tur kommer din signal inte att ha något "brus" (fluktuationer) och motorvarvtalet kommer att vara exakt. I mitt fall kom det mycket buller från distributören som ofta gav spänningar långt ifrån vad som förväntas. Detta blir till mycket falska avläsningar av det verkliga motorvarvtalet. Detta buller måste filtreras bort.

Efter viss signalanalys kom nästan allt brus med frekvenser (Hz) som var mycket högre än vad själva motorn matade ut (vilket är sant för de flesta verkliga dynamiska system). Detta innebär att ett lågpassfilter är en idealisk kandidat för att ta hand om detta.

Ett lågpassfilter låter låga frekvenser (önskade) passera och dämpar högfrekvenserna (oönskade).

Steg 6: Filtrering: Del 1

Filtrering: Del 1
Filtrering: Del 1
Filtrering: Del 1
Filtrering: Del 1
Filtrering: Del 1
Filtrering: Del 1

Design av filtret kan göras för hand, men att använda MATLAB kommer att påskynda detta betydligt om du har tillgång till programvaran.

Ett lågpassfilter kan likställas med en överföringsfunktion (eller fraktion) i Laplace -domänen (frekvensdomän). Ingångsfrekvensen multipliceras med denna bråkdel och utsignalen är en filtrerad signal som bara har den information du vill använda.

Den enda variabeln i funktionen är tau. Tau är lika med 1 / Omega, där Omega är den gränsfrekvens du vill ha (måste vara i radianer per sekund). Avstängningsfrekvensen är gränsen där frekvenser högre än den kommer att tas bort och frekvenser lägre än den kommer att hållas.

Jag ställer in avstängningsfrekvensen lika med ett varv / min min motor aldrig kommer att uppnå (990 r / min eller 165 Hz). FFT -graferna visar ungefär vilka frekvenser min råsignal bar och de frekvenser som kom ut ur filtret.

Steg 7: Filtrering: Del 2

Filtrering: Del 2
Filtrering: Del 2
Filtrering: Del 2
Filtrering: Del 2

Här användes MATLAB igen för tidens skull. Avstängningsfrekvensen definieras och därifrån visas den resulterande överföringsfunktionen. Tänk på att denna fraktion endast gäller för Laplace-domänen och kan inte direkt användas på en tidsbaserad mikrokontroller som Arduino UNO R3.

Steg 8: Filtrering: Del 3

Filtrering: Del 3
Filtrering: Del 3
Filtrering: Del 3
Filtrering: Del 3

MATLAB har ett kommando som kommer att konvertera en kontinuerlig funktion (frekvensdomän) till en diskret funktion (tidsdomän). Utdata från detta kommando kommer att ge en ekvation som enkelt kan införlivas i Arduino IDE -kod.

Steg 9: Filtrering: Del 4

Filtrering: Del 4
Filtrering: Del 4
Filtrering: Del 4
Filtrering: Del 4

I Arduino -skissen, inkludera variablerna u och y före installationen. Flytkommandot definierar helt enkelt hur variabeln ska lagra data (saker som maximivärde, decimaler, etc …) och en länk till mer information om detta kommer att tillhandahållas här: https://www.arduino.cc/reference/en/language /varia …

I slingan där konverteringen från råsignalen till motorvarvtal sker, inkludera u -variabeln och y -multipelekvationen. Det finns flera sätt att använda detta, men variabeln u bör sättas lika med den råa insignalen som mäts, och variabeln y är det filtrerade värdet.

Steg 10: Visa ditt filtrerade motorvarvtal

Rekommenderad: