Premessa:
- Ho l'influenza e c'è qualcuno che suona il tamburo nella mia testa.
- Con Pid_Beta6 ho avuto a che fare di recente quello che sono riuscito a fare non è molto il risultato lo vedi come codice nel playground http://www.arduino.cc/playground/Italiano/posizionatore
ATTENZIONE che ho modificato la libreria per fare i calcoli ogni tot us e non ms, quindi
myPID.SetSampleTime(500); 500 sono us.
Ho degli angoli, che rappresentano la rotazione nello spazio del mezzo(quadricottero).
Ne ho visti, ma sono a digiuno quindi:
Sono quattro motori?
Ogni motore e indipendente dall'altro?
Ora con un pid dovrei comandare i motori, ma ho qualche dubbio, non avendo mai usato questa tipologia di algoritmi.
Ti posso spiegare terra terra, ci provo:
Il Setpoint è il valore desiderato compreso nell'intervallo dei valori specificato con "myPID.SetOutputLimits(10, 255);"
Input è compreso tra 0 e 1023 di default ma lo puoi cambiare.
I parametri del PID:
P guadagno proporzionale.
I guadagno integrale.
D guadagno Derivata sul tempo.
Consigliano tutti di partire con I e D = 0, aumentando P fino a entrare in oscillazione.
se non erro come input metto l'angolo attuale, come setPoint 0 (angolo=0 vuol dire che il mezzo e' livellato) e basta?
Input negli esempi lo prendo da un valore letto con analogRead().
Io l'ho usato per salvare la velocità del encoder.
Nota all'inizio il P lo mettevo negativo poi mi sono reso conto che va positivo se un'incremento di Input ha come risultante un decremento di Output.
Cioè se hai Input=0° Output=512, e Input diventa +5 Output si riduce fino a fare in modo che Input sia 0°.
Però non so se Input accetta valori negativi per indicare -5°.
Ok mi fermo qui non so più se quello che dico a un senso ciao.