Roteiro

  1. Projeto do PI por cancelamento polo-zero a partir do ARX(1,3,1);
  2. Firmware SK04ControlePI: lei posicional, saturação e anti-windup por integração condicional;
  3. Ensaio sem saturação (onda quadrada 0,8 ↔︎ 1,2 V): erro nulo, medido × previsto, comparação com o P;
  4. Ensaio com saturação (0,6 ↔︎ 1,8 V, nível alto inatingível): windup sem e com anti-windup.

Modelo: Identificação do Sallen-Key · Planejamento (ensaios 2 e 3) · Controle Proporcional.

Projeto por cancelamento polo-zero

Ideia: o zero do PI sobre o polo da planta

Planta (ARX(1,3,1) da identificação):

\[ G(z) = \frac{b_1 z^2 + b_2 z + b_3}{z^2\,(z - a_1)}, \qquad a_1 = 0{,}8156 \]

PI na forma de ganho e zero:

\[ C(z) = K_c\,\frac{z - z_0}{z - 1} \]

Escolhendo \(z_0 = a_1\), o zero do controlador cancela o polo da planta:

\[ L(z) = C(z)\,G(z) = K_c\,\frac{b_1 z^2 + b_2 z + b_3}{z^2\,(z - 1)} \]

  • O polo lento da planta (\(\tau \approx 24{,}5\) ms) some da malha: sobra um integrador puro com os zeros de \(B\) e o atraso;
  • Resta um único parâmetro, \(K_c\), ajustado pela especificação (\(t_s\) = 50–60 ms, sem sobressinal);
  • Forma paralela (firmware):

\[ K_p = K_c\,z_0, \qquad K_i T_s = K_c\,(1 - z_0) \]

\[ T_i = \frac{K_p}{K_i} = \frac{z_0\,T_s}{1 - z_0} \approx 22\ \text{ms} \approx \tau \]

Escolha de \(K_c\)

\(K_c\) \(K_p\) \(K_i\) (s⁻¹) polo dominante de malha fechada \(t_s\) (ms) sobressinal (%)
1,00 0,816 36,9 0,799 95 0,0
1,25 1,020 46,1 0,739 70 0,0
1,50 1,223 55,3 0,670 55 0,0
1,75 1,427 64,5 0,583 45 0,0
2,00 1,631 73,8 0,427 ± j0,077 35 0,0
2,50 2,039 92,2 0,401 ± j0,239 35 2,4

Simulação com o ARX(1,3,1), referência quadrada 0,8 ↔︎ 1,2 V. Escolha: \(K_c\) = 1,5 (\(K_p\) = 1,223; \(K_i\) = 55,3 s⁻¹) — o mesmo PI do planejamento.

A partir de \(K_c \approx 2\) os polos de malha fechada ficam complexos e aparece sobressinal: o cancelamento não elimina o compromisso entre rapidez e amortecimento.

O que o cancelamento esconde

O polo cancelado (\(z = a_1\)) continua no polinômio de malha fechada \(P = AS + BR = (1 - a_1 q^{-1})\,[\dots]\): ele não aparece na resposta à referência, mas aparece na resposta a uma perturbação na entrada, que é eliminada só com a constante de tempo da planta (≈ 24,5 ms). E, se o polo real diferir do modelo, o cancelamento é imperfeito e deixa uma “cauda” lenta também no rastreamento.

Firmware SK04ControlePI

Lei de controle

// C(z) = Kc (z - z0)/(z - 1) -> Kp = Kc*z0, Ki*Ts = Kc*(1 - z0)
Kp   = Kc * z0;
KiTs = Kc * (1.0f - z0);

e = r - y;
integ_novo = integ + KiTs * e;
v = Kp * e + integ_novo;          // ação antes da saturação

// anti-windup por integração condicional
if ((anti_windup != 0U) &&
    (((v > U_MAX) && (e > 0.0f)) || ((v < U_MIN) && (e < 0.0f))))
    v = Kp * e + integ;           // integrador congelado
else
    integ = integ_novo;

u = v;                            // saturação do atuador
if (u > U_MAX) u = U_MAX;
if (u < U_MIN) u = U_MIN;
  • Forma posicional: \(I(k) = I(k-1) + K_iT_s\,e(k)\), \(v = K_p e + I(k)\); na forma incremental, \(\Delta u = K_c\,e(k) - K_c z_0\,e(k-1)\);
  • Kc, z0, anti_windup, r_centro, r_amp, n_meio, modo_continuo e reiniciar alteráveis pelo WATCH;
  • modo_continuo = 1: “osciloscópio” — buffer reescrito a cada período, com gatilho no início de um período da referência;
  • grava \(r\), \(u\), \(y\) e o integrador (i_buf).

Ensaio sem saturação

Ensaio (DadosControlePI01.csv)

Referência 0,8 ↔︎ 1,2 V (60 amostras por nível, gravação única). FIT medido × previsto = 99,0 %. Parâmetros identificados nos próprios dados: \(K_c\) = 1,5000, \(z_0\) = 0,8156 (resíduo 1e-07 V) — exatamente os do firmware.

Erro nulo em regime: P × PI

\(r\) (V) erro P, \(K_p\) = 1 (mV) erro PI (mV) desvio de y no PI (mV)
1,2 101,6 -0,20 1,67
0,8 -99,0 0,39 1,88
1,2 101,6 -0,12 1,53
0,8 -99,0 0,32 1,47
1,2 101,6 -0,24 1,96
0,8 -99,3 0,12 2,11

O integrador zera o erro: no PI, o erro médio em regime fica abaixo de 0,5 mV — menor que um nível do ADC (0,73 mV) e muito menor que o ruído.

Transitório: média dos três ciclos

faixa \(t_s\) medido (ms) \(t_s\) previsto (ms) sobressinal medido (%) previsto (%)
subidas (0,8 → 1,2 V) 2 % 55 55 0,7 0,0
subidas (0,8 → 1,2 V) 5 % 45 45 0,7 0,0
descidas (1,2 → 0,8 V) 2 % 55 55 0,7 0,0
descidas (1,2 → 0,8 V) 5 % 45 45 0,7 0,0

Com o PI a saída percorre o degrau inteiro (0,4 V): a faixa de 2 % (±8 mV) já é bem maior que o ruído, e a especificação (\(t_s\) ≈ 55 ms, sem sobressinal) pode ser verificada diretamente.

Esforço de controle e ruído

Grandeza PI (\(K_c\) = 1,5) P (\(K_p\) = 1) P (\(K_p\) = 2)
erro em regime em 1,2 V ≈ 0 mV 102 mV 68 mV
desvio de \(u\) nos patamares 2,47 mV 1,85 mV 3,82 mV
razão \(\sigma_u/\sigma_y\) 1,40 1,00 2,07
maior salto de \(u\) numa amostra 604 mV — —
  • Logo após cada degrau, \(u\) salta \(K_c\,\Delta r\) = 1,5 × 0,4 = 0,6 V e depois volta devagar: o integrador assume a parte de regime;
  • O ruído em \(u\) é ≈ 1,4 vezes o de \(y\) — próximo de \(K_c\) = 1,5, o ganho do PI em alta frequência: o PI zera o erro sem precisar do ganho alto que o P exigiria.

Ensaio com saturação

Referência inatingível

  • Modo contínuo, r_centro = 1,2 V, r_amp = 0,6 V, n_meio = 100: onda quadrada 0,6 ↔︎ 1,8 V com 500 ms em cada nível;
  • Com \(u\) = 1,7 V, o modelo prevê saída máxima de 1,686 V: 1,8 V é inatingível. Enquanto \(r\) = 1,8 V, o erro não zera e o atuador fica saturado;
  • Dois ensaios iguais: anti_windup = 0 (DadosPIsaturacaoAW0.csv) e anti_windup = 1 (DadosPIsaturacaoAW1.csv);
  • O integrador (i_buf) não foi exportado: ele é reconstruído aplicando a lei do firmware aos \(r\) e \(y\) gravados (estado inicial tirado da primeira amostra não saturada).

Saída máxima medida: 1,698 V (sem anti-windup) e 1,671 V (com anti-windup) — um pouco acima dos 1,686 V do modelo: perto da saturação o ganho real da planta é ligeiramente maior que o do ARX, identificado em torno de 1,0 V.

Sem anti-windup

Enquanto \(r\) = 1,8 V, o erro fica positivo e o integrador cresce sem parar: chega a 5,40 V, e o comando calculado a 5,53 V — muito além dos 1,7 V que o DAC aplica.

Com anti-windup (integração condicional)

O integrador congela sempre que o comando satura e o erro empurra para fora: fica em ≈ 1,51 V, e \(u\) “encosta” no limite (oscila logo abaixo de 1,7 V, ora integrando, ora congelado).

Windup: comparação

Ensaio \(u\) preso em 1,7 V após a descida, med./prev. (ms) \(t_s\) da descida (2 %), med./prev. (ms) IAE na descida (mV·s) maior \(v\) (V) maior \(I\) (V) amostras em 1,7 V, med./prev. FIT
sem anti-windup 35 / 40 150 / 155 87,2 5,53 5,40 214 / 216 98,2 %
com anti-windup 0 / 0 65 / 65 22,4 2,07 1,51 6 / 6 99,2 %

Leitura do windup

  • Sem anti-windup: quando \(r\) desce para 0,6 V, o integrador “carregado” mantém \(v\) acima de 1,7 V; \(u\) fica preso na saturação por dezenas de milissegundos e, mesmo depois de sair, a descida é lenta — o integrador ainda precisa descarregar. A descida leva cerca de 2,3 vezes mais que com anti-windup;
  • Com anti-windup: o integrador congela no valor que o atuador consegue sustentar; quando \(r\) desce, \(u\) sai da saturação na hora e a descida tem o tempo normal da malha;
  • Detalhe de implementação: com o anti-windup ligado, \(u\) fica em ≈ 1,672 V no patamar alto (e \(y\) ≈ 1,667 V), contra 1,700 V (e 1,694 V) sem ele. Quando congela, o firmware recalcula \(v = K_p e + I(k-1)\) com o integrador antigo, que já estava abaixo do limite — \(u\) nunca chega a 1,7 V. Correção: congelar só o estado e manter \(v = K_p e + I_{novo}\) para a saída (u = sat(v) continua em 1,7 V);
  • Na subida os dois ensaios são praticamente iguais: com \(u\) saturado, nenhum controlador acelera a planta — o anti-windup não muda o que o atuador entrega, só o que o controlador lembra;
  • A previsão do modelo acerta o windup: tempo preso, tempo de descida e saída (FIT ≥ 98 %).

Conclusões

  • Projeto por cancelamento polo-zero: com \(z_0 = a_1\), o PI fica com um único parâmetro (\(K_c\) = 1,5) e atende a especificação — o que foi confirmado na placa (FIT 99,0 %);
  • Erro nulo: o integrador elimina o erro de 68–102 mV do controle P sem ganho alto; o ruído em \(u\) fica no nível do P com \(K_p \approx 1{,}5\);
  • Custo do cancelamento: o polo cancelado (τ ≈ 24,5 ms) continua na resposta a perturbações na entrada da planta e depende de o modelo estar certo;
  • Windup: com referência inatingível, o integrador sem proteção chega a 5,4 V e prende o atuador na saturação depois da descida; a integração condicional resolve com um if — mas, como implementada, deixa \(u\) ≈ 28 mV abaixo do limite (corrigir no firmware);
  • Próximos ensaios: PI com retrocálculo (back-calculation) e a forma RST (planejamento, ensaios 3 e 6); perturbação na entrada para observar o polo cancelado.

Dados

dados/DadosControlePI01.csv (sem saturação), dados/DadosPIsaturacaoAW0.csv e dados/DadosPIsaturacaoAW1.csv (0,6 ↔︎ 1,8 V, sem e com anti-windup). Firmware em ProjetosSK/SK04ControlePI/. Para exportar no modo contínuo, pausar o programa antes (controle P).