Anda di halaman 1dari 7

Relatório de Controle 2 – Compensador Proporcional

Matheus Skorupski de Santana – 1718843 – S11

• Descrição e objetivo: A prática, a seguir descrita, teve como 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, 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
𝑠 + 𝑅𝐶
1
Calculando o valor de , sendo que foi utilizado um resistor de 33𝑘Ω e
𝑅𝐶

um capacitor de 1𝜇𝐹 resulta em:


1 1 1000 𝑟𝑎𝑑
= 3 −6
= ≈ 30.3
𝑅𝐶 33 × 10 ∙ 1 × 10 33 𝑠
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
𝑡𝑠 5% = = = 3𝑅𝐶 = 3 ∙ 33 × 10−3 = 99𝑚𝑠
𝜎 1
𝑅𝐶
Deseja-se construir um compensador proporcional, de forma que este
tempo de estabilização caia pela metade, ou seja
𝑡𝑠 5%
𝑡𝑠 5% = = 49.5𝑚𝑠
𝑛𝑜𝑣𝑜 2
Assim, o novo polo de malha fechada será
3 3 𝑟𝑎𝑑
𝜎𝑛𝑜𝑣𝑜 = = = 60.6
𝑡𝑠 5% 0.0495 𝑠
𝑛𝑜𝑣𝑜

No plano Z
𝑧 = 𝑒 −𝑠𝑇 = 𝑒 −60.6∙0.003 = 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 1
=
𝑧 − 0.9131 + 𝐾 ∙ 0.0869 𝑧 − 0.8338
−0.9131 + 𝐾 ∙ 0.0869 = −0.8338
0.0793
𝐾= = 0.9125
0.0869
Assim, a nova função de transferência em malha fechada será
0.9125 ∙ 0.0869 0.0793
𝑀𝐹∗ = =
𝑧 − 0.9131 + 0.9125 ∙ 0.0869 𝑧 − 0.8338

• Sabe-se que erro de um sistema unitariamente realimentado de controle


é definido, em geral, como:
𝐸𝑟𝑟𝑜 = 𝐸𝑛𝑡𝑟𝑎𝑑𝑎 − 𝑆𝑎í𝑑𝑎
E
𝐸𝑟𝑟𝑜𝑒𝑠𝑡𝑎𝑐𝑖𝑜𝑛á𝑟𝑖𝑜 = 𝑒𝑠𝑠 = lim 𝑒(𝑡)
𝑡→∞

𝑅𝑒𝑓 0.9125 ∙ 0.0869


𝑒𝑠𝑠 = , 𝐾𝑃 = lim 𝐾𝑀𝐹 = = 0.902
1 + 𝐾𝑃 𝑧→1 1 − 0.9131
Ao aplicar-se um degrau de amplitude Ref (2, por exemplo), obtém-se que
o erro 𝑒𝑠𝑠
2
𝑒𝑠𝑠 = = 1.0515 𝑉 ≈ 1.05𝑉
1 + 0.902
• 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 <stdio.h>
#include <stdlib.h>
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 𝑡𝑠 5% = 3𝜏.
Portanto 𝑡𝑠 5% = 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%.

Anda mungkin juga menyukai