Indholdsfortegnelse:

Brug Arduino til at vise motorens omdrejningstal: 10 trin (med billeder)
Brug Arduino til at vise motorens omdrejningstal: 10 trin (med billeder)

Video: Brug Arduino til at vise motorens omdrejningstal: 10 trin (med billeder)

Video: Brug Arduino til at vise motorens omdrejningstal: 10 trin (med billeder)
Video: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, November
Anonim
Brug Arduino til at vise motorens omdrejningstal
Brug Arduino til at vise motorens omdrejningstal
Brug Arduino til at vise motorens omdrejningstal
Brug Arduino til at vise motorens omdrejningstal
Brug Arduino til at vise motorens omdrejningstal
Brug Arduino til at vise motorens omdrejningstal

Denne vejledning beskriver, hvordan jeg brugte en Arduino UNO R3, et 16x2 LCD -display med I2C og en LED -strimmel, der skal bruges som motorhastighedsmåler og skiftelys i min Acura Integra -sporvogn. Det er skrevet i form af nogen med en vis erfaring eller eksponering for Arduino -software eller kodning generelt, den matematiske software MATLAB, og oprettelse eller ændring af elektriske kredsløb. I fremtiden kan dette blive revideret for at være lettere at forstå for nogen med lidt eller ingen erfaring med disse emner.

Trin 1: Vælg en Sigal Wire

Vælg en Sigal Wire
Vælg en Sigal Wire

Du skal få et signal, der korrelerer med motorens omdrejningstal. Det er muligt at tilføje et system, der måler motorhastighed, men det er langt mere praktisk at trykke på en eksisterende ledning, der bærer oplysninger om motorhastighed. En enkelt bil kan have flere kilder til dette, og den kan variere voldsomt endda fra år til år på en enkelt bilmodel. Af hensyn til denne tutorial vil jeg bruge eksemplet på min bil, et spor ændret 2000 Acura Integra LS. Jeg fandt ud af på min motor (B18B1 med OBD2), at der er en ubrugt spænding ude, der er 12V høj og falder til 0V efter at have fuldført en fuld omdrejning.

Ting, der hjælper med at identificere et potentielt motoromdrejningssignal:

  • Ledningsdiagram til din bil
  • Søger fora efter dit køretøj med motor-/ECU -signaler
  • En venlig mekaniker eller bilentusiast

Trin 2: Udvid Wire til Arduino Board

Forlæng ledningen til Arduino Board
Forlæng ledningen til Arduino Board
Forlæng ledningen til Arduino Board
Forlæng ledningen til Arduino Board

Når du har valgt et passende signal, skal du udvide det til det sted, hvor du placerer dit Arduino -bord. Jeg besluttede at placere min inde i bilen, hvor radioen plejede at være, så jeg førte den nye ledning fra motoren gennem en gummigennemføring i brandvæggen og lige til radioområdet. Da der allerede er en rigelig mængde vejledninger til fjernelse, lodning og beskyttelse af ledninger, vil jeg ikke forklare denne proces.

Trin 3: Signalanalyse

Signalanalyse
Signalanalyse

Det er her, tingene kan blive komplicerede. At have en generel forståelse af signalanalyse og kontrol vil hjælpe dig langt, men kan gøres med lidt viden.

Signaltråden, der er valgt, vil sandsynligvis ikke spytte den nøjagtige værdi af motorhastigheden ud. Det skal formes og modificeres til at give det nøjagtige antal motoromdrejninger pr. Minut, du ønsker. På grund af det faktum, at hver anden bil og signalkabel, der er valgt, kan være forskellige, vil jeg fra dette tidspunkt og frem forklare, hvordan jeg brugte positionssignalet fra distributøren på min Integra.

Mit signal er normalt 12V og falder til 0V, når jeg fuldfører en fuld rotation. Hvis du kender tiden til at fuldføre en fuld rotation eller en hel cyklus, kan dette let oversættes til omdrejninger/min ved hjælp af nogle grundlæggende begreber.

1 / (sekunder pr. Cyklus) = cyklusser pr. Sekund eller Hz

Omdrejninger pr. Minut = Hz * 60

Trin 4: Kode din signalanalyse

Kode din signalanalyse
Kode din signalanalyse

Denne metode kræver, at det får den tid, det tager, for indgangssignalet at fuldføre en hel cyklus. Heldigvis har Arduino IDE -softwaren en kommando, der gør præcis det, PulseIn.

Denne kommando venter på, at et signal skal krydse en tærskel, begynde at tælle og stoppe med at tælle, når tærsklen er krydset igen. Der er nogle detaljer, der skal bemærkes, når du bruger kommandoen, så jeg vil inkludere et link til oplysninger om PulseIn her:

PulseIn returnerer en værdi i mikrosekunder, og for at holde matematikken enkel skal dette straks konverteres til normale sekunder. Efter matematikken på det foregående trin kan denne tidsperiode sidestilles direkte med RPM.

Bemærk: Efter forsøg og fejl opdagede jeg, at distributøren gennemfører to omdrejninger for hver enkelt rotation af motorens krumtapaksel, så jeg delte simpelthen mit svar med 2 for at tage højde for det.

Trin 5: Identificer et filter

Identificer et filter
Identificer et filter

Hvis du er heldig, har dit signal ingen 'støj' (udsving), og dit motoromdrejningstal vil være nøjagtigt. I mit tilfælde kom der meget støj fra distributøren, der ofte gav spændinger langt fra det forventede. Dette bliver til meget falske aflæsninger af det faktiske motoromdrejningstal. Denne støj skal filtreres fra.

Efter nogle signalanalyser kom næsten al støj ved frekvenser (Hz) langt højere end hvad motoren selv udsendte (hvilket er sandt for de fleste reelle dynamiske systemer). Det betyder, at et lavpasfilter er en ideel kandidat til at tage sig af dette.

Et lavpasfilter tillader lave frekvenser (ønsket) at passere og dæmper de høje frekvenser (uønsket).

Trin 6: Filtrering: Del 1

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

Design af filteret kan udføres i hånden, men brug af MATLAB vil fremskynde dette betydeligt, hvis du har adgang til softwaren.

Et lavpasfilter kan sidestilles med en overførselsfunktion (eller fraktion) i Laplace -domænet (frekvensdomæne). Indgangsfrekvensen vil blive ganget med denne brøkdel, og output er et filtreret signal, der kun har den information, du vil bruge.

Den eneste variabel i funktionen er tau. Tau er lig med 1 / Omega, hvor Omega er den afskæringsfrekvens, du ønsker (skal være i radianer pr. Sekund). Afskæringsfrekvensen er grænsen, hvor frekvenser højere end den vil blive fjernet og frekvenser lavere end den vil blive holdt.

Jeg indstiller afskæringsfrekvensen lig med et omdrejningstal, min motor aldrig når (990 omdr./min. Eller 165 Hz). FFT -graferne viser nogenlunde, hvilke frekvenser mit råsignal bar og de frekvenser, der kom ud af filteret.

Trin 7: Filtrering: Del 2

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

Her blev MATLAB udnyttet igen af hensyn til tiden. Afskæringsfrekvensen er defineret, og derfra vises den resulterende overførselsfunktion. Husk, at denne brøkdel kun gælder for Laplace-domænet og ikke kan bruges direkte på en tidsbaseret mikrocontroller som Arduino UNO R3.

Trin 8: Filtrering: Del 3

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

MATLAB har en kommando, der konverterer en kontinuerlig funktion (frekvensdomæne) til en diskret funktion (tidsdomæne). Output af denne kommando vil give en ligning, der let kan inkorporeres i Arduino IDE -kode.

Trin 9: Filtrering: Del 4

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

I Arduino -skitsen skal du inkludere variablerne u og y før opsætningen. Float -kommandoen definerer ganske enkelt, hvordan variablen vil gemme data (ting som maksimal værdi, decimaler osv.), Og et link til flere oplysninger om dette vil blive givet her: https://www.arduino.cc/reference/en/language /varia …

I sløjfen, hvor konverteringen fra råsignalet til motorhastighed finder sted, skal du inkludere u -variablen og y -multipelligningen. Der er flere måder at anvende dette på, men variablen u skal indstilles lig med det rå indgangssignal, der måles, og variablen y vil være den filtrerede værdi.

Anbefalede: