Uma malha de controle típica de "controle digital":
Que completamente retratada no plano-z resulta em:
A eq. que define a relação existente entre a entrada e a saída deste sistema é dada por:
ou:
Quando isolamos o sinal do Erro a equação fica:
(eq. (1))
ou seja, o erro só depende de:
Supondo diferentes tipos de sistemas para a e diferentes sinais de referência teremos:
: pode ser um sistema do tipo , onde:
De modo geral podemos escrever a como:
onde: é um “ganho”; num sistema com zeros, pólos e eventualmente integradores.
A questão agora é: — Como identificar um integrador (ou mais) dentro de uma (no plano-z) ?
NUm sistema discreto, podemos sintetizar uma ação integral fazendo:
Tentando generalizar (extrair) uma equação no plano-z para um processo de integração numérica retangular, percebemos que:
Desenvolvendo as equações, supondo que estamos interessados em integrar o erro de malha-fechada de um sistema, ou , teremos:
em
em
em
e assim por diante, então podemos generalizar esta processe/equação para:
A eq. anteior está no formato de “equação de diferenças”, sua transformada rede:
melhorando a expressão acima:
e finalmente temos que:
ou:
onde é o sinal que está sendo integrado (o erro do sistema) e é o resultado da integração.
Note o pólo em , é o Integrador.
Desenvolvendo as equações para este caso resulta:
Lembrando do cálculo da área de um trapézio:
onde: base maior; base menor; "altura" do trapézio. Neste caso, as "bases" correspondem aos valores dos erros amostrados e a "altura" corresponde a passagem de tempo, ou período de amostragem adotado, .
Então:
em
em
em
e assim por diante, então podemos generalizar este processo/equação para:
A eq. anteior está no formato de “equação de diferenças”, sua transformada rede:
melhorando a expressão acima:
e finalmente temos que:
ou:
E assim chegaremos à:
Note que: Nos 2 casos, sempre surge um pólo em .
Conclusão final: Um pólo em caracteriza o que chamamos de ação integral.
Lembrando da eq. (1), temos que:
Usando da Propriedade da Transformada-: Valor final, temos que:
Notamos que erro só depende do sinal referência, , e da função transferência de malha direta, . Ou seja, ele pode variar com o tipo de sinal de referência aplicado num sistema e pode ser modificado se a for convenientemente alterada através de um cuidadoso projeto do controlador da malha, , lembrando que:
Para continuar podemos considerar diferentes sinais de referência e tentar prever o valor do erro.
Entrada: | Domínio tempo: | Tranformada | Gráfico |
---|---|---|---|
Degrau: | |||
Rampa: | |||
Parabólica: |
Analisando alguns casos...
Erro para entrada degrau:
Temos que agora analisar para diferentes tipos de sistemas (para a ).
Se a corresponde à um sistema do tipo 0 (sem integrador), então:
Teremos então que:
e assim:
Algo como mostrado na próxima figura:
ou seja, concluímos que leva à um erro constante diferente de zero (não nulo), mas constante (limitado).
Note que a constante é chamada de "constante de posição" (ou constante do erro estático de posição), e assim esta equação fica generalizada para:
Onde: .
Se a corresponde à um sistema do tipo 1 (com 1 integrador), então:
Teremos então que:
,
o que implica em:
Algo como:
ou seja, o erro tende à zero, isto significa que a saída converge para o mesmo valor da rampa (sem erro em regime permanente).
Podemos repetir o raciocínio da entrada degrau para sistemas maiores que 1 e também vamos concluir que neste caso, para entrada degrau, basta um integrador presente na malha-direta para que .
Neste caso, a equação do erro fica:
Neste caso, surge a constante de velocidade, (constante do erro estático de velocidade):
Neste caso, a é do tipo:
A constante de velocidade fica:
E então:
Algo do tipo:
ou seja, a saída do sistema não converge (não consegue acompanhar a rampa) e o erro é cada vez maior, ou tendendo ao .
Neste caso, a é do tipo:
A constante de velocidade fica:
.
E então:
Ou algo como:
ou seja, a saída do sistema converge para determinado valor, um valor não nulo, ou seja, um erro em regime permanente. Isto significa que passado um certo período de tempo (o período transitório), a saída do sistema acompanha a rampa de forma "paralela", mantendo um erro constante.
Neste caso, a é do tipo:
A constante de velocidade fica:
.
E então:
Numa figura:
ou seja, a saída do sistema converge para o mesmo valor da rampa, ou seja, irá acompanhar a rampa sem nenhum erro.
Neste caso, a equação do erro fica:
Onde: .
se refere à constante de aceleração (ou constante do erro estático de aceleração).
Obedecendo aos raciocínios anteriores, vamos perceber que só vamos começar a limitar o erro para uma entrada parabólica quando a malha-direta do sistema contiver 2 integradores (sistema tipo 2).
Para sistemas menores que 2 (1 integrador ou menos), o erro nunca vai convergir, isto é, é , significando que o sistema nunca vai conseguir acompanhar a parábola.
Por fim, podemos resumir as conclusões numa "Tabela Resumo de Erros":
Isto significa que:
Sistemas tipo 0 ( sem pólo em , sem integrador), sempre resultarão em algum erro () para entrada degrau; felizmente um erro constante que não aumenta com o passar do tempo (mas que também não diminui). Isto é válido independente do ganho (de malha fechada) adotado para o sistema.
Sistemas tipo 0 se submetidos à entradas de mais alta ordem (rampa ou parábola), não vão conseguir acompanhar a referência. Ou seja, a medida que o tempo passa, o erro só aumenta; ele não convege ( e ).
Seja uma planta definida no mundo contínuo como:
Suponha que queremos verificar como este sistema se comporta em MF para entradas degrau e rampa, fechando a malha com um simples controlador proporcional (com ganho unitário).
Ingressando estes dados no Matlab para calcular :
xxxxxxxxxx
>> G=tf(10, poly([0 -1]) );
>> zpk(G)
10
-------
s (s+1)
Continuous-time zero/pole/gain model.
>> % Digitalizando sistema, calculando $BoG(z)$:
>>
>> T=0.1; % informando periodo de amostragem na vari•vel T
>> BoG = c2d( G, T);
>> zpk(BoG)
0.048374 (z+0.9672)
-------------------
(z-1) (z-0.9048)
Sample time: 0.1 seconds
Discrete-time zero/pole/gain model.
Usando o Matlab… Note que a função dcgain()
do Matlab é capaz de trabalhar com argumentos de entrada sendo transfer functions tanto no plano-s quanto no plano-z. Ela realiza:
Plano-s | Plano-z |
---|---|
dcgain(FTMA(s)) = | dcgain(FTMA(z)) = |
Então podemos usar esta função para calcular os ganhos (dos erros estáticos) de erro:
xxxxxxxxxx
>> Kp= dcgain(BoG)
>> Kp =
Inf
>> BoGKv= BoG*tf([1 -1], 1, T); % acrescentando numerador (z-1)
>> zpk(BoGKv)
0.048374 (z-1) (z+0.9672)
-------------------------
(z-1) (z-0.9048)
Sample time: 0.1 seconds
Discrete-time zero/pole/gain model.
>> Kv=dcgain(BoGKv)
>> Kv =
1.0000
>> erro_degrau=1/(1+Kp)
>> erro_degrau =
0
>> erro_rampa=T/Kv
>> erro_rampa =
0.1000
Fechando a malha e verificando resposta do sitema:
No Matlab:
xxxxxxxxxx
ftmf=feedback(1*BoG, 1);
figure; step(ftmf)
Obtendo a figura:
Conforme esperado, nota-se que a saída converge para o mesmo valor da referência, ou seja, o erro em regime permanente é nulo. Mas também se percebe que a resposta é um tanto oscilatória e com overshoot elevado, o que significa que mesmo adotar gannho unitário é algo elevado para este sistema.
Usando Matlab:
xxxxxxxxxx
>> t=0:T:20; % cria vetor tempo com amostras espaçadas de T segundos
>> r=0.1*t; % cria o vetor rampa (ou referência)
>> figure; plot(t, r) % pode ser usado para comprovar o gráfico da rampa
>> % Mas queremos "trucar" rampa a partir de t=10 segundos
>> 10/T
ans =
100
>> % Isto ocorre na amostra de número 100
>> r(100) % verificando amplitude da rampa para indice=100
ans =
0.9900
>> r(101) % indice=101 corresponde a amostra k=100
ans =
1
>> size(r) % comprovando tamanho do vetor r
ans =
1 201
>> r(101:201)=1; % truncando rampa a partir de t=10 segundos, em amplitude=1
>> plot(t,r) % pode ser usado para comprovar o gráfico da rampa truncada
Fechando a malha, mas para versão contínua do sistema (à título de comparação)
xxxxxxxxxx
>> ftmf_c=feedback(1*G, 1); % note que variável 'ftmf'= MF versão digital!
>> zpk(ftmf_c)
10
--------------
(s^2 + s + 10)
Continuous-time zero/pole/gain model.
>> % comparando com versão digital da FTMF:
>> zpk(ftmf)
0.048374 (z+0.9672)
-----------------------
(z^2 - 1.856z + 0.9516)
Sample time: 0.1 seconds
Discrete-time zero/pole/gain model.
>> figure; lsim(ftmf_c, r, t); % simulando sistema para referencia r customizada
A próxima figura mostra a resposta para entrada rampa truncada para sistema em malha-fechado usando simples controlador Proporcional com ganho unitário:
Simulando a resposta mas a versão “digitalizada do sistema”… Neste caso, usando a variante "discreta" da função lsim()
. Note que a função dlsim()
ao contrário de lsim
, não admite que argumento de entrada seja uma transfer function. Então necessitamos, "expandir" a transfer function digital para uma versão que contenha o polinômio (coeficientes) do numerador e denominador em variáveis separadas, usando a função tfdata(<transfer_function>, ‘v’)
- note que o segundo argumento de entrada desta função deve ser ’v’
(de “verbouse”).
xxxxxxxxxx
>> help dlsim
<strong>dlsim</strong> Simulation of discrete-time linear systems.
<strong>dlsim</strong>(A,B,C,D,U) plots the time response of the discrete system:
x[n+1] = Ax[n] + Bu[n]
y[n] = Cx[n] + Du[n]
to input sequence U. Matrix U must have as many columns as there
are inputs, u. Each row of U corresponds to a new time point.
<strong>dlsim</strong>(A,B,C,D,U,X0) can be used if initial conditions exist.
<strong>dlsim</strong>(NUM,DEN,U) plots the time response of the transfer function
description G(z) = NUM(z)/DEN(z) where NUM and DEN contain the
polynomial coefficients in descending powers of z. If
LENGTH(NUM)=LENGTH(DEN) then <strong>dlsim</strong>(NUM,DEN,U) is equivalent to
FILTER(NUM,DEN,U). When invoked with left hand arguments,
[Y,X] = <strong>dlsim</strong>(A,B,C,D,U)
[Y,X] = <strong>dlsim</strong>(NUM,DEN,U)
returns the output and state time history in the matrices Y and X.
No plot is drawn on the screen. Y has as many columns as there
are outputs and LENGTH(U) rows. X has as many columns as there
are states and LENGTH(U) rows.
See also: <a href="matlab:help lsim">lsim</a>, <a href="matlab:help step">step</a>, <a href="matlab:help impulse">impulse</a>, <a href="matlab:help initial">initial</a>.
Obtendo o numerador e denominador de em variáveis separadas:
xxxxxxxxxx
>> [numd,dend]=tfdata(ftmf,'v')
numd =
0 0.0484 0.0468
dend =
1.0000 -1.8565 0.9516
>> figure; dlsim(numd, dend, r)
E então finalmente se obtêm a resposta do sitema digitalizado, em malha fechada, usando controlador proporcional (ganho unitário):
Note que este gráfico é semelhante ao obtido para a .
Resposta | Resposta |
---|---|
Fim.
Fernando Passold, em 07.04.2021 (revisado em 01/04/2024).