Questo è quello che ho capito io sbattendoci la testa per un po', poi potrei sbagliarmi, ma fino ad ora ha funzionato...
La MPU6000 ha due modi per essere letta: con o senza DMP.
Senza DMP è quella che tu definisci RAW, con DMP è quella che tu chiami con angoli.
La prima non fa nessuna elaborazione del dato che viene servito così com'è "alla velocità" che imposti tramite il registro SMPLRT_DIV. L'unica manipolazione viene fatta con il filtro che imposti tramite DLPF_CFG.
Se il filtro è 0, i dati vengono resi disponibili a 8KHz (1KHz per gli acc), altrimenti acc e gyro sono resi disponibili con la seguente formula:
Quindi se imposto il filtro a 0 (DLPF_CFG) e il SMPLRT_DIV a 0 avrò i gyro a 8KHz e gli acc a 1KHz.
Se invece metto il filtro ad un valore diverso da 0 i gyro saranno disponibili ad 1KHz così come gli acc.
Quindi la formula tiene conto del valore Output Rate.
Quindi se voglio i dati a 200Hz, mi basta impostare il valore SMPLRT_DIV a 4 (e questo è quello che avviene su APM)
Ogni volta che la MPU ha un dato nuovo, genera un interrupt che può (e lo è in VRBRAIN) essere collegato alla MCU per avere il dato nell'istante esatto in cui viene generato.
Prima dello scheduler usavamo questa modalità.
Caso completamente diverso è il DMP, che in pratica ti fornisce i valori in quaternion di roll pitch e yaw già ruotati e manipolati. In pratica sostituisce in toto la DCM dando più respiro alla MCU.
Questa versione io personlamente non l'ho mai testata, ma non sembra sia stata molto apprezzata da chi l'ha provata.
E.
La MPU6000 ha due modi per essere letta: con o senza DMP.
Senza DMP è quella che tu definisci RAW, con DMP è quella che tu chiami con angoli.
La prima non fa nessuna elaborazione del dato che viene servito così com'è "alla velocità" che imposti tramite il registro SMPLRT_DIV. L'unica manipolazione viene fatta con il filtro che imposti tramite DLPF_CFG.
Se il filtro è 0, i dati vengono resi disponibili a 8KHz (1KHz per gli acc), altrimenti acc e gyro sono resi disponibili con la seguente formula:
codice:
Sample Rate = Gyroscope Output Rate / (1 + SMPLRT_DIV)
Se invece metto il filtro ad un valore diverso da 0 i gyro saranno disponibili ad 1KHz così come gli acc.
Quindi la formula tiene conto del valore Output Rate.
Quindi se voglio i dati a 200Hz, mi basta impostare il valore SMPLRT_DIV a 4 (e questo è quello che avviene su APM)
Ogni volta che la MPU ha un dato nuovo, genera un interrupt che può (e lo è in VRBRAIN) essere collegato alla MCU per avere il dato nell'istante esatto in cui viene generato.
Prima dello scheduler usavamo questa modalità.
Caso completamente diverso è il DMP, che in pratica ti fornisce i valori in quaternion di roll pitch e yaw già ruotati e manipolati. In pratica sostituisce in toto la DCM dando più respiro alla MCU.
Questa versione io personlamente non l'ho mai testata, ma non sembra sia stata molto apprezzata da chi l'ha provata.
E.
Originariamente inviato da danveal
Visualizza il messaggio
Commenta