In tutti i casi ti scusiamo z3us ![]()
A parte il trovare la ruota tonda bella e che fatta (che spesso non dispiace), guarda quanto è bello ed interessante scambiarsi opinioni e studiare teoricamente le cose.
E' anche uno dei pochi, se non l'unico mio post, dove non si polemizza o si va OT !
Quasi non ci credo.
Comunque grazie mille della segnalazioni appena posso ci do un occhio per capire quanto è diverso come approccio da quello che stiamo utilizzando.
@lesto
Tornando a noi per ricavare i tempi avevo pensato di giocare a questo modo :
Interrupt 0 Rising e Falling su PD2 gestiti in questa maniera
le variabili che ricavano i timing sono volatile unsigned long
void interruptEncoderRising()
{
long currentmicros = micros();
// se capita durante l'overflow somma i microsecondi precedenti
if(currentmicros < tmp_micros)
{
pulse_intervall = ulongMaxVal - tmp_micros + currentmicros;
}
else
{
pulse_intervall = currentmicros - tmp_micros;
}
tmp_micros = currentmicros ;
if(PIND&3)
pulse++;
else
pulse--;
}
void interruptEncoderFalling()
{
long currentmicros = micros();
if(currentmicros < tmp_micros)
{
pulse_intervall = ulongMaxVal - tmp_micros + currentmicros;
}
else
{
pulse_duration = currentmicros - tmp_micros;
}
tmp_micros = 0;
}
Però come dicevi tu acquisire i dati cosi a muzzo, non serve a nulla, ci sarebbe da acquisire almento un migliaio di campioni e fare la media, ma soprattutto mi servirebbe di avere un motore che fà girare l'encoder ad un a velocità abbastanza costante, altrimenti serve a poco mi sà.
Quindi dovrei acquisire la media di mille campioni di una rotazione costante ad esempio di 1500rpm ?
Ma mi è venuto un dubbio ,na volta ricavati cosa ci faccio ?
![]()