annuncio

Comprimi
Ancora nessun annuncio.

[programmazione] aiuto con il pid (no settaggio dei valori)

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

  • [programmazione] aiuto con il pid (no settaggio dei valori)

    ciao,
    ho qualche problema nell'implementazione del PID, non avendolo mai usato.

    In pratica il problema è il seguente: io ho gli angoli (in radianti) di inclinazione rispetto all'asse X, Y, Z ovvero roll, pitch e yaw.
    Come sbatto questi valori nell'algoritmo PID per ottenere la potenza sui motori?
    ho dato un'occhiata a codice di biropilot e multiwii, ma non ci ho cavato molto..
    ad esempio il bironpilot, se non mi confondo, sommava al valore trovato dal pid la potenza dei motori, mentre nei test che ho fatto io usavo la potenza dei motori come setPoint... l'algoritmo usato da me è questo: Arduino playground - PIDLibrary

    Linko la discussione che ho aperto in un'altro forum per completezza:
    Arduino Forum - aiuto con il PID

    è l'ultima parte di programma che mi manca!!!

    p.s. l'algoritmo di stabilizzazione è la DCM gyro+accelerometri

  • #2
    Implementazione PID più semplice possibile:

    (questo in gradi)

    PitchCorrezione=(PitchSetPoint - PitchAttuale) * KP

    PitchComando = PitchComando + Correzione

    Spiegazione:

    Se il PitchAttuale è più grande di quello voluto la correzione sarà appunto negativa che toglierà un po' di comando.
    Informatico Professionista, Amante dei 4x4 e delle auto ibride, costruttore di quadricotteri.

    Commenta


    • #3
      da gradi a radianti semplicemente cambio il valore kp....
      interessante, sinceramente nonostante ho letto varie implemetazioni non avevo capito che fosse così semplice...
      quindi ora se derivo e integro (rispetto al tempo) la funzione P e ottengo funzione D e I? wow
      capito grazie!!!

      quindi D: kp/dt+(PitchSetPoint - PitchAttuale)
      e I: ( (PitchSetPoint - PitchAttuale)*(kp^2)/2 )-integrale((PitchSetPoint^2)/2 - (PitchAttuale^2)/2)*(kp^2)/2*dx.... eccheccaavolo mi ci vuole un pò di tempo, un foglio di carta e le tabbelle varie... son ancora capra in analisi (spero nel frattempo di non aver scritto strunzate, in particolare considerare KP come incognita e non come costante)

      ora
      è meglio se come set point metto fisso 0 (l'angolo 0 significa "allineato") e modifico il pitchComando per ogni motore in base all'input utente (destra sinisra ecc..),
      oppure in base all'input utente modifico il setPoint, in modo che pitchComando sia uguale per tutti i motori?

      appena arrivo a casa inizio a scrivere il codice

      Commenta


      • #4
        dite che è possibile basarsi solo sul proporzionale o è necessario anche l'integrativo?

        ps. ho trovato questo link abbastanza esplicativo http://igor.chudov.com/manuals/Servo...hout-a-PhD.pdf

        Commenta

        Sto operando...
        X