Implementazione di D (differenziazione) in PID


8

Sto implementando un controller PID per il controllo della velocità del motore. Ho finito con l'implementazione del controllo PI e funziona perfettamente per me. Nella specifica mi è stato detto di implementare una tecnica di filtraggio usando la seguente equazione per la parte D:

inserisci qui la descrizione dell'immagine

Ora quello che ho capito fino ad ora, è quello che generalmente srappresenta "dx/dt"il tasso di cambio di errore, ma qui posso metterlo in relazione con il tasso di cambio di feedback. Td/Nserve a limitare l'output del guadagno complessivo (spero di aver capito bene). Ora per rappresentare questo in termini di codice C, ho provato il seguente modo:

        s = (CurrentFeedback()-Old_Feedback)*100/(MaxFeedback()); //to calculate the % change in feedback
        s = s*1000/sampleTime;      //1000 is multiplied because sampleTime is in milliseconds
        D = (Td*s)/(1+(s*Td/N));
        D = D*KP;   //Kp is multiplied as per the standard pid equation.

        Old_Feedback = CurrentFeedback();
        PID = P+I-D;

Bene, i risultati aggiungendo D non sono quelli che ho previsto. Voglio solo sapere se ho implementato correttamente l'equazione della porzione D? Sto commettendo degli errori nella mia comprensione delle basi della differenziazione?

NOTA: non sono libero di modificare il ricalcolo di kp, ti, td in quanto proviene direttamente dal VFD.


Prova embedded.com/design/prototyping-and-development/4211211/… , "PID senza dottorato". C'è una sezione chiara sull'implementazione dei derivati.
Scott Seidman,

2
Quando dichiari Old_Feedback = CurrentFeedback () è sbagliato. Leggi il valore con CurrentFeedback () e lo memorizzi in temp. variabile CurrentFeedback_tmp, quindi usa sempre quel valore in quell'ISR, perché ogni volta che chiami un CurrentFeedback fct () recupera il valore effettivo che sarà diverso ogni volta che lo ricordi.
Marko Buršič,

"i risultati aggiungendo D non sono quelli che ho previsto" - cosa hai previsto? Perché sono diversi?
Greg d'Eon,

C'è un grande potenziale per gli overflow di numeri interi qui. Quali sono i tipi delle variabili coinvolte e ne hai considerato i valori massimi?
Lundin,

s, D è S32, KP, Td e N U16. il tempo di campionamento è U32 Ho considerato i valori massimi della variabile secondo il valore massimo possibile di particolari tipi di dati.
sabato

Risposte:


1

Ho 3 punti da condividere:

1-Ti dirò perché le persone si incasinano con gli intervalli di segno di termine D, PID = P + I + D ma, D = kd * (errore -olderror) e nel controllo di posizione se ti stai avvicinando al set point, sempre olderror è <errore, quindi il termine D sarà negativo e quindi diminuirà l'uscita e impedirà il superamento.

2-Per quanto riguarda il tempo, non dividere o utilizzare il tempo. dato che stai usando un microcontrollore incorporato usa solo una costante di tempo e cancellala da tutte le equazioni: ad esempio usa un interrupt del timer per generare una costante di tempo di 1ms e chiamare la tua funzione all'interno.

3-Perché stai usando PID per il controllo della velocità, il 90% delle volte PI è sufficiente nel controllo della velocità, poiché D qui è più simile al controllo dell'accelerazione.

spero che aiuti

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.