Inhoudsopgave:

Arduino gebruiken om het motortoerental weer te geven: 10 stappen (met afbeeldingen)
Arduino gebruiken om het motortoerental weer te geven: 10 stappen (met afbeeldingen)

Video: Arduino gebruiken om het motortoerental weer te geven: 10 stappen (met afbeeldingen)

Video: Arduino gebruiken om het motortoerental weer te geven: 10 stappen (met afbeeldingen)
Video: Deel 6 - opdracht 1 Arduino - Functioneel en technisch ontwerp - de mogelijkheden. 2024, November
Anonim
Arduino gebruiken om het toerental van de motor weer te geven
Arduino gebruiken om het toerental van de motor weer te geven
Arduino gebruiken om het toerental van de motor weer te geven
Arduino gebruiken om het toerental van de motor weer te geven
Arduino gebruiken om het toerental van de motor weer te geven
Arduino gebruiken om het toerental van de motor weer te geven

Deze gids zal beschrijven hoe ik een Arduino UNO R3, een 16x2 LCD-scherm met I2C en een LED-strip heb gebruikt om te gebruiken als motortoerentalmeter en schakellicht in mijn Acura Integra-baanauto. Het is geschreven in termen van iemand met enige ervaring of blootstelling aan Arduino-software of codering in het algemeen, de wiskundige software MATLAB, en het maken of wijzigen van elektrische circuits. In de toekomst kan dit worden herzien om het gemakkelijker te begrijpen voor iemand met weinig tot geen ervaring met deze onderwerpen.

Stap 1: Kies een Sigal-draad

Kies een Sigal-draad
Kies een Sigal-draad

U moet een signaal krijgen dat overeenkomt met het motortoerental. Het is mogelijk om een systeem toe te voegen dat het motortoerental meet, maar het is veel praktischer om gebruik te maken van een bestaande draad die informatie over het motortoerental bevat. Een enkele auto kan hiervoor meerdere bronnen hebben, en het kan zelfs van jaar tot jaar enorm variëren op een enkel voertuigmodel. Omwille van deze tutorial zal ik het voorbeeld van mijn auto gebruiken, een op het circuit gemodificeerde 2000 Acura Integra LS. Ik ontdekte op mijn motor (B18B1 met OBD2) dat er een ongebruikte spanning is die 12V hoog is en daalt tot 0V na het voltooien van een volledige omwenteling.

Dingen die kunnen helpen bij het identificeren van een potentieel motortoerentalsignaal:

  • Bedradingsschema voor uw voertuig
  • Forums zoeken voor uw voertuig met motor-/ECU-signalen
  • Een vriendelijke monteur of autoliefhebber

Stap 2: Verleng de draad naar het Arduino-bord

Verleng de draad naar het Arduino-bord
Verleng de draad naar het Arduino-bord
Verleng de draad naar het Arduino-bord
Verleng de draad naar het Arduino-bord

Zodra je een geschikt signaal hebt gekozen, moet je het uitbreiden naar waar je je Arduino-bord ook plaatst. Ik besloot de mijne in het voertuig te plaatsen waar de radio vroeger zat, dus leidde ik de nieuwe draad van de motor, door een rubberen doorvoertule in de brandmuur en recht naar de radioruimte. Aangezien er al een overvloed aan handleidingen is voor het strippen, solderen en beschermen van bedrading, zal ik dit proces niet uitleggen.

Stap 3: Signaalanalyse

Signaalanalyse
Signaalanalyse

Dit is waar dingen ingewikkeld kunnen worden. Een algemeen begrip van signaalanalyse en controles zal je een heel eind helpen, maar is te doen met weinig kennis.

De gekozen signaaldraad zal hoogstwaarschijnlijk niet de exacte waarde van het motortoerental uitspugen. Het moet worden gevormd en aangepast om het exacte aantal motortoerentallen te geven dat u wilt. Omdat elke gekozen auto en signaaldraad anders kan zijn, zal ik vanaf dit punt uitleggen hoe ik het positiesignaal van de verdeler op mijn Integra heb gebruikt.

Mijn signaal is normaal 12V en zakt naar 0V bij het voltooien van een volledige omwenteling. Als u de tijd weet om één volledige rotatie of één volledige cyclus te voltooien, kan dit eenvoudig worden vertaald in omwentelingen/min met behulp van enkele basisconcepten.

1 / (seconden per cyclus) = cycli per seconde, of Hz

Omwentelingen per minuut = Hz * 60

Stap 4: Codeer uw signaalanalyse

Codeer uw signaalanalyse
Codeer uw signaalanalyse

Deze methode vereist dat u de tijd krijgt die het ingangssignaal nodig heeft om een volledige cyclus te voltooien. Gelukkig heeft de Arduino IDE-software een commando dat precies dat doet, PulseIn.

Dit commando wacht op een signaal dat een drempel overschrijdt, begint te tellen en stopt met tellen wanneer de drempel weer wordt overschreden. Er zijn enkele details die moeten worden opgemerkt bij het gebruik van de opdracht, dus ik zal hier een link naar informatie over PulseIn opnemen:

PulseIn retourneert een waarde in microseconden en om de wiskunde eenvoudig te houden, moet dit onmiddellijk worden omgezet in normale seconden. Na de wiskunde bij de vorige stap, kan deze tijdsduur direct worden gelijkgesteld aan RPM.

Opmerking: na vallen en opstaan ontdekte ik dat de verdeler twee omwentelingen voltooit voor elke enkele omwenteling van de krukas van de motor, dus ik heb mijn antwoord eenvoudig door 2 gedeeld om dat te verklaren.

Stap 5: identificeer een filter

Identificeer een filter
Identificeer een filter

Als je geluk hebt, zal je signaal geen 'ruis' (fluctuaties) hebben en zal je motortoerental exact zijn. In mijn geval kwam er veel lawaai uit de verdeler die vaak spanningen gaf die ver afstonden van wat verwacht werd. Dit verandert in zeer foutieve aflezingen van het werkelijke motortoerental. Deze ruis moet worden uitgefilterd.

Na wat signaalanalyse kwam bijna al het geluid op frequenties (Hz) die veel hoger waren dan wat de motor zelf uitvoerde (wat geldt voor de meeste echte dynamische systemen). Dit betekent dat een laagdoorlaatfilter een ideale kandidaat is om hiervoor te zorgen.

Een laagdoorlaatfilter laat lage frequenties (gewenst) door en dempt de hoge frequenties (ongewenst).

Stap 6: Filteren: deel 1

Filteren: deel 1
Filteren: deel 1
Filteren: Deel 1
Filteren: Deel 1
Filteren: Deel 1
Filteren: Deel 1

Het ontwerpen van het filter kan met de hand worden gedaan, maar het gebruik van MATLAB zal dit aanzienlijk versnellen als je toegang hebt tot de software.

Een laagdoorlaatfilter kan worden gelijkgesteld aan een overdrachtsfunctie (of breuk) in het Laplace-domein (frequentiedomein). De ingangsfrequentie wordt vermenigvuldigd met deze breuk en de uitgang is een gefilterd signaal dat alleen de informatie bevat die u wilt gebruiken.

De enige variabele in de functie is tau. Tau is gelijk aan 1 / Omega, waarbij Omega de gewenste afsnijfrequentie is (moet in radialen per seconde zijn). De afsnijfrequentie is de limiet waarbij frequenties hoger dan deze worden verwijderd en frequenties lager dan deze worden behouden.

Ik heb de afsnijfrequentie ingesteld op een toerental dat mijn motor nooit zal bereiken (990 tpm of 165 Hz). De FFT-grafieken laten ongeveer zien welke frequenties mijn onbewerkte signaal droeg en de frequenties die uit het filter kwamen.

Stap 7: Filteren: deel 2

Filteren: deel 2
Filteren: deel 2
Filteren: deel 2
Filteren: deel 2

Hier werd MATLAB opnieuw gebruikt omwille van de tijd. De afsnijfrequentie wordt gedefinieerd en daaruit wordt de resulterende overdrachtsfunctie weergegeven. Houd er rekening mee dat deze fractie alleen van toepassing is op het Laplace-domein en niet rechtstreeks kan worden gebruikt op een op tijd gebaseerde microcontroller zoals Arduino UNO R3.

Stap 8: Filteren: deel 3

Filteren: deel 3
Filteren: deel 3
Filteren: deel 3
Filteren: deel 3

MATLAB heeft een commando dat een continue functie (frequentiedomein) omzet in een discrete functie (tijddomein). De uitvoer van deze opdracht levert een vergelijking op die gemakkelijk kan worden opgenomen in Arduino IDE-code.

Stap 9: Filteren: deel 4

Filteren: deel 4
Filteren: deel 4
Filteren: deel 4
Filteren: deel 4

Neem in de Arduino-schets de variabelen u en y op vóór de installatie. Het float-commando definieert eenvoudig hoe de variabele gegevens zal opslaan (dingen zoals maximale waarde, decimalen, enz …) en een link naar meer informatie hierover zal hier worden gegeven: https://www.arduino.cc/reference/en/language /varia…

In de lus waar de conversie van het onbewerkte signaal naar het motortoerental plaatsvindt, neemt u de u-variabele en de y-meervoudige vergelijking op. Er zijn meerdere manieren om dit te gebruiken, maar de variabele u moet gelijk worden gesteld aan het ruwe ingangssignaal dat wordt gemeten, en de variabele y zal de gefilterde waarde zijn.

Aanbevolen: