Măsurarea intervalelor de timp, modele amatori pe microcontrolere

Reprezentăm experiența de măsurare a duratei impulsului și a perioadei trenului impuls. În general, acesta este un subiect destul de popular. În primul rând pe baza timpului de funcționare se pune pune în aplicare de frecvență, care, la rândul său, se dezvoltă într-o masă de dispozitive, cum ar fi :. detectoare de metal, inductanțele manometre, capacitate, VSH, etc. Mai mult, există acum o varietate de traductoare (tensiune / vânzare curent / presiune - frecvență), unde funcțiile prezentate pot găsi aplicații. Am implementat generatorul de impulsuri pe ATtiny2313. Raportați rapid sursa:








Controlorul a fost tactat din cuarț de 20 MHz (în principiu, nu contează). Folosesc întârzierile "greșite" ale bibliotecii standard (înseamnă "greșit" în ceea ce privește optimitatea implementării acestora cu ajutorul temporizatorilor), dar pentru acest exemplu acest lucru nu este absolut critic. Implement direct metru pe kit-ul ATmega128 - este la vârful degetelor mele. Luați în considerare procesul de măsurare a lățimii impulsului.
Pe oscilograma superioară albastru se arată graficul dependenței numărului de înregistrare TCNT1 la momentul contului (pentru confort am indicat perioadele de depășire OverflowC). Valoarea TCNT1 este incrementată de la zero la o valoare maximă de 65535 (negru linia punctată), urmată de o revenire la zero și n ori repetate periodic (a se vedea. Nodurile „triunghiuri). Pe partea inferioară a impulsului formei de undă de durată T este prezentată ajunge la captare de intrare ICR1 contra T1 (PD4) cu generatorul nostru nou ispechonnogo (deși se poate aplica la orice generator). Mai întâi, configurați întreruperea capturării pe marginea în creștere. În acest sens, rețineți valoarea contorului TCNT1 = EdgeR. Apoi, reconstruiți întreruperea capturii de-a lungul marginii care se încadrează. Stocam valoarea TCNT1 = EdgeF pe ea. Intre pot sa apara aceste intervale de timp (în cazul în care durata impulsului este mai lungă decât perioada de preaplin temporizator 1) n temporizator overflow 1. Cunoscând timpul temporizatorului de preaplin și de numărare durata ciclului tckl calcula cu ușurință valoarea lățimii impulsului conform formulei:






Tpulse = EdgeF (tckl) - EdgeR (tckl) + 65536OverflowC (tckl);
sau prin simplificarea expresiei:
Tpulse = tckl (EdgeF - EdgeR + 65536OverflowC);

Se măsoară și perioada de secvență de impulsuri

Numai întreruperea capturării este setată continuu pe marginea în creștere.

Evident, durata minimă a unui impuls pe care această implementare a funcției o poate gestiona va fi mai mică decât timpul pentru executarea acțiunilor din dispozitivul de tratare a întreruperii capturii. Simulând un AVRStudio măsura 49 cicluri, adică pentru un 8 MHz - este 6,12 microsecunde, care este confirmat de practică - durata pulsului minimă care este calculată corect - (. Vezi fotografia) 7 microsecunde.

Măsurarea intervalelor de timp, modele amatori pe microcontrolere

Dacă efectuați un contor pe un controler cu o frecvență de 20 MHz (maximul pentru AVR mega), durata minimă procesată va fi de 2,45 μs, deoarece ceasul - 50 ns * 49 = 2,45 μs. Dar acestea sunt cifrele pentru această implementare - în asamblare, desigur, puțin mai bine. Dacă este necesar să se măsoare intervale de timp mai mici, este necesar să se utilizeze separatoare controlate extern. Dar aceasta este o altă poveste.
În codul sursă. Este clar că codul sursă ar trebui să fie editat în funcție de sarcinile atribuite.

Din nou la fel, rătăcind de la un site la altul, o eroare. Greutatea variabilei OverflowC este 65536!
Tpulse = tckl (| EdgeF - EdgeR | + 65536OverflowC) - expresie mai strictă
"... lățimea minimă a impulsului pe care această implementare a funcției o poate gestiona va fi mai mică. (mai mare decât.) timpul de execuție al acțiunilor din interfața de preluare a capturilor. "Ne pare rău.

contorul de timp nu funcționează. și, în general, ați luat în considerare faptul că EdgeF





Trimiteți-le prietenilor: