Funzione PID in dsp.h e formato Q15

7 Anni 7 Mesi fa #1 da peppe855
Funzione PID in dsp.h e formato Q15 è stato creato da peppe855
Buon giorno a tutti, sto' utilizzando un dspic30f6010a ed ho "scoperto" la libreria DSP che tra le altre cose contiene la funzione PID. Senza dilungarmi troppo vedo che il calcolo dell'OUTPUT viene cosi' implementato:

controlOutput[n] = controlOutput[n-1]
+ controlHistory[n] * abcCoefficient[0]
+ controlHistory[n-1] * abcCoefficient[1]
+ controlHistory[n-2] * abcCoefficient[2]
where,
abcCoefficient[0] = Kp + Ki + Kd
abcCoefficient[1] = -(Kp + 2*Kd)
abcCoefficient[2] = Kd
ControlHistory[n] =
MeasuredOutput[n] - ReferenceInput[n]

dove il calcolo di abcCoefficient se lo fa' lui richiamando una delle tre funzioni PID mentre a me tocca inserire Kp Ki e Kd (dichiarate come fractional) percui mi chiedo ma il Td è sottointeso nel valore da me inserito in Ki e Kd visto che nel calcolo di abcCoefficient non c'è traccia?

Inoltre aprendo un esempio microchip dove si fa uso delle tre funzioni PID noto che Kp Ki Kd sono forniti nel seguente modo:

kCoeffs[0] = Q15(0.7);
kCoeffs[1] = Q15(0.2);
kCoeffs[2] = Q15(0.07);

il vettore che contiene i kCoeffs è dichiarato fractional.
Aprendo l'Header file dsp.h mi accorgo che chiamando Q15(x) lui fa' questo calcolo:

#define Q15(X) \
((X < 0.0) ? (int)(32768*(X) - 0.5) : (int)(32767*(X) + 0.5))

che non ho assolutamente compreso, perchè se la interpreto come una divisione allora qualsiasi valore ci metta ad X il risultato mi viene sempre uguale ad 1 per via del casting int fatto al dividendo e divisore comunque facendo un debug vedo che ad esempio Q15(0.7) viene trasformato in un numero pari a 0.7x2^15 cioè nel formato Q15 PERO' visto che sicuramente il mio Kp sarà maggiore di 1 come lo si riporta in formato Q15? (Non credo si faccia ad esempio se Kp=30 allora 30x2^15)
Un saluto

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • peppe855
  • Visitatori
  • Visitatori
Moderatori: Mauro LaurentiMatteo Garia

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Login