INHOUDSOPGAWE:

Gebruik Arduino om die motortoerental per minuut te vertoon: 10 stappe (met foto's)
Gebruik Arduino om die motortoerental per minuut te vertoon: 10 stappe (met foto's)

Video: Gebruik Arduino om die motortoerental per minuut te vertoon: 10 stappe (met foto's)

Video: Gebruik Arduino om die motortoerental per minuut te vertoon: 10 stappe (met foto's)
Video: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, November
Anonim
Gebruik Arduino om die motortoerental per minuut te vertoon
Gebruik Arduino om die motortoerental per minuut te vertoon
Gebruik Arduino om die motortoerental per minuut te vertoon
Gebruik Arduino om die motortoerental per minuut te vertoon
Gebruik Arduino om die motortoerental per minuut te vertoon
Gebruik Arduino om die motortoerental per minuut te vertoon

Hierdie gids gee 'n uiteensetting van hoe ek 'n Arduino UNO R3, 'n 16x2 LCD -skerm met I2C en 'n LED -strook gebruik het om te gebruik as 'n motortoerusting en lig in my Acura Integra -spoorwa. Dit is geskryf in terme van iemand met ervaring of blootstelling aan Arduino -sagteware of kodering in die algemeen, die wiskundige sagteware MATLAB, en die skep of aanpassing van elektriese stroombane. In die toekoms kan dit hersien word om dit makliker te verstaan vir iemand met min of geen ervaring met hierdie onderwerpe.

Stap 1: Kies 'n Sigal -draad

Kies 'n Sigal -draad
Kies 'n Sigal -draad

U moet 'n sein kry wat ooreenstem met die enjinsnelheid. Dit is moontlik om 'n stelsel by te voeg wat die motortoerusting meet, maar dit is baie meer prakties om 'n bestaande draad met inligting oor enjinspoed in te skakel. 'N Enkelmotor kan hiervoor verskeie bronne hê, en dit kan selfs van jaar tot jaar baie verskil op 'n enkele voertuigmodel. Ter wille van hierdie tutoriaal gebruik ek die voorbeeld van my motor, 'n baan wat aangepas is 2000 Acura Integra LS. Ek het op my enjin (B18B1 met OBD2) gevind dat daar 'n ongebruikte spanning is wat 12V hoog is en tot 0V daal wanneer 'n volle omwenteling voltooi is.

Dinge wat u kan help om 'n moontlike enjinsnelheidsein te identifiseer:

  • Bedradingsdiagram vir u voertuig
  • Soek forums vir u voertuig met motor-/ECU -seine
  • 'N Vriendelike werktuigkundige of motorliefhebber

Stap 2: Brei die draad uit na die Arduino -bord

Brei die draad uit na die Arduino -bord
Brei die draad uit na die Arduino -bord
Brei die draad uit na die Arduino -bord
Brei die draad uit na die Arduino -bord

Nadat u 'n geskikte sein gekies het, moet u dit uitbrei tot waar u ook al u Arduino -bord plaas. Ek het besluit om myne in die voertuig te plaas waar die radio was, en toe trek ek die nuwe draad van die enjin af, deur 'n rubber deur in die brandmuur en regs na die radio. Aangesien daar reeds 'n groot aantal instruksies is oor die ontdooiing, soldeer en beskerming van bedrading, sal ek hierdie proses nie verduidelik nie.

Stap 3: Seinanalise

Seinanalise
Seinanalise

Dit is hier waar dinge ingewikkeld kan raak. As u 'n algemene begrip het van seinanalise en -kontroles, sal u 'n lang pad help, maar dit is uitvoerbaar met min kennis.

Die seindraad wat waarskynlik gekies word, sal nie die presiese waarde van die enjinspoed uitspoeg nie. Dit moet gevorm en aangepas word om die presiese aantal motortoerentalle te gee wat u wil hê. Omdat elke motor en seindraad wat gekies is, anders kan wees, sal ek van nou af verduidelik hoe ek die posisiesignaal van die verspreider op my Integra gebruik het.

My sein is normaalweg 12V en daal tot 0V wanneer ek 'n volle rotasie voltooi. As u die tyd ken om 'n volledige rotasie of een volledige siklus te voltooi, kan dit maklik in omwentelinge/min vertaal word met behulp van 'n paar basiese konsepte.

1 / (sekondes per siklus) = siklusse per sekonde, of Hz

Omwentelinge per minuut = Hz * 60

Stap 4: Kodeer u seinontleding

Kodeer u seinontleding
Kodeer u seinontleding

Hierdie metode vereis dat die tyd wat dit nodig het vir die insetsein neem om 'n volledige siklus te voltooi. Gelukkig het die Arduino IDE -sagteware 'n opdrag wat presies dit doen, PulseIn.

Hierdie opdrag wag totdat 'n sein 'n drumpel oorskry, begin tel en stop met tel as die drempel weer oorskry word. Daar is 'n paar besonderhede wat opgemerk moet word by die gebruik van die opdrag, so ek sal 'n skakel na inligting van PulseIn hier insluit:

PulseIn gee 'n waarde in mikrosekondes terug, en om die wiskunde eenvoudig te hou, moet dit onmiddellik in normale sekondes omgeskakel word. Na die wiskunde op die vorige stap, kan hierdie tydsduur direk gelykgestel word aan RPM.

Let wel: na proef en fout het ek ontdek dat die verspreider twee rotasies voltooi vir elke rotasie van die krukas van die enjin, so ek het my antwoord eenvoudig met 2 gedeel om dit te verduidelik.

Stap 5: Identifiseer 'n filter

Identifiseer 'n filter
Identifiseer 'n filter

As u gelukkig is, sal u sein geen 'geraas' (skommelinge) hê nie, en u enjinsnelheid sal presies wees. In my geval kom daar baie geraas van die verspreider, wat dikwels spanning ver gee van wat verwag word. Dit lei tot 'n baie valse lesing van die werklike enjinsnelheid. Hierdie geraas sal gefiltreer moet word.

Na 'n paar seinontledings kom byna al die geraas by frekwensies (Hz) wat baie hoër was as wat die enjin self lewer (wat geld vir die meeste werklike dinamiese stelsels). Dit beteken dat 'n laagpasfilter 'n ideale kandidaat is om hiervoor te sorg.

'N Laagpasfilter laat lae frekwensies (gewenste) deur en verswak die hoë frekwensies (ongewens).

Stap 6: Filter: Deel 1

Filtering: Deel 1
Filtering: Deel 1
Filtering: Deel 1
Filtering: Deel 1
Filtering: Deel 1
Filtering: Deel 1

Die ontwerp van die filter kan met die hand gedoen word, maar die gebruik van MATLAB sal dit aansienlik bespoedig as u toegang tot die sagteware het.

'N Laagdeurlaatfilter kan gelykgestel word aan 'n oordragfunksie (of breuk) in die Laplace -domein (frekwensiedomein). Die invoerfrekwensie word met hierdie breuk vermenigvuldig en die uitset is 'n gefiltreerde sein wat slegs die inligting bevat wat u wil gebruik.

Die enigste veranderlike in die funksie is tau. Tau is gelyk aan 1 / Omega, waar Omega die afsnyfrekwensie is wat u wil hê (moet in radiale per sekonde wees). Die afsnyfrekwensie is die limiet waar frekwensies wat hoër is as dit verwyder sal word en frekwensies laer as wat dit gehou sal word.

Ek stel die afsnyfrekwensie gelyk aan 'n rpm wat my enjin nooit sal bereik nie (990 RPM of 165 Hz). Die FFT -grafieke toon ongeveer watter frekwensies my rou sein gedra het en die frekwensies wat uit die filter gekom het.

Stap 7: Filter: Deel 2

Filtering: Deel 2
Filtering: Deel 2
Filtering: Deel 2
Filtering: Deel 2

Hier is MATLAB ter wille van tyd weer gebruik. Die afsnyfrekwensie word gedefinieer, en daaruit word die resulterende oordragfunksie vertoon. Hou in gedagte dat hierdie breuk slegs van toepassing is op die Laplace-domein en nie direk op 'n tydgebaseerde mikrobeheerder soos Arduino UNO R3 gebruik kan word nie.

Stap 8: Filter: Deel 3

Filtering: Deel 3
Filtering: Deel 3
Filtering: Deel 3
Filtering: Deel 3

MATLAB het 'n opdrag wat 'n deurlopende funksie (frekwensiedomein) in 'n diskrete funksie (tyddomein) omskakel. Die opbrengs van hierdie opdrag bied 'n vergelyking wat maklik in die Arduino IDE -kode opgeneem kan word.

Stap 9: Filter: Deel 4

Filtering: Deel 4
Filtering: Deel 4
Filtering: Deel 4
Filtering: Deel 4

Sluit die veranderlikes u en y voor die opstelling in die Arduino -skets in. Die float -opdrag definieer eenvoudig hoe die veranderlike data sal stoor (dinge soos maksimum waarde, desimale, ens …) en 'n skakel na meer inligting hieroor sal hier verskaf word: https://www.arduino.cc/reference/en/language /varia …

Sluit die u -veranderlike en die y -meervoudige vergelyking in in die lus waar die omskakeling van die rou sein na die motorsnelheid plaasvind. Daar is verskillende maniere om dit te gebruik, maar die veranderlike u moet gelyk gestel word aan die rou insetsein wat gemeet word, en die veranderlike y sal die gefiltreerde waarde wees.

Aanbeveel: