Pages: 1 ... 88 89 [90] 91 92 ... 106   Go Down
Author Topic: [Multicotteri] Elettronica : IMU, MCU, Sensori ed algoritmi di controllo  (Read 99999 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

le eliche non saranno mai uguali, sopratutto se non bilanciate, ma se il problema è dell'esc è un'altra storia.

Allora che io sappia così metti il gas al massimo e poi al minimo, entri in modalità programmazione, che non è sufficiente per settare le escursioni dell'esc... Ogni esc ha la sua sequenza di "beep" che ti aiuta a fare i settaggi, ovviamente non esistono 2 procedure uguali, dipende dalla marca/modello smiley

se gli ESC scaldano cl'elica più piccola o con meno passo più aiutare, ma se la temperatura è alta meglio un esc che regga qualche ampere in più così non risci di fare scintille in volo

edit: stm32 con comunicazione seriale + lettura sensori è ok. Ora devo sistemare il programma lato PC, che penso che posterò su github con spiegazione del protocollo da usare, così iniziamo a creare un pò di tool comodi.
Il primo credo di farlo così: si aspetta la stringa:
g: %f %f %f\n per i valori giro, a per accelerometro e m per magnetometro. Non sarà obbligatorio stamapare g, m, a in ordine, e anche m si potrà totalmente saltare.
Il risultato sarà che i valori sono "mangiati" da una DCM che stamperà il risualtato a video, in oltre ci sarà uno slider per ogni valore e la possibilità di "spastare" gli assi (exempio gx da invertire con gy, oppure gx diventa -gx) perchè così si settano più comodamente gli assi dei sensori per essere allineati tra loro.
« Last Edit: January 18, 2013, 10:31:09 am by lesto » Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Newbie
*
Karma: 0
Posts: 23
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

le eliche non saranno mai uguali, sopratutto se non bilanciate, ma se il problema è dell'esc è un'altra storia.

Allora che io sappia così metti il gas al massimo e poi al minimo, entri in modalità programmazione, che non è sufficiente per settare le escursioni dell'esc... Ogni esc ha la sua sequenza di "beep" che ti aiuta a fare i settaggi, ovviamente non esistono 2 procedure uguali, dipende dalla marca/modello smiley

se gli ESC scaldano cl'elica più piccola o con meno passo più aiutare, ma se la temperatura è alta meglio un esc che regga qualche ampere in più così non risci di fare scintille in volo

edit: stm32 con comunicazione seriale + lettura sensori è ok. Ora devo sistemare il programma lato PC, che penso che posterò su github con spiegazione del protocollo da usare, così iniziamo a creare un pò di tool comodi.
Il primo credo di farlo così: si aspetta la stringa:
g: %f %f %f\n per i valori giro, a per accelerometro e m per magnetometro. Non sarà obbligatorio stamapare g, m, a in ordine, e anche m si potrà totalmente saltare.
Il risultato sarà che i valori sono "mangiati" da una DCM che stamperà il risualtato a video, in oltre ci sarà uno slider per ogni valore e la possibilità di "spastare" gli assi (exempio gx da invertire con gy, oppure gx diventa -gx) perchè così si settano più comodamente gli assi dei sensori per essere allineati tra loro.

http://forum.autoquad.org/viewtopic.php?p=5891&sid=55012e6e48a0a3ee0c91b123c11b5fbc#p5878

Diciamo che ci dovrei essere, col mio codice simulo proprio quella procedura, reimposto ai valori di default e poi testo col programmino che comunica tramite monitor seriale la velocità dei motorini in questo modo controllo in modo preciso almeno il minimo valore.
Secondo me la diversità fra una elica e l'altra può essere sopperita dal PID, se un motorino gira in modo abbastanza diverso da un altro tutti i calcoli fatti col PID vanno a quel paese.

Ho creato una piccola applicazione con processing che grafica l'andamento di GX (giroscopio su asse x) e ho notato che in presenza di urti (sbilanciamento con la mano per simulare un'interazione esterna nn prevedibile) il valore ha oscillazioni, questo con la DCM dovrebbe venire attenuato giusto?!
Logged

0
Offline Offline
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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)
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Newbie
*
Karma: 0
Posts: 23
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?!  smiley-mr-green)
Logged

0
Offline Offline
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Newbie
*
Karma: 0
Posts: 23
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: March 16, 2013, 06:10:19 pm by Fabio_automatico » Logged

0
Offline Offline
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.



Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
 
 
Code:
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.

3) 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.
« Last Edit: March 20, 2013, 04:40:53 pm by leo72 » Logged

Offline Offline
Jr. Member
**
Karma: 1
Posts: 59
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley-cry  smiley-cry  smiley-cry 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  smiley-roll-sweat

ho letto e appreso molto da http://aeroquad.com/content.php?126-PID-Tuning-Your-AeroQuad ma penso che su questo le vere domande mi verranno una volta che avrò toccato con mano smiley-kitty

Vi ringrazio immensamente per la cordiale eventuale disponibilità
ciao ciao 
Logged

0
Offline Offline
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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) )
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Jr. Member
**
Karma: 1
Posts: 59
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley-fat )

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!  smiley



Logged

0
Offline Offline
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
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

Quote
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:
Code:
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).

Quote
eventuali e migliori soluzioni?
per iniziare va più che bene
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Jr. Member
**
Karma: 1
Posts: 59
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ah, certo, si, ho sbagliato a parlare di "hardware sufficiente"
comunque certo, sapevo della necessità degli altri componenti (a parte l'UBEC) smiley 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:
Quote
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"  smiley 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 smiley



Logged

Pages: 1 ... 88 89 [90] 91 92 ... 106   Go Up
Jump to: