0
Offline
Full Member
Karma: 0
Posts: 109
Arduino rocks
|
 |
« on: October 22, 2012, 12:25:14 pm » |
Devo leggere una frequenza che vedo come un pin che diventa alto. Ho visto pulseIn che però non so se va bene perchè misura la durata dell'impulso, ma se la frequenza và misurata vedendo il numero degli impulsi in un certo tempo con la durata dell'impulso posso farci qualcosa? Forse potrei fare un interrupt RISING e ogni volta aumentare una variabile, poi in loop() vedere quanto vale la variabile e rapportarla con il tempo trascorso... Qual'è il modo migliore?
|
|
|
|
|
Logged
|
|
|
|
|
Offline
God Member
Karma: 6
Posts: 541
|
 |
« Reply #1 on: October 22, 2012, 12:40:46 pm » |
ma a che frequenza massima ?
|
|
|
|
|
Logged
|
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...
|
|
|
|
Mantova
Offline
Jr. Member
Karma: 2
Posts: 50
|
 |
« Reply #2 on: October 22, 2012, 01:17:34 pm » |
Puoi fare così: - leggi la durata dell'impulso
- trovi il numero di impulsi facendo 60/durata dell'impulso
- Calcoli la frequenza facendo 1/numero di impulsi
|
|
|
|
|
Logged
|
|
|
|
|
BZ (I)
Offline
Brattain Member
Karma: 162
Posts: 15729
+39 349 2158303
|
 |
« Reply #3 on: October 22, 2012, 01:44:36 pm » |
Il vantaggio del misurare il periodo di una frequenza é che la misura dura poco. Per misurare bene il numero di periodi durante un certo tempo il tempo deve essere molto maggiore del periodo percui una misura dura molto.
Misura con pulseIn(pin, HIGH, timout) e dopo con pulseIn(pin, LOW, timout) il perodo della onda. Non é importante che la misura la fai su 2 onde diverse. La frequenza é 1 fratto il periodo.
Ciao Uwe
|
|
|
|
|
Logged
|
|
|
|
|
|
|
Lamezia Terme
Offline
Shannon Member
Karma: 386
Posts: 10273
Le domande di chi vuol imparare rappresentano la sua sete di sapere
|
 |
« Reply #5 on: October 22, 2012, 01:49:16 pm » |
Tenete presente che Arduino non riesce a leggere correttamente frequenze che superino i 7MHz.
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Tesla Member
Karma: 82
Posts: 8233
:(){:|:&};:
|
 |
« Reply #6 on: October 23, 2012, 04:34:17 am » |
se la frequrenza che vuoi misurare non è stabile, allora non si può usare il sistema della pulseIN, ma puoi usare un interrupt in RISING o FALLING
|
|
|
|
|
Logged
|
|
|
|
|
Offline
God Member
Karma: 6
Posts: 541
|
 |
« Reply #7 on: October 23, 2012, 06:19:28 am » |
ma per NON STABILE cosa intendi di preciso?
|
|
|
|
|
Logged
|
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...
|
|
|
|
0
Offline
Tesla Member
Karma: 82
Posts: 8233
:(){:|:&};:
|
 |
« Reply #8 on: October 23, 2012, 06:38:03 am » |
intendo di frequenza variabile nel tempo. Se conti gli impulsi hai la media della frequenza, con la mpulsein hai una lettura a caso
|
|
|
|
|
Logged
|
|
|
|
|
Lamezia Terme
Offline
Shannon Member
Karma: 386
Posts: 10273
Le domande di chi vuol imparare rappresentano la sua sete di sapere
|
 |
« Reply #9 on: October 23, 2012, 08:25:31 am » |
Nessuno strumento normale è in grado di misurare una frequenza variabile, che valore dovrebbe dare? Al più ci sono quelli che hanno il multidisplay e mostrano in contemporanea le ultime 3-4 misure, ma come dato memorizzato. La misurazione viene fatti ad intervalli periodici di durata fissa, la visualizzazione del dato misurato viene aggiornata tra un intervallo e l'altro, se la frequenza è stabile si avrà sempre lo stesso valore, se è instabile o variabile si avrà il valore misurato nell'ultimo intervallo. In genere si imposta la cosiddetta time base (base de tempi), un selettore che fissa gli intervalli a tempi che vanno da 10secondi (per misure di decimi di Hz) a 1sec, 0,1sec, 0,01sec, ecc; maggiore è la frequenza da misurare e minore è l'intervallo di misura da usare.
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Tesla Member
Karma: 82
Posts: 8233
:(){:|:&};:
|
 |
« Reply #10 on: October 23, 2012, 09:06:35 am » |
in teoria, applicando un poco di statistica, dai il numero di valori letti, il tempo, la media, la varianza (ovvero quanto è la variazione di frequenza nell'arco di tempo), la moda...
sono tutti dati utili. Sappiamo benissimo che la perfezione non esiste, e la varianza è quella che a colpo d'occhio ti dice di quanto stai fuori precisone. la moda ti dice che c'è un forte picco ad una determinata frequenza (da non confondere con la media!)
trovo che siano tutti dati utili, per esempio per verificare la qualità di un circuito PWM->analogico (in tal caso la frequenza sarebbero le variazioni dell'uscita analogica dato un PWM fisso in imput, causate dal circuito RC o RLC), oppure per valutare la qualità della 220V, o di un trasfromatore (che se fosse perfeto avrebbe frequenza 0)
però forse sto usando una definizione di frequenza che si discosta dalla definizione elettronica/elettrotecnica
|
|
|
|
|
Logged
|
|
|
|
|
Offline
God Member
Karma: 6
Posts: 541
|
 |
« Reply #11 on: October 23, 2012, 09:45:35 am » |
ma facciamo un esempio reale:
motore sotto inverter (= che puo variare i giri 0-2800 minuto)
10 impulsì al giro quindi max frequenza 500 hz
la pulsein che problemi potrebbe avere a visualizzare i giri minuti anche se il motore è in accellerazione ?
|
|
|
|
|
Logged
|
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...
|
|
|
|
0
Offline
Tesla Member
Karma: 82
Posts: 8233
:(){:|:&};:
|
 |
« Reply #12 on: October 23, 2012, 10:20:47 am » |
pulsein ogni segnale alto/basso: cambiamento dell'ouput più veloce dell'occhio umano.
media degli impulsi nell'ultimo secondo: il valore non è reale ma leggibile da un essere umano.
uso di una pulseIn ogni secondo:possibili false letture per arrotondamento dei float e disturbi esterni
media delle pulseIn di un secondo: complicazione inutile del codice, possibilità di perdere impulsi
media degli impulsi + pulsein: controllo degli impulsi reale, e anche del loro andamento high/low
|
|
|
|
|
Logged
|
|
|
|
|
Offline
God Member
Karma: 6
Posts: 541
|
 |
« Reply #13 on: October 23, 2012, 03:58:35 pm » |
allora cosa consigli di usare per rcavare la velocita del suddetto motore (no interrupt) ?
|
|
|
|
|
Logged
|
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...
|
|
|
|
0
Offline
Tesla Member
Karma: 82
Posts: 8233
:(){:|:&};:
|
 |
« Reply #14 on: October 23, 2012, 04:39:04 pm » |
senza interrupt? perchè? c'è la attachInterrupt apposta, più facile di così!
comunque considerando la quntità di impulsi, se sono per rotazione, anche con un polling (vedi digitalRead/analogRead) in un loop, con baud il più alto possibile, sei più che a posto
edit: 2 conti; durata analogRead (la più lenta) 200micros. 1secondo = 1.000.000 micros, / 200 = 5000Hz. in RPM (*60) = 300.000 RPM max. Aggiungici il delay per la serial (in 1 secondo a 119200baud scrive 119200/10 = 11920 byte, per semplicità facciamo che in un byte ci fai stare la lettura e poi analizzi il flusse seriale con un editor esadeciomale o con un programma che passa da byte a stringa rappresentate il numero) 11.920Hz di scruitture, ovvero 1.000.000/11920=84micors a carattere
quindi 200micos di analog read + 84 micros di seriale fa 284micros. quindi 3521Hz max, ovvero 211.000 RPM max
direi che il motore fa in tempo a prendere fuoco prima che il nostro (inefficiente) loop conta-rpm vada in crisi. Se hai X segnali per giro, allora gli RPM max sono 211.000/X, ma fai attenzione che un segnale non può durare MENO di 284micros.
se non erro una digitalRead fatta con le CBI e TWI mni pare avvenga in 10micros... a te i conti.
Sappi che io ho testao con successo una UNO (e anche una 2009) a 921600 baud (anche di più mi pare, devo controllare)
|
|
|
|
« Last Edit: October 23, 2012, 04:54:12 pm by lesto »
|
Logged
|
|
|
|
|
|