MINISTÉRIO DA EDUCAÇÃO

UNIVERSIDADE FEDERAL DO PARANÁ

SETOR DE TECNOLOGIA

DEPARTAMENTO DO CURSO DE ENGENHARIA ELÉTRICA

CURSO DE ENGENHARIA ELÉTRICA

DISCIPLINA DE PROCESSAMENTO DIGITAL DE SINAIS

PROFESSOR EDUARDO PARENTE RIBEIRO

 

 

 

 

 

 

 

APLICAÇÕES DE PROCESSAMENTO DIGITAL DE SINAIS

EM CONTROLE E SERVOMECANISMOS

 

 

 

 

 

RELATÓRIO

 

 

 

 

 

 

 

realizado pelos alunos:

Edson Wander da Silva

Leopoldo Zanardo de França

Marcos Vinícius Stati

Nelson Coutinho Melco

Ruben Siegrist

 

  

 

Curitiba, 02 de Outubro de 2000.


ÍNDICE

 

1. Explicando o PID analógico *

· Os três termos do controlador *

· As características dos controladores P, I e D *

· Problema de demonstração *

· Resposta ao degrau em malha aberta *

· Controle Proporcional-Derivativo *

· Controlador Proporcional-Integral *

· Controlador Proporcional-Integral-Derivativo *

· Dicas gerais para o projeto de um PID analógico *

2. Digitalização de sistemas analógicos *

· Zero-Order Hold (ZOH) *

· Matched-pole Zero *

· Transformação Bilinear *

3. Digitalização do PID *

· Controlador PID *

4. Digitalização do motor *

5. Ajuste de pólos e zeros *


 

  1. Explicando o PID analógico

 

 

A função de transferência do PID é semelhante a:

Kp = Ganho proporcional

KI = Ganho integral

Kd = Ganho derivativo

Primeiramente, veremos como o controlador PID trabalha em um sistema de malha fechada usando o esquemático mostrado acima. A variável (e) representa o erro, a diferença entre o valor de entrada desejado (R) e a atual saída (Y). Esse sinal de erro (e) será enviado ao controlador PID, e o controlador calculará tanto o integral quanto o derivativo deste sinal de erro. O sinal (u) que acaba de sair do controlador é agora igual ao ganho proporcional (Kp) vezes a magnitude do erro mais o ganho integral (Ki) vezes a integral do erro mais o ganho derivativo (Kd) vezes o derivativo do erro.

Um controlador proporcional (Kp) terá o efeito de reduzir o tempo de subida e reduzirá, mas jamais eliminará, o erro em regime permanente. Um controlador integral (Ki) terá o efeito de eliminar o erro em regime permanente, mas ele deixará pior a resposta transiente. Um controlador derivativo (Kd) terá o efeito de incrementar a estabilidade do sistema, reduzindo o overshoot, e melhorando a resposta transiente. Efeitos de cada controlador Kp, Kd, e Ki em um sistema de malha fechada estão descritos na tabela a seguir.

 

Resposta ao aumentar o:

Tempo de subida

OVERSHOOT

Tempo de acomodação

Erro em regime permanente

Kp

Diminui

Aumenta

Pequena variação

Diminui

Ki

Diminui

Aumenta

Aumenta

Eliminado

Kd

Pequena variação

Diminui

Diminui

Pequena variação

A função de transferência entre o deslocamento X(s) e a entrada F(s) é descrita como:

Considere:

M = 1kg

b = 10 N.s/m

k = 20 N/m

F(s) = 1

Entre com estes valores na função de transferência a seguir:

O objetivo deste problema é mostrar como cada variável do controlador (Kp, Ki and Kd) contribui para obter:

Vamos primeiramente ver a resposta ao degrau em malha aberta. Crie um m-file com o seguinte código:

num=1;

den=[1 10 20];

step(num,den)

Executando este m-file no Matlab, aparecerá o gráfico plotado abaixo:

O ganho DC da função de transferência da planta é 1/20, então 0.05 é o valor final da saída e é a resposta a um degrau unitário. Isto corresponde a um erro em regime permanente de 0.95, bastante grande realmente. Além disso, o tempo de subida é aproximadamente um segundo, e o tempo de ajuste é aproximadamente 1.5 segundos. Projetemos um controlador que reduzirá o tempo de subida.

Da tabela mostrada acima, vemos que o controlador proporcional (Kp) reduz o tempo de subida, aumenta o overshoot, e reduz o erro de regime permanente. A função de transferência em malha fechada do sistema acima com um controlador proporcional é:

Deixe o ganho proporcional (Kp) igual a 300 e mude o m-file assim:

Kp=300;

num=[Kp];

den=[1 10 20+Kp];

t=0:0.01:2;

step(num,den,t)

Executando este m-file no Matlab adquirimos o seguinte resultado:

Nota: A função do Matlab chamada cloop pode ser usada para obter uma função de transferência de malha fechada diretamente de uma função de transferência de malha. O m-file seguinte usa o comando de cloop que deveria lhe dar o resultado idêntico como o mostrado acima.

num=1;

den=[1 10 20];

Kp=300;

[numCL,denCL]=cloop(Kp*num,den);

t=0:0.01:2;

step(numCL, denCL,t)

O gráfico acima mostra que o controlador proporcional reduziu o tempo de subida e o erro de regime permanente, aumentou o overshoot, e diminuiu o tempo de acomodação numa pequena fração.

Agora, demos uma olhada em um controle de PD. Da tabela mostrada anteriormente, vemos que o controlador derivativo (Kd) reduz o overshoot e o tempo de acomodação. A função de transferência de malha fechada do sistema com um controlador de PD é:

Deixe Kp igual a 300 como antes e deixe Kd igual a 10. Entre os comandos seguintes num m-file e execute.

Kp=300;

Kd=10;

num=[Kd Kp];

den=[1 10+Kd 20+Kp];

t=0:0.01:2;

step(num,den,t)

Este gráfico mostra que o controlador derivativo reduziu o overshoot e o tempo de acomodação, e teve pequeno efeito no tempo de subida e no erro de regime permanente.

Antes de entrar em um controle de PID, demos uma olhada em um controle de PI. Da tabela, vemos que o controlador integral (Ki) diminui o tempo de subida, aumenta o overshoot e o tempo de acomodação, e elimina o erro em regime permanente. Para o sistema dado, a função de transferência em malha fechada com um controle PI é:

 

Reduzamos o Kp para 30, e deixemos Ki igual a 70. Crie um m-file novo e entre com os seguintes comandos:

Kp=30;

Ki=70;

num=[Kp Ki];

den=[1 10 20+Kp Ki];

t=0:0.01:2;

step(num,den,t)

Execute este m-file no Matlab, e você obterá o seguinte gráfico:

Nós reduzimos o ganho proporcional (Kp) porque o controlador integral também reduz o tempo de subida e aumenta o overshoot, da mesma forma como o controlador proporcional faz. A resposta acima mostra que o controlador integral elimina o erro em regime permanente.

Agora, vejamos um controlador PID. A função de transferência de malha fechada do sistema com um controlador PID é:

Depois de várias execuções de tentativa-e-erro, os ganhos Kp=350, Ki=300, e Kd=50 providenciam a resposta desejada. Para confirmar, entre os seguintes comandos num m-file e execute na janela de comando. Você deverá adquirir a seguinte resposta ao degrau:

Kp=350;

Ki=300;

Kd=50;

num=[Kd Kp Ki];

den=[1 10+Kd 20+Kp Ki];

t=0:0.01:2;

step(num,den,t)

 

Agora, nós obtivemos o sistema sem overshoot, tempo de subida rápido, e nenhum erro em regime permanente.

Quando você está projetando um controlador PID para um determinado sistema, siga os passos mostrados abaixo para obter uma resposta desejada:

1. Obtenha uma resposta em malha aberta e determine o que precisa de ser melhorado

2. Acrescente um controlador proporcional para melhorar o tempo de subida

3. Acrescente um controlador derivativo para o overshoot

4. Acrescente um controlador integral para eliminar o erro em regime permanente

5. Ajuste cada Kp, Ki, e Kd até que você obtenha a resposta desejada.


 

  1. Digitalização de sistemas analógicos

Há várias maneiras de se transformar sistemas contínuos em sistemas digitais. As mais usadas são:

Esta técnica assume que o dispositivo analógico H2(S), que pode ser um motor, é precedido de um ZOH e seguido de um sampler. Um ZOH é um dispositivo que converte um sinal digital em um sinal analógico de acordo com a figura abaixo:

Nesta técnica, os pólos do domínio S são diretamente mapeados para o domínio Z de acordo com a equação:

,onde T = período de amostragem.

Esta técnica, também chamada de aproximação de Tustin, utiliza a seguinte equação:

A partir deste ponto, usaremos as técnicas mencionadas na solução do controle de velocidade de um motor DC.


  1. Digitalização do PID

 

Lembre-se que a função de transferência contínua para um controlador PID é:

 

Há vários técnicas para digitalizar um sistema analógico. A mais precisa é:

Nós não podemos obter a função de transferência deste modo porque a função de transferência no domínio Z teria mais zeros do que pólos, o que não é realizável. Ao invés disso vamos usar a transformação bilinear mostrada como segue:

 

Assim nós podemos derivar o controlador PID discreto usando a transformação bilinear. Abaixo, usaremos a técnica bilinear na digitalização de um PID.

*Extraído do spru83.pdf da Texas Instruments.

Um comando no Matlab chamado c2dm, implementa a conversão analógica para a digital.

De acordo com o método de tentativa e erro, foram encontrados os parâmetros de um PID analógico para o controle da velocidade de um motor: Kp = 100, Ki = 200 e Kd = 10.

Criando um m-file que digitaliza o PID analógico:

% Controlador PID discreto com aproximação bilinear

Kp = 100;

Ki = 200;

Kd = 10;

[dencz,numcz]=c2dm([1 0],[Kd Kp Ki],Ts,'tustin');

O vetor numcz é o numerador e dencz o denominador da função de transferência do domínio Z de um PID.


  1. Digitalização do motor
  2. O motor simbolizado por H2(S) será transportado para o domínio Z utilizando-se a técnica de inserir ZOH na entrada e um sampler na saída, de acordo com o esquemático a seguir:

    No caso em questão, H2(S) é uma função que relaciona velocidade, em função da tensão inserida no motor.

    Onde:

    * (R) = 1 ohm

    * (L) = 0.5 H

    * (Ke=Kt) = 0.01 Nm/Amp

    * (J) = 0.01 kg*m^2/s^2

    * (b) = 0.1 Nms

    * input (V): tensão de alimentação

    * output (theta dot): velocidade do motor

    Criando um m-file que digitaliza um motor através do uso da técnica ZOH, notar o parâmetro 'zoh' na função c2dm.

    R=1;

    L=0.5;

    Kt=0.01;

    J=0.01;

    b=0.1;

    num = Kt;

    den = [(J*L) (J*R)+(L*b) (R*b)+(Kt^2)];

    Ts = 0.12;

    [numz,denz] = c2dm(num,den,Ts,'zoh')

    A função acima, representa a função de transferência, no domínio Z, de um motor.


  3. Ajuste de pólos e zeros

Ao concluir a transferência do PID e do motor para o domínio Z, criamos um m-file para observar a resposta em malha fechada, do sistema, a um degrau unitário:

numaz = conv(numz,numcz);

denaz = conv(denz,dencz);

[numaz_cl,denaz_cl] = cloop(numaz,denaz);

[x2] = dstep(numaz_cl,denaz_cl,101);

t=0:0.12:12;

stairs(t,x2)

xlabel('Time (seconds)')

ylabel('Velocity (rad/s)')

title('Stairstep Response:with PID controller')

 

 

 

Ao observarmos a figura acima, notamos que o sistema é instável, levando-nos a uma análise dos pólos para um correto projeto de PID.

Da figura abaixo, notamos que os pólos que estão fora do círculo unitário tendem a levar o sistema à instabilidade.

 

Figura: comportamento dos pólos no domínio Z

Criamos um m-file que visualiza os pólos do sistema, com um parâmetro K que vai de zero até o infinito. Podemos ver, a partir do help de rlocus abaixo, que os pólos se deslocam conforme a alteração do valor K.

 

RLOCUS(SYS) computes and plots the root locus of the single-input,

% single-output LTI model SYS. The root locus plot is used to

% analyze the negative feedback loop

%

% +-----+

% ---->O----->| SYS |----+---->

% -| +-----+ |

% | |

% | +---+ |

% +-------| K |<----+

% +---+

%

% and shows the trajectories of the closed-loop poles when the feedback

% gain K varies from 0 to Inf. RLOCUS automatically generates a set of

% positive gain values that produce a smooth plot.

 

rlocus(numaz,denaz)

title('Root Locus of Compensated System')

 

Podemos ver que o PID contribui com um pólo em -1. É necessário reprojetar o PID para que seu pólo coincida com o zero que está em -0.62. Isto tornará o sistema estável para pelo menos alguns ganhos (K).

O arquivo do Matlab abaixo reprojeta o pólo do PID que estava em -1, para a posição -0.62. Usando o comando rlocus novamente, notamos o deslocamento do pólo citado acima, conforme podemos ver no gráfico.

A seguir, notamos que para alguns Ks, o sistema é instável, e para outros, torna o sistema estável. O comando rlocfind calcula o valor de K na posição do pólo indicada pela seta do mouse. Se você clicar o mouse nos lugares indicados por '+', os pólos estarão dentro do círculo unitário tornando o sistema estável, conforme podemos ver na resposta em degrau utilizando-se do K encontrado pelo rlocfind.

dencz = conv([1 -1],[1.6 1])

numaz = conv(numz,numcz);

denaz = conv(denz,dencz);

rlocus(numaz,denaz)

title('Root Locus of Compensated System');

[K,poles] = rlocfind(numaz,denaz)

[numaz_cl,denaz_cl] = cloop(K*numaz,denaz);

[x3] = dstep(numaz_cl,denaz_cl,101);

t=0:0.12:12;

stairs(t,x3)

xlabel('Time (seconds)')

ylabel('Velocity (rad/s)')

title('Stairstep Response:with PID controller')

 

 

 

A figura anterior mostra que o tempo de acomodação é menor que 2 segundos.

Concluindo, podemos comparar com a resposta do sistema ao degrau, sem controlador, e notaremos que os parâmetros tempo de subida, overshoot, erro em regime permanente e tempo de acomodação são melhores no caso em que dispomos de um PID.