Cuprins:

Utilizați Arduino pentru a afișa RPM motor: 10 pași (cu imagini)
Utilizați Arduino pentru a afișa RPM motor: 10 pași (cu imagini)

Video: Utilizați Arduino pentru a afișa RPM motor: 10 pași (cu imagini)

Video: Utilizați Arduino pentru a afișa RPM motor: 10 pași (cu imagini)
Video: Control XY-1250 10-50V 60A 3000W PWM motor Speed controller using Arduino 2024, Noiembrie
Anonim
Utilizați Arduino pentru a afișa RPM motor
Utilizați Arduino pentru a afișa RPM motor
Utilizați Arduino pentru a afișa RPM motor
Utilizați Arduino pentru a afișa RPM motor
Utilizați Arduino pentru a afișa RPM motor
Utilizați Arduino pentru a afișa RPM motor

Acest ghid va descrie modul în care am folosit un Arduino UNO R3, un afișaj LCD de 16x2 cu I2C și o bandă LED pentru a fi folosită ca indicator de viteză a motorului și lumină de schimbare a mașinii mele Acura Integra. Este scris în termeni de cineva cu o anumită experiență sau expunere la software-ul Arduino sau codificare în general, software-ul matematic MATLAB și care creează sau modifică circuite electrice. În viitor, acest lucru poate fi revizuit pentru a fi mai ușor de înțeles pentru cineva cu puțină sau deloc experiență cu aceste subiecte.

Pasul 1: Alegeți un fir Sigal

Alegeți un fir Sigal
Alegeți un fir Sigal

Va trebui să obțineți un semnal care să se coreleze cu turația motorului. Este posibil să adăugați un sistem care măsoară turația motorului, dar este mult mai practic să introduceți un fir existent care transportă informații despre turația motorului. O singură mașină poate avea mai multe surse pentru aceasta și poate varia foarte mult chiar de la an la an la un singur model de vehicul. De dragul acestui tutorial voi folosi exemplul mașinii mele, o pistă modificată 2000 Acura Integra LS. Am găsit pe motorul meu (B18B1 cu OBD2) că există o tensiune neutilizată care are o înălțime de 12V și scade la 0V la finalizarea unei revoluții complete.

Lucruri care vor ajuta la identificarea unui potențial semnal de turație a motorului:

  • Schema de conectare a vehiculului dumneavoastră
  • Căutarea forumurilor pentru vehiculul dvs. cu semnale motor / ECU
  • Un mecanic prietenos sau un pasionat de mașini

Pasul 2: Extindeți firul către placa Arduino

Extindeți firul către placa Arduino
Extindeți firul către placa Arduino
Extindeți firul către placa Arduino
Extindeți firul către placa Arduino

Odată ce ați ales un semnal adecvat, va trebui să îl extindeți oriunde vă așezați placa Arduino. Am decis să-l plasez pe al meu în interiorul vehiculului unde era radioul, așa că am dirijat noul fir de la motor, printr-o bucșă de cauciuc în peretele de incendiu și chiar în zona radio. Deoarece există deja o cantitate abundentă de ghiduri de instrucțiuni privind dezizolarea, lipirea și protejarea cablurilor, nu voi explica acest proces.

Pasul 3: Analiza semnalului

Analiza semnalului
Analiza semnalului

Aici lucrurile se pot complica. Înțelegerea generală a analizei și a controalelor semnalului vă va ajuta să faceți un drum lung, dar este posibil cu puține cunoștințe.

Firul de semnal ales cel mai probabil nu va scuipa valoarea exactă a turației motorului. Va trebui să fie modelat și modificat pentru a da numărul exact de turații ale motorului dorit. Datorită faptului că fiecare mașină și fir de semnal ales pot fi diferite, începând cu acest moment voi explica modul în care am folosit semnalul de poziție de la distribuitor pe Integra.

Semnalul meu este în mod normal 12V și scade la 0V când finalizez o rotație completă. Dacă știți timpul pentru a finaliza o rotație completă sau un ciclu complet, acest lucru poate fi tradus cu ușurință în rotații / min folosind câteva concepte de bază.

1 / (secunde pe ciclu) = cicluri pe secundă sau Hz

Revoluții pe minut = Hz * 60

Pasul 4: Codificați analiza semnalului

Codificați analiza semnalului
Codificați analiza semnalului

Această metodă necesită obținerea timpului necesar semnalului de intrare pentru a finaliza un ciclu complet. Din fericire, software-ul Arduino IDE are o comandă care face exact asta, PulseIn.

Această comandă va aștepta ca un semnal să treacă un prag, să înceapă numărarea și să oprească numărătoarea când pragul este trecut din nou. Există câteva detalii care ar trebui menționate atunci când se utilizează comanda, așa că voi include un link către informații despre PulseIn aici:

PulseIn va returna o valoare în microsecunde și, pentru a menține matematica simplă, aceasta ar trebui convertită imediat în secunde normale. Urmând calculele de la pasul anterior, această durată de timp poate fi echivalată direct cu RPM.

Notă: după încercări și erori, am descoperit că distribuitorul realizează două rotații pentru fiecare rotație a arborelui cotit al motorului, așa că pur și simplu am împărțit răspunsul meu la 2 pentru a explica acest lucru.

Pasul 5: Identificați un filtru

Identificați un filtru
Identificați un filtru

Dacă aveți noroc, semnalul dvs. nu va avea „zgomot” (fluctuații) și turația motorului va fi exactă. În cazul meu, a venit o mulțime de zgomot provenit de la distribuitor, care a dat adesea tensiuni departe de ceea ce se așteaptă. Acest lucru se transformă în citiri foarte false ale turației reale a motorului. Acest zgomot va trebui să fie filtrat.

După o analiză a semnalului, aproape tot zgomotul a ajuns la frecvențe (Hz) mult mai mari decât cele pe care motorul le-a emis (ceea ce este adevărat pentru majoritatea sistemelor dinamice reale). Aceasta înseamnă că un filtru low-pass este un candidat ideal pentru a avea grijă de acest lucru.

Un filtru trece jos permite frecvențelor joase (dorite) să treacă și atenuează frecvențele înalte (nedorite).

Pasul 6: Filtrare: Partea 1

Filtrare: Partea 1
Filtrare: Partea 1
Filtrare: Partea 1
Filtrare: Partea 1
Filtrare: Partea 1
Filtrare: Partea 1

Proiectarea filtrului se poate face manual, totuși utilizarea MATLAB va accelera semnificativ acest lucru dacă aveți acces la software.

Un filtru trece jos poate fi echivalat cu o funcție de transfer (sau fracție) din domeniul Laplace (domeniul frecvenței). Frecvența de intrare va fi înmulțită cu această fracție, iar ieșirea este un semnal filtrat care are doar informațiile pe care doriți să le utilizați.

Singura variabilă din funcție este tau. Tau este egal cu 1 / Omega, unde Omega este frecvența de tăiere dorită (trebuie să fie în radiani pe secundă). Frecvența de întrerupere este limita în care vor fi eliminate frecvențe mai mari decât aceasta și frecvențe mai mici decât vor fi păstrate.

Am setat frecvența de întrerupere egală cu un RPM motorul meu nu va atinge niciodată (990 RPM sau 165 Hz). Graficele FFT arată aproximativ ce frecvențe transporta semnalul meu brut și frecvențele care au ieșit din filtru.

Pasul 7: Filtrare: Partea 2

Filtrare: partea 2
Filtrare: partea 2
Filtrare: partea 2
Filtrare: partea 2

Aici MATLAB a fost folosit din nou de dragul timpului. Frecvența de întrerupere este definită și din aceasta se afișează funcția de transfer rezultată. Rețineți că această fracție se aplică doar domeniului Laplace și nu poate fi utilizată direct pe un microcontroler bazat pe timp, cum ar fi Arduino UNO R3.

Pasul 8: Filtrare: Partea 3

Filtrare: partea 3
Filtrare: partea 3
Filtrare: partea 3
Filtrare: partea 3

MATLAB are o comandă care va converti o funcție continuă (domeniul de frecvență) într-o funcție discretă (domeniul de timp). Ieșirea acestei comenzi va furniza o ecuație care poate fi ușor încorporată în codul IDE Arduino.

Pasul 9: Filtrare: Partea 4

Filtrare: partea 4
Filtrare: partea 4
Filtrare: partea 4
Filtrare: partea 4

În schița Arduino, includeți variabilele u și y înainte de configurare. Comanda float definește pur și simplu modul în care variabila va stoca date (lucruri precum valoarea maximă, zecimale etc.) și un link către mai multe informații despre aceasta va fi furnizat aici: https://www.arduino.cc/reference/en/language /varia…

În bucla în care are loc conversia de la semnalul brut la turația motorului, includeți variabila u și ecuația multiplă y. Există mai multe modalități de a folosi acest lucru, dar variabila u ar trebui să fie setată egală cu semnalul brut de intrare care se măsoară, iar variabila y va fi valoarea filtrată.

Recomandat: