Enade 2019 - Foi requisitado a um engenheiro a implementação de um controle PID embarcado em um microcontrolador, com base no código fonte apresentado a seguir:
void loop() {
    float RF, PV, E, X, Y, Z, E_anterior; // variáveis do controlador
    float Kx, Ky, Kz; // variáveis dos ganhos do controlador
    RF = analogRead(AO); // leitura do valor de referência
    PV = analogRead(A1); // leitura da variável do processo
    E = RF - PV; // cálculo do valor do Erro
//Início da rotina de controle básica
    X = X + E * Kx;
    Y = E * Ky;
    Z = (E - E_anterior) * Kz;
    E_anterior = E;
}
Acerca das variáveis de controle \mathrm{X}, \mathrm{Y} e Z , qual alternativa é a correta? Justifique a sua resposta.
a) a variável X corresponde à ação de controle integral; a variável Y , à ação proporcional; e a variável Z, à ação derivativa.
b) a variável X corresponde à ação de controle proporcional; a variável Y , à ação integral; e a variável Z, à ação derivativa.
c) a variável X corresponde à ação de controle derivativa; a variável Y , à ação proporcional; e a variável Z , à ação integral.
d) a variável X corresponde à ação de controle integral; a variável Y , à ação derivativa; e a variável Z , à ação proporcional.
e) a variável X corresponde à ação de controle derivativa; a variável Y , à ação de integral; e a variável Z, à ação proporcional.

Passo 1

O enunciado fornece um trecho de código e pergunta qual a correspondência correta entre as variáveis de controle X, Y e Z e as ações do controlador PID. As informações dadas (extraídas do código) são:
  • Leituras:
    • RF = \text{analogRead}(AO) (referência);
    • PV = \text{analogRead}(A1) (variável do processo).
  • Erro:
    • E = RF - PV.
  • Rotina de controle (linhas relevantes):
    • X = X + E \cdot Kx;
    • Y = E \cdot Ky;
    • Z = (E - E\_anterior) \cdot Kz;
    • E\_anterior = E;
  • São fornecidas as alternativas (a) a (e) para a correspondência entre X,Y,Z e as ações proporcional, integral e derivativa.
    O que se pede: escolher a alternativa correta e justificar por que cada variável corresponde à ação proporcional, integral ou derivativa.

Passo 2

O que é cada ação do PID (visão conceitual) — explicação didática:
  • A ação proporcional § gera uma saída que é proporcional ao erro atual e(t). Em fórmula contínua:
u_P(t)=K_P\,e(t),
onde K_P é o ganho proporcional e e(t) é o erro no instante t. Intuitivamente: se o erro dobra, essa parcela da ação dobra.
  • A ação integral (I) acumula o erro ao longo do tempo; ela integra o erro passado para eliminar erro em regime estacionário:
u_I(t)=K_I\int_{0}^{t} e(\tau)\,d\tau,
onde K_I é o ganho integral. Intuitivamente: soma histórico do erro, corrigindo desvios persistentes.
  • A ação derivativa (D) reage à taxa de variação do erro, ou seja, ao quão rápido o erro está mudando:
u_D(t)=K_D\frac{d e(t)}{dt},
onde K_D é o ganho derivativo. Intuitivamente: antecipa mudanças no erro (amortece oscilações).

Passo 3

Como implementar essas ações em código discreto (no microcontrolador) — aproximações simples:
  • Em tempo discreto com passos indexados por k (cada iteração do loop é um instante k):
    • Aproximação da integral por soma acumulada:
    X_{k+1} = X_k + K_I\cdot e_k \cdot \Delta t \quad\text{(aproximação da integral)}çãEm muitos códigos simples a constante \Delta t é absorvida em K_I, ficando: X_{k+1} = X_k + K_x\cdot e_k,que é exatamente a forma do código X = X + E \cdot Kx;. Portanto uma variável que é atualizada somando o produto do erro atual com um ganho é um integrador discreto.
    • Ação proporcional discreta é simplesmente multiplicar o erro atual pelo ganho:
    Y_k = K_P \cdot e_k,que corresponde diretamente à linha Y = E \cdot Ky;.
    • Aproximação discreta da derivada por diferença finita:
    \frac{d e}{dt}\Big|_k \approx \frac{e_k - e_{k-1}}{\Delta t},e, absorvendo \Delta t no ganho: Z_k = K_z\cdot (e_k - e_{k-1}),que é exatamente a forma do código Z = (E - E\_anterior) \cdot Kz;.

Passo 4

Mapeamento linha a linha com explicação prática (bem mastigado):
  • Linha X = X + E \cdot Kx;:
    • Forma típica de um acumulador. A cada iteração soma-se E\cdot Kx ao valor anterior de X.
    • Isso implementa uma soma discreta que aproxima a integral do erro, ou seja, ação integral.
  • Linha Y = E \cdot Ky;:
    • Produto direto entre erro atual e ganho: isso é a ação proporcional.
  • Linha Z = (E - E\_anterior) \cdot Kz;:
    • Calcula a diferença entre o erro atual e o erro anterior e multiplica por um ganho: isso é a diferença finita que aproxima a derivada do erro — ação derivativa.
  • Linha E\_anterior = E;:
    • Armazena o erro atual para ser usado na próxima iteração no cálculo da diferença (necessário para a derivada discreta).

Passo 5

Observações práticas importantes (para a prova e para implementação real):
  • Normalmente Kx, Ky, Kz correspondem a combinações de K_I,K_P,K_D possivelmente multiplicadas por \Delta t (passo de amostragem). Em exercícios de prova considere que Kx atua como ganho integral, Ky como ganho proporcional e Kz como ganho derivativo.
  • Para que X realmente acumule ao longo das iterações, X deve manter seu valor entre iterações (deve ser declarado fora do laço ou ser static). Se X for redeclarado e não inicializado a cada iteração, a integral não funcionará; isso é um detalhe de implementação, mas não muda a identificação da linha como integrador.
  • A derivada discreta é sensível a ruído; em implementações reais costuma-se filtrar ou usar variantes (por exemplo diferença com média) — isto só para contexto, não altera o reconhecimento da linha como derivativa.

Passo 6

Conclusão lógica e curta: pelas formas das operações (acumulação para X, multiplicação direta para Y, diferença para Z), a correspondência correta é:
  • X = ação integral,
  • Y = ação proporcional,
  • Z = ação derivativa.

Resposta

a)

Exercícios relacionados