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.