Roteiro

  1. Lei de controle proporcional e implementação no firmware SK03ControleP;
  2. Teoria: erro em regime numa planta tipo 0 e polos de malha fechada;
  3. Ensaio com \(K_p = 1\): medido × previsto, erro em regime, transitório e ruído;
  4. Comparação entre ganhos (\(K_p\) = 1 a 5): erro em regime, transitório, saturação e ruído — atualizada a cada novo ensaio (dados/DadosControleP*.csv).

Planta, modelo e simulação: Identificação do Sallen-Key (ARX(1,3,1)) e Planejamento dos Ensaios de Controle (ensaio 1). Placa e exportação dos dados: Placa LAUNCHXL-F28379D.

Lei de controle

Controle proporcional com polarização

\[ e(k) = r(k) - y(k) \]

\[ u(k) = \text{sat}\big[\,u_0 + K_p\,e(k)\,\big],\qquad u \in [0;\ 1{,}7]\ \text{V} \]

  • \(u_0 = 1{,}0\) V: polarização no ponto de operação — sem ela (\(u = K_p e\)) o erro seria enorme, pois o P teria de “fabricar” toda a entrada a partir do erro;
  • \(u(k)\) é escrito no DAC depois da leitura de \(y(k)\): atraso de uma amostra;
  • \(T_s\) = 5 ms, saturação de 1,7 V (LM358 em 3,3 V).
float controle_passo(float y)               // SK03ControleP
{
    r = (k < N_AMOSTRAS) ? referencia(k) : U_OP;

    e = r - y;                              // lei de controle P
    u = Kp * e;
    if (usar_bias != 0U)
        u += U_OP;                          // u0 = 1,0 V

    if (u > U_MAX) u = U_MAX;               // saturação
    if (u < U_MIN) u = U_MIN;

    r_buf[k] = r; u_buf[k] = u; y_buf[k] = y;
    k++;
    return u;
}

Kp, usar_bias e reiniciar são alteráveis pelo WATCH do CCS.

Referência do ensaio

  • 20 amostras em \(r = 1{,}0\) V (ponto de operação);
  • onda quadrada 1,2 ↔︎ 0,8 V, 60 amostras (300 ms) em cada nível, 3 ciclos;
  • total: 380 amostras (\(r\), \(u\) e \(y\) gravados em float na RAMGS0);
  • modo_continuo = 1: buffer circular — as 20 primeiras amostras ficam em 0,8 V (continuação do ciclo anterior) e o ensaio se repete indefinidamente (usado nos ensaios com \(K_p \geq 2\)).

O nível de 1,2 V fica 0,2 V acima do ponto de operação e o de 0,8 V, 0,2 V abaixo: o desvio de referência é \(\tilde r = \pm 0{,}2\) V.

Teoria

Erro em regime numa planta tipo 0

A planta tem ganho estático finito, \(K = G(1)\) = 0,983 — é do tipo 0 (sem integrador). Em regime, com desvios em torno do ponto de operação (\(\tilde y = K\tilde u\) e \(\tilde u = K_p(\tilde r - \tilde y)\)):

\[ \tilde y_\infty = \frac{K K_p}{1 + K K_p}\,\tilde r \qquad\Longrightarrow\qquad e_\infty = \tilde r - \tilde y_\infty = \frac{\tilde r}{1 + K K_p} = \frac{\tilde r}{1 + 0{,}983\,K_p}. \]

\(K_p\) ganho de malha \(KK_p\) \(1/(1+KK_p)\) erro em \(r\) = 1,2 V (mV)
0,5 0,49 67 % 135
1,0 0,98 50 % 102
2,0 1,97 34 % 68
4,0 3,93 20 % 41
8,0 7,87 11 % 23

O erro diminui com \(K_p\), mas nunca zera: zerar exigiria \(K_p \to \infty\). Para erro nulo, é preciso um integrador no controlador (PI, próxima nota).

Polos de malha fechada

Com o ARX(1,3,1), \(G(z) = \dfrac{b_1 z^2 + b_2 z + b_3}{z^2(z - a_1)}\), a equação característica de \(1 + K_p G(z) = 0\) é

\[ z^3 - (a_1 - K_p b_1)\,z^2 + K_p b_2\,z + K_p b_3 = 0. \]

\(K_p\) polo dominante módulo
0,5 0,709 0,709
1,0 0,575 0,575
2,0 0,337 ± j0,251 0,420
4,0 0,233 ± j0,481 0,534
8,0 0,014 ± j0,687 0,687

Instabilidade (polo no círculo unitário) em \(K_p \approx\) 21,2.

Aumentar \(K_p\) acelera a resposta até \(K_p \approx 2\); a partir daí os polos ficam complexos (oscilação, sobressinal) e se aproximam do círculo unitário.

Ensaio com \(K_p = 1\)

Ensaio (DadosControleP01.csv)

A saída não alcança a referência: fica em ≈ 1,10 V quando \(r\) = 1,2 V e em ≈ 0,90 V quando \(r\) = 0,8 V — metade do caminho, como prevê \(1/(1 + 0{,}983) \approx 50\ \%\).

O ganho usado foi mesmo \(K_p = 1\)?

Os dados permitem verificar o ganho: fora da saturação, \(u(k) = u_0 + K_p\,[r(k) - y(k)]\) é linear em \(r - y\). Mínimos quadrados com as 380 amostras:

Parâmetro Estimado dos dados Firmware
\(K_p\) 1,0000 Kp = 1.0f
\(u_0\) 1,0000 U_OP = 1.0f
maior resíduo 6.2e-08 V —
amostras saturadas 0 —

Resíduo da ordem do arredondamento do float: o ensaio usou exatamente \(K_p = 1\) e \(u_0 = 1{,}0\) V, e o atuador não saturou (com \(K_p = 1\), \(u\) varia só entre ≈ 0,7 e 1,3 V). Os próximos ensaios terão o \(K_p\) identificado da mesma forma.

Medido × previsto

Previsão: ARX(1,3,1) + atraso + saturação (simulação do planejamento), com a mesma referência e o mesmo \(K_p\). FIT = 97,8 % — o modelo identificado com a PRBS em malha aberta prevê bem o comportamento em malha fechada.

Erro em regime por patamar

patamar \(r\) (V) \(y\) médio (V) erro medido (mV) erro teórico (mV) diferença (mV) desvio de y (mV)
1 1,2 1,0984 101,6 101,9 -0,3 2,2
2 0,8 0,8990 -99,0 -99,8 0,8 1,7
3 1,2 1,0984 101,6 101,9 -0,3 2,0
4 0,8 0,8990 -99,0 -99,8 0,9 1,8
5 1,2 1,0984 101,6 101,9 -0,3 1,9
6 0,8 0,8993 -99,3 -99,8 0,6 1,5

\(y\) médio nas últimas 30 amostras de cada patamar. Teórico: \(e_\infty = \tilde r/(1 + KK_p)\) com o modelo em variáveis absolutas.

Medido e teórico diferem em menos de 1 mV — dentro da resolução do ADC (0,73 mV). A pequena assimetria (+102 mV em cima, −99 mV embaixo) também é prevista: o ponto de operação da planta com \(u_0 = 1{,}0\) V é \(y \approx 0{,}998\) V, não exatamente 1,0 V.

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

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

Por que o \(t_s\) medido difere?

  • As curvas medida e prevista coincidem amostra a amostra dentro de ±3 mV;
  • Com \(KK_p \approx 1\), a saída só percorre metade do degrau de referência: ≈ 0,17 V. A faixa de 2 % é de ±3,4 mV — do tamanho do ruído do ADC (≈ 2 mV de desvio; ≈ 1,1 mV na média de três ciclos). Uma única amostra ruidosa fora da faixa “atrasa” o \(t_s\);
  • O mesmo vale para o “sobressinal” medido de 1–2 %: são 2–3 mV, nível de ruído — o polo dominante de malha fechada é real (\(z \approx 0{,}58\)), sem oscilação;
  • Com a faixa de 5 %, medido e previsto concordam.

Lição de método

Métricas de faixa estreita só fazem sentido quando a faixa é bem maior que o ruído. Com excursões pequenas, prefira média de vários ciclos, faixa de 5 % ou o ajuste de um modelo (constante de tempo) aos dados.

Ruído na ação de controle

\[ u(k) = u_0 + K_p\,[r(k) - y(k)] \quad\Longrightarrow\quad \sigma_u = K_p\,\sigma_y \]

\(r\) (V) desvio de y (mV) desvio de u (mV) razão u/y
1,2 2,15 2,15 1,000
0,8 1,74 1,74 1,000
1,2 1,96 1,96 1,000
0,8 1,82 1,82 1,000
1,2 1,92 1,92 1,000
0,8 1,53 1,53 1,000

Com \(K_p = 1\) o ruído do ADC passa integralmente para \(u\) (razão exatamente 1). Com \(K_p = 4\), o ruído em \(u\) será ≈ 4 vezes maior: reduzir o erro com ganho cobra o preço em ruído no atuador.

Comparação entre ganhos

Ensaios e consistência dos dados

Arquivo \(K_p\) (dos dados) \(u_0\) (dos dados) gravação maior desvio da lei \(u = u_0 + K_p e\) (mV) FIT medido × previsto
DadosControleP01.csv 1,000 1,000 única 0,0 97,8 %
DadosControleP02.csv 2,000 1,000 contínuo 14,6 96,5 %
DadosControleP03.csv 2,993 1,000 contínuo 21,8 97,5 %
DadosControleP04.csv 4,002 1,000 contínuo 29,3 97,9 %
DadosControleP05.csv 4,997 1,000 contínuo 40,2 98,2 %

Gravação contínua: exportar com o programa pausado

Nos ensaios com \(K_p \geq 2\), o firmware estava em modo_continuo = 1: o buffer é circular e reescrito a cada 380 amostras. Por isso o ensaio começa em \(r\) = 0,8 V (o fim do ciclo anterior, já em regime periódico). A exportação foi feita com o programa rodando, então u_buf e y_buf foram lidos em instantes diferentes e misturam ciclos vizinhos. Cada sinal continua válido, mas a correspondência amostra a amostra entre \(u\) e \(y\) se perde no nível do ruído: o desvio da lei cresce com \(K_p\) (≈ \(K_p \times\) diferença de ruído entre ciclos). O \(K_p\) estimado não é afetado. Nos próximos ensaios: pausar (ou modo_continuo = 0 e esperar ensaio_concluido = 1) antes de exportar.

Erro em regime × \(K_p\)

\(K_p\) \(\frac{1}{1+KK_p}\) \(e\) em 1,2 V med. teo. \(e\) em 0,8 V med. teo.
1 50 % 101,6 101,9 -99,1 -99,8
2 34 % 67,8 68,1 -66,0 -66,8
3 25 % 50,9 51,2 -49,6 -50,2
4 20 % 40,8 41,0 -39,6 -40,1
5 17 % 34,0 34,2 -33,0 -33,5

Erros em mV, média dos patamares.

Medido e teórico diferem em menos de 1 mV para todos os ganhos: de 102 mV (\(K_p\) = 1) a 34 mV (\(K_p\) = 5), o erro cai como \(1/(1 + KK_p)\) — cinco vezes mais ganho reduz o erro só três vezes, e o erro nunca zera.

Transitório × \(K_p\)

\(K_p\) polo dominante sobressinal subida med. (%) prev. sobressinal descida med. (%) prev. \(t_s\) 5 % med. (ms) prev.
1 0,58 1,7 0,0 1,1 0,0 35 35
2 0,34 ± j0,25 0,9 1,4 0,9 1,4 20 20
3 0,29 ± j0,39 5,7 6,0 6,7 7,1 25 25
4 0,23 ± j0,48 8,3 8,3 13,4 13,5 25 25
5 0,18 ± j0,55 11,4 10,9 13,7 15,2 25 25

Leitura do transitório

  • Até \(K_p \approx 2\) o polo dominante é real: a resposta acelera sem oscilar (\(t_s\) cai de 35 para 20 ms);
  • A partir de \(K_p \approx 2\) os polos ficam complexos: aparece sobressinal, que cresce com \(K_p\) (≈ 6 % com \(K_p\) = 3, ≈ 11 % com \(K_p\) = 5), e a resposta deixa de acelerar — a oscilação compensa o ganho;
  • O sobressinal medido coincide com o previsto pelo ARX em todos os ganhos (diferença de ≈ 1 ponto percentual): o modelo de malha aberta prevê também a dinâmica oscilatória;
  • Assimetria: na descida o sobressinal é maior que na subida (13 % × 8 % com \(K_p\) = 4) — efeito da saturação, próximo slide.

Saturação do atuador

\(K_p\) \(u\) pedido logo após a subida (V) amostras em 1,7 V (med./prev.) amostras em 0 V (med./prev.)
1 1,27 0 / 0 0 / 0
2 1,67 0 / 0 0 / 0
3 2,05 6 / 6 3 / 3
4 2,45 6 / 6 3 / 3
5 2,84 7 / 6 6 / 6

No degrau, o salto pedido é \(K_p\,[r - y]\) ≈ \(K_p \times 0{,}3\) V. A partir de \(K_p\) = 3 o comando passa de 1,7 V na subida e fica abaixo de 0 V na descida.

Por que a descida oscila mais: a polarização \(u_0\) = 1,0 V está a 0,7 V do limite superior, mas a 1,0 V do inferior. Na subida a saturação corta uma parte maior do comando, o que freia a saída e reduz o sobressinal; na descida o corte é menor. A saturação também explica por que aumentar \(K_p\) deixa de acelerar a subida.

Ruído × \(K_p\)

\(K_p\) \(\sigma_y\) (mV) \(\sigma_u\) (mV) \(\sigma_u/\sigma_y\)
1 1,85 1,85 1,00
2 1,85 3,82 2,07
3 2,09 6,21 2,98
4 2,42 8,96 3,71
5 2,41 12,07 5,00
  • \(\sigma_u \approx K_p\,\sigma_y\): o ruído do ADC chega ao atuador multiplicado pelo ganho — com \(K_p\) = 5, ≈ 12 mV em \(u\);
  • \(\sigma_y\) também cresce com \(K_p\) (1,9 → 2,4 mV): com polos complexos, a malha fechada amplifica parte do ruído em vez de atenuá-lo.

Conclusões

  • Erro em regime de uma planta tipo 0 sob controle P: com \(K_p\) de 1 a 5, de 102 a 34 mV para um desvio de 200 mV, sempre a menos de 0,8 mV de \(\tilde r/(1 + KK_p)\) — diminui, mas não zera;
  • Preço do ganho: sobressinal a partir de \(K_p \approx 2\) (polos complexos), saturação a partir de \(K_p\) = 3 e ruído em \(u\) proporcional a \(K_p\) (1,9 → 12,1 mV);
  • Melhor compromisso com P puro: \(K_p \approx 2\) — mais rápido (\(t_s\) ≈ 20 ms), praticamente sem sobressinal e sem saturar, mas ainda com erro de ≈ 68 mV (34 %);
  • O modelo ARX da identificação prevê a malha fechada em todos os ganhos — erro, sobressinal, saturação (FIT de 96,5 a 98,2 %);
  • Próximo passo: o PI (ensaio 2 do planejamento) para zerar o erro sem precisar de ganho alto.

Como incluir novos ensaios

Gravar com o SK03ControleP (alterar Kp pelo WATCH e escrever reiniciar = 1), pausar o programa (ou usar modo_continuo = 0 e esperar ensaio_concluido = 1), exportar r_buf, u_buf, y_buf (com Capacity = 380 no gráfico do CCS) e salvar como DadosControleP<NN>.csv em Notas/ControleProporcional/dados/. A nota processa todos os arquivos automaticamente.