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

se le fluttuazioni sono sinosoidali devi pulirle a mano, alcuni sensori non danno uno 0 "fisso" ma è una funzione sinouidale (astro mi corregga se dico baggianate)

lesto:
se le fluttuazioni sono sinosoidali devi pulirle a mano, alcuni sensori non danno uno 0 "fisso" ma è una funzione sinouidale (astro mi corregga se dico baggianate)

Traducendo?! come faccio a pulire a mano?! (strofinaccio e olio di gomito?! :grin:)

la sinusoide ha una frequenza, ovvero il numero di ripetizioni al secondo (vedi nel datasheet) e se te fai la media dei dati in quel range di tempo annulli l'effetto sinusoidale.

lesto:
la sinusoide ha una frequenza, ovvero il numero di ripetizioni al secondo (vedi nel datasheet) e se te fai la media dei dati in quel range di tempo annulli l'effetto sinusoidale.

Nel datasheet http://www.cdiweb.com/datasheets/invensense/PS-MPU-6000A.pdf ho trovato questo:

"11.4.3 Trace Routing
Routing traces or vias under the gyro package such that they run under the exposed die pad is prohibited.
Routed active signals may harmonically couple with the gyro MEMS devices, compromising gyro response.
These devices are designed with the drive frequencies as follows: X = 33±3Khz, Y = 30±3Khz, and
Z=27±3Khz. To avoid harmonic coupling don’t route active signals in non-shielded signal planes directly
below, or above the gyro package. Note: For best performance, design a ground plane under the e-pad to
reduce PCB signal noise from the board on which the gyro device is mounted. If the gyro device is stacked
under an adjacent PCB board, design a ground plane directly above the gyro device to shield active signals
from the adjacent PCB board."

Che dovrebbe corrispondere appunto al discorso del segnale sinusoidale giusto? Quindi facendo il valore medio di ogni spezzone a 33Khz dovrei eliminare il disturbo del quale lamento, quindi ogni 30 microsecondi faccio la media dei valori e il valore che andrò ad inserire nel PID è proprio la media, e poi azzero la media e riparte dal primo valore successivo ai 30 microsecondi?

Ragazzi dopo mesi di tentativi e letture sono ancora arenato non riesco a capire come diavolo funziona questa STM32F3 i problemi sono molteplici:

  1. Nell'IDE uKeil non riesco a complilare progetti complessi ma solo progetti stupidi come accendere luci o simili perchè il compiler mi da sempre problemi nell'includere la libreria della ST
  2. Non capisco come leggere i dati dei sensori, mi riferisco a velocità angolari, valori acc. e valori del campo magnetico.
  3. utilizzo dei timer per realizzare dei segnali PPM

Premetto che c'ho perso tempo tanto tempo anche se in parallelo approfondivo i miei studi di Kalman, tecniche di controllo etc etc. ho praticamente progettato tutto ma la mia poca esperienza in ambito PIC mi sta bloccando.
C'è qualche buona anima che può aiutarmi anche inviandomi del codice ben documentato che mi spieghi come diavolo si programma sta scheda.
Grazie mille Fabio
P.s. sono uno studente di automazione quindi i controlli sono il mio pane quotidiano ma questo non significa che sono un esperto di programmazione e protocolli per questo vi pregherei di non usare terminologia troppo tecnica

per il 2 c'è un ottimo esemio fornito sul sito.. però se non conosci i2c e SPI ti conviene prima farti un'idea osservando come si usano i sensori i2c e SPI su arduino, capisci la logica di comunicazione, e poi passi al STM32.

Per la prima domanda mai usato quell'ambiente, e per l'ultima non so, devo ancora passare ad analizzare i timer, ma anche lì tutti gli esempi SMT usano una funzione che setta il timer principale ad una certa frequenza, io modificando quel valore ottengo un iterrupt ogni microsecondo, però non mi piace come cosa, preferirei andare sul PWM con giusta frequenza e dutyCicle.

Fabio_automatico:

  1. Nell'IDE uKeil non riesco a complilare progetti complessi ma solo progetti stupidi come accendere luci o simili perchè il compiler mi da sempre problemi nell'includere la libreria della ST
  2. Non capisco come leggere i dati dei sensori, mi riferisco a velocità angolari, valori acc. e valori del campo magnetico.
  3. utilizzo dei timer per realizzare dei segnali PPM
  1. Devi copiare nella cartella principale del compilatore (C:\keil se hai fatto l'installazione standard) le cartelle "Libraries", "Peripheral_Examples" e "Utilities" che trovi nel sorgente del demo precaricato sulla scheda, in alternativa le puoi copiare all'interno del progetto, assieme alla cartella CMSIS se la usi, e cambi i percorsi delle relative path.

  2. Ci sono le funzioni già pronte nella libreria di ST, comunque sono normali device I2C e vi accedi tramite questo bus.

  3. Il PPM non lo generi tramite timer, va implementato tramite specifica routine software che si appoggia ad un timer, e relativo interrupt, come base dei tempi sia per generare i singoli impulsi che per il frame.

astrobeed:

Fabio_automatico:

  1. Nell'IDE uKeil non riesco a complilare progetti complessi ma solo progetti stupidi come accendere luci o simili perchè il compiler mi da sempre problemi nell'includere la libreria della ST
  2. Non capisco come leggere i dati dei sensori, mi riferisco a velocità angolari, valori acc. e valori del campo magnetico.
  3. utilizzo dei timer per realizzare dei segnali PPM
  1. Devi copiare nella cartella principale del compilatore (C:\keil se hai fatto l'installazione standard) le cartelle "Libraries", "Peripheral_Examples" e "Utilities" che trovi nel sorgente del demo precaricato sulla scheda, in alternativa le puoi copiare all'interno del progetto, assieme alla cartella CMSIS se la usi, e cambi i percorsi delle relative path.

  2. Ci sono le funzioni già pronte nella libreria di ST, comunque sono normali device I2C e vi accedi tramite questo bus.

  3. Il PPM non lo generi tramite timer, va implementato tramite specifica routine software che si appoggia ad un timer, e relativo interrupt, come base dei tempi sia per generare i singoli impulsi che per il frame.

  1. Devo copiare semplicemente le cartelle nel percorso che mi hai indicato senza impostare nessun path all'interno del keil?

2)le funzioni le ho trovate per entrambi i sensori purtroppo non sono riuscito a capire in che unità di misura le rilascia anche leggendo l'esempio DEMO, in cui vengono usate queste funzioni. Inoltre, sempre spulciando nella funzioni definite in DEMO noto che i dati rilasciati dalla funzione READ vanno trattati ad esempio in DEMO leggo:

L3GD20_Read(&tmpreg,L3GD20_CTRL_REG4_ADDR,1);
  
  L3GD20_Read(tmpbuffer,L3GD20_OUT_X_L_ADDR,6);
  
  /* check in the control register 4 the data alignment (Big Endian or Little Endian)*/
  if(!(tmpreg & 0x40))
  {
    for(i=0; i<3; i++)
    {
      RawData[i]=(int16_t)(((uint16_t)tmpbuffer[2*i+1] << 8) + tmpbuffer[2*i]);

di cui non capisco pienamente il significato.

  1. La routine ho idea di come si fa ma da come ho capito ho bisogno di una variabile temporale generata da un timer interno alla scheda, ed è li che mi blocco.

So che forse faccio troppe domande e che forse me la devo piangere un po' da solo però vi sarei grato se potreste darmi una mano anche fornendo codici di esempio di funzioni che generano segnali PPM e che leggono i segnali dei sensori nel SI per asse.

Buongiorno a tutti!
Sono a chiedere il vostro aiuto perché nella grande quantità di informazioni riguardanti il mondo dei quadricotteri, ancora mi sono poco chiari taluni passaggi; ho letto con molta attenzione svariati post sia nel forum che fuori; e, le domande che sono qui a porvi sono purtroppo ancora in me e spero vogliate e possiate aiutarmi a risolverle;

presento brevemente la mia situazione:
Con il fine di costruire un quadricottero, ho raccolto tutte le informazioni che ho potuto a riguardo; e, fra le immense possibilità che mi si sono presentate una mi ha in particolar modo affascinato: l'impiego di arduino, infatti mi semplificherebbe e renderebbe molto più accessibile questo mondo oltre che interessante.

Ho letto molto sul sistema che impiega arduino nano ed il giroscopio ed accelerometro dell controller wii (multiWii), ed ancora cercando per i meandri del web mi sono imbattuto in qualcosa che impiega sempre Atmel, ma che sembrerebbe racchiuda in sè sia arduino mini che sensori accelerometro e giroscopio http://www.ebay.it/itm/130726621570?ssPageName=STRK:MEWAX:IT&_trksid=p3984.m1423.l2649#ht_1851wt_952 potreste voi confermarmi che effettivamente è così? dovrei dunque connettere i 3 cavetti che escono dal regolatore di ciascun motore brushless, sensori vari a questo circuito e basta? Altro dubbio... Non possiede porta USB apparentemente, come posso quindi comunicarle lo sketch??

Altra domanda: dal momento che non ho ancora provato a buttare giù uno sketch, e che non ho mai avuto a che fare con PPM mi crea dei problemi capire anche di quanti comandi necessita il radiocomando che dovrei acquistare...
Il problema dei prezzi è un grande problema, ed avrei adocchiato il "Turnigy 9X 9Ch Transmitter w/ Module & 8ch Receiver (Mode 2) (v2 Firmware)" decisamente accessibile rispetto alla maggior parte degli esempi proposti sul web... Ma ho anche letto che spesso presenta dei problemi costitutivi... Avreste voi alternative similmente accessibili da propormi? o potete confortarmi dicendo che tutto sommato, anche se costa poco, adempie al proprio compito?
Inoltre non mi è chiaro il fatto che si consiglia di possedere almeno 5 canali, rispettivamente per: motore, pitch, roll, yaw, stable mode; proprio non mi è chiaro... Comprendo che beccheggio, rollio e imbardata siano i movimenti possibili sui 3 assi del velivolo, ma proprio non capisco come mai si debba dedicare a ciascuno un canale del radiocomando =( =( =( o cosa significhi un canale per i motori piuttosto che per una modalità di volo... Insomma non so proprio come funziona la parte radiocomando attuatori, vi prego aiutatemi :cold_sweat:

ho letto e appreso molto da Loading... ma penso che su questo le vere domande mi verranno una volta che avrò toccato con mano :slight_smile:

Vi ringrazio immensamente per la cordiale eventuale disponibilità
ciao ciao

la scheda è ok, vale quello che costa.
Per programmarla hai bisogno di un adattatore da USB a RS232 ttl 5v, si trovano anche sullo store di questo sito a 10/15€

per la TX/RX io ho preso qulla di hobbyking 6 canali, 40€ compresa spedizione (occhio a prenderla dai magazzini in europa se no ti arriva dopo un mese e con il 30% di dazio)

ogni canale immagina che può dare dei valori da 0% a 100%:
motore: dai potenza da 0% a 100%
pitch: 0% = vai a sinistra, 50% = stai fermo, 100% = vai a destra
etc...

quindi ti serve un canale per ogni possibile moviemto +1 per ogni comando (ok, i comandi potresti farli che al 10% fai uno, al 20% fai l'altro, ma poi a mano beccare la posizione giusta.... nella 6ch che ho proposto sono 4 canali proporzionali (da 0% a 100%) e 2 switch (0% o 100%, senza vie di mezzo) )

Grazie per la disponibilità Lesto,
quindi necessito solo di quella scheda ed ho già tutto per quanto riguarda l'hardware di base per un quadricottero?
E secondo te (perché questo fatto non l'ho compreso molto) con quante altre funzioni potrei implementare questa disposizione?
e se ti va... non è che mi potresti consigliare altre eventuali e migliori soluzioni? (mi rendo conto sia parecchio vaga come richiesta... fanne ciò che vuoi :drooling_face: )

Ora mi è molto più chiara la parte riguardante il radiocomando, ti ringrazio davvero molto! e grazie molte anche per aver condiviso la tua esperienza personale! :slight_smile:

quindi necessito solo di quella scheda ed ho già tutto per quanto riguarda l'hardware di base per un quadricottero?

no, ti serve la struttura, gli esc, i motori, un bec 5V (meglio ubec), rx/tx, eliche (tante!), il convertotore USB/seriale per programmare la scheda

E secondo te (perché questo fatto non l'ho compreso molto) con quante altre funzioni potrei implementare questa disposizione?

che vuol dire?
dal tuo link:

GIMBAL -------- PTZ stabilizer independent (non-flight control purposes)
BICOPTER ------ 2-axis aircraft Avatar
Tricopter ----- Y3 (Y-type 3-axis)
QUADP --------- 4-axis + classic mode
QUADX --------- 4-axis × mode
Y4 ------------ Y-type four-axis
Y6 ------------ Y-type 6-axis
HEX6 ---------- 6 axis + mode
HEX6X --------- 6-axis × mode
FLYING WING --- flying wing with a (non-multi-axis machine, the program is in testing phase).

eventuali e migliori soluzioni?

per iniziare va più che bene

Ah, certo, si, ho sbagliato a parlare di "hardware sufficiente"
comunque certo, sapevo della necessità degli altri componenti (a parte l'UBEC) :slight_smile: mi sono espresso male

Urca, sul fatto delle tante eliche non pensavo xD comunque con dei motori da 920 KV ed un telaio leggero, senza attualmente accessori tipo videocamera e simili... tu che eliche consiglieresti per iniziare?

con la domanda poco chiara:

E secondo te (perché questo fatto non l'ho compreso molto) con quante altre funzioni potrei implementare questa disposizione?

Intendevo chiedere se conoscevi quante altre funzioni avrei potuto aggiungere, ad esempio dal punto di vista sensoristico, alla scheda precedentemente mostrata... Magari in futuro... Dopo la fase "impara a conoscere le basi" :slight_smile: perché purtroppo non l'ho capito dai dati forniti sulla scheda.

Ancora grazie per la tua grande pazienza e disponibilità lesto!
Mi stai aiutando davvero molto! Grazie :slight_smile:

Phanto:
comunque con dei motori da 920 KV ed un telaio leggero

920.000 Volt ?

Testato:
920.000 Volt ?

920 kV vuol dire che il motore fa 920 rpm (a vuoto) per ogni Volt di tensione applicata, in questo caso la k è la costante che indica il rapporto tra giri e tensione, si esprime in rpm/Volt.

Intendevo chiedere se conoscevi quante altre funzioni avrei potuto aggiungere, ad esempio dal punto di vista sensoristico, alla scheda precedentemente mostrata... Magari in futuro... Dopo la fase "impara a conoscere le basi" perché purtroppo non l'ho capito dai dati forniti sulla scheda.

credo nessuna, essendo quella board fatta per funzionare così.. ma visto il prezzo chissene (è veramente buono!), al prossimo giro spenderai qualche (tanto) euro in più e potrei farti una schedina più seria. Prima però stai schiscio e vedise la cosa fa per te.

tu che eliche consiglieresti per iniziare?

dipende dalla potenza espressa del motore, non dal numero di giri. Di solito i motori lenti hanno una forza di torsione (torque) maggiore, e quindi possono montare eliche più grandi di motori con alto kV.

metti il modello del motore

lesto:
dipende dalla potenza espressa del motore, non dal numero di giri.

Dipende da tutte e due le cose perché la coppia altro non è che la potenza divisa per il numero di giri, un motore potente che fa molti giri deve usare un'elica più piccola, e con meno passo, di un motore lento con meno potenza.
Esistono appositi calcoli per determinare l'elica ottimale in base al tipo di motore, dato che sono molto complessi non è semplice farseli da soli, però ci sono software dedicati al volo elettrico, uno dei migliori è MotoCalc, che fanno questi conti per noi partendo dal modello specifico del motore o dalle sue caratteristiche tecniche.
C'è un ottimo calcolatore online specifico per i multicotteri che permette di dimensionare facilmente motore/elica/batteria in base alle esigenze.

link nei preferiti :slight_smile:

per "potenza espressa" e "forza di torsione" intendevo coppia, che in inglese si dice torque, ma non ricordo mai come si traduce.. chiedo scusa per la confusione.

Grazie!
Quando avrò stabilito tutto il necessario userò quel fantastico calcolatore, grazie mille! :slight_smile:

Ah, comunque dovrebbe esser possibile aggiungere magnetometro e barometro mi sembra, non sono inclusi, ed addirittura GPS... Confermate?

bene, penso di esserci quasi...

Ma non ho ancora compreso l'UBEC, non dovrebbero avere già una funzione di BEC gli ESC di ciascun motore?
Grazie

Phanto:
Ah, comunque dovrebbe esser possibile aggiungere magnetometro e barometro mi sembra, non sono inclusi, ed addirittura GPS... Confermate?

Si però a seconda del software che usi non è detto che il magnetometro e il barometro vengano utilizzati sul serio.
Per quanto riguarda il gps con processori a 8 bit è praticamente inutile, puoi solo leggerne i dati e trasmetterli a terra, può far comodo per sapere quota e velocità, però scordati il volo autonomo tra waypoint e/o il semplice return to home automatico, non hai abbastanza potenza di calcolo per queste cose.

Ma non ho ancora compreso l'UBEC, non dovrebbero avere già una funzione di BEC gli ESC di ciascun motore?

Non tutti gli ESC hanno il bec e se l'hanno solitamente fa letteralmente "schifo", sopratutto se parliamo di ESC cinesi da pochi soldi, molto meglio usarne uno dedicato e collegare in comune solo il GND degli ESC, mi raccomando collegamento a stella partendo da un unico punto di massa.