Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Misurazione periodo o frequenza con Arduino

Progetti, interfacciamento, discussioni varie su questa piattaforma.

Moderatori: Foto UtenteMassimoB, Foto UtenteWALTERmwp, Foto Utentexyz

0
voti

[41] Re: Misurazione periodo o frequenza con Arduino

Messaggioda Foto Utentelorenrus » 22 mag 2020, 14:58

marioursino ha scritto:In realtà sarebbe più opportuno utilizzare la periferica di capture, almeno così si chiama con Microchip.



Grazie Mario

mi informerò a rigurado.

Grazie
Avatar utente
Foto Utentelorenrus
5 2
 
Messaggi: 31
Iscritto il: 30 ott 2018, 18:30

0
voti

[42] Re: Misurazione periodo o frequenza con Arduino

Messaggioda Foto UtenteIlGuru » 22 mag 2020, 15:08

Si potrebbero anche usare i moduli timer.
Tipo timer1 che è a 16 bit, utilizzando come sorgente di clock del contatore l'onda da misurare applicata al pin T1.
Timer0 impostato su 100 micro secondi usando il clock del micro con il prescaler a 64 divisioni.
Nelle ISR di overflow e match di Timer0 si fa partire/arrestare Timer1.
La frequenza dell' onda da misurare a quel punto la si trova nel contatore TCNT1 a 16 bit.
Tutti i conteggi e confronti vengono fatti dall'hardware senza impiegare cicli macchina per eseguire codice, gli unici ritardi sono introdotti dall'esecuzione delle ISR
\Gamma\nu\tilde{\omega}\theta\i\ \sigma\epsilon\alpha\upsilon\tau\acute{o}\nu
Avatar utente
Foto UtenteIlGuru
4.434 1 10 13
Master
Master
 
Messaggi: 1530
Iscritto il: 31 lug 2015, 23:32

0
voti

[43] Re: Misurazione periodo o frequenza con Arduino

Messaggioda Foto Utentelorenrus » 22 mag 2020, 15:40

IlGuru ha scritto:Su queste scale è chiaro che non puoi misurare la durata di ogni stato logico, però puoi misurare quanti riesci a contarne ad esempio in 100 micro secondi e solo alla fine calcolare le statistiche. Ovvio che se se vuoi misurare il periodo dell'onda al nanosecondo ti serve altro.



Ora stavo ricontrollando i codici che scrissi. Questa cosa già l'avevo fatta di andare a contare gli stati alti e bassi del pin in un intervallo di tempo.

l'intervallo di tempo l'ho controllavo con la funzione millis(), quindi:

if(millis)() < 1000){
// Eseguo il controllo del pin ed aggiornavo una variabile
}

Solo che quello che notavo che oltre una certa frequenza dell'onda quadra che generavo e quindi che mi ritornava in ingresso non leggevo più valori attendibili.

Grazie
Avatar utente
Foto Utentelorenrus
5 2
 
Messaggi: 31
Iscritto il: 30 ott 2018, 18:30

0
voti

[44] Re: Misurazione periodo o frequenza con Arduino

Messaggioda Foto UtenteIlGuru » 22 mag 2020, 15:55

Il problema è sapere quanti cicli macchina ci vogliono per eseguire if(millis)() < 1000)

Sarebbe meglio fare una cosa tipo
Codice: Seleziona tutto
ISR( ... ){
fermo timer0
}

int main(){
...
unsigned char i = 0x00;
vari_settaggi_bit_timer0;
OCRA0 = Numero_per_far_passare_100_micro_secondi;
Faccio_partire_timer0;
while( timer_sta_contando ){
   if ( transizioni_bit_LO_HI ) i++;
}
// Frequenza onda circa = 10*i kHz
}


Ma meglio ancora sarebbe usare due timer insieme
\Gamma\nu\tilde{\omega}\theta\i\ \sigma\epsilon\alpha\upsilon\tau\acute{o}\nu
Avatar utente
Foto UtenteIlGuru
4.434 1 10 13
Master
Master
 
Messaggi: 1530
Iscritto il: 31 lug 2015, 23:32

0
voti

[45] Re: Misurazione periodo o frequenza con Arduino

Messaggioda Foto Utentelorenrus » 22 mag 2020, 16:00

IlGuru ha scritto:Il problema è sapere quanti cicli macchina ci vogliono per eseguire if(millis)() < 1000)

Sarebbe meglio fare una cosa tipo
Codice: Seleziona tutto
ISR( ... ){
fermo timer0
}

int main(){
...
unsigned char i = 0x00;
vari_settaggi_bit_timer0;
OCRA0 = Numero_per_far_passare_100_micro_secondi;
Faccio_partire_timer0;
while( timer_sta_contando ){
   if ( transizioni_bit_LO_HI ) i++;
}
// Frequenza onda circa = 10*i kHz
}


Ma meglio ancora sarebbe usare due timer insieme



Chiarissimo.

grazie
Avatar utente
Foto Utentelorenrus
5 2
 
Messaggi: 31
Iscritto il: 30 ott 2018, 18:30

0
voti

[46] Re: Misurazione periodo o frequenza con Arduino

Messaggioda Foto UtentePietroBaima » 22 mag 2020, 17:06

lorenrus ha scritto:Hai un pdf utile che può aiutarmi ?

Se vuoi posso consigliarti dei libri

lorenrus ha scritto: Con HAL cosa intendi ?

Hardware Abstraction Layer
È un modulo che si scrive per contenere al suo interno la interfaccia con l’hardware che gestisce il micro.
Essendo una interfaccia ad hoc la velocità è la massima possibile.
Generatore codice per articoli:
nomi
emoticon
citazioni
formule latex

Io capisco le cose per come le scrivete. Per esempio: K sono kelvin e non chilo, h.z è la costante di Planck per zepto o per la zeta di Riemann e l'inverso di una frequenza non si misura in siemens.
Avatar utente
Foto UtentePietroBaima
79,9k 6 12 13
G.Master EY
G.Master EY
 
Messaggi: 10026
Iscritto il: 12 ago 2012, 1:20
Località: Londra

0
voti

[47] Re: Misurazione periodo o frequenza con Arduino

Messaggioda Foto Utentelorenrus » 24 mag 2020, 15:48

PietroBaima ha scritto:
lorenrus ha scritto:Hai un pdf utile che può aiutarmi ?

Se vuoi posso consigliarti dei libri

lorenrus ha scritto: Con HAL cosa intendi ?

Hardware Abstraction Layer
È un modulo che si scrive per contenere al suo interno la interfaccia con l’hardware che gestisce il micro.
Essendo una interfaccia ad hoc la velocità è la massima possibile.



Si grazie sarei felice di studiarmeli.

Ok, capito.

Grazie
Avatar utente
Foto Utentelorenrus
5 2
 
Messaggi: 31
Iscritto il: 30 ott 2018, 18:30

0
voti

[48] Re: Misurazione periodo o frequenza con Arduino

Messaggioda Foto UtenteEcoTan » 24 mag 2020, 17:24

Premesso che non conosco Arduino, diversi microcontrollori hanno dei moduli di Input Capture che sul fronte di un digital input memorizzano in un registro il contenuto corrente di un timer, che poi possiamo leggere praticamente senza errore.
Avatar utente
Foto UtenteEcoTan
5.734 4 10 13
Expert EY
Expert EY
 
Messaggi: 3583
Iscritto il: 29 gen 2014, 8:54

0
voti

[49] Re: Misurazione periodo o frequenza con Arduino

Messaggioda Foto Utentedadduni » 24 mag 2020, 17:50

Un STM32F103 costa 1/10 di qualsiasi Arduino, ha un clock a 72MHz e ha un DMA con cui ogni transizione di un pin in ingresso puoi salvare in memoria lo stato di un Timer. A quel punto finita la procedura puoi leggere tutti i salvataggi in memoria e ricustriore decentemente frequenza e duty cycle.


Foto UtentePietroBaima Domanda da ignorante. Campionando continuamente l'ingresso (e conoscendo il segnale di uscita) si può far fare la xor stesso al processore, salvare tutto in un array e alla fine con calma filtrare passa basso? Sarebbe un PLL software
Avatar utente
Foto Utentedadduni
1.705 2 7 12
Expert EY
Expert EY
 
Messaggi: 1102
Iscritto il: 23 mag 2014, 16:26

0
voti

[50] Re: Misurazione periodo o frequenza con Arduino

Messaggioda Foto UtentePietroBaima » 24 mag 2020, 22:40

dadduni ha scritto:
Foto UtentePietroBaima Domanda da ignorante. Campionando continuamente l'ingresso (e conoscendo il segnale di uscita) si può far fare la xor stesso al processore, salvare tutto in un array e alla fine con calma filtrare passa basso? Sarebbe un PLL software

puoi certamente fare un PLL software, il limite però sono chiaramente le risorse di macchina.
Generatore codice per articoli:
nomi
emoticon
citazioni
formule latex

Io capisco le cose per come le scrivete. Per esempio: K sono kelvin e non chilo, h.z è la costante di Planck per zepto o per la zeta di Riemann e l'inverso di una frequenza non si misura in siemens.
Avatar utente
Foto UtentePietroBaima
79,9k 6 12 13
G.Master EY
G.Master EY
 
Messaggi: 10026
Iscritto il: 12 ago 2012, 1:20
Località: Londra

PrecedenteProssimo

Torna a Arduino

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite