Implementação de D (diferenciação) no PID


8

Estou implementando um controlador PID para controle de velocidade do motor. Terminei de implementar o controle PI e ele funciona perfeitamente para mim. Na especificação, fui instruído a implementar uma técnica de filtragem usando a seguinte equação para a parte D:

insira a descrição da imagem aqui

Agora, o que entendi até agora, é que srepresenta "dx/dt"geralmente o que corresponde à taxa de mudança de erro, mas aqui posso relacioná-lo com a taxa de mudança de feedback. Td/Né para limitar a saída de ganho geral (espero que eu entendi direito). Agora, para representar isso em termos de código C, tentei da seguinte maneira:

        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;

Bem, os resultados adicionando D não são o que eu previ. Eu só quero saber se eu implementei a equação da porção D corretamente? Estou cometendo algum erro na minha compreensão das matemáticas básicas da diferenciação?

NOTA: Não tenho liberdade para alterar o recálculo do kp, ti, td, pois ele vem diretamente do VFD.


Tente incorporado.com/design/prototyping-and-development/4211211/… , "PID sem doutorado". Há uma seção clara sobre a implementação derivada.
Scott Seidman

2
Quando você declara Old_Feedback = CurrentFeedback () está errado. Você deve ler o valor com CurrentFeedback () e armazená-lo em temp. variável CurrentFeedback_tmp, use esse valor em todo o ISR, pois sempre que você chamar um fct CurrentFeedback (), ele recuperará o valor real que será diferente toda vez que você o chamar.
Marko Buršič

"os resultados adicionando D não são o que eu previ" - o que você previu? Por que eles são diferentes?
Greg d'Eon

Há um grande potencial para estouros de número inteiro aqui. Quais são os tipos de variáveis ​​envolvidas e você considerou os valores máximos deles?
Lundin

s, D é S32, KP, Td e N U16. O tempo de amostragem é U32. Considerei os valores máximos da variável de acordo com o valor máximo possível de tipos de dados específicos.
spp

Respostas:


1

Tenho 3 pontos para compartilhar:

1-Vou lhe dizer por que as pessoas mexem com o termo D intermos de sinal, PID = P + I + D, mas, D = kd * (erro-erro antigo) e no controle de posição se você estiver se aproximando do ponto de ajuste, sempre o erro mais antigo é <erro, então o termo D será negativo e, portanto, diminui a saída e evita o excesso.

2-Quanto ao tempo, não divida ou use o tempo. Como você está usando um microcontrolador incorporado, use apenas uma constante de tempo e cancele-a de todas as equações: por exemplo, use uma interrupção do temporizador para gerar uma constante de tempo de 1ms e chamar sua função por dentro.

3-Por que você está usando o PID para controle de velocidade, 90% do tempo o PI é suficiente no controle de velocidade, pois D aqui é mais parecido com o controle de aceleração.

espero que ajude

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.