Relatório de Controle 2 – Compensador Proporcional Matheus Skorupski de Santana – 1718843 – S11 •
Descrição e objetivo: A prática, a seguir descrita, descrita, teve como objetivo objetivo implementar
um
controlador
proporcional
digital,
usando
um
microcontrolador, para uma planta analógica (no caso, uma rede RC). A plataforma utilizada na implementação foi um Arduíno Mega2560.
•
Parte 1: Inicialmente, tem-se a seguinte rede RC: Inicialmente, Inicialmente, tem-se tem-se a seguinte rede RC:
Sabe-se que a função de transferência para um filtro deste tipo, no domínio S, é dada por: 1 () = 1 +
Calculando o valor de
, sendo que foi utilizado um resistor de 33Ω e
um capacitor de 1 resulta em: 1
=
1 33 × 10 ∙ 1 × 10 10
= −
1000 33
≈ 30.3
Assim, o sistema, em malha aberta, considerando-se já o segurador de ordem zero, será:
No domínio Z, com um período de amostragem de 3, a malha aberta equivalente será:
O sistema em malha fechada será:
Onde K é o ganho do compensador proporcional. Quando não há compensasão, o valor de K é igual a 1 (equivalente ou igual a não haver compensasão no sistema). Adicionando-se um controlador (neste caso, o Arduíno), teremos
(Internamente, o microcontrolador realiza a função abaixo)
Nota-se que o sinal vem do próprio microcontrolador, podendo ser gerado por software ou via fonte externa (no caso, foi usado geracão do sinal por software. •
Parte 2: O tempo de estabilização (considerando-se 5% de tolerância) será % =
3
=
3 = 3 = 3 ∙ 33 × 10− = 99 1
Deseja-se construir um compensador proporcional, de forma que este tempo de estabilização caia pela metade, ou seja
%
=
% 2
= 49.5
Assim, o novo polo de malha fechada será =
3 %
=
3 0.0495
= 60.6
No plano Z = − = −.∙. = 0.8338
A função de transferência para a malha fechada considerando ∗ () = () ∙ , será ∗ =
∙ 0.0869 0.9131 + ∙ 0.0869
Para obter o novo polo, deseja-se que o denominador em malha fechada seja 1 ()
=
1 0.8338
Assim 1 0.9131 + ∙ 0.0869
=
1 0.8338
0.9131 + ∙ 0.0869 = 0.8338 =
0.0793 0.0869
= 0.9125
Assim, a nova função de transferência em malha fechada será ∗ =
•
0.9125 ∙ 0.0869 0.9131 + 0.9125 ∙ 0.0869
=
0.0793 0.8338
Sabe-se que erro de um sistema unitariamente realimentado de controle é definido, em geral, como: = í
E á = = lim () →∞
=
1 +
,
= lim = →
0.9125 ∙ 0.0869 1 0.9131
= 0.902
Ao aplicar-se um degrau de amplitude Ref (2, por exemplo), obtém-se que o erro =
2 1 + 0.902
= 1.0515 ≈ 1.05
•
Parte 3: No microcontrolador, podemos emular um degrau com amplitude desejada, aplicando na entrada da planta a saída de um registrador que foi programado para estar em alta naquele momento (no caso, usando um conversor DAC ou PWM, neste caso, usou-se PWM). Após aplicado o degrau, mantemos o valor como referência, para usar na comparação do somador. O sinal de retroalimentação do somador (o sinal de saída) é amostrado usando um ADC e guardado numa variável de programa. O próximo valor a ser imposto para o sistema será o valor de K multiplicado pelo erro, para que haja compensação. Além disso, normalmente
o
ciclo
de
máquina
de
um
microcontrolador
ou
microprocessador é muito maior que 3ms, então é necessário inserir este delay artificialmente a cada ciclo da iteração. Desta forma, o algorítmo a ser executado pelo microcontrolador será – em pseudo-código – o seguinte:
Referência = 2.0 K = 0.9125 PWM (Referência , Entrada) while(1){ V_saída = ADC (Saída) Erro = Referência – V_saída Nova_Entrada = K*Erro PWM (Nova_Entrada , Entrada) Aguarda (3ms) }
Assim, o código da implementação no Arduíno do algurítmo acima citado segue abaixo #include #include double Ref = 0.0; double u=0.0; double e=0.0; double Vad=0.0; double k=0.9125;
void setup() { Ref=0.0; delay(5000); Ref=2.0; pinMode(A0,INPUT); pinMode(13,OUTPUT); } void loop() { Vad=analogRead(A0)*5.0/1024.0; e=Ref-Vad; u=k*e; analogWrite(13,u*255.0/5.0); delay(3); }
Os fatores 255.0/5.0 e 5.0/1024.0 se dão porque o ADC do Arduíno tem 10 bits de resolução, então, para normalizar o valor da tensão lida (que é um valor discreto entre 0 e 1023), multiplica-se pelo fator de 5.0/1024.0 o valor lido no port.
Já para escrever, o Arduíno interpreta o valor analógico a ser escrito na saída digital, forma de PWM comm a resolução de 8 bits (ou seja, com valores discretos entre 0 e 255), logo, como o valor máximo da função foi normalizado para um valor máximo de 5.0, é necessário normalizar o valor para um valor máximo de 255, multiplicando o valor da variável nos registradores por 255.0/5.0. Um outro ponto importante é o fato de que no setup do Arduíno, a referência não foi setada como 2,0 logo de início, mas é imposta uma saída nula – com 0,0 –, e apenas após 5 segundos são impostos os 2,0 na entrada do sistema. Isso foi feito pelo fato de que os capacitores da placa de desenvolvimento estavam demorando muito para descarregar, e assim, quando se reiniciava o sistema, tornou-se impossível de analisar a resposta ao degrau do sistema, pois havia energia residual no mesmo. Colocando o delay de 5 segundos ao ligar, anteriormente à aplicação do degrau proporcionou que os capacitores do microcontrolador pudessem ter tempo para serem descarregados, removendo a energia residual do sistema, e permitindo que quando o mesmo fosse iniciado, seu
comportamento
de
resposta
ao
degrau
pudesse
ser
verificado
corretamente.
•
Parte 4: A resposta ao degrau de amplitude 2,0 aplicado “via software” no sistema, pode ser verificado nas screenshots do osciloscópio presentes abaixo
Nota-se que a tensão em regime estacionário é de 960 , logo, a tensão no instante = será correspondente a () ≈ 0,63 = 0,63 ∙ 0,96 = 604,8
Pelo gráfico, a tensão mais próxima, devido à granularidade dos níveis de tensão de medição do osciloscópio é de 600mV, e o instante correspondente é de 17 . Assim, o tempo de estabilização calcula-se como % = 3. Portanto %
= 3 ∙ 17 = 51 , concordando com o valor teórico
(49,5 ), com erro prático percentual de 3%. Também, a tensão em regime estacionário é de 0,96 , 1,04 abaixo do nível imposto, de 2, como o erro é a diferença entre a entrada e a saída, o erro estacionário é justamente de 1,04, apenas 0,01 abaixo
do valor teórico calculado de 1,05 , totalizando um erro prático percentual de 1,1%.