annuncio

Comprimi
Ancora nessun annuncio.

MultiWii Quad! Alternativa ad Aeroquad/Baronpilot con sensori wii

Comprimi
X
  • Filtro
  • Ora
  • Visualizza
Elimina tutto
nuovi messaggi

  • Originariamente inviato da biv2533 Visualizza il messaggio
    @paperink
    non ho ancora provato a X, o meglio sono partito con il settaggio a X per volarci in FPV , ma siccome sto' facendoci amicizia a vista e ho messo i led solo su un bvraccio al momento sono tornato a +

    A logica direi che la tua osservazione sui PID e' corretta
    E' l'unica spiegazione che riesco a darmi... in ogni caso aspettiamo conferma da qualche altra esperienza
    Facciamo volare anche i loro sogni... www.sorrisinelmondo.it

    Commenta


    • E' possibile utilizzare ESC con frequenza PPM < 490Hz?

      Ciao a tutti!
      Il titolo in effetti è poco chiaro. La domanda è: se gli esc a disposizione non dovessero rispettare quanto raccomandato da Alexinparis:

      "4) Be sure your ESC can support PPM with 490Hz refresh rate.
      It is the case for low cost SuperSimple and Turnigy Plus ESCs. Note the refresh rate is not tied to the cost of ESCs ;) "

      a parte il fatto che di solito l'informazione se un tipo di ESC supporta o no una certa frequenza non è, di solito, immediatamente reperibile e se comunque uno non potesse sostituire per una qualche ragione gli ESC che possiede...allora in tal caso non si potrebbe adattare il software Multiwii per tentare di utilizzarli ugualmente? Qualcuno saprebbe trovare il modo di modificare il programma per abbassare tale frequenza? Io ho cercato un po' oggi fra le righe ma senza risultato.

      Ciao!
      Ultima modifica di Perryosio; 03 novembre 10, 23:05.
      http://perry-piermaria.blogspot.com/

      Commenta


      • Originariamente inviato da Perryosio Visualizza il messaggio
        Qualcuno saprebbe trovare il modo di modificare il programma per abbassare tale frequenza? Io ho cercato un po' oggi fra le righe ma senza risultato.

        Ciao!
        Allora, il pilotaggio dei motori usa la funzione AnalogWrite, che fa uscire un segnale PWM a 490hz (Arduino - AnalogWrite) controllandone il duty cycle.

        Quindi per abbassare la frequenza di pilotaggio bisogna mettere mano al codice. Una delle possibilità è pilotare solo utilizzando i segnali con duty cycle 0 - 100%, introducendo dei ritardi in modo da generare una frequenza di refresh più bassa, come ad esempio si fa per pilotare un servocomando.

        Una delle strategie può essere questa:

        // ****servo yaw with a 50Hz refresh rate****
        // prescaler is set by default to 64 on Timer0
        // Arduino Duemilanove : 16MHz / 64 => 4 us
        // 256 steps = 1 counter cycle = 1024 us
        // algorithm strategy:
        // pulse high
        // do nothing for 1000 us
        // do nothing for [0 to 1000] us
        // pulse down
        // do nothing for 18 counter cycles

        Ovvero, per pilotare qualcosa a 50Hz:
        - metti il livello del pin in uscita ad HIGH;
        - aspetta 1000 us;
        - aspetta un tempo compresotra 0 e 1000 us in base al segnale che vuoi mandare al servo/regolatore;
        - metti il livello del pin in uscita a LOW;
        - aspetta per 18 cicli.

        Che è appunto la routine di pilotaggio per il servo di coda del tricottero nel codice multiwii, dove però è stato utlizzato un approccio più veloce, sostituendo il digitalWrite con l'indirizzo fisico del PIN (come suggerito qui:
        To use or not use digitalWrite « Bill Grundmann’s Blog)

        codice:
        #ifdef TRI
        void initializeServo() {
          pinMode(3,OUTPUT);
          TCCR0A = 0; // normal counting mode
          TIMSK0 |= (1<<OCIE0A); // Enable CTC interrupt
        }
        
        ISR(TIMER0_COMPA_vect) {
          static uint8_t state = 0;
          static uint8_t count;
        
          if (state == 0) {
            PORTD |= 1<<3; // this is 25 time faster than DigitalWrite ! coded for Digital Pin 3 only
            OCR0A+= 250; // 1000 us
            state++ ;
          } else if (state == 1) {
            OCR0A+= ServoYaw; // 1000 + [0-1020] us
            state++;
          } else if (state == 2) {
            PORTD &= ~(1<<3);
            count = 16; // 18 x 1020 us
            state++;
            OCR0A+= 255; // 1020 us
          } else if (state == 3) {
            if (count > 0) count--;
            else state = 0;
            OCR0A+= 255;
          }
        }
        #endif
        Adottando lo stesso algoritmo si possono scrivere nuove routine di pilotaggio per i motori a frequenza inferiore (anche non necessariamente utilizzando gli indirizzi fisici dei pin, ma semplicemente la digitalwrite(Pindelmotore, HIGH) e digitalwrite(Pindelmotore, LOW) ).

        Sapendo questo non dovrebbe esserti difficile modificare il codice per le tue esigenze, provando a pilotare un motore a frequenze più basse.

        Se hai bisogno di altro posso scriverti una versione che può andar bene per pilotare servi invece che motori...
        Ultima modifica di jhoexp; 04 novembre 10, 13:21.
        Johnny
        (GTE - Torino)
        Out of sight, NOT out of mind.

        Commenta


        • Originariamente inviato da DavideDR Visualizza il messaggio
          Grazie, già avevo comiciato a leggere in effetti ma una cosa, non avendo ancora regolatri e motori posso provare con 4 servi il funzionamento?
          Qui trovi una miniguida sintetica ed interesante:

          BuildLog for the ArduWiino NK Quadrocopter - RC Groups

          Un saluto, Enrico.

          Primum vivere, deinde philosophare.

          Commenta


          • non potete usare direttamente la libreria Servo.h? almeno evitate qualche bug, poi magari è pure ottimizzata meglio.. non so, poi non l'ho mai provata. So che ha un limite di servi contemporanei, ma si può alzare con un'altra libreria in caso

            Commenta


            • Originariamente inviato da jhoexp Visualizza il messaggio
              Allora, il pilotaggio dei motori usa la funzione AnalogWrite, che fa uscire un segnale PWM a 490hz (Arduino - AnalogWrite) controllandone il duty cycle.
              ...
              Sapendo questo non dovrebbe esserti difficile modificare il codice per le tue esigenze, provando a pilotare un motore a frequenze più basse.

              Se hai bisogno di altro posso scriverti una versione che può andar bene per pilotare servi invece che motori...
              Ciao Jhoexp! Grazie per la puntuale e competente risposta.
              Vediamo se ho capito bene:
              per pilotare i motori con una frequenza inferiore a quella standard di arduino (490 Hz) non si può modificare un numero da qualche parte nel programma ma occorre inserire un pezzetto di programma così come è stato fatto in Multiwii per pilotare il servo a 50 Hz. In pratica questo pezzetto in più di programma deve dire che la frequenza degli impulsi che vanno ai servi (attraverso i pin 9, 10 e 11) deve essere diminuita impostando uno stato "high" per 1000 us, impostando poi "low" per un certo numero (di cicli); questo valore è 18 se si vuole ottenere una frequenza di 50 Hz. Immagino che per i miei esc potrei provare un valore tipo 1,5 o 2, o 3.
              E' esatto? Se è esatto mi servirebbe però sapere dove si potrebbe inserire tale pezzo di codice; le mie conoscenze di programmazione sfiorano lo zero....
              se non erro il pezzo di codice da utilizzare è quello che contiene le seguenti righe:

              PORTD &= ~(1<<3);
              count = 16; // 18 x 1020 us
              state++;
              OCR0A+= 255; // 1020 us

              e il valore da cambiare sarebbe quel "16", che andrebbe diminuito se si vuole impostare una frequenza superiore ai 50 Hz necessari al servo, giusto?


              Poi domani mi iscrivo ad un corso di cinese...potrebbe essere + facile per me...

              Thanks!
              http://perry-piermaria.blogspot.com/

              Commenta


              • Originariamente inviato da Perryosio Visualizza il messaggio
                Ciao Jhoexp! Grazie per la puntuale e competente risposta.
                Vediamo se ho capito bene:
                per pilotare i motori con una frequenza inferiore a quella standard di arduino (490 Hz) non si può modificare un numero da qualche parte nel programma ma occorre inserire un pezzetto di programma così come è stato fatto in Multiwii per pilotare il servo a 50 Hz. In pratica questo pezzetto in più di programma deve dire che la frequenza degli impulsi che vanno ai servi (attraverso i pin 9, 10 e 11) deve essere diminuita impostando uno stato "high" per 1000 us, impostando poi "low" per un certo numero (di cicli); questo valore è 18 se si vuole ottenere una frequenza di 50 Hz. Immagino che per i miei esc potrei provare un valore tipo 1,5 o 2, o 3.
                E' esatto? Se è esatto mi servirebbe però sapere dove si potrebbe inserire tale pezzo di codice; le mie conoscenze di programmazione sfiorano lo zero....
                se non erro il pezzo di codice da utilizzare è quello che contiene le seguenti righe:

                PORTD &= ~(1<<3);
                count = 16; // 18 x 1020 us
                state++;
                OCR0A+= 255; // 1020 us

                e il valore da cambiare sarebbe quel "16", che andrebbe diminuito se si vuole impostare una frequenza superiore ai 50 Hz necessari al servo, giusto?


                Poi domani mi iscrivo ad un corso di cinese...potrebbe essere + facile per me...

                Thanks!
                Ciao Perry, devi utilizzare l'intero ciclo che ti ho scritto per fare l'uscita in pwm alla frequenza che desideri, non solo le 3 righe di codice che hai riportato, e sostituirlo al posto della analogWrite nella funzione di controllo dei motori.

                Comunque quello che ti ho riportato è uno solo dei possibili modi per controllare la frequenza del pwm, ma sicuramente ci sono modi più semplici per farlo. Mi sembra strano non sia possibile utilizzare i timer a monte per fare sì che la frequenza in uscita sia più bassa.

                Questo week-end vedo di interessarmi alla cosa e do un'occhiata ai forum di arduino, sicuramente ci saranno diversi post sull'argomento.

                Comunque non è detto che il problema degli esc del supertricottero sia (solo) la frequenza del pwm. Magari banalmente non si inizializzano correttamente e basta rivedere la routine di inizializzazione (magari mantenendo il comando al massimo per più tempo o aggiungere del delay) per sistemare la cosa.

                Hai fatto un video del problema che mostri il comportamento degli esc all'accensione? hai provato ad accenderli prima e dopo l'elettronica per vedere se il comportamente cambia o se ti sembra che si armino correttamente?
                Johnny
                (GTE - Torino)
                Out of sight, NOT out of mind.

                Commenta


                • Originariamente inviato da jhoexp Visualizza il messaggio
                  Ciao Perry, devi utilizzare l'intero ciclo che ti ho scritto per fare l'uscita in pwm alla frequenza che desideri, non solo le 3 righe di codice che hai riportato, e sostituirlo al posto della analogWrite nella funzione di controllo dei motori.
                  ...
                  ...
                  Hai fatto un video del problema che mostri il comportamento degli esc all'accensione? hai provato ad accenderli prima e dopo l'elettronica per vedere se il comportamente cambia o se ti sembra che si armino correttamente?
                  Ciao e grazie per la risposta!

                  Sabato faremo senz'altro un video, saremo ben felici di fare tutte le prove di inizializzazione degli ESC con la GUI (l'altra volta non funzionava) che, spero, ci GUIdi bene nell'intento così vedremo innanzitutto i valori dei comandi provenienti dalla radio e potremo impostarli con precisione; quindi fare l'inizializzazione giusta per gli ESC e capire se è proprio necessario inserire quel pezzo di codice.

                  Ah volevo dire, discorso a parte, ho fatto delle prove con i miei Multiwii (ne ho 3 adesso, 2 tri e 1 quad)) ed ho visto che la schedina WM+ deve essere allineata gometricamente con molta precisione rispetto al multirotore, altrimenti le correzioni tendono a far oscillare il velivolo come una danzatrice del ventre...; avevo voluto provare a passare dalla configurazione a X a quella a + senza riallineare la WM+ ed il risultato è stato interessante...!

                  Cmq se ti dovesse per caso venire qualche idea + semplice per il discorso di cui sopra...ben volentieri.

                  Ciao, alla prox!
                  http://perry-piermaria.blogspot.com/

                  Commenta


                  • Ma infatti si può fare molto più semplicemente!!!
                    E' bastato cercare arduino pwm frequency ed è venuto giù di tutto.
                    Si può agire direttamente modificando il prescaler per i timer che gestiscono i pin del pwm
                    Basta stare attenti a non toccare i timer che servono anche ad altro.

                    Secondo quello che scrivono qui: Arduino playground - TimerPWMCheatsheet per cambiare la frequenza pwm dei pin 3,11 e 9,10 (che usano lo stesso timer a coppie) dovrebbe essere sufficiente aggiungere nella void setup()

                    TCCR1B = TCCR1B & 0b11111000 | <setting>; //PWM frequency per i pin 9, 10

                    TCCR2B = TCCR2B & 0b11111000 | <setting>; //PWM frequency per i pin 3, 11


                    dove setting è:

                    Pins 9 and 10: controlled by timer 1 Setting Divisor Frequency
                    0x01 1 31250
                    0x02 8 3906.25
                    0x03 64 488.28125
                    0x04 256 122.0703125
                    0x05 1024 30.517578125


                    Pins 11 and 3: controlled by timer 2 Setting Divisor Frequency
                    0x01 1 31250
                    0x02 8 3906.25
                    0x03 32 976.5625
                    0x04 64 488.28125
                    0x05 128 244.140625
                    0x06 256 122.0703125
                    0x07 1024 30.517578125


                    Quindi ad esempio puoi usare 0x04 e 0x06 per scendere a 122 hz.

                    Per il tricottero non so che pin usi, forse il controllo del servo è scritto per il pin 3 e quindi andrebbero rivisti i delay anche lì se cambi lo scaler del timer.

                    Comunque provo sul mio quadri e ti faccio sapere!
                    Johnny
                    (GTE - Torino)
                    Out of sight, NOT out of mind.

                    Commenta


                    • Originariamente inviato da jhoexp Visualizza il messaggio
                      Ma infatti si può fare molto più semplicemente!!!
                      E' bastato cercare arduino pwm frequency ed è venuto giù di tutto.
                      Si può agire direttamente modificando il prescaler per i timer che gestiscono i pin del pwm
                      Basta stare attenti a non toccare i timer che servono anche ad altro.

                      Secondo quello che scrivono qui: Arduino playground - TimerPWMCheatsheet per cambiare la frequenza pwm dei pin 3,11 e 9,10 (che usano lo stesso timer a coppie) dovrebbe essere sufficiente aggiungere nella void setup()

                      TCCR1B = TCCR1B & 0b11111000 | <setting>; //PWM frequency per i pin 9, 10

                      TCCR2B = TCCR2B & 0b11111000 | <setting>; //PWM frequency per i pin 3, 11


                      dove setting è:

                      Pins 9 and 10: controlled by timer 1 Setting Divisor Frequency
                      0x01 1 31250
                      0x02 8 3906.25
                      0x03 64 488.28125
                      0x04 256 122.0703125
                      0x05 1024 30.517578125


                      Pins 11 and 3: controlled by timer 2 Setting Divisor Frequency
                      0x01 1 31250
                      0x02 8 3906.25
                      0x03 32 976.5625
                      0x04 64 488.28125
                      0x05 128 244.140625
                      0x06 256 122.0703125
                      0x07 1024 30.517578125


                      Quindi ad esempio puoi usare 0x04 e 0x06 per scendere a 122 hz.

                      Per il tricottero non so che pin usi, forse il controllo del servo è scritto per il pin 3 e quindi andrebbero rivisti i delay anche lì se cambi lo scaler del timer.

                      Comunque provo sul mio quadri e ti faccio sapere!
                      Grande!

                      Questa è una bella prova da fare!....adesso prima rileggo per capire bene, poi provo a fare la modifica ed eventualmente sabato facciamo le prove con il software modificato!

                      Alla prox e grazie ancora Jho!
                      http://perry-piermaria.blogspot.com/

                      Commenta


                      • ragazzi ma la v.1.3 è la più recente?
                        l'orientamento del wiimotion plus è uguale per tutti i giro originali? quindi con l'orientamento come da foto del signore francese?

                        grazie mille

                        Commenta


                        • Originariamente inviato da jack-frank Visualizza il messaggio
                          ragazzi ma la v.1.3 è la più recente?
                          l'orientamento del wiimotion plus è uguale per tutti i giro originali? quindi con l'orientamento come da foto del signore francese?

                          grazie mille
                          Sì, la 1.3 è l'ultima e ha il pid dinamico.
                          L'orientamento è lo stesso per tutti, ma chissenefrega.
                          Mettilo come ti pare e poi ti cambi il codice per orientarlo come l'hai messo.
                          Johnny
                          (GTE - Torino)
                          Out of sight, NOT out of mind.

                          Commenta


                          • Perry ho provato e sicuramente cambia la frequenza di pilotaggio degli esc.
                            I miei vanno in programmazione se li metto a 250Hz e non riesco ad armarli se scendo di frequenza (120 Hz e <), devo trovare una sequenza di inizializzazione che vada bene a frequenze più basse di 490 Hz.
                            Johnny
                            (GTE - Torino)
                            Out of sight, NOT out of mind.

                            Commenta


                            • Originariamente inviato da jhoexp Visualizza il messaggio
                              Perry ho provato e sicuramente cambia la frequenza di pilotaggio degli esc.
                              I miei vanno in programmazione se li metto a 250Hz e non riesco ad armarli se scendo di frequenza (120 Hz e <), devo trovare una sequenza di inizializzazione che vada bene a frequenze più basse di 490 Hz.
                              Perfetto Jho!
                              quando ci sarà la tua indicazione sulla migliore procedura d'avvio proverò ad avventurarmi in prove su tutti gli esc che riuscirò a provare.
                              Aggiungo ad esempio
                              TCCR1B = TCCR1B & 0b11111000 |0x04 256 122.0703125
                              TCCR2B = TCCR2B & 0b11111000 |0x04 256 122.0703125

                              all'inizio dove c'è void (), è giusto?

                              Da quello che dici e da quello che risulta in seguito a colloqui con altri amici il comportamento dei vari ESC può variare; ad esempio i MAG8 che, arrivano in combo con i motori Towerpro, cominciano a far casino già prima di toglierli dalla scatola in arrivo da HongKong . Invece gli HK super Simple o quelli che usi tu, gli SP da 30A credo, danno meno problemi. E pensare che quelli del tricotterone a vederli sono identici agli gli SP, ma forse la loro taglia maggiore si porta dietro una sostanziale differenza.

                              Ciao
                              Ultima modifica di Perryosio; 05 novembre 10, 07:50.
                              http://perry-piermaria.blogspot.com/

                              Commenta


                              • Originariamente inviato da Perryosio Visualizza il messaggio
                                Perfetto Jho!
                                quando ci sarà la tua indicazione sulla migliore procedura d'avvio proverò ad avventurarmi in prove su tutti gli esc che riuscirò a provare.
                                Aggiungo ad esempio
                                TCCR1B = TCCR1B & 0b11111000 |0x04 256 122.0703125
                                TCCR2B = TCCR2B & 0b11111000 |0x04 256 122.0703125

                                all'inizio dove c'è void (), è giusto?
                                Le linee vanno all'interno della void Setup()
                                Poi occhio che le tabelle sono diverse per timer e devi usare solo il valore del divisore, non tutta la riga della tabella.

                                TCCR1B = TCCR1B & 0b11111000 | 0x04;
                                TCCR2B = TCCR2B & 0b11111000 | 0x06;

                                Per settare entrambe le frequenze del pwm a 122hz.

                                Occhio che come ti ho detto se la usi su un tricottero stai cambiando anche la frequenza di pilotaggio del pin 3, sul quale è collegato il servo a 50Hz. Quindi dovrai riadattare i ritardi sulla funzione che abbiamo visto nei messaggi precedente.

                                Non è un operazione così banale, leggiti bene i link ai reference document di arduino.
                                Johnny
                                (GTE - Torino)
                                Out of sight, NOT out of mind.

                                Commenta

                                Sto operando...
                                X