| \(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 |
Filtro Sallen-Key com a LaunchPad LAUNCHXL-F28379D: erro em regime de uma planta tipo 0
Universidade Federal do Pará
2026-10-01
SK03ControleP;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.
\[ 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} \]
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.
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.
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).
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.
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\ \%\).
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.
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.
| 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.
| 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 |
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.
\[ 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.
| 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.
| \(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.
| \(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 |
| \(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.
| \(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 |
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.