Kuidas Vabaneda Kontakti Põrgusest Nupu ühendamisel Arduinoga

Sisukord:

Kuidas Vabaneda Kontakti Põrgusest Nupu ühendamisel Arduinoga
Kuidas Vabaneda Kontakti Põrgusest Nupu ühendamisel Arduinoga

Video: Kuidas Vabaneda Kontakti Põrgusest Nupu ühendamisel Arduinoga

Video: Kuidas Vabaneda Kontakti Põrgusest Nupu ühendamisel Arduinoga
Video: Understanding Electronic Component 01: Arduino Uno 2024, Aprill
Anonim

Oleme juba vaadanud nupu ühendamist Arduinoga ja puudutanud kontaktide "põrgatamise" küsimust. See on väga tüütu nähtus, mis põhjustab korduvaid nupuvajutusi ja raskendab nupuklõpsude programmilist käsitlemist. Räägime sellest, kuidas kontakti põrkamisest vabaneda.

Kontakti põrge efekt
Kontakti põrge efekt

Vajalik

  • - Arduino;
  • - taktitunupp;
  • - takisti nimiväärtusega 10 kOhm;
  • - Valgusdiood;
  • - juhtmete ühendamine.

Juhised

Samm 1

Kontaktpõrge on mehaaniliste lülitite, surunuppude, lülitilülitite ja releede tavaline nähtus. Tulenevalt asjaolust, et kontaktid on tavaliselt valmistatud elastsusega metallidest ja sulamitest, ei loo need füüsiliselt suletuna kohe usaldusväärset ühendust. Lühikese aja jooksul sulguvad kontaktid mitu korda ja tõrjuvad üksteist. Selle tulemusel omandab elektrivool püsiseisundi väärtuse mitte koheselt, vaid pärast tõuse ja langust. Selle mööduva efekti kestus sõltub kontaktmaterjalist, suurusest ja kujundusest. Joonisel on tüüpiline ostsillogramm, kui taktinupu kontaktid on suletud. On näha, et aeg stabiilsesse olekusse lülitumise hetkest on mitu millisekundit. Seda nimetatakse "põrgatamiseks".

See efekt pole märgatav valgustuse, mootorite või muude inertsiaalsete andurite ja seadmete juhtimiseks mõeldud vooluahelates. Kuid vooluahelates, kus toimub teabe kiire lugemine ja töötlemine (kus sagedused on samasuguses järjekorras nagu "põrge" impulsid või kõrgemad), on see probleem. Eelkõige on sagedusel 16 MHz töötav Arduino UNO kontaktpõrke tabamiseks suurepärane, kui aktsepteerib ühe 0–1 lüliti asemel järjestusi nullidega ja nullidega.

Kontakti põrge, kui vajutate nuppu
Kontakti põrge, kui vajutate nuppu

2. samm

Vaatame, kuidas kontakti põrge mõjutab vooluahela õiget tööd. Ühendame kellanupu Arduinoga, kasutades allakäidetakisti vooluahelat. Nuppu vajutades süttib LED ja jätame selle põlema, kuni nuppu uuesti vajutatakse. Selguse huvides ühendame digitaalse tihvtiga 13 välise LED-i, kuigi sisseehitatud saab sellest loobuda.

Nupu ühendamine Arduinoga, kasutades ülestõmbetakisti ahelat
Nupu ühendamine Arduinoga, kasutades ülestõmbetakisti ahelat

3. samm

Selle ülesande täitmiseks tuleb kõigepealt meelde:

- pidage meeles nupu eelmist olekut;

- võrrelda praeguse olukorraga;

- kui olek on muutunud, siis muudame LED-i olekut.

Kirjutame sellise visandi ja laadime selle Arduino mällu.

Kui vooluring on sisse lülitatud, on kontakti põrkamise mõju kohe nähtav. See avaldub selles, et LED ei sütti kohe pärast nupu vajutamist või süttib ja seejärel kustub või ei kustu kohe pärast nupu vajutamist, vaid jääb põlema. Üldiselt ei tööta skeem stabiilselt. Ja kui LED-i sisselülitamisega seotud ülesande jaoks pole see nii kriitiline, siis muude tõsisemate ülesannete jaoks on see lihtsalt vastuvõetamatu.

Nupu töötlemise visand kontaktide põrkumist arvestamata
Nupu töötlemise visand kontaktide põrkumist arvestamata

4. samm

Püüame olukorda parandada. Me teame, et kontakti põrge toimub mõne millisekundi jooksul pärast kontakti sulgemist. Ootame, näiteks 5 ms pärast nupu oleku muutmist. See aeg on inimese jaoks peaaegu hetk ja inimese nupule vajutamine võtab tavaliselt palju kauem aega - mitukümmend millisekundit. Ja Arduino töötab suurepäraselt nii lühikese ajaperioodi jooksul ja need 5 ms võimaldavad tal nupuvajutusest kontaktide põrgu ära lõigata.

Selles sketis kuulutame välja protseduuri debounce () (inglise keeles "põrge" on lihtsalt "põrge", eesliide "de" tähendab vastupidist protsessi), mille sisendisse edastame nupu eelmise oleku. Kui nupuvajutus kestab kauem kui 5 ms, siis on see tõesti vajutus.

Pressi tuvastamisega muudame LED-i olekut.

Laadige visand üles Arduino tahvlile. Nüüd on kõik palju parem! Nupp töötab tõrgeteta, vajutades muudab valgusdioodi olekut, nagu me soovisime.

Nupu vajutamise töötlemise visand, võttes arvesse kontakti põrkamist
Nupu vajutamise töötlemise visand, võttes arvesse kontakti põrkamist

5. samm

Sarnast funktsionaalsust pakuvad spetsiaalsed teegid, näiteks Bounce2 teek. Selle saate alla laadida jaotises "Allikad" olevalt lingilt või veebisaidilt https://github.com/thomasfredericks/Bounce2. Raamatukogu installimiseks asetage see Arduino arenduskeskkonna teekide kataloogi ja taaskäivitage IDE.

Teek "Bounce2" sisaldab järgmisi meetodeid:

Bounce () - objekti "Bounce" initsialiseerimine;

void interval (ms) - määrab viivitusaja millisekundites;

void attach (pin number) - määrab tihvti, millega nupp on ühendatud;

int update () - värskendab objekti ja tagastab väärtuse true, kui pin-olek on muutunud, ja muul juhul false;

int loe () - loeb tihvti uut olekut.

Kirjutame oma visandi raamatukogu abil ümber. Võite ka meeles pidada ja võrrelda nupu varasemat olekut praegusega, kuid lihtsustame algoritmi. Kui nuppu vajutatakse, loeme vajutused kokku ja iga paaritu vajutus lülitab LED-i sisse ja iga paaritu vajutus lülitab selle välja. See visand näeb välja lühike, hõlpsasti loetav ja hõlpsasti kasutatav.

Soovitan: