[Multicotteri] Elettronica : IMU, MCU, Sensori ed algoritmi di controllo

Federico:
Ma quindi la tolleranza deve essere del 328 e non dei sensori su i2c?

Si è la MCU che deve gestire i livelli a 3.3V della I2C e "tollerarli" anche se fuori specifica, il motivo per cui è meglio usare un LLC non è perché si rischia di rompere qualcosa (sempre che alimenti la IMU a 3.3V e non a 5V), è perché si è sicuri di non incorrere in troppi errori sul bus dovuti a errate interpretazioni dei livelli logici.

ma anche la IMU dovrebbe essere tollerante ai 5v no? intendo scl e sda

Io la mia IMU come per il WMP la alimento a 3.3V....
ecco le foto.. una è un pò sfocata ma si vede a colpo d'occhio che il segnale è sballato... è ciò che esce a motori armati appena acellerati (arduino e la IMU erano completamente bloccati... tutti i valori PID di default)

lesto:
ma anche la IMU dovrebbe essere tollerante ai 5v no? intendo scl e sda

Ma assolutamente no, ma quante volte devo ripeterlo che i componenti a 3V non si possono usare a 5V, solo se il produttore specifica 5V tolerant su i segnali è possibile, e solitamente vale solo per le MCU, poche, e quasi mai per gli altri componenti.
Questa è l'ultima volta che lo ripeto, il bus I2C dei sensori DEVE LAVORARE A 3.3V, poi fate come vi pare, ma non venite a lamentarvi se la IMU funziona male e/o va in avaria in poco tempo.

ratto93:
motori armati appena acellerati

Se ti dico di fare il test con il gas a 0 c'è un motivo.
Rifai la prova con il gas a 0, ovvero stick completamente verso e il basso e lascialo li, e verifica che la durata degli impulsi sia pari a 1150 us esatti, e deve rimanere inchiodata a questo valore, o a quanto hai impostato nella relativa define.

astrobeed:

lesto:
ma anche la IMU dovrebbe essere tollerante ai 5v no? intendo scl e sda

Ma assolutamente no, ma quante volte devo ripeterlo che i componenti a 3V non si possono usare a 5V, solo se il produttore specifica 5V tolerant su i segnali è possibile, e solitamente vale solo per le MCU, poche, e quasi mai per gli altri componenti.
Questa è l'ultima volta che lo ripeto, il bus I2C dei sensori DEVE LAVORARE A 3.3V, poi fate come vi pare, ma non venite a lamentarvi se la IMU funziona male e/o va in avaria in poco tempo.

appunto, se anche usiamo delle pull-up da 3.3V, nel momento in cui arduino invia un dato (o il clock), lo fa usando segnali da 5V! quindi diventa indispensabile l'uso si un LLT no?

quindi per esempio ratto in questo momentro potrebbe star friggendo a fuoco lento la sua IMU..

Di cui tra l'altro vorrei vedere cosa "vede" l'orizzonte, secondo me non è in piano.
Però è anche vero che se il multiwii usa il PWM, avevo letto che alcuno PIN non sono molto precisi, non ricordo per cosa, ma magari hanno aggirato il problema scrivendo il loro codice per il PWM

lesto:
appunto, se anche usiamo delle pull-up da 3.3V, nel momento in cui arduino invia un dato (o il clock), lo fa usando segnali da 5V! quindi diventa indispensabile l'uso si un LLT no?

2-- in elettronica di base, ripassa come funziona il bus I2C e cosa è un'uscita open drain, poi torna per gli esami di riparazione :grin:

mi son letto cos'è una open-drain... ora capisco :grin:

Potreste spiegare anche a me? :slight_smile:
ps: Astro, non e' che voglio alimentare VCC a 5v di una IMU da 3.3, la mia domanda era relativa ai canali di segnale SDA e SCL, e da qui la domanda sull' LLC

astrobeed:

ratto93:
motori armati appena acellerati

Se ti dico di fare il test con il gas a 0 c'è un motivo.
Rifai la prova con il gas a 0, ovvero stick completamente verso e il basso e lascialo li, e verifica che la durata degli impulsi sia pari a 1150 us esatti, e deve rimanere inchiodata a questo valore, o a quanto hai impostato nella relativa define.

Mi ero perso il passaggio :slight_smile:
comunque la misura è di 1050 us letti con gli occhi, e corrispondono alle specifiche del programma domani se riesco ricontrollo con un frequenzimetro così da essere sicuro...

ratto93:
Mi ero perso il passaggio :slight_smile:
comunque la misura è di 1050 us letti con gli occhi, e corrispondono alle specifiche del programma

1050 sono pochi, come minimo devono essere 1100 e comunque dipende dal modello di ESC, verifica la relativa define.

Ad ogni modo questa settimana ne ordino 4 di serie ... credo le prenderò uguali alle tue astro....

Ho innalzato da codice.. il valore da 1050 a 1100 però solamente armando i motori in 3 cominciano a girare mentre il solito sfigato del pin 10 no... cambaindo il valore la cosa non varia.. cambia solo la velocità dei motori..

ratto93:
Ho innalzato da codice.. il valore da 1050 a 1100 però solamente armando i motori in 3 cominciano a girare mentre il solito sfigato del pin 10 no... cambaindo il valore la cosa non varia.. cambia solo la velocità dei motori..

Ma scusa... se qualsiasi ESC e qualsiasi motore collegato al pin 10 non funziona, non sara' difettoso il tuo microcontrollore, piuttosto che un collegamento -se c'e' extra- tra il pin e i relativi ESC?

ratto93:
Ho innalzato da codice.. il valore da 1050 a 1100 però solamente armando i motori in 3 cominciano a girare mentre il solito sfigato del pin 10 no... cambaindo il valore la cosa non varia.. cambia solo la velocità dei motori..

Cominciamo dal fatto che il range normale di un radiocomando è compreso tra 1100 e 1900 us, quindi 1100 è l'equivalente del gas a 0 ed è normale che un ESC non si armi con tale valore visto che è troppo basso, infatti MultiWii prevede vari valori standard per la relativa define che partano da 1150 per poi salire a seconda del modello di ESC.
Non mi ricordo che modelli di ESC usi, però dovrebbero avere un modo per settare il range dello stick del gas, o si fa tramite movimenti dello stick oppure tramite l'apposita card di programmazione, se non hanno la programmabilità del range usano quello fisso 1100-1900 us con condizione di armamento a 11500 e massimo out a 1850.
Ora se dal pin 10 in uscita, col gas a 0 e motori armati, hai il corretto impulso atteso, cioè quanto impostato con la relativa define, è fuori discussione che il problema è l'ESC o il collegamento tra questo e l'ATmega328.
Col quadri fermo sul tavolo, con i motori scollegati, dando gas è normale che dopo poco tempo i comandi agli ESC cominciano a variare da soli, è dovuto al rumore presente su i sensori che in condizioni di stasi crea uno spostamento virtuale dell'assetto con conseguente reazione del software su i motori per compensare.
La stessa deriva dei comandi avviene anche tenendo il quadri bloccato sul tavolo con i motori collegati e le eliche montate, in questo caso si sommano pure gli effetti delle vibrazioni, il fenomeno cessa non appena il quadri è libero di muoversi in modo da compensare i cambi di assetto.
Ogni gruppo IMU ha il suo lato preferito dove crea la variazione d'assetto in condizioni di stasi e di conseguenza ottieni sempre che un certo motore, o più motori, tende ad accelerare, o decelerare, se cambi l'orientamento della IMU cambia di conseguenza anche il lato preferito.

Federico:

ratto93:
Ho innalzato da codice.. il valore da 1050 a 1100 però solamente armando i motori in 3 cominciano a girare mentre il solito sfigato del pin 10 no... cambaindo il valore la cosa non varia.. cambia solo la velocità dei motori..

Ma scusa... se qualsiasi ESC e qualsiasi motore collegato al pin 10 non funziona, non sara' difettoso il tuo microcontrollore, piuttosto che un collegamento -se c'e' extra- tra il pin e i relativi ESC?

ne ho già provati due.. poi magari faccio la prova con gli altri che ho nel cassetto....

ratto93:

Federico:

ratto93:
Ho innalzato da codice.. il valore da 1050 a 1100 però solamente armando i motori in 3 cominciano a girare mentre il solito sfigato del pin 10 no... cambaindo il valore la cosa non varia.. cambia solo la velocità dei motori..

Ma scusa... se qualsiasi ESC e qualsiasi motore collegato al pin 10 non funziona, non sara' difettoso il tuo microcontrollore, piuttosto che un collegamento -se c'e' extra- tra il pin e i relativi ESC?

ne ho già provati due.. poi magari faccio la prova con gli altri che ho nel cassetto....

Ciao,
domanda stupida... ma gli ESC sono tutti della stessa marca e modello ?

Si identici...

Ragazzi.. qualcuno ha mai dato un occhi a baronPilot ??? mi pare ben fatto e meno confusionario del multiwii... questa è parte del PID che dite ?

float pid(PID*pid,float dt,float setPos,float curPos)
{
  float y;

  //Second order pid implementation.
  pid->xn2=pid->xn1;
  pid->xn1=pid->xn;
  pid->xn = setPos - curPos;

  y=pid->yn1+
    pid->kp    * (pid->xn-pid->xn1)+
    pid->ki*dt * (pid->xn)+
    pid->kd/dt * (pid->xn -2*pid->xn1 + pid->xn2);
  y=flimit(-500,y,500); // TODO Windup better
  
  pid->yn1=y;
  return y;
}

è la "solita" implementazione di PID, tranne ch per la parte derivativa usa 2 vecchie differenze invece che solo una.
In oltre nella parte derivativa, in particolare

pid->xn -2

c'è quel -2 che secondo me è errato.

azz come non detto, scrivendo questa frase mi son reso conto che quel 2* deriva probabilmente dalla risoluzione di un'elevamento al quadrato derivato... oppure vuole dare doppia importanza ai 2 valori precedenti (ma non mi sembra una buona mossa)