apostila de matlab
TRANSCRIPT
1
MATLAB aplicado à Engenharia de
Controle e Automação Industrial
Elaboração:
Renato de Abreu Fernandes
Orientador:
Maurício Gonçalves Ferrarez
Campos dos Goytacazes
2010
2
CAPÍTULO 1. INTRODUÇÃO ................................................................... 07
1.1. Diretório Atual (Current Directory) .............................................................. 08
1.2. Workspace .................................................................................................... 08
1.3. Histórico de Comando (Command History) ................................................. 08
1.4. Janela de Comando (Command Window) ................................................... 09
1.5. Start .... ......................................................................................................... 09
1.6. Ambiente simulink ...................................................................................... 09
CAPÍTULO 2. COMANDOS BÁSICOS DO MATLAB .......................... 12
2.1. Operadores matriciais ................................................................................. 14
2.2. Operadores relacionais e operadores lógicos .............................................. 14
2.3. Caracteres especiais ..................................................................................... 15
2.4. Uso do operador ponto-e-vírgula ................................................................ .16
2.5. Uso do operador dois pontos ....................................................................... 16
2.6. Linha de programa começando com % ....................................................... 16
CAPÍTULO 3. OPERAÇÕES BÁSICAS COM MATRIZES. ....................... 17
3.1. Operações Simples com Vetores .................................................................. 17
3.2. Estrutura das Matrizes .................................................................................. 18
3.3. Operações com matrizes .............................................................................. 19
CAPÍTULO 4. CRIANDO GRÁFICOS ................................................ 25
4.1. Gráfico em duas dimensões ......................................................................... 25
4.2. Gráfico em três dimensões ........................................................................... 29
4.3. Gráfico polar ................................................................................................. 30
4.4. Gráfico de Rede ............................................................................................ 31
3
CAPÍTULO 5. COMANDOS PARA DERIVADAS E INTEGRAIS ........... 33
5.1. Derivada de expressões matemáticas .......................................................... 33
5.2. Cálculo de limite ........................................................................................... 36
5.3. Integral de expressões matemáticas ............................................................ 37
5.4. Somatório ..................................................................................................... 39
5.5. Raízes de uma equação ................................................................................ 39
CAPÍTULO 6. INTERPOLAÇÃO ....................................................... 40
6.1. Interpolação unidimensional ........................................................................ 40
6.2. Interpolação bidimensional .......................................................................... 44
6.3. Interpolação pelo método dos mínimos quadrados .................................... 49
CAPÍTULO 7. MATLAB PARA CONTROLE CLÁSSICO ....................... 52
7.1. Determinando pólos e zeros ......................................................................... 52
7.2. Criando funções de transferências ............................................................... 53
7.3. Utilizando a função conv .............................................................................. 54
7.4. Frações Parciais ............................................................................................. 55
7.5. Análise da resposta transitória ..................................................................... 57
7.5.1. Análise da resposta transitória de uma entrada de referência do
tipo Impulso unitário ........................................................................................... 57
7.5.2. Análise da resposta transitória de uma entrada de referência do
tipo Degrau unitário ............................................................................................ 58
7.5.3. Análise da resposta transitória de uma entrada de referência do
tipo Rampa unitária ............................................................................................. 59
4
7.5.4. Análise da resposta transitória de uma entrada de referência do
tipo Aceleração unitária. .................................................................................... 60
7.6. Obtendo função de transferência em série, paralelo e feedback. ............... 62
7.7. Obtenção do gráfico de lugar das raízes ...................................................... 64
7.8. Aproximação de tempo morto ..................................................................... 65
7.9. Construção de diagrama de bode ................................................................. 65
7.10. Diagrama de Nyquist .................................................................................. 66
7.11. Transformação de modelos matemáticos .................................................. 67
7.12. Análise da resposta transitória utilizando espaço estado .......................... 69
7.13. Comando para Cálculo de Posto de uma Matriz ........................................ 71
7.14. Cálculo para encontrar a matriz de ganhos e realimentação..................... 72
7.15. Cálculo de autovalores de uma Matriz ....................................................... 73
7.16. Comando para atribuir uma letra como símbolo ....................................... 74
CAPÍTULO 8. SISOTOOL .......................................................................... 75
8.1. O que é e para que serve o SISOTOOL? ........................................................ 75
8.2. Ambientes ..................................................................................................... 76
8.3. Projeto de um Controlador PID para Plantas Estáveis ................................. 79
8.4. Projeto de Compensadores para Plantas Instáveis ...................................... 84
CAPÍTULO 9. MATLAB PARA CONTROLE DIGITAL .......................... 95
9.1. Comandos Introdutórios ............................................................................... 95
9.2. Projeto de um controlador PD discreto ...................................................... 100
9.3. Projeto de um controlador PI discreto ....................................................... 106
9.4. Projeto de um controlador PID discreto ..................................................... 111
5
CAPÍTULO 10. MATLAB PARA CONTROLE AVANÇADO ................ 117
10.1. Modelagem de portas lógicas ................................................................... 118
10.2. Modelagem de funções matemáticas ...................................................... 126
10.3. Modelagem de processos industriais utilizando dados reais ................... 131
CAPÍTULO 11. COMUNICAÇÃO ENTRE O MATLAB E SOFTWARES DE
PLATAFORMA WINDOWS .......................................................... 138
11.1. Comunicação entre o MATLAB e o EXCEL utilizando protocolo de
comunicação DDE .............................................................................................. 139
11.2. Comunicação entre o MATLAB e o INTOUCH utilizando protocolo
de comunicação DDE ......................................................................................... 144
11.3. Comunicação entre o MATLAB e o SYSCON utilizando a
ferramenta opctool
........................................................................................................................... 147
CAPÍTULO 12. ESTUDO DE CASO ................................................ 153
12.1. Modelagem matemática e utilização do MATLAB ................................... 154
12.1.1. Função de transferência ............................................................ 155
12.1.2. Espaço estado ............................................................................ 156
12.1.3. Representação no MATLAB e resposta em malha aberta ......... 157
12.2. Método de projeto de um controlador PID para controle de
velocidade do motor DC .................................................................................... 159
12.2.1. Controle proporcional ............................................................... 160
12.2.2. Controle PID ............................................................................... 162
12.2.3. Sintonia fina do controlador ...................................................... 163
6
12.3. Lugar das raízes ......................................................................................... 165
12.4. Respota em frequência ............................................................................. 167
12.5. Espaço estado ........................................................................................... 170
12.5.1. Projetando um controlador de realimentação de estado
completo ............................................................................................................ 171
12.5.2. Adicionando uma entrada de referência .................................. 173
12.6. Controle Digital ......................................................................................... 178
ADENDO. RESUMO DOS COMANDOS MAIS UTILIZADOS NO CURSO
7
CAPÍTULO 1 – INTRODUÇÃO
O MATLAB (Uma abreviação para MATrix LABoratory) é um sistema baseado
em matrizes, empregado em cálculos matemáticos e de engenharia. Pode-se imaginar
o MATLAB como uma espécie de linguagem desenvolvida com intuito de manipular
matrizes. Todas as variáveis tratadas pelo MATLAB são matrizes. Isto quer dizer que o
MATLAB só tem um tipo de dado, a matriz, que nada mais é que um arranjo retangular
de números. O MATLAB possui um extenso conjunto de rotinas para obtenção de
saídas gráficas.
MATLAB é um programa de computador que utiliza da linguagem de alto nível e
ambiente interativo que habilita você executar computacionalmente tarefas grandes
com uma velocidade mais veloz que as outras linguagens de programação tradicionais
como C, C++ e Fortran.
O usuário pode usar o MATLAB em uma ampla gama de aplicações, incluindo
processamento de sinal e imagem, comunicação, design de controle, teste e medição,
modelagem e análise financeira, e biologia computacional. Add-on toolboxes (coleções
especiais de funções MATLAB efeito, disponível em separado) ampliar o ambiente
MATLAB para resolver determinadas classes de problemas nestas áreas de aplicação.
Fornece também um número de funcionalidades para documentar e partilhar o seu
trabalho. Você pode integrar seu código MATLAB com outras linguagens e aplicações.
O ambiente MATLAB é composto pelas seguintes divisões:
8
1.1 - Diretórios Atuais (Current Directory)
A janela Current Directory é usada para abrir arquivos ou ter acesso a qualquer
tipo de material, pasta ou programa instalado no computador. A vantagem de usar o
Current Directory é que não precisa sair do MATLAB para abrir e procurar outros
arquivos e pastas.
1.2 - Workspace
A janela Workspace permite o usuário observar todas as variáveis criadas e os
valores atribuídos às elas. É possível também a modificação destes valores através da
janela Array Editor, que permite alterar o valor da variável selecionada.
1.3 - Histórico de Comando (Command History)
A janela Command History permite o usuário ter acesso a todos os comandos
digitados na janela Command Window. Isto serve para que em algum momento
posterior, caso seja necessário, o usuário possa acessar, visualizar e usar os comandos
desejados e utilizados anteriormente em outra ocasião.
9
1. 4 - Janela de Comando (Command Window)
A janela Command Window é a principal janela, que executará e processará
todos os comandos desejados. Os comandos quando estão sendo processados, na
barra inferior aparecerá do lado esquerdo uma mensagem busy. Da mesma forma,
quando se inicia o MATLAB, os comandos somente podem ser executados após
aparecer a mensagem ready na barra.
1. 5 - Start
O Start fica localizado na barra inferior e é uma opção muito interessante de
ser explorada, pois possui muitos atalhos para Demos, Help, Toolboxes, suporte do
programa na internet e Help específico de ferramentas do MATLAB e SIMULINK.
1.6 - Ambiente SIMULINK
O SIMULINK é uma ferramenta para modelagem, simulação e análise de
sistemas dinâmicos. Sua interface primária é uma ferramenta de diagramação gráfica
por blocos e bibliotecas customizáveis de blocos. O software oferece alta integração
com o resto do ambiente MATLAB. O SIMULINK é amplamente usado em teoria de
controle e processamento digital de sinais para projeto e simulação multi-domínios.
10
Sistemas modeláveis matematicamente como sistemas de comunicação, de
automóveis, de dinâmica de barcos, de dinâmica de aeronaves, monetários e até
biológicos podem ser construídos e simulados no SIMULINK.
O MATLAB tem a facilidade do auxílio interativo (help-on-line), que pode ser
utilizado sempre que necessário. O comando “help”, quando executado, mostra uma
lista de funções e de operadores predefinidos, para os quais o recurso do auxílio (help)
está disponível. O comando “help nome da função” dará informações sobre a função
especificada. Ex.: >>help roots. O comando “help help” mostrará como utilizar o
auxílio interativo (help-on-line).
A janela de comandos “Command Window” possibilita o usuário digitar os
comandos, programas e etc. Porém a mesma não possibilita a gravação dos comandos
digitados caso o MATLAB seja encerrado. A solução é criar um arquivo chamado “M-
file”. Este arquivo possibilita você salvar os comandos e rotinas desenvolvidas. Assim,
sempre que necessário, o usuário poderá usar o arquivo a qualquer hora e em
qualquer computador, basta copiar o arquivo.
Para criar uma “M-file” basta clicar no primeiro ícone do canto esquerdo
superior da tela designado como “New M-file” ou no “Current Directory”,
pressionando o botão direito do mouse e selecionando a opção “New M-flie”. Deve-se
ter atenção quanto a gravação do arquivo, pois ele deve conter o nome desejado pelo
usuário seguido de “.m” e deve ser salvo na pasta MATLAB, localizada por default no
diretório Meus documentos. Ex:
Nome do arquivo: Lugardasraizes. m
11
Após esse arquivo ter sido criado, os comandos desenvolvidos ou não na janela
“Command Window” devem ser digitados ou copiados para dentro do “M.file”. Após
ter sido digitado todos os comandos desejados e ter salvado o programa, basta clicar
no ícone “run” na barra de ferramentas para que o programa seja executado. Os
resultados serão mostrados na janela “Command Window”.
12
CAPÍTULO 2 - COMANDOS BÁSICOS DO MATLAB
O sistema MATLAB possui diversas funções predefinidas que poderão ser
chamadas pelo usuário para resolver uma ampla gama de problemas. Comandos e
funções matriciais comumente empregados na solução de problemas de Engenharia
de Controle são:
Comandos e funções matriciais
comumente usados na solução de
problemas de engenharia de controle.
Explicações sobre o que o comando faz, o
que a função matricial significa, ou o que a
declaração significa.
Abs
Angle
Ans
Antan
Axis
Valor absoluto, magnitude complexa.
Ângulo de fase
Resp. obtida para expressão sem atribuição
Arcotangente
Escala manual do eixo
Bode Traçar diagrama de bode
clear
clg
conj
conv
cos
cosh
cov
Limpar a área de trabalho
Limpar tela gráfica
Conjugado complexo
Convolução, Multiplicação
Co-seno
Co-seno hiperbólico
Co-variância
deconv
det
diag
Deconvolução, Divisão
Determinante
Matriz diagonal
Eig
Exit ou quit
exp
expm
eye
Autovalores e autovetores
Término do programa
Exponenciação, base e
Matriz exponencial
Matriz identidade
filter
format long
format log e
format short
fromat short e
freqs
freqz
Implementação de filtro
Número real de 15 dígitos
Número real de 15 dígitos em notação científica
Número real de 5 dígitos
Número real de 5 dígitos em notação científica
Resposta de freq. no domínio da transfor. de laplace
Resposta de freqüência no domínio da transf. Z
13
Grid Desenhar linhas em uma grade reticulada
Hold on
imag
inf
inv
Manter na tela o gráfico corrente
Parte imaginária de um número complexo
Infinito
Inversa
j ou i Raiz quadrada de -1
Length
Linspace
Log
Loglog
Logm
Logspace
Log10
Lqe
Lqr
Tamanho do vetor
Vetores linearmente espaçados
Logaritmo natural
Gráfico loglog nos eixos x-y
Logaritmo da matriz
Vetores logariticamente espaçados
Logaritmo de base 10
Projeto de estimador quadrático linear
Projeto do regulador quadrático linear
Max
Mean
Median
Min
Valor máximo
Valor médio
Valor da mediana
Valor mínimo
Nan
nyquist
Não-número
Gráfico da resp. em freq. em coordenada de Nyquist
Ones Constante
pi
plot
polar
poly
plyñt
polyval
polyvalm
prod
Número pi
Gráfico linear em coordenadas cartezianas x-y
Gráfico em coordenadas polares
Polinômio característico
Ajuste polinomial de curvas
Avaliação polinomial
Avaliação de matriz polinomial
Produto de elementos
ramp
rand
rank
real
rem
residue
rlocus
roots
Traçar a resposta a entrada em rampa
Gerar números e matrizes randômicos
Calcular o posto (rank) de uma matriz
Parte real de um número complexo
Resto ou módulo
Expansão em frações parciais
Traçar lugar das raízes
Raízes polinomiais
semilogx
semilogy
sign
sin
sinh
size
sqrt
sqrtm
std
step
Gráfico semilog x-y (eixo x logarítmico)
Gráfico semilog x-y (eixo y logarítmico)
Função sinal
Seno
Seno hiperbólico
Dimensões de linhas e colunas de uma matriz
Raiz quadrada
Raiz quadrada de uma matriz
Desvio padrão
Traçar a resposta ao degrau unitário
14
sum Soma de elementos
tan
tanh
text
title
trace
Tangente
Tangente hiperbólica
Texto posicionado arbitrariamente
Colocar título em um gráfico
Traço de uma matriz
Who Lista de todas as variáveis atualmente na memória
Xlabel Título do eixo dos x
Ylabel Título do eixo dos y
Zeros Zero
2.1 - Operadores matriciais
As notações utilizadas nas operações envolvendo matrizes são as seguintes:
+ Adição
- Subtração
* Multiplicação
^ Potenciação
| Transposta conjugada
2.2 - Operadores relacionais e operadores lógicos
O MATLAB utiliza o seguinte conjunto de operadores relacionais e lógicos:
< Menor que
<= Menor ou igual a
> Maior que
15
>= Maior ou igual a
= = Igual
~= Diferente de
Observe que o sinal “=” é utilizado em um comando de atribuição, enquanto
“= =” é empregado em uma relação. Os operadores lógicos são os seguintes:
& AND
| OR
~ NOT
2.3 - Caracteres especiais
O MATLAB usa os seguintes caracteres especiais:
[ ] Usado na formação de vetores e de matrizes.
( ) Usado para a quebra da precedência de operadores em expressões.
‘ Usado para separar subscrito e argumentos de funções.
; Usado para encerrar linhas e para suprimir impressão.
: Usado para subscrever conjuntos e para a geração de vetores.
! Usado para forçar a execução de comandos dos sistemas operacionais.
% Usado para introduzir Comentários.
16
2.4 - Uso do operador ponto-e-vírgula
O ponto-e-vírgula é usado para suprimir impressão. Se o último caractere de
um comando for um ponto-e-vírgula, o comando é executado, mas sem a impressão
dos resultados gerados. Esta é uma característica útil na medida em que a impressão
de resultados intermediários pode não ser necessária. O ponto-e-vírgula também é
usado como indicador de final de linha quando se entra com os elementos de uma
matriz, exceção feita obviamente à última linha.
2.5 - Uso do operador dois pontos
Os dois pontos têm função muito importante no MATLAB. Este operador pode
ser usado para criar vetores, subscrever matrizes e especificar as iterações de
comando for. Por exemplo, j:k é a mesma coisa que [jj+1 j+2...k], A(:,j) é a j-ésima
coluna da matriz A, e A(i,:) é a i-ésima linha da matriz A.
2.6 - Linha de programa começando com ‘%’
As linhas de programas MATLAB iniciadas por “%” são linhas de comentários. A
notação “%” é similar ao ‘REM’ da linguagem BASIC. As linhas de comentários não são
executadas, ou seja, tudo que aparecer depois de um “%” em uma linha de programa
MATLAB é ignorado. Se os comentários precisarem de mais de uma linha, cada uma
delas deve começar com o símbolo %.
17
CAPÍTULO 3 - OPERAÇÕES BÁSICAS COM MATRIZES
3.1 - Operações Simples com Vetores
Essa é uma demonstração de alguns aspectos da linguagem do MATLAB.
Primeiro, vamos criar um vetor simples chamado “a” com nove elementos. Na
Command Window, digite:
>> a = [1 2 3 4 6 4 3 4 5]
E aperte a tecla Enter para executar o comando:
a =
1 2 3 4 6 4 3 4 5
Agora, vamos adicionar duas unidades para cada elemento do vetor ”a”, e
guardar um resultado em um novo vetor “b”. Digite:
>> b = a + 2
E aperte a Tecla Enter para executar o comando:
b =
3 4 5 6 8 6 5 6 7
O mesmo acontece caso se queira subtrair uma unidade ou qualquer outro
valor de cada elemento do vetor “b”, e guardar o resultado em um novo vetor “c”.
18
>> c = b -1
Em seguida aperte a tecla Enter:
c =
2 3 4 5 7 5 4 5 6
Caso queira multiplicar ou dividir todos os números de um vetor, basta colocar
o símbolo “*” ou “/”, respectivamente.
Ex.: >>d=c*2
>>e=c/5 3.2 - Estrutura das Matrizes
Criar Matrizes é tão fácil quanto fazer um vetor. Usando o operador Ponto-e-
Vírgula “;” para separar as linhas da matriz podemos fazer:
Matriz 2x2
>> A=[1 2;3 4]
A =
1 2
3 4
Matriz 3x3
>> B=[-1 2 3;4 -5 6;7 8 -9]
19
B =
-1 2 3
4 -5 6
7 8 -9
Observação: Caso se queira que a matriz seja mostrada na forma de gráfico,
basta usar os comandos para plotar gráficos que serão mostrados no próximo capítulo
e analisar o seu comportamento.
3.3 - Operações com matrizes
Somando duas Matrizes:
>> A=[1 2 3;4 5 6;7 8 9];
>> B=[9 8 7;6 5 4;3 2 1];
>> C=A+B
C =
10 10 10
10 10 10
10 10 10
Subtraindo duas Matrizes:
>> D=A-B
20
D =
-8 -6 -4
-2 0 2
4 6 8
>> D=B-A
D =
8 6 4
2 0 -2
-4 -6 -8
Note que se você inverter a ordem das matrizes que vão ser subtraídas os sinais
são trocados.
Multiplicando duas Matrizes:
>> E=A*B
E =
30 24 18
84 69 54
138 114 90
>> E=B*A;
Note que os valores também são invertidos nesse caso.
21
Dividindo duas matrizes:
>> F=A/B
Warning: Matrix is singular to working precision.
F =
NaN NaN NaN
NaN NaN NaN
NaN -Inf Inf
Ao invés de multiplicar matrizes, nós podemos multiplicar os elementos
correspondentes de duas matrizes ou vetores usando o operador “.*”:
>> A=[1 2;3 4];
>> B=[5 6;7 8];
>> C= A.*B
C =
5 12
21 32
Comando para encontrar a Matriz inversa:
>> A = [1 2 0; 2 5 -1; 4 10 -1];
>> X=inv(A)
22
X =
5 2 -2
-2 -1 1
0 -2 1
Para encontrar a Matriz Transposta:
>> C= B'
C =
-1 4 7
2 -5 8
3 6 -9
Para obter os valores próprios de um vetor basta usar o comando eig():
>> eig(A)
ans =
3.7321
0.2679
1.0000
>> whos
Name Size Bytes Class Attributes
A 3x3 72 double
23
Qualquer momento, nós podemos listar as variáveis que nós temos
armazenado na memória. Isso é possível usando os comandos who ou whos.
>> who
Your variables are:
A B C D E F X Y a ans b c d e
2x2 32 double
C 2x2 32 double
D 3x3 72 double
E 3x3 72 double
F 3x3 72 double
X 3x3 72 double
Y 3x3 72 double
a 1x9 72 double
ans 3x1 24 double
b 1x9 72 double
c 1x9 72 double
d 1x9 72 double
e 1x9 72 double
Caso digitarmos a variável, seu conteúdo será mostrado:
>> A
24
A =
1 2 0
2 5 -1
4 10 -1
O mesmo pode ser aplicado para as outras variáveis.
25
CAPÍTULO 4 - CRIANDO GRÁFICOS
4.1 - Gráfico em duas dimensões
Primeiro, iremos atribuir valores a um vetor:
>>b = [3 4 5 6 8 6 5 6 7];
Utilizando o vetor b criado, podemos demonstrá-lo em forma de gráfico.
Vamos plotar o resultado do nosso vetor com grid lines.
Digite na “Comand window” ,ou na “M-file” criada, os comandos:
>>plot(b) % Comando para plotar o vetor b.
>>grid on % Comando para aparecer o grid no gráfico.
Na Figura 1, é apresentado o gráfico gerado para os comandos acima:
Figura 1
26
O gráfico pode ser modificado facilmente com os comandos:
>> plot(b,'p') % A linha do gráfico será substituída por estrelas nos pontos do
vetor b.
>> plot(b,'g') % A linha do gráfico ficará verde.
>> plot(b,'r') % A linha do gráfico ficará vermelha.
>> plot(b,'o') % A linha do gráfico será substituída por bolas.
>> plot(b,'x') % A linha do gráfico será substituída por x.
>> plot(b,'y') % A linha do gráfico ficará amarela.
>> plot(b,'*') % Os valores do vetor b são representados por *.
O MATLAB pode gerar outros tipos de gráficos utilizando o mesmo vetor b,
exemplo:
>>bar(b,’r’)
Na Figura2, é apresentado o gráfico gerado pelo comando acima:
Figura 2
1 2 3 4 5 6 7 8 90
1
2
3
4
5
6
7
8
27
Para colocar os nomes nos eixos x e y devem-se usar os comandos xlabel e
ylabel, respectivamente. Exemplo:
>> plot(b,'*')
>> xlabel('tempo em s')
>> ylabel('velocidade m/s')
>> axis ([0 10 0 10])
Na Figura 3, é apresentado o gráfico gerado pelos comandos acima:
Figura 3
Como podemos ver o termo “tempo em segundos” foi alocado na coordenada
x e o termo “velocidade m/s” foi alocado na coordenada y. O comando axis tem a
função de limitar as coordenadas. O primeiro ”0” e “10” são referentes ao eixo x e os
outros “0” e “10” são referentes ao eixo y.
0 1 2 3 4 5 6 7 8 9 100
1
2
3
4
5
6
7
8
9
10
tempo em s
velo
cid
ade m
/s
28
Outro exemplo usando o comando stairs:
>> b=[1 2 3 4 5 4 3 2 1];
>> stairs(b)
Na Figura 4, é apresentado o gráfico gerado pelos comandos acima:
Figura 4
Outro caso é o do comando fill, que preenche o polígono bidimensional
definido pelos vetores de coluna x e y com a cor definida por c. Os vértices do polígono
são especificados pelos pares (xi, yi). Se necessário, o polígono é fechado pela conexão
do último vértice ao primeiro. Tente o exemplo:
>> t=(1/8:2/8:15/8)*pi; % Vetor de coluna.
>> x=sin(t); % Função seno em função da variável t.
>> y=cos(t); % Função cosseno em função da variável t.
1 2 3 4 5 6 7 8 93
3.5
4
4.5
5
5.5
6
6.5
7
7.5
8
29
>> fill(x,y,'r') % Um círculo preenchido com vermelho usando somente 8
pontos.
>> axis('square')
>> text(-.11,0,'pare')
>> title('Placa Vermelha de Pare')
Na Figura 5, é apresentado o gráfico gerado pelos comandos acima:
Figura 5
4.2 - Gráficos em três dimensões
O tipo de gráfico em três dimensões mais utilizado é:
>> A=[1 2 3;4 5 6;7 8 9];
>>bar3(A)
-1 -0.5 0 0.5 1-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
pare
Placa Vermelha de Pare
30
Na Figura 6, é apresentado o gráfico gerado pelos comandos acima:
Figura 6
As opções de mudança de cor também valem para os gráficos em 3d, como:
>> bar3(A,'g') % O gráfico ficará verde.
>> bar3(A,'r') % O gráfico ficará vermelha.
>> bar3(A,'b') % O gráfico ficará preto.
>> bar3(A,'y') % O gráfico ficará amarelo.
4.3 - Gráfico polar
Gráficos em coordenadas polares podem ser criados usando-se o comando
polar (t,r,S), onde t é o vetor ângulo em radianos, r é o vetor raio e S é um string de
caracteres opcionais que descreve cor, símbolos marcadores e/ ou tipo de linha. Veja o
exemplo:
12
3
12
3
0
2
4
6
8
10
31
>> t = 0:.01:2*pi;
>>r = sin(2*t).*cos(2*t);
>>polar(t,r)
Na Figura 7, é apresentado o gráfico gerado pelos comandos acima:
Figura 7
4.4 - Gráficos de Rede
Um exemplo simples de gráfico de rede pode ser feito utilizando os comandos
peaks, que gera uma matriz N por N. Exemplo:
>> z=peaks(40); % Onde N=40.
E o comando surf gera o gráfico de rede da variável desejada, neste caso é z:
>>surf(z)
32
Na Figura 8, é apresentado o gráfico de rede gerado pelos comandos acima:
Figura 8
0
10
20
30
40
0
10
20
30
40-10
-5
0
5
10
33
CAPÍTULO 5 - COMANDOS PARA DERIVADAS E INTEGRAIS
5.1 - Derivada de expressões matemáticas
Para derivar uma expressão que contém mais de uma variável, você deve
especificar a variável que você quer derivar utilizando o comando syms. O comando
diff então calcula a derivada parcial da expressão com a respectiva variável. Exemplo:
>> syms s t
>> f=sin(s*t);
>> diff(f,t)
ans =
cos(s*t)*s
Da mesma forma para:
>> f=cos(s*t);
>> diff(f,t)
ans =
-sin(s*t)*s
Caso se deseje saber quais foram as variáveis utilizadas na diferenciação, basta
executar o comando:
>> findsym(f,2)
34
ans =
t,s
Outros exemplos:
>>syms a b x n t theta
A Tabela 1 ilustra os resultados das expressões atribuídas a f em cada situação:
Tabela 1
Há uma opção de mostrar a derivada de forma simplificada. Para isto, usa-se o
comando:
>> simplify(diff(x^n))
ans =
x^(n-1)*n
Podemos utilizar o comando diff também em matrizes:
>> syms a x
>> A = [cos(a*x),sin(a*x);-sin(a*x),cos(a*x)]
35
A =
[ cos(a*x), sin(a*x)]
[ -sin(a*x), cos(a*x)]
>> diff(A)
ans =
[ -sin(a*x)*a, cos(a*x)*a]
[ -cos(a*x)*a, -sin(a*x)*a]
A Tabela 2 mostra de uma forma resumida os comandos usados no MATLAB
associados aos seus respectivos operadores matemáticos:
Tabela 2
36
5.2 - Cálculo de limite
Da mesma forma que na diferenciação de expressões matemáticas, para se
calcular o Limite de alguma expressão basta declarar a variável (como símbolo) usada
na expressão e fazer o uso do comando limit:
>> syms x
>> f=2*x^2 +10*x +100
f =
2*x^2+10*x+100
>> limit(f) % Aplica Lim f tendendo a zero.
ans =
100
A Tabela 3 explora as opções para o comando limit(f), lembrando que f é a
função do objeto simbólico x:
Tabela 3
37
5.3 - Integral de expressões matemáticas
Se f é uma expressão simbólica, então se utiliza o comando int para calcular a
integral da mesma:
>>int(f)
Veja como comando int funciona na Tabela 4:
Tabela 4
Nem sempre todas as integrais poderão ser calculadas, pois existem algumas
limitações. Veja alguns exemplos na Tabela 5:
>>syms a b theta x y n u z
38
Tabela 5
A Tabela 6 apresenta exemplos de implementação de integrais definidas:
>>syms x;
>> f=x^7; a=0;b=1;
>>int(f,a,b)
ans
1/8
Tabela 6
39
5.4 - Somatório
A implementação desta função é muito simples, basta declarar as variáveis e
usar o comando symsum. Exemplo:
>> syms x k
>> s1 = symsum(1/k^2,1,inf)
s1 =
1/6*pi^2
>> s2 = symsum(x^k,k,0,inf)
s2 =
-1/(x-1)
5.5 - Raízes de uma equação
Para se calcular raiz de uma equação, usa-se o comando roots:
>> roots([5 4 2 ]) % 5*s^2 + 4*s +2
ans =
-0.4000 + 0.4899i
-0.4000 - 0.4899i
40
CAPÍTULO 6 - INTERPOLAÇÃO
6.1 - Interpolação Unidimensional
A interpolação é definida como sendo uma forma de estimar os valores de
uma função entre aqueles dados por um conjunto de pontos de dados. A interpolação
é uma ferramenta valiosa quando não se pode calcular rapidamente a função nos
pontos intermediários desejados. Por exemplo, isso ocorre quando os pontos dados
resultam nas medições experimentais ou de procedimentos computacionais
demorados.
Talvez o exemplo mais simples de interpolação sejam os gráficos do MATLAB.
Por definição, o MATLAB desenha linhas retas interligando os pontos de dados usados
para se fazer um gráfico. Essa interpolação linear considera que os valores
intermediários caem em uma linha reta entre os pontos definidos. Com certeza, à
medida que se têm mais pontos de dados e a distância entre eles diminui, a
interpolação linear torna-se mais precisa. Por exemplo:
>> x1=linspace(0,2*pi,60);
>> x2=linspace(0,2*pi,6);
>> plot(x1,sin(x1),x2,sin(x2),'--')
>> xlabel('x'),ylabel('sin(x)'),title('interpolação Linear')
41
Na Figura 9 é apresentado o gráfico gerado pelos comandos acima:
Figura 9
Dos dois gráficos da função seno, o que tem 60 pontos é muito mais suave e
mais preciso entre os pontos de dados do que o que só tem seis pontos.
Há diversas estratégias de interpolação, dependendo das suposições feitas.
Além disso, é possível interpolar em mais de uma dimensão. Isto é, se você tiver dados
referentes a uma função de duas variáveis, z=f(x,y), pode interpolar entre os valores
tanto de x como de y para encontrar valores intermediários de z. O MATLAB apresenta
diversas opções de interpolação na função unidimensional interp1 e na função
bidimensional interp2. Cada uma dessas funções será sempre exemplificada nas
subseções seguintes. Para ilustrar a interpolação unidimensional, consideremos o
seguinte exemplo:
0 1 2 3 4 5 6 7-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
x
sin
(x)
interpolação Linear
42
Como parte de um projeto de ciências, Laura registrou a temperatura oficial em
Porto Alegre a cada hora, em um período de doze horas, para usar esses dados como
informação sobre o clima local.
Laura analisa seus dados:
>> horas = 1:12;
>> temps = [5 8 9 15 25 29 31 30 22 25 27 24];
>> plot(horas,temps,horas,temps,’*’)
>> title(‘temperatura em Porte Alegre’)
>> xlabel(‘hora’), ylabel(‘Graus celcius’)
Na Figura 10 é apresentado o gráfico gerado pelos comandos acima:
Figura 10
0 2 4 6 8 10 125
10
15
20
25
30
35
hora
Gra
us c
elc
ius
temperatura em Porte Alegre
43
Conforme mostrado no gráfico da Figura 10, o MATLAB desenha linhas que
interpolam de forma linear os pontos de dados. Para estimar a temperatura a qualquer
hora, Laura pode interpretar os dados visualmente. Como alternativa, ela poderia usar
o comando interp1:
>> t = interp1(horas,temps,9.3) % Estima a temperatura em hora = 9.3.
t =
22.9000
>> t = interp1(horas,temps,[3.2 6.5 7.1 11.7]) % Estima a temperaturas nos
instantes 3.2, 6.5, 7.1, 11.7 horas.
t =
10.2
30
30.9
24.9
Esse uso padrão de interp1 é descrito por interp1(x,y,x0), onde x é a variável
independente (abscissa), y é a variável dependente (ordenada) e x0 é um conjunto de
valores a serem interpolados. Além disso, esse uso padrão pressupõe interpolação
linear. Para se ter resultados um pouco mais precisos, basta utilizar o comando splines.
Então:
>> t = interp1(horas,temps,*3.2 6.5 7.1 11.7+,’splines’)
44
t =
9.6734
30.0427
31.1755
25.3820
Antes de discutir a interpolação bidimensional, é importante reconhecer uma
das principais restrições impostas por interp1. Não se podem pedir resultados fora do
limite da variável independente; por exemplo, interp1(horas,temps,13.5) conduziria a
um erro já que varia de 1 a 12.
6.2 - Interpolação Bidimensional
A interpolação bidimensional é fundamentada nas mesmas idéias básicas da
interpolação unidimensional. Entretanto, como o próprio nome indica, a interpolação
bidimensional interpola funções de duas variáveis, z =f(x,y). Para ilustrar essa
dimensão adicional, consideremos o seguinte problema:
Bernardo conseguiu um emprego no laboratório de pesquisas da Tanguá S.A.
Lá, ele está tentando aperfeiçoar a receita de um biscoito feito em forno de
microondas. Para testar a uniformidade das receitas após assar, ele os tira do forno de
microondas depois de prontos e mede a temperatura interna do biscoito em uma
matriz de 3 por 5 pontos no tabuleiro, conforme mostrado na Figura 11. A partir
45
desses dados, Bernardo espera determinar a distribuição de temperatura ao longo do
tabuleiro.
Figura 11
Bernardo usa o MATLAB para resolver seu problema criando os arquivos M-
files de instrução:
%Meiaaltura.m
%Analisa os dados de teste do lote.
%Corta o tabuleiro a meia profundidade e examina através da largura.
largura = 1:5 ; % Largura do tabuleiro
profund =1:3; % Profundidade do tabuleiro
temp= [82 81 80 82 84; 79 63 61 65 81;84 84 82 85 86];
la=1:0.2:5; % Escolhe a resolução para a largura.
p=2; % Centro do tabuleiro.
zl=interp2(largura,profund,temp,la,p); % Interpolação linear.
46
zc=interp2(largura,profund,temp,la,p,'cubic') % Interpolação cúbica.
plot(la,zl,'--',la,zc) % Plota as interpolações linear e cúbica.
Xlabel('largura do tabuleiro')
Ylabel('graus celcius')
Title('Temperatura na profundidade =2')
Na Figura 12, é apresentado o gráfico da temperatura na profundidade =2:
Figura 12
% Meialargura.m
% Analisa os dados de teste do lote.
% Corta o tabuleiro a meia largura e examina através da profundidade.
largura = 1:5 ; % Largura do tabuleiro.
profund =1:3; % Profundidade do tabuleiro.
temps= [82 81 80 82 84; 79 63 61 65 81; 84 84 82 85 86];
1 1.5 2 2.5 3 3.5 4 4.5 560
65
70
75
80
85
largura do tabuleiro
gra
us c
elc
ius
Temperatura na profundidade =2
47
pr=1:0.2:3; % Escolhe a resolução da profundidade.
l=3; % Centro do tabuleiro.
zl=interp2(largura,profund,temps,l,pr); % Interpolação linear.
zc=interp2(largura,profund,temps,l,pr,'cubic') % Interpolação cúbica.
plot(pr,zl,'-- ',pr,zc) % Plota as interpolações linear e cúbica.
xlabel('profundidade do tabuleiro')
ylabel('graus celcius')
title('Temperatura na largura =3')
Na Figura 13 é apresentado o gráfico da Temperatura na largura=3:
Figura 13
% tabuleiro.m
% Analisa os dados de teste do lote.
% Visualiza a distribuição de temperatura em todo o tabuleiro.
largura=[1 2 3 4 5] ; % Largura do tabuleiro.
1 1.5 2 2.5 360
65
70
75
80
85
profundidade do tabuleiro
gra
us c
elc
ius
Temperatura na largura =3
48
profund=[1 2 3]; % Profundidade do tabuleiro.
temps=[82 81 80 82 84; 79 63 61 65 81;84 84 82 85 86];
pr=1:.2:3; % Escolhe a resolução para a profundidade.
la=0:.2:5; % Escolhe a resolução para a largura.
zc=interp2(largura,profund,temps,la,pr,'linear'); % Interpolação cúbica.
mesh(la,pr,zc) % Cria um gráfico tridimensional.
xlabel('largura do tabuleiro')
ylabel('profundidade do tabuleiro')
zlabel('Graus Celsius')
title('Temperatura do lote')
axis('ij')
grid
E por fim, a Figura 14 apresenta a temperatura do lote:
Figura 14
49
O exemplo acima demonstra claramente que a interpolação bidimensional é
mais complicada simplesmente porque há mais detalhes com os quais devemos nos
preocupar. A forma básica de interp2 é interp2(x,y,z,xi,yi,método). Aqui x e y são as
duas variáveis independentes, z é a matriz da variável dependente, a qual tem o
tamanho de length(y ) linhas e lenght(x) colunas, xi é um conjunto de valores a serem
interpolados ao longo do eixo x e yi é um conjunto de valores a serem interpolados ao
longo do eixo dos y. O parâmetro opcional método pode ser ‘linear’, ‘cubic’ ou
‘nearest’. Neste caso, cubic não significa splines cúbicas, mas sim outro algoritmo
usando polinômios cúbicos. Para maiores informações acerca desses métodos, peça a
ajuda on-line, por exemplo, help interp2.
6.3 - Interpolação pelo método dos mínimos quadrados
Deseja-se construir um novo conjunto de dados a partir de um conjunto
discreto de dados pontuais previamente conhecidos. Para isto existem vários métodos
de interpolação e otimização matemáticas. Vamos utilizar aqui o método de
interpolação pelo método dos mínimos quadrados. O Método dos Mínimos
Quadrados é uma técnica de otimização matemática que procura encontrar o melhor
ajustamento para um conjunto de dados tentando minimizar a soma dos quadrados
das diferenças entre a curva ajustada e os dados (tais diferenças são chamadas
resíduos).
50
O comando polyfit calcula um polinômio de ordem N utilizando este método.
Por exemplo, se tivermos um vetor de dados:
>>x=[0:1:10];
>>y=[0 0.7 2.4 3.1 4.2 4.8 5.7 5.9 6.2 6.4 6.4]
Façamos:
>>coef1=polyfit(x,y,1) % Se quisermos ajustar uma função de grau 1.
>>coef2=polyfit(x,y,2) % Se quisermos ajustar uma função de grau 2, etc.
Observação: x e y sempre devem ter o mesmo número de elementos. Neste
caso temos 11 elementos em cada um. E para calcular um polinômio de grau n, basta
usar polyfit(x,y,n).
O seguinte resultado será mostrado para o caso de grau 1:
coef1=
0.66 0.831
O que significa:
y=0.66x+0.8318
E o resultado para o caso de grau 2 será:
coef2 =
-0.0712 1.3785 -0.2364
51
O que significa:
y2=-0.66x^2+1.3785x-0.2364
Para plotar o gráfico das funções coef1 e coef2, digite:
>> plot(coef1)
>> hold on
>> plot(coef2,'--r')
Na Figura 15 é apresentado o gráfico gerado pelos comandos acima:
Figura 15
1 1.2 1.4 1.6 1.8 2 2.2 2.4 2.6 2.8 3-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
1.2
1.4
Função de primeiro grau
Função de segundo grau
52
CAPÍTULO 7 - MATLAB PARA CONTROLE CLÁSSICO
7.1 - Determinando pólos e zeros da função de transferência
Há um comando no MATLAB que determina pólos e zeros. Este comando é o
tf2zp, que significa função de transferência para pólos e zeros. Exemplo:
>>num=[0 0 4 16 12]
>>den=[1 12 44 48 0]
>>[z,p,K]=tf2zp(num,den)
Obteremos a seguinte resposta:
z =
-3
-1
p =
0
-6.0000
-4.0000
-2.0000
K =
4
Onde z são os zeros, p são os pólos e k é a constante que multiplica o num.
53
7.2 - Criando funções de transferência
Uma função de transferência pode ser representada no MATLAB por dois
vetores linha, um com os coeficientes dos polinômios do numerador e o outro com os
coeficientes do polinômio do denominador. Para criarmos uma função de
transferência devemos declarar o numerador e o denominador com potências de s
decrescentes. Por exemplo:
Deseja-se declarar a função de transferência acima no MATLAB. Na Command
Window, digite:
>> num=[1 2 3];
>> den=[2 3 -5];
E, então, utilizar o comando tf (num,den):
>> G= tf(num,den)
Transfer function:
s^2 + 2 s + 3
---------------
2 s^2 + 3 s – 5
54
Algumas funções de transferência possuem tempo morto ou retardo de
transporte. Para colocar o tempo morto juntamente com a função de transferência
deve-se utilizar o comando tf(num,den,’inputdelay’,tm), onde tm é o tempo morto:
>>ft_com_tempo_morto= tf(num,den,'inputdelay',0.1)
Transfer function:
s^2 + 2 s + 3
exp(-0.1*s) * ---------------
2 s^2 + 3 s - 5
7.3 - Utilizando a função conv:
Para multiplicar dois polinômios com o MATLAB, pode-se utilizar o comando
conv. Por exemplo, para multiplicar os polinômios p1= 532 ss e p2= 542 2 ss ,
devemos declara- los da seguinte forma:
>>p1=[1 -3 5];
>>p2=[2 4 5];
>>c= conv(p1,p2)
c =
2 -2 3 5 25 % 2s^4 – 2s^3 + 3s^2 +5s +25
Que são os coeficientes, em ordem decrescente, do polinômio resultante da
multiplicação entre p1 e p2.
55
7.4 - Frações Parciais
Expandindo em frações parciais temos:
Podemos escrever F(S) como sendo,
Podemos calcular o resíduo, os pólos e o termo direto da expansão em frações
parciais utilizando o seguinte comando do MATLAB:
56
Outro exemplo:
57
7.5 - Análise da resposta transitória
7.5.1 - Análise da resposta transitória de uma entrada de referência do tipo
impulso unitário:
Para se aplicar uma entrada do tipo impulso unitário, usa-se o comando
impulse(num,den) ou impulse(G):
>> num=[1];
>> den=[1 0.2 1];
>> G=tf(num,den);
>> impulse(G)
A Figura 16 apresenta o gráfico com resposta da planta a uma entrada do tipo
impulso:
Figura 16
0 10 20 30 40 50 60-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
Impulse Response
Time (sec)
Am
plit
ude
58
7.5.2 - Análise da resposta transitória de uma entrada de referência do tipo
degrau unitário:
Vamos analisar, agora, a resposta de um sistema à entrada do tipo degrau
unitário. Para a seguinte função de transferência:
Digite os seguintes comandos na Command Window para declarar a F.T. e
aplicar o degrau utilizando o comando step:
>> num=[0 2 25] ;
>> den=[1 4 25];
>> sys=tf(num, den);
>> step(sys)
59
Na Figura 17, é apresentado o gráfico com resposta da planta a uma entrada
em degrau unitário:
Figura 17
7.5.3 - Análise da resposta transitória de uma entrada de referência do tipo
rampa unitária:
Não existe um comando específico para uma entrada do tipo rampa, porém
existe um comando chamado lsim, onde o usuário coloca o tipo de entrada que se
deseja aplicar:
>> num=[ 0 0 1];
>> den=[1 1 1];
>> t=0:0.1:8;
>> r=t; % Caracteriza o tipo de entrada, que neste caso é rampa unitária.
>> y=lsim(num,den,r,t);
0 0.5 1 1.5 2 2.5 30
0.2
0.4
0.6
0.8
1
1.2
1.4
Step Response
Time (sec)
Am
plit
ude
60
>> plot(t,r,'-',t,y,'o')
A Figura 18 apresenta o gráfico com a resposta da planta a uma entrada do tipo
rampa unitária.
Figura 18
7.5.4 - Análise da resposta transitória de uma entrada de referência do tipo
aceleração unitária:
Da mesma forma que o item anterior, o comando usado é o lsim. Porém o que
muda é o tipo de entrada:
>> num=[2];
>> den=[1 1 2];
>> t=0:0.1:10;
0 1 2 3 4 5 6 7 80
1
2
3
4
5
6
7
8
61
>> r=0.5*t.^2; % A entrada r(t)=1/2*t^2 é uma entrada em aceleração
unitária.
>> y=lsim(num,den,r,t);
>> plot(t,r,'-',t,y,'o',t,y,'-')
>> xlabel('t(s)')
>> ylabel('Entrada e Saída')
Na Figura 19, é apresentado o gráfico com a resposta da planta para uma
entrada do tipo aceleração:
Figura 19
0 1 2 3 4 5 6 7 8 9 100
5
10
15
20
25
30
35
40
45
50
t(s)
Entr
ada e
Saíd
a
62
7.6 - Obtendo função de transferência em série, paralelo e feedback:
Suponhamos que haja duas funções de transferência G1(s)=452
452 ss
s e
G2(s)=184
522 ss
s e que se deseje obter a função de transferência em série, em
paralelo e em feedback do conjunto. Para isso devem-se declarar primeiro na
Command Window os seguintes comandos:
>>g1=tf([0 5 4],[2 6 4]);
>>g2=tf([0 2 5],[4 8 1]);
Vejamos agora como obter as funções de transferência em série, paralelo e
feedback dessas funções de transferência.
Em série:
No MATLAB digite:
>> Sys=series(g1,g2)
Transfer function:
10 s^2 + 33 s + 20
----------------------------------
8 s^4 + 40 s^3 + 66 s^2 + 38 s + 4
63
Em paralelo:
>> Sys=parallel(g1,g2)
Transfer function:
24 s^3 + 78 s^2 + 75 s + 24
----------------------------------
8 s^4 + 40 s^3 + 66 s^2 + 38 s + 4
Em feedback:
>> Sys=feedback(g1,g2)
Transfer function:
20 s^3 + 56 s^2 + 37 s + 4
-----------------------------------
8 s^4 + 40 s^3 + 76 s^2 + 71 s + 24
64
7.7 - Obtenção do gráfico de lugar das raízes
Para desenhar o gráfico de lugar das raízes deve-se, primeiramente, entrar
com os valores de numerador e denominador da função de transferência de malha
aberta e depois utilizar o comando rlocus (num,den) ou rlocus(A,B,C,D):
>> num=[0 4 3];
>> den=[2 4 5 4];
>> rlocus(num,den)
O gráfico gerado pode ser visualizado na Figura 20:
Figura 20
Caso o usuário queira fazer uma análise mais detalhada do lugar das raízes,
basta clicar em cima do lugar das raízes (linha vermelha, verde ou azul) que as
informações serão mostradas.
-1.4 -1.2 -1 -0.8 -0.6 -0.4 -0.2 0 0.2-6
-4
-2
0
2
4
6
Root Locus
Real Axis
Imagin
ary
Axis
65
7.8 - Aproximação de tempo morto
Para tratar o tempo morto sTe utilize ao comando pade. Por exemplo, se
T=0.1s e estiver utilizando uma função de transferência de terceira ordem:
>>[num,den] = pade(0.1,3)
>> printsys(num,den,'s')
num/den =
-1 s^3 + 120 s^2 - 6000 s + 120000
-------------------------------------------
s^3 + 120 s^2 + 6000 s + 120000
7.9 - Construção de diagrama de bode
Para se obter o gráfico de bode de algum sistema são necessários que sejam
inseridos os valores de numerador e denominador e então digitar o comando bode
(num,den) ou bode(A,B,C,D):
>> num=[0 4 3];
>> den=[2 4 5 4];
>>bode (num,den)
66
Na Figura 21, é apresentado no gráfico o diagrama de Bode para F.T. declarada:
Figura 21
O gráfico localizado na parte superior da Figura 21 é o gráfico de ganho da
função de transferência e o gráfico localizado na parte inferior é o de fase. Caso o
usuário necessite de mais detalhes, basta clicar em cima do gráfico (linha azul) que as
informações exatas da freqüência, magnitude (ganho) e phase (fase) serão mostradas.
7.10 - Diagrama de Nyquist
Para se obter o gráfico de Nyquist de algum sistema são necessários que sejam
inseridos os valores de numerador e denominador e então digitar o comando nyquist
(num,den) ou nyquist (A,B,C,D):
-80
-60
-40
-20
0
20
Magnitu
de (
dB
)
10-1
100
101
102
-180
-135
-90
-45
0
45
Phase (
deg)
Bode Diagram
Frequency (rad/sec)
67
>> num=[0 4 3];
>> den=[2 4 5 4];
>>nyquist(num,den)
Na Figura 22, é apresentado o diagrama de Nyquist para a F.T. declarada:
Figura 22
Detalhes são mostrados quando se clica em cima da linha azul.
7.11 - Transformação de modelos matemáticos
Uma vez declarados os vetores correspondentes ao numerador e
denominador (num e den, respectivamente) da função de transferência pode-se
utilizar a seguinte linha de comando para obter a representação no espaço de estados:
-1 -0.5 0 0.5 1 1.5-2
-1.5
-1
-0.5
0
0.5
1
1.5
2
Nyquist Diagram
Real Axis
Imagin
ary
Axis
68
>>[A,B,C,D]=tf2ss(num,den) % Transforma de função de transferência para
espaço estado.
Por exemplo:
>>num=[0 4 3] ;
>>den=[2 4 5 4];
>>[A,B,C,D]=tf2ss(num,den)
A =
-2.0000 -2.5000 -2.0000
1.0000 0 0
0 1.0000 0
B =
1
0
0
C =
0 2.0000 1.5000
D = 0
Caso o sistema esteja representado no espaço de estados e se deseje
representá-lo em função de transferência deve-se fazer:
69
>>[num,den]=ss2tf(A,B,C,D) % Onde A é a matriz de estado, B é a matriz de
entrada, C é a matriz de saída e D é a matriz de transmissão direta.
Caso deseje fazer a Transformada Laplace Inversa de uma função de
transferência, deve-se utilizar o comando:
>> ilaplace( )
Por exemplo:
>> syms s
>> ilaplace(1/(s-1))
ans =
exp(t)
>> syms t
>> ilaplace(1/(t^2+1))
ans =
sin(x)
7.12 - Análise da resposta transitória utilizando espaço estado
Deseja-se obter a resposta ao degrau unitário de um sistema no espaço de
estados. Por exemplo, desejamos analisar respostas para o sistema no espaço de
70
estados cujas matrizes de estado, de entrada, de saída e de transmissão direta são,
respectivamente:
>>A =[-2 -2.5 -2;1 0 0;0 1 0];
>>B =[1;0;0];
>>C =[0 2 1.5];
>>D =0
Para isso deve-se utilizar a seguinte linha de comando:
>>step(A,B,C,D)
Ou ainda:
>>sys=ss(A,B,C,D)
>>step(sys)
A Figura 23 apresenta o gráfico da resposta em degrau para o sistema em
espaço estado:
Figura 23
0 2 4 6 8 10 12 14 16 180
0.2
0.4
0.6
0.8
1
1.2
1.4
Step Response
Time (sec)
Am
plit
ude
71
Se desejar a resposta ao impulso unitário, utilize o comando impulse. A
resposta é mostrada na Figura 24:
>>impulse (A,B,C,D)
Ou:
>>sys=ss(A,B,C,D)
>>impulse(sys)
Figura 24
7.13 - Comando para cálculo de Posto de uma Matriz
Quando se trata de sistemas de Controle no Espaço Estados, em alguns casos
deve-se verificar o posto de uma dada matriz. Para isto, utiliza-se o comando rank( ).
Exemplo:
0 2 4 6 8 10 12 14 16 18-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
Impulse Response
Time (sec)
Am
plit
ude
72
>> M=[1 4 3; 9 3 5; 1 8 2];
>> rank(M)
ans =
3
Neste caso, a matriz é linearmente independente pois a matriz é 3x3 e o posto
da matriz deu 3. Vejamos outro exemplo:
>> N=[1 4 3; 2 8 6; 1 8 2];
>> rank(N)
ans =
2
Aqui a matriz não é linearmente independente, pois a matriz é 3x3 e o posto é
2. Caracterizando assim uma relação de dependência entre uma linha ou coluna com
outra.
7.14 - Cálculo para encontrar a matriz de ganhos e realimentação
Existem três formas no Livro do K. Ogata de se calcular a Matriz K de ganhos e
realimentação no capítulo 12. Aqui, veremos uma forma de se calcular a Matriz K de
forma computacional através do MATLAB. O comando para se calcular a Matriz K de
realimentação é:
73
>> K=acker(A,B,J)
A é composta pelos valores da matriz A do sistema, B é composta pelos valores
da matriz B do sistema e J é composta pelos valores dos pólos desejados em malha
fechada. Exemplo:
>> A=[0 1 0;0 0 1; -6 -11 -6];
>> B=[0;0;1];
>> J=[-2+j*2*sqrt(3) -2-j*2*sqrt(3) -6];
J =
-2.0000 + 3.4641i -2.0000 - 3.4641i -6.0000
>> K=acker(A,B,J)
K =
90.0000 29.0000 4.0000
7.15 - Cálculo de AutoValores de uma Matriz
Para se calcular os autovalores de uma matriz é muito simples. O comando é o
eig(). Exemplo:
>> A=[0 1 0;0 0 1; -6 -11 -6];
>> eig(A)
74
ans =
-1.0000
-2.0000
-3.0000
7.16 - Comando para atribuir uma letra como símbolo
Em alguns casos, deseja-se usar uma letra para ser manipulada apenas como
um símbolo e não como uma variável. Neste caso, o comando para atribuir uma letra
como símbolo é syms. Veja o exemplo abaixo:
>> EQ= s^3 +2*s^2 + 5*s + 10
??? Undefined function or variable 's'.
Caso o usuário deseje declarar a equação como a do exemplo acima, antes ele
deve declarar a variável usada s como símbolo. Veja o exemplo abaixo:
>> syms s
>> EQ=s^3 +2*s^2 + 5*s + 10
EQ =
s^3+2*s^2+5*s+10
>> pretty (EQ) % O comando pretty arruma a equação.
3 2
s + 2 s + 5 s + 10
75
CAPÍTULO 8 – SISOTOOL
8.1 - O que é e para que serve o SISOTOOL?
O SISOTOOL é uma ferramenta para projeto e análise de compensadores para
sistemas de simples entradas e simples saídas (SISO - Simple-Input Simple-Output). É
possível projetar compensadores interagindo graficamente com o Lugar das Raízes,
Bode e Carta de Nichols de um sistema de malha aberta. Para importar os dados da
planta para dentro do SisoTool, selecione o item Import do File Menu. Por default, a
configuração do sistema de controle é
Figura 25
Onde C e F são compensadores ajustáveis.
SISOTOOL(G) especifica o modelo de planta G para ser utilizado na ferramenta
SISO, onde G é qualquer modelo linear criado como TF, ZPK, ou SS. Este comando deve
ser digitado na Command Window.
76
8.2 - Ambientes
O SISOTOOL possui dois ambientes:
Figura 26
Este ambiente mostrado na Figura 26 é o Control and Estimation Tools
Manager (Gerente de Ferramentas de Estimação e Controle). No SISO Design Task,
opções para o projeto são apresentadas como:
Architecture: Pode-se configurar a arquitetura do sistema,
modificando nomes dos blocos, configuração de malha (Loop), mudar
parâmetros do projeto e etc.
77
Compensator Editor: Permite a construção do compensador
desejado através da adição de pólos e zeros. O compensador é chamado de C.
Para adicionar pólos e zeros, basta clicar com o botão direito do mouse no
quadrado logo abaixo da palavra Dynamics, aparecendo a opção Add
Pole/Zero.
Graphical Tuning: Essa opção permite que o usuário monte o seu
SISO Design for SISO Design Task personalizado, onde gráficos de rlocus,
bode, nichols são plotados de acordo com a escolha do usuário. Depois de
selecionadas as opções desejadas, basta clicar em Show Design Plot para
vizualizar os gráficos.
Analysis Plots: Podem-se visualizar com essa ferramenta vários
tipos de respostas diferentes apenas selecionando a opção desejada de
resposta. Onde está escrito Plot 1, Plot 2, ..., Plot 6, são escolhidas os tipos de
entradas, como step(degrau), impulse (impulso unitário), e os tipos de
análises, como Pole/Zero, Bode, Nichols, Nyquist. Após escolhidas as opções
desejadas, deve-se selecionar qual tipo de resposta o usuário deseja adquirir
como em malha fechada, malha aberta, no controlador C, no pré-filtro F e etc.
Para visualizar os resultados basta marcar os quadrados desejados ou clicar
em “Show Analysis Plot”.
78
Automated Tuning: O usuário pode usar a ferramenta
Optimization-Based Tuning para criar fazer o projeto de um controlador
inicial ou ajustar um controlador já projetado, ou seja, usando essa opção é
possível ajustar automaticamente elementos de um compensador para
satisfazer os requerimentos do projeto. Estes elementos são os Pólos, Zeros e
Ganhos do compensador. Além deste método, encontramos também o PID
Tuning, Internal Model Control (IMC) Tuning, LQG Synthesis, Loop Shaping.
O outro ambiente, que funciona juntamente com o Control and Estimation
Tool Manager, é o SISO Design for SISO Design Task , que permite o usuário visualizar
o Root Lócus, o diagrama de Bode e Cartas de Nichols da planta desejada e também
alterar estes gráficos adicionando ou removendo Pólos, Zeros , Pólos Duplos, Zeros
Duplos de forma dinâmica e instantânea. A Figura 27 mostra este segundo ambiente:
79
Figura 27
8.3 - Projeto de um Controlador PID para Plantas Estáveis.
Quando se tem um sistema que se deseja projetar um controlador do tipo PID,
a estabilidade da planta é um fator importante quando falamos de SISOTOOL. Para
verificar a estabilidade da planta basta plotar o lugar das raízes e visualizar se os pólos
e os zeros estão localizados no semiplano esquerdo do plano cartesiano. Confirmada a
estabilidade da planta do sistema em questão, o SISOTOOL tem uma opção que
consegue projetar um controlador PID que oferece ao sistema uma resposta muito
boa.
80
Exemplo:
>> num=[1];
>> den=[1 1 1];
>> G=tf(num,den)
Transfer function:
1
-----------
s^2 + s + 1
Verificando sua estabilidade:
>> rlocus(G)
A Figura 28 apresenta o Root Locus da planta G:
Figura 28
81
Podemos observar que o Lugar das Raízes está situado no semi-plano esquerdo,
confirmando sua estabilidade. Desta forma, o SISOTOOL dispõe de um método de
projeto chamado Internal Model Control (IMC) Tuning, que possibilita o projeto de
um controlador ótimo.
Projetando o controlador, no MATLAB digite:
>> sisotool(G)
Vá em Control e Estimation Tool Manager/ Automated Tuning. A janela
deverá conter os itens mostrados na Figura 29:
Figura 29
82
1. Na opção Design method, escolha o método PID Tuning.
2. Na opção Tuning algorithm, selecione a opção Internal Model Control
(IMC) Tuning.
3. Clique em Update Compensador para projetar o compensador
referente a planta escolhida.
Depois de projetado, a função de transferência do compensador aparecerá no
campo destacado na Figura 30:
Figura 30
83
Após projetar o controlador, deve-se analisar o seu comportamento em malha
fechada na barra Analysis Plots para certificar-se de que as especificações do projeto
foram satisfeitas. A Figura 31 destaca os campos desejados:
Figura 31
Clicando no botão Show Analysis Plot, o gráfico mostrado na Figura 32 será
mostrado:
Figura 32
84
8.4 - Projeto de Compensadores para Plantas Instáveis.
Quando a planta apresenta características de instabilidade, ou seja, o lugar das
raízes ou parte dele se situa no semi-plano direito do plano, não é possível projetar um
compensador usando o método Internal Model Control (IMC) Tuning. Neste caso, o
próprio usuário terá que construir o controlador desejado, adicionando Pólos e Zeros,
e o SISOTOOL testará valores para que as especificações desejadas sejam atendidas.
Exemplo:
>> num=[1];
>> den=[1 -10 -20];
>> G=tf(num,den)
Transfer function:
1
---------------
s^2 - 10 s - 20
>> rlocus(G)
85
A Figura 33 apresenta o gráfico do Lugar das raízes de da planta G:
Figura 33
De acordo com o gráfico do Lugar das Raízes, A planta G(S) apresenta
características de Instabilidade. Sendo assim, vamos projetar um controlador para esta
planta. No MATLAB:
>> sisotool(G)
Vá na janela Control and Estimation Tool Manager/ Automated Tuning, cujo
layout pode ser visualizado na Figura 34:
-4 -2 0 2 4 6 8 10 12 14-8
-6
-4
-2
0
2
4
6
8
Root Locus
Real Axis
Imagin
ary
Axis
86
Figura 34
Em Design method escolha a opção Optimization Based Tuning e depois clique
em Optimize Compensators...
Abrirá uma aba chamada de Response Optimization, que consiste basicamente
em três passos:
Passo 1: Selecionar o compensador que se deseja otimizar e
selecionar as especificações do projeto.
Passo 2: Selecionar as opções de otimização e começar a
otimização.
Passo 3: Visualizar os resultados.
87
A Figura 35 mostra o layout desejado:
Figura 35
Passo 1:
Para selecionar o Compensador a ser projetado, vá em Compensator Editor
e adicione os Pólos e Zeros do Compensador. A Figura 36 indica o layout desejado:
88
Figura 36
Para selecionar as especificações do projeto, vá para Response
Optimization/Design Requirements/Add new design requirement. Estes campos
estão destacados na Figura 37:
89
Figura 37
Abrirá a janela mostrada na Figura 38 no qual o usuário entrará com as
especificações do projeto (Design requirement type), como tempo de acomodação
(Setting time), máximo sobre sinal (Overshoot), limites para resposta em degrau e etc.
Figura 38
90
Deve-se selecionar o compensador. Veja a Figura 39 para fazer
corretamente :
Figura 39
91
Passo 2:
Verificar Optimization options. Verifique o layout e os campos destacados
na Figura 40:
Figura 40
92
Aparecerá uma janela como na Figura 41, onde opções de números de
interações, algoritmo, tipo de gradiente dentre outras poderão ser configuradas:
Figura 41
Clicar em Start Optimization na aba Optimization (Figura 40) para analisar
os resultados.
Passo 3:
Como o compensador que possui apenas um ganho, o melhor resultado
encontrado pode ser visualizado na Figura 42:
93
Figura 42
O que se deve fazer agora é alterar o compensador adicionando pólos e
zeros para tentar melhorar a resposta. Neste caso, adicionaremos um Zero no
compensador e fazer novamente a otimização para ver se os resultados conseguiram
ser alcançados. A Figura 43 apresenta a resposta:
94
Figura 43
Depois de calculada, a nova função de transferência do compensador é
C(s)=285.7*(1 + 4.3e+002s)
1
Conclusão: Computacionalmente, foi possível a obtenção de uma resposta
“perfeita” para esta planta G(S). Porém, a implementação e construção de um
controlador deste tipo poderia ser muito cara, inviabilizando o projeto. O que se deve
fazer é ajustar as especificações do projeto para que a resposta não seja tão exigente,
tão “perfeita”, fazendo com que se obtenham valores que seja possível utilizar em
compensadores reais ou se possível, já existentes.
95
CAPÍTULO 9 – MATLAB PARA CONTROLE DIGITAL
Neste capítulo as análises das funções de transferências serão feitas com a
Transformada Z. A Transformada Z, de grande importância na análise de sinais digitais,
se aplica para sinais discretos tais como aqueles advindos da conversão analógico-
digital. A Transformada Z é utilizada no projeto de filtros e sistemas de controle
digitais. Serão feitos projetos de controladores digitais e análises de desempenho com
os sinais digitais. Os controladores utilizados serão do tipo PI, PD e PID. Mas antes
teremos uma breve introdução.
9.1 - Comandos introdutórios
As funções de transferência que antes eram utilizadas em S (sinais contínuos)
devem ser convertidas para o domínio Z (sinais discretos). Exemplo:
>>num=[1];
>>den=[1 1 1];
>>Gps=tf(num,den)
Transfer function:
1
-----------
s^2 + s + 1
>>rlocus (Gps)
96
A Figura 44 apresenta o lugar das raízes da planta Gps:
Figura 44
O comando que deve ser utilizado é o c2d (Gps,T,’zoh’), onde Gps é a F.T. em S,
T é o período de amostragem e zoh (para ver as outras opções, basta digitar help c2d e
mais detalhes serão mostrados) é o hold de ordem zero na entrada. Então:
>> T=0.1;
>> Gpd=c2d(Gps,T,'zoh')
Transfer function:
0.004833 z + 0.004675
----------------------
z^2 - 1.895 z + 0.9048
Sampling time: 0.1
>>rlocus (Gpd)
-0.9 -0.8 -0.7 -0.6 -0.5 -0.4 -0.3 -0.2 -0.1 0 0.1-4
-3
-2
-1
0
1
2
3
4
Root Locus
Real Axis
Imagin
ary
Axis
97
A Figura 45 apresenta o gráfico de lugar das raízes da planta Gpd:
Figura 45
Pode-se observar que o rlocus a F.T contínua e a F.T. discreta possuem gráficos
totalmente diferentes.
Agora, vamos aplicar entradas do tipo degrau unitário e impulso unitário nos
dois casos e analisar a resposta. Na F.T. contínua:
>>step(Gps)
Na Figura 46, é apresentada a resposta da planta Gps a uma entrada em
degrau:
-6 -5 -4 -3 -2 -1 0 1 2-2.5
-2
-1.5
-1
-0.5
0
0.5
1
1.5
2
2.5
Root Locus
Real Axis
Imagin
ary
Axis
98
Figura 46
>>impulse(Gps)
Na Figura 47, é apresentada a resposta da planta Gps a uma entrada em
impulso:
Figura 47
0 2 4 6 8 10 120
0.2
0.4
0.6
0.8
1
1.2
1.4
Step Response
Time (sec)
Am
plit
ude
0 2 4 6 8 10 12-0.1
0
0.1
0.2
0.3
0.4
0.5
0.6
Impulse Response
Time (sec)
Am
plit
ude
99
Agora vamos analisar a resposta para a planta discreta, com tempo de
amostragem de 1 seg. e com hold de ordem zero na entrada:
>>T=1;
>>Gpd=c2d(Gps,T,’zoh’);
>>step(Gpd)
Na Figura 48, é apresentada a resposta da planta Gpd a uma entrada em
Degrau:
Figura 48
>>impulse(Gpd)
0 2 4 6 8 10 12 14 16 18 200
0.2
0.4
0.6
0.8
1
1.2
1.4
Step Response
Time (sec)
Am
plit
ude
100
Na Figura 49, é apresentada a resposta da planta Gpd a uma entrada em
impulso:
Figura 49
Podemos observar claramente no gráfico o período de amostragem de 1.
Quanto menor for o período de amostragem, mais próximo será da resposta no
domínio contínuo.
9.2 - Projeto de um controlador PD discreto
O projeto de um controlador PD discreto será detalhado a seguir. Deverão ser
atribuídas ao projeto as especificações desejadas, a função de transferência da planta
e então uma análise dos resultados será feita.
% Estes comandos têm por finalidade posicionar os pólos complexos conjugados no
sistema de malha fechada no plano z, utilizando um controlador do tipo PD, tendo
0 5 10 15 20 25-0.1
0
0.1
0.2
0.3
0.4
0.5
0.6
Impulse Response
Time (sec)
Am
plit
ude
101
como requisitos de projeto o valor de zeta (coeficiente de amortecimento) e o número
de amostras por oscilações amortecidas do sistema para um dado período de
amostragem T.
% OBS.: O símbolo # significa que os dados foram inseridos manualmente.
%Definindo as variáveis de projeto.
zeta=0.5; %# Coeficiente de amortecimento do sistema especificado.
T=0.1; %# Período de amostragem especificado.
Wn=4; %# Freqüência natural amortecida especificada.
Wd=Wn*sqrt(1-zeta^2); % Freqüência natural não amortecida do sistema.
ang=T*Wd; % Ângulo do pólo complexo conjugado na parte superior do plano
z..
mod=exp(-T*zeta*Wn); % Módulo do pólo complexo conjugado na parte superior do
plano z.
% Definindo a posição desejada para os pólos complexos conjugados.
re=mod*cos(ang); % Determina a porção real do pólo complexo conjugado na parte
superior do plano z.
im=mod*sin(ang); % Determina a porção imaginaria do pólo complexo conjugado na
parte superior do plano z.
disp('Posição desejada para o pólo complexo conjugado na parte superior do plano z')
102
P=complex(re,im) % Posição desejada para o pólo complexo conjugado na parte
superior do plano z.
% Definindo o os zeros e os pólos do sistema não compensado em malha aberta no
plano z.
num=[1]; %# numerador da FT da planta em s. Este valor pode variar de projeto para
projeto.
den=[1 0 0]; %# denominador da FT da planta em s. Este valor pode variar de projeto
para projeto.
Gp=tf(num,den); % FT da planta em s.
disp('FT da planta digitalizada precedida de zoh')
Gpd=c2d(Gp,T,'zoh') % FT da planta digitalizada (em z).
% Determinação dos pólos e zeros do sistema digitalizado em malha aberta.
rlocus(Gpd)
% Pólos e zeros observados no rlocus de Gpd:p1(a1,0),p2(a2,0) e z1(b1,0).
% Determinando a deficiência angular.
a1=1; %# Porção real de p1.
a2=1; %# Porção real de p2.
b1=-1; %# Porção real de z1.
103
cp1=complex(re-a1,im); % Representação da contribuição angular de p1.
cp2=complex(re-a2,im); % Representação da contribuição angular de p2.
cz1=complex(re-b1,im); % Representação da contribuição angular de z1.
disp('deficiência angular com introdução dos pólos complexos conjugados')
pi-phase(cp1)-phase(cp2)+phase(cz1) % Deficiência angular.
% Definindo o zero do compensador.
for b=0:0.001:1; % Inicia o loop para definir o valor do zero do compensador.
cz=complex(re-b,im); % Representação da contribuição angular do zero do
compensador.
comp=pi-phase(cp1)-phase(cp2)+phase(cz1)+phase(cz);% Condição angular do
sistema compensado.
if 0<comp & comp<0.01; % Faixa de valores aceitáveis para a deficiência angular.
disp('O zero do compensador e a deficiência angular remanescente
respectivamente')
[b;comp] % Mostra o zero do compensador e a deficiência angular remanescente.
break; % Interrompe o loop.
end
end
% Obtendo a FT do sistema compensado em malha aberta sem ganho.
104
numc=[1 -b]; % Numerador do compensador PD discreto.
denc=[1]; % Denominador do compensador PD discreto.
Gcd=tf(numc,denc,T); % FT do controlador PD digital sem ganho.
% Obtendo a FT do sistema compensado em malha aberta para o calculo do ganho.
disp('FT do sistema compensado em malha aberta sem ganho')
GcdGpd=tf(Gcd*Gpd) % FT do sistema compensado em malha aberta sem ganho.
% Calculo do ganho K.
k=abs((P^2-2*P+1)/(0.005*P^2+0.001645*P-0.00355));
disp('FT do controlador digital')
tf(k*Gcd)
disp('FT do sistema compensado em malha fechada')
GcdGpd_f=feedback(k*GcdGpd,1) % FT do sistema compensado em malha fechada.
Ws=2*pi/T; % Freqüência de amostragem.
disp('Numero de amostras por ciclo de oscilação amortecida')
na=Ws/Wd % Número de amostras por ciclo de oscilação amortecida.
% Verificação dos resultados.
105
figure(2)
rlocus(GcdGpd_f)
zgrid
axis('square')
figure(3)
step(GcdGpd_f)
O gráfico da planta compensada é apresentado na Figura 50:
Figura 50
Deve-se observar se todas as especificações do projeto foram alcançadas. Estes
comandos acima podem ser copiados para um arquivo .m ou para a Command
Window.
0 0.5 1 1.5 2 2.5 3 3.50
0.2
0.4
0.6
0.8
1
1.2
1.4
Step Response
Time (sec)
Am
plit
ude
106
9.3 - Projeto de um controlador PI discreto
O projeto de um controlador PI discreto será detalhado a seguir. Deverá ser
atribuído ao projeto as especificações desejadas, a função de transferência da planta e
então uma análise dos resultados será feita.
% Estes comandos têm por finalidade posicionar os pólos complexos conjugados no
sistema de malha fechada no plano z, utilizando um controlador do tipo PI, tendo
como requisitos de projeto o valor de zeta (coeficiente de amortecimento) e a
freqüência natural do sistema para um dado período de amostragem T.
% OBS.: O símbolo # significa que os dados foram inseridos manualmente.
%Definindo as variáveis de projeto.
zeta=0.5; %# Coeficiente de amortecimento do sistema.
T=5; %# Período de amostragem.
na=10; %# Número de amostras por ciclo de oscilação amortecida.
Ws=2*pi/T; % Freq. de amostragem.
Wd=Ws/na; % Freqüência natural não amortecida do sistema.
Wn=Wd/sqrt(1-zeta^2); % Freqüência natural do sistema.
ang=T*Wd; % Ângulo do pólo complexo conjugado na parte superior do plano z.
mod=exp(-T*zeta*Wn); % Módulo do pólo complexo conjugado na parte superior do
plano z.
107
% Definindo a posição desejada para os pólos complexos conjugados.
re=mod*cos(ang); % Determina a porção real do pólo complexo conjugado na parte
superior do plano z.
im=mod*sin(ang); % Determina a porção imaginaria do pólo complexo conjugado na
parte superior do plano z.
disp('Posição desejada para o pólo complexo conjugado na parte superior do plano z')
P=complex(re,im) % Posição desejada para o pólo complexo conjugado na parte
superior do plano z.
% Definindo o os zeros e os pólos do sistema não compensado em malha aberta no
plano z.
num=[1]; %# numerador da FT da planta em s. Este valor pode variar de projeto para
projeto.
den=[1 0.4]; %# denominador da FT da planta em s. Este valor pode variar de projeto
para projeto.
Gp=tf(num,den,’inputdelay’,5); % FT da planta em s com tempo morto.
disp('FT da planta digitalizada precedida de zoh')
Gpd=c2d(Gp,T,'zoh') % FT da planta digitalizada (em z).
% Determinação dos pólos e zeros do sistema digitalizado em malha aberta.
rlocus(Gpd)
108
% Pólos e zeros observados no rlocus de Gpd:p1(a1,0),p2(a2,0) e z1(b1,0).
% Determinando a deficiência angular.
a=1; %# Porção real do pólo do compensador.
a1=0; %# Porção real de p1.
a2=0.135; %# Porção real de p2.
cp=complex(re-a,im); % Representação da contribuição angular do pólo do
compensador.
cp1=complex(re-a1,im); % Representação da contribuição angular de p1.
cp2=complex(re-a2,im); % Representação da contribuição angular de p2.
disp('deficiencia angular com introdução dos pólos complexos conjugados mais o pólo
do compensador')
pi-phase(cp1)-phase(cp2)-phase(cp) % Deficiência angular.
% Definindo o zero do compensador.
for b=0:0.001:1; % Inicia o loop para definir o valor do zero do compensador.
cz=complex(re-b,im); % Representação da contribuição angular do zero do
compensador.
comp=pi-phase(cp1)-phase(cp2)-phase(cp)+phase(cz); % Condição angular do
sistema compensado.
if 0<=comp & comp<=0.1; % Faixa de valores aceitáveis para a deficiência angular.
109
disp('O zero do compensador e a deficiência angular remanescente
respectivamente')
[b;comp] % Mostra o zero do compensador e a deficiência angular remanescente.
break; % Interrompe o loop.
end
end
% Obtendo a FT do sistema compensado em malha aberta sem ganho.
numc=[1 -b]; % Numerador do compensador PI.
denc=[1 -1]; % Denominador do compensador PI.
Gcd=tf(numc,denc,T); % FT do controlador PI digital sem ganho.
% Obtendo a FT do sistema compensado em malha aberta para o calculo do ganho.
disp('FT do sistema compensado em malha aberta sem ganho')
GcdGpd=tf(Gcd*Gpd) % FT do sistema compensado em malha aberta sem ganho.
% Calculo do ganho K.
k=abs((P^3-1.135*P^2+0.1353*P)/(2.162*P-0.0281)); %# Obtido da observação de
GcdGpd.
disp('FT do controlador com o ganho do sistema compensado')
110
tf(k*Gcd)
% FT de malha fechada.
disp('FT do sistema compensado em malha fechada')
GcdGpd_f=feedback(k*GcdGpd,1) % FT do sistema compensado em malha fechada.
% Verificação dos resultados.
figure(2)
rlocus(GcdGpd_f)
zgrid
axis('square')
figure(3)
step(GcdGpd_f)
111
A resposta ao degrau unitário para o sistema compensado é apresentado na
Figura 51:
Figura 51
Neste projeto podemos observar que o sistema compensado demora bastante
para acomodar, porém isto não foi especificado. Portanto, quando projetamos um
sistema de controle todas as especificações devem ser atendidas.
9.4 - Projeto de um controlador PID discreto
Para projetarmos um controlador PID discreto, devemos ficar atento a
mudança da função de transferência do controlador, da função de transferência da
planta e das especificações.
0 20 40 60 80 100 1200
0.2
0.4
0.6
0.8
1
1.2
1.4
Step Response
Time (sec)
Am
plit
ude
112
% Estes comandos têm por finalidade posicionar os pólos complexos conjugados no
sistema de malha fechada no plano z, utilizando um controlador do tipo PID, tendo
como requisitos de projeto o valor de zeta (coeficiente de amortecimento) e o número
de amostras por oscilações amortecidas do sistema para um dado período de
amostragem T.
% OBS.: O símbolo # significa que os dados foram inseridos manualmente.
%Definindo as variáveis de projeto.
zeta=0.5; %# Coeficiente de amortecimento do sistema.
T=0.2; %# Período de amostragem.
na=8; %# Número de amostras por ciclo de oscilação amortecida.
Ws=2*pi/T; % Freq. de amostragem.
Wd=Ws/na; % Frequência natural não amortecida do sistema.
Wn=Wd/sqrt(1-zeta^2); % Frequência natural do sistema.
ang=T*Wd; % Ângulo do pólo complexo conjugado na parte superior do plano z.
mod=exp(-T*zeta*Wn); % Módulo do pólo complexo conjugado na parte superior do
plano z.
% Definindo a posição desejada para os pólos complexos conjugados.
re=mod*cos(ang); % Determina a porção real do pólo complexo conjugado na
parte superior do plano z.
113
im=mod*sin(ang); % Determina a porção imaginária do pólo complexo conjugado
na parte superior do plano z.
disp('Posição desejada para o pólo complexo conjugado na parte superior do plano z')
P=complex(re,im) % Posição desejada para o pólo complexo conjugado na parte
superior do plano z.
% Definindo os zeros e os pólos do sistema não compensado em malha aberta no
plano z.
nump=[10]; % # Numerador da planta.
denp=conv([1 1],[1 5]); % # Denominador da planta.
Gp=tf(nump,denp); % FT da planta em s.
disp('Função de transferência da planta digitalizada precedida de zoh')
Gpd=c2d(Gp,0.2,'zoh') % FT da planta digitalizada.
% Determinação dos pólos e zeros do sistema digitalizado em malha aberta.
rlocus(Gpd)
% Pólos e zeros observados no rlocus de Gpd:p1(a1,0),p2(a2,0) e z1(b1,0).
% Determinando a deficiência angular.
a=1; %# Porção real do pólo do compensador.
a1=0.819; %# Porção real de p1.
114
a2=0.368; %# Porção real de p2.
b1=-0.671;
cp=complex(re-a,im); % Representação da contribuição angular do pólo do
compensador.
cp1=complex(re-a1,im); % Representação da contribuição angular de p1.
cp2=complex(re-a2,im); % Representação da contribuição angular de p2.
cz1=complex(re-b1,im);
disp('deficiência angular com introdução dos pólos complexos conjugados mais o pólo
do compensador')
pi-phase(cp1)-phase(cp2)-phase(cp)+phase(cz1) % Deficiência angular.
% Definindo o zero do compensador.
for b=0:0.001:1; % Inicia o loop para definir o valor do zero do compensador.
cz=complex(re-b,im); % Representação da contribuição angular do zero do
compensador.
comp=pi-phase(cp1)-phase(cp2)-phase(cp)+phase(cz1)+2*phase(cz); % Condição
angular do sistema compensado.
if 0<=comp & comp<=0.1; % Faixa de valores aceitáveis para a deficiência angular.
disp('O zero do compensador e a deficiência angular remanescente
respectivamente')
[b;comp] % Mostra o zero do compensador e a deficiência angular remanescente.
break; % Interrompe o loop.
115
end
end
% Obtendo a FT do sistema compensado em malha aberta sem ganho.
numc=conv([1 -b],[1 -b]); % Numerador do compensador PID discreto.
denc=[1 -1]; % Denominador do compensador PID discreto.
Gcd=tf(numc,denc,T);% FT do controlador PID discreto sem ganho.
% Obtendo a FT do sistema compensado em malha aberta para o calculo do ganho.
disp('FT do sistema compensado em malha aberta sem ganho')
GcdGpd=tf(Gcd*Gpd) % FT do sistema compensado em malha aberta sem ganho.
% Calculo do ganho K.
k=abs((P^3-2.187*P^2+1.488*P-0.3012)/(0.1371*P^3+0.004029*P^2-
0.04497*P+0.009485)) %# Obtido da observação de GcdGpd.
disp('FT do controlador com o ganho do sistema compensado')
tf(k*Gcd)
% Ft de malha fechada.
116
disp('FT do sistema compensado em malha fechada')
GcdGpd_f=feedback(k*GcdGpd,1) % FT do sistema compensado em malha fechada.
% Verificação dos resultados.
figure(2)
rlocus(GcdGpd_f)
zgrid
axis('square')
figure(3)
step(GcdGpd_f)
A resposta ao degrau unitário para o sistema compensado é apresentado na
Figura 52:
Figura 52
0 0.5 1 1.5 2 2.5 3 3.5 40.4
0.5
0.6
0.7
0.8
0.9
1
1.1
1.2
1.3
Step Response
Time (sec)
Am
plit
ude
117
CAPÍTULO 10 – MATLAB PARA CONTROLE AVANÇADO
Neste capítulo aprenderemos a fazer a fazer o treinamento de redes neurais
artificiais. As redes neurais artificiais podem ser aplicadas para resolver uma grande
quantidade de problemas. Exemplos:
Análise e processamento de sinais;
Controle de processos;
Robótica;
Classificação de dados;
Reconhecimento de padrões em linhas de montagem;
Filtros contra ruídos eletrônicos;
Análise de imagens;
Análise de voz;
Avaliação de crédito;
Análise de aroma e odor - um projeto que está em desenvolvimento, buscando
a análise de odor via nariz eletrônico;
As principais aplicações das R.N.A`s em nosso curso são feitas para
identificação de sistemas, ou seja, utilizar dados já conhecidos e utilizá-los na
rede artificial para que ela consiga representar o comportamento do sistema
em questão. Vejamos alguns casos.
118
10.1 - Modelagem de portas lógicas
Portas lógicas como AND, OR podem ser modeladas utilizando algoritmo de
treinamento perceptron. Porém este algoritmo, por ser limitado, não possui a
capacidade de modelar, por exemplo, a porta lógica XOR.
Vamos modelar a lógica AND, cuja lógica de funcionamento é apresentada na
Tabela 7 :
A B A AND B
0 0 0
1 0 0
0 1 0
1 1 1
Tabela 7
No MATLAB, vamos atribuir os valores A e B como entrada x do nosso modelo e
vamos atribuir o valor de A AND B como saída desejada t:
>> x=[0 0;1 0;0 1;1 1]; % Os valores devem estar dispostos em forma de linha
ou na horizontal.
>> t=[0 0 0 1]; % Deve ser assim pois o tempo (s) está implícito nas variáveis.
Portanto, no instante 1 os valores x e t no instante 1 são processados.
119
Para treinar uma rede, devemos seguir os seguintes passos:
1. Digitar o comando nntool no MATLAB.
2. Adicionar as variáveis: x deve ser adicionada como input e t deve ser
adicionada como target.
3. Criar e configurar uma rede (network).
4. Abrir a rede e inicializar os pesos na aba reinitialize weights.
5. Na aba train, verificar os parâmetros de treinamento e treinar a rede,
clicando em train network.
Com esses passos, vamos treinar a nossa rede para representar o
comportamento de uma porta lógica AND. Digitando o comando nntool no MATLAB, a
janela mostrada na Figura 53 irá aparecer:
Figura 53
120
Para executar o passo 2, clique em Import... A janela apresentada na Figura 54
será mostrada. Clique em cima da variável x e selecione a opção input. Clique em
Import. Em seguida, clique em cima da variável t e selecione a opção target.Clique em
Import novamente. Pronto, as variáveis foram importadas para serem usadas no
nntool.
Figura 54
No terceiro passo, deve-se atribuir um nome à rede, definir o algoritmo de
treinamento, selecionar o range das entradas, definir o número de camadas e as
propriedades das mesmas, ou seja, número de neurônios e função de ativação de cada
camada. Feito isto, clique em Create para criar a nova rede. A janela mostrada na
Figura 55 aparecerá na tela:
121
Figura 55
Neste caso, um algoritmo de treinamento perceptron seria suficiente para
treinar esta rede. Porém, como o mesmo possui algumas limitações, vamos utilizar um
algoritmo de treinamento Feed-forward backpropagation básico com 1 neurônio na
camada oculta (função de ativação logsig) e 1 neurônio na camada de saída (função de
ativação purelin).
Agora, vamos selecionar a rede AND e clicar em Open... Uma nova janela irá
aparecer. Vá na aba Reinilialize Weights e clique em Initialize Weights para inicializar
os pesos, veja a Figura 56. Agora vá à aba Train/Train Info e selecione os dados de
entrada e saída, como na Figura 57. Em Train/Train Parameters pode-se fazer algumas
opções quanto ao treinamento, veja a Figura 58. Por Fim, clique no botão Train
Network para treinar a rede.
122
Figura 56
Figura 57
Figura 58
123
No momento em que a rede está sendo treinada, um gráfico de desempenho é
mostrado para o usuário verificar se o treinamento foi feito com êxito.
Para verificar se o resultado do treinamento foi satisfatório, podemos exportar
para a Command Window a variável criada AND_outputs, que contém os valores
obtidos do treinamento ou a saída da rede. Veja a Figura 59 para clique nos campos
selecionados:
Figura 59
124
A Figura 60 apresenta a janela que irá aparecer:
Figura 60
Após selecionar AND_outputs e clicar em Export, podemos comparar o valor
desejado em t e o valor obtido em AND_outputs. Vamos digitar o seguinte na
Command Window:
>> plot(t,'o') % Os valores contidos em t serão mostrados em forma de `o`.
>> hold on % Mantém o gráfico.
>> plot(AND_outputs,'+r') % Os valores contidos em AND_outputs serão
mostrados em vermelho e em forma de `+`.
125
A Figura 61 apresenta o gráfico contendo os valores em t e os valores em
AND_outputs:
Figura 61
Podemos observar na Figura 61 que o erro entre a saída desejada e a saída
obtida foi nulo, ou seja, a nossa rede conseguiu representar exatamente o
comportamento da porta AND.
126
10.2 - Modelagem de funções matemáticas
A função matemática escolhida foi a Função Senoidal. No MATLAB digite:
>> x=0:pi/8:8*pi;
>> t=sin(x);
>> plot(t)
>> hold on
O gráfico gerado é apresentado na Figura 62:
Figura 62
0 10 20 30 40 50 60 70-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
127
Utilizando a ferramenta nntool, vamos criar e treinar uma R.N.A. para que
modele o comportamento desta função senoidal, cujo nome será sin. Foi criada uma
R.N.A. multicamadas e utiliza o algoritmo de treinamento feed-forward
backpropagation. As camadas intermediárias utilizam a função logaritmo sigmóide e a
camada de saída utiliza uma função puramente linear.
A princípio foram utilizados três neurônios na camada intermediária, porém a
R.N.A. não conseguiu representar o comportamento da função senoidal. Para resolver
este problema, a camada intermediária foi acrescida de dois neurônios. Com isto, a
rede conseguiu alcançar seu objetivo principal.
Resultados e Conclusões
Após ter seguido os passos abordados no item anterior, conseguimos uma
resposta ideal. Vamos plotar o gráfico:
>> plot(t)
>> hold on
>> plot(sin_outputs,'or')
128
Após o treinamento da rede, a gráfico gerado dos valores em t e os valores em
sin_outputs são mostrados na Figura 63:
Figura 63
A principal lição que se pôde tirar dessa atividade foi que a rede não convergiu
com três neurônios na camada intermediária, mas com cinco neurônios na camada
intermediária o resultado foi satisfatório.
O fato de aumentar o número de neurônio e a rede funcionar não quer dizer
que sempre que aumentarmos o número de neurônios o resultado irá ser satisfatório.
Outra observação importante é a quantidade de dados na entrada `x`. Com
uma quantidade pequena de dados, uma rede com 3 neurônios na camada
intermediária pode ser mais do que suficiente para se obter bons resultados. Já com
uma quantidade considerável de dados ou muitos dados (como no nosso caso), 3
neurônios foi pouco. Portanto, pode-se dizer que a quantidade de neurônios na
camada intermediária depende da quantidade de dados em `x`.
129
Vamos agora treinar uma R.N.A para modelar uma função matemática
quadrática, cuja função de transferência é F(x)=x^2. Na Command Window digite:
>> x=[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20];
>> t=x.^2;
>> plot(t)
A Figura 64 apresenta o gráfico contendo a função t:
Figura 64
Utilizando a ferramenta nntool, vamos criar e treinar uma R.N.A. para que
modele o comportamento desta função quadrática, cujo nome será quad. Foi criada
uma R.N.A. multicamadas e utiliza o algoritmo de treinamento feed-forward
backpropagation. A camada intermediária possui 3 neurônios e utiliza a função
0 5 10 15 20 250
50
100
150
200
250
300
350
400
130
logaritmo sigmóide e a camada de saída possui 1 neurônio utiliza uma função
puramente linear.
Executando os procedimentos ensinados no item 10.1, podemos treinar esta
rede e exportar os resultados para o Workspace. Após o treinamento da rede quad,
digite na Command Window:
>> plot(t)
>> hold on
>> plot(quad_outputs,'r')
A Figura 65 apresenta o gráfico contento os valores em t e os valores em
quad_outputs:
Figura 65
Podemos observar que a R.N.A. quad conseguiu representar o comportamento
da função quadrática x^2.
131
10.3 - Modelagem de processos industriais utilizando dados reais.
Nesta atividade iremos utilizar dados de simulação de um processo de
neutralização de pH em um volume constante de um tanque de agitação. Estes dados
foram adiquiridos no site . O site Daisy disponibiliza base de dados de variados tipos de
sistemas reais para identificação de sistemas.
O principal objetivo desta tarefa é treinar uma rede neural artificial para que
represente o comportamento do processo de neutralização de pH. Este processo é
composto por duas variáveis de entradas e uma de saída:
Entradas:
u1 - Fluxo de solução ácida.
u2 – Fluxo de solução básica.
Saída
y – Mistura com pH ideal.
A primeira coisa a se fazer é o tratamento dos dados adquiridos no site e
disponibilizarmos de tal forma que possamos utilizar na rotina tecnologo1.m (é uma
rotina que faz a normalização, redução da matriz de dados e processa as informações),
no MATLAB. Portanto, foi criado um arquivo .m chamado dados que possui 3 colunas:
u1,u2 e y, respectivamente. A rotina tecnologo1.m teve de ser modificada para este
132
caso, ou seja, ao invés de tecnologo1.m utilizar os dados de padraodef2colunas.m
(default) agora vai utilizar dados.m. Além disso, sua estrutura foi parcialmente
modificada para que processe duas variáveis de entrada ao invés de uma. Após as
modificações esta rotina recebeu o nome de tecnologo2.m para que não ocorram
enganos.
Nesta tarefa, faremos dois exemplos com diferentes reduções na matriz de
dados. Isso servirá para fazermos algumas comparações. Para termos idéia, o gráfico
do sistema com todos os dados é apresentado na Figura 66:
Figura 66
Exemplo 1: Na redução da matriz de dados, i=i+30; Onde 30 é o intervalo das
amostras. No MATLAB digite:
>> plot(Y)
133
A “saída desejada” pode ser visualizada na Figura 67:
Figura 67 - Saída Y para amostras de 30 em 30.
No MATLAB, utilizei o comando nntool para criar e treinar uma R.N.A.
multicamadas e algoritmo de treinamento feed-forward backpropagation. A princípio
tentei treinar a rede com três e cinco neurônios na camada oculta e os resultados não
convergiram, mas a medida que eu aumentei o número de neurônios os resultados
apresentaram algumas melhoras. Então, projetei duas redes chamadas de a e b. A
rede neural a possui oito neurônios na camada oculta e a rede neural b possui dez.
Lembrando que a camada oculta utiliza a função de ativação logaritmo sigmóide e a
camada de saída utiliza a função de ativação puramente linear. Os resultados para as
redes a e b podem ser visualizados, respectivamente, nas Figuras 68 e 69:
134
Figura 68 – Resultado para uma rede com 8 neurônios.
Figura 69 – Resultado para uma rede com 10 neurônios
O resultado da rede com oito neurônios pode ser considerado bom, pois os
erros são relativamente pequenos, porém a rede com dez neurônios apresentou um
erro nulo, conseguindo representar exatamente o comportamento do sistema. É
importante lembrar que neste exemplo o sistema foi amostrado de 30 em 30. A
135
resposta real do sistema possui uma quantidade de dados muito maior do que este
amostrado. O ideal é encontrar um número de amostragem que preserve o máximo o
comportamento do sistema. No exemplo 2, iremos treinar uma R.N.A. para uma
redução da matriz de dados num intervalo de 20 em 20, que aproxima um pouco mais
da saída real.
Exemplo 2: Na redução da matriz de dados, i=i+20; Onde 20 é o intervalo das
amostras. No MATLAB digite:
>> plot(Y)
A “saída desejada” pode ser visualizada na Figura 70:
Figura 70 – Saída Y para amostras de 20 em 20.
No nntool, foram criadas novamente as redes a com oito neurônios e b com
dez neurônios. Podemos observar que a rede a não consegue mais representar tão
136
bem o comportamento do sistema e a rede b pode se dizer que é aceitável. Mas estas
análises, tanto no exemplo 1 quanto no exemplo 2, dependem das especificações de
resposta do sistema. Não posso afirmar que estas respostas servem ou não. Os
resultados das redes a e b são mostrados, respectivamente, nas Figuras 71 e 72:
Figura 71 – Resultado da rede a.
Figura 72 – Resultado para a rede b.
137
O resultado da R.N.A. b é muito bom, mas para dar fim a minha curiosidade
eu fui aumentando o número de neurônios na camada oculta até que o erro fosse
nulo. Este número de neurônios 15.
138
CAPÍTULO 11 - COMUNICAÇÃO ENTRE O MATLAB E SOFTWARES DE
PLATAFORMA WINDOWS
O MATLAB fornece funções que permite o MATLAB acessar outras aplicações
ou serem acessadas por outras aplicações Windows em uma grande variedade de
contextos. Estas funções usam DDE (Troca Dinâmica de Dados), que é um protocolo de
comunicação que permite aplicações Microsoft Windows se comunicar umas com as
outras através da troca de dados e também pode se comunicar com outras aplicações
utilizando o protocolo OPC (Controle de Processo Aberto), que é uma tecnologia para
conectar aplicações Windows e equipamentos de controle de processos. O OPC é um
protocolo de comunicação aberto que permite um método consistente de acesso aos
dados de inúmeros equipamentos dos mais diversos fabricantes. Basicamente, o
padrão OPC estabelece as regras para que sejam desenvolvidos sistemas com
interfaces padrões para comunicação dos dispositivos de campo (controladores,
sensores, etc.) com sistemas de monitoração, supervisão e gerenciamento (SCADA,
MÊS, ERP, etc.). (Retirado de DUARTE, 2006).
No MATLAB, existe uma ferramenta chamada opctool, que permite o usuário
navegar graficamente pelo conteúdo de um servidor OPC, visualizando as
propriedades do item servidor. Clientes, grupos e itens configurados utilizando a
ferramenta opctool podem ser exportados para o workspace ou para uma M.file.
139
11.1 - Comunicação entre o MATLAB e o EXCEL utilizando protocolo de comunicação
DDE.
Para que possamos fazer a comunicação entre o MATLAB e o EXCEL,
precisamos necessariamente conhecer três comandos. O comando:
1. ddeinit inicia a conversação do MATLAB com outras aplicações.
2. ddereq solicita os dados da aplicação do servidor DDE.
3. ddepoke envia um dado do MATLAB para a aplicação do servidor
DDE.
Antes de explicar como estes comandos serão aplicados, criaremos um arquivo
no Excel, cujo nome será Tabela. Este arquivo pode ser salvo em qualquer diretório do
computador, porém aconselho que o mesmo seja salvo na pasta MATLAB. Como
default, esse arquivo criado contém planilhas. A planilha1 ou Plan1 deve ser
renomeada como Sheet (poderia ser qualquer coisa, até mesmo planilha1 ou plan1).
Sheet será o topico usado na comunicação DDE.
Nessa Planilha, foram acrescentados dados referentes ao desempenho dos
alunos do curso de engenharia no primeiro semestre de 2010. Estes dados são
puramente fictícios e servem apenas para validar a nossa tentativa de comunicação
das duas aplicações (MATLAB e EXCEL). Veja a tabela apresentada na Figura 73:
140
Figura 73
Após esta planilha ter sido criada e salva, vamos criar no MATLAB uma M.flie
chamada Matlab_excel. A primeira coisa que se tem que fazer é iniciar a comunicação
entre os dois aplicativos utilizando o comando ddeinit. Em Matlab_excel escreva:
channel = ddeinit('excel','Sheet') % Onde excel especifica o nome da aplicação
e Sheet especifica o tópico da aplicação.
Caso a inicialização seja feita de uma forma correta, a variável channel
receberá um valor real diferente de zero. Se não for, channel receberá zero.
Iniciada a comunicação, vamos solicitar alguns dados da planilha Sheet
utilizando o comando ddereq. Os comandos em Matlab_excel agora são:
141
channel = ddeinit('excel','Sheet')
Nota_P1_Ana = ddereq(channel,'l4c2') % A variável Nota_P1_Ana irá receber o
valor armazenado na célula localizada na linha 4 e coluna 2 (B4) do Excel.
Notas_P1_todos = ddereq(channel,'l4c2:l12c2') % A variável Notas_P1_todos
irá receber os valores armazenados na célula localizada na linha 4 e coluna 2 (B4) até a
célula localizada na linha 12 e coluna 2 (B12), ou seja, vai receber todos os valores de
B4 até B12 do Excel.
Notas_P1_e_P2_todos = ddereq(channel,'l4c2:l12c3') % A variável
Notas_P1_e_P2 todos irá receber os valores armazenados na célula localizada na linha
4 e coluna 2 (B4) até a célula localizada na linha 12 e coluna 3 (C12), ou seja, vai
receber todos os valores de B4 até C12 do Excel.
Estas variáveis serão criadas no Workspace e na Command Window serão
mostrados os valores armazenados nas mesmas:
channel =
4.7836e-299
Nota_P1_Ana =
8.6000
142
Notas_P1_todos =
8.6000
7.5000
4.6000
8.0000
9.5000
5.0000
7.9000
7.3000
6.3000
Notas_P1_e_P2_todos =
8.6000 4.5000
7.5000 7.4000
4.6000 8.5000
8.0000 7.9000
9.5000 9.2000
5.0000 8.2000
7.9000 4.6000
7.3000 0
6.3000 6.0000
Agora, caso deseje enviar dados do MATLAB para o EXCEL, demos utilizar o
comando ddepoke. Vamos acrescentar mais alguns comandos ao arquivo
Matlab_excel:
143
channel = ddeinit('excel','Sheet');
Notas_P1_Ana = ddereq(channel,'l4c2');
Notas_P1_todos = ddereq(channel,'l4c2:l12c2');
Notas_P1_e_P2_todos = ddereq(channel,'l4c2:l12c3');
Aluno_novo= 'Zander'; % A variável Aluno_novo recebe o nome Zander.
Nota_P1= 8.5; % A variável Nota_P1 recebe o número real 8.5.
Nota_P2= 6.5; % A variável Nota_P2 recebe o número real 6.5.
Aluno_Zander= ddepoke(channel,'l13c1',Aluno_novo); % Utilizando o canal de
comunicação channel, o comando ddepoke escreve a expressão contida na variável
Aluno_novo na célula localizada na linha 13 e coluna 1 (A13) do Excel.
Aluno_Zander_P1= ddepoke(channel,'l13c2',Nota_P1); % Utilizando o canal de
comunicação channel, o comando ddepoke escreve o valor contido na variável
Aluno_Zander_P1 na célula localizada na linha 13 e coluna 2 (B13) do Excel.
Aluno_Zander_P2= ddepoke(channel,'l13c3',Nota_P2); % Utilizando o canal de
comunicação channel, o comando ddepoke escreve o valor ou expressão contido(a) na
variável Aluno_Zander_P2 na célula localizada na linha 13 e coluna 3(C13) do Excel.
144
A Tabela se encontra agora da forma destacada na Figura 74:
Figura 74
Observação: A aplicação acima foi feita com EXCEL versão em português. Caso
seu EXCEL seja versão em Inglês, ao invés de l1c1 ou l3c2:l12c2 você deve utilizar r1c1
ou r3c2:r12c2.
11.2 - Comunicação entre o MATLAB e o INTOUCH utilizando protocolo de
comunicação DDE
A integração entre os sistemas MATLAB (simulação e controle) e InTouch
(supervisão do processo) será realizada em um primeiro momento através de
comandos DDE do MATLAB. Neste tipo de aplicação específica o MATLAB funcionará
como software cliente da comunicação e o InTouch como servidor.
145
Esta configuração faz-se necessária, pois o InTouch como software de
supervisão do processo recebe do mesmo os sinais das variáveis controladas do
processo e de forma análoga pode enviar sinais para as variáveis manipuladas do
sistema atuando nos elementos finais de controle.
Para o estabelecimento inicial da conexão utilizando o protocolo DDE, faz-se
necessário utilizar o comando ddeinit no MATLAB, cuja sintaxe é:
a=ddeinit (‘nome da aplicação’, ‘nome da sessão’)
Onde a é a variável que armazena a resposta à requisição por conexão
(afirmativa ou negativa), nome da aplicação é o nome da aplicação servidora e nome
da sessão se refere à sessão da aplicação servidora que será acessada.
Este comando retorna, caso a conexão seja estabelecida, um valor diferente de
“0”, que certifica que um canal virtual foi estabelecido entre as duas aplicações.
Um segundo comando será executado para depois de estabelecida a conexão,
trata-se do ddereq. Este comando solicita ao servidor o valor contido em uma dada
variável da sua sessão e retorna para a variável que armazena dentro do MATLAB.
b=ddereq (‘canal’, ‘nome da variável’)
Onde b é a variável que armazena a resposta à requisição por valor da variável
controlada, canal é o nome da variável que recebeu o retorno do pedido de conexão e
146
nome da variável se refere à variável controlada que está sendo medida e
disponibilizada no processo.
Tendo lido o valor de uma variável controlada através do comando ddereq, faz-
se necessário tomar uma ação de controle que gera um valor numérico a ser alterado
na aplicação servidora. Desta forma é possível a utilização de um comando ddepoke
que tem a função de realizar esta alteração, uma vez estabelecida a comunicação
através do ddeinit.
ddepoke (‘canal’, ‘nome da variável’, ‘valor’)
Onde o canal e o nome da variável já foram esclarecidos anteriormente e o
valor é o valor que será escrito na variável manipulada na sessão da aplicação
servidora.
Com estes três comandos básicos é possível realizar o ciclo básico de um
sistema de controle no qual a função dos sensores é realizada pelo comando ddereq e
a função dos atuadores realizada pelo comando ddepoke.
Na Figura 75 é apresentada a tela com a seqüência de comandos executada no
MATLAB, e respectivos resultados, para abertura de uma conexão, leitura do valor de
uma variável e escrita de um valor em uma variável, adequados aos softwares
envolvidos neste trabalho.
147
Figura 75
Observação: As informações contidas neste item foram extraídas da apostila
Sistemas de Comunicação OPC para uma Coluna de Destilação Piloto, elaborada por
Adelson S.C., Ronald C.S. e Dênis B.N.
11.3 - Comunicação entre o MATLAB e o SYSCON utilizando a ferramenta opctool
A mesma operação de conexão virtual realizada entre InTouch e MATLAB é
possível através do protocolo de comunicação OPC. A diferença é que as aplicações
envolvidas neste processo serão os softwares MATLAB, operando como cliente na
comunicação e o SYSCON funcionando como servidor. Este software é responsável
148
pela configuração de redes Foundation Fieldbus e como tal se conecta aos dispositivos
de campo através de uma rede de alta velocidade denominada HSE, que trabalha de
acordo com o modelo TCP/IP, a DFI (dispositivo que comunica os instrumentos com o
PC) possui uma interface de rede padrão e um endereço IP. Basta que o IP da máquina
que o SYSCON esteja instalado seja da mesma classe e rede que o da DFI para que se
comuniquem. Os parâmetros e valores dos instrumentos podem então ser alterados
on-line pelo SYSCON através de um servidor OPC que se conecta a DFI para aquisição
dos dados da rede fieldbus.
Aproveitando-se deste servidor OPC instalado e sendo executado no
computador que supervisiona o processo, o MATLAB pode estabelecer uma conexão
virtual direto com estes servidores, dispensando assim a presença do software de
supervisão InTouch. Isto é possível graças à incorporação do toolbox OPC em versões
mais recentes do MATLAB e sua interface gráfica denominada opctool, que abre uma
sessão de conexão via OPC ao detectar qualquer servidor OPC instalado e executado
no computador onde o MATLAB está instalado. Na figura 76 é apresentada a tela da
ferramenta opctool do MATLAB. Nem sempre esta ferramenta está habilitada,
portanto deve-se digitar opcregister e escrever Yes para instalar esta ferramenta.
149
Figura 76
Esta ferramenta trabalha com conceitos como:
Hosts – Computadores com servidores OPC instalados.
OPC servers – Servidor de comunicação via protocolo OPC, utilizado
em equipamentos industriais.
MATLAB OPC Clients – Agentes clientes OPC que disponibilizarão os
dados no ambiente do MATLAB.
Group – Conjunto de itens OPC.
Item – Variável ou parâmetro que será lido ou escrito pelo MATLAB.
150
Na tela apresentada na Figura 77 está selecionada a opção de geração de um
arquivo do SIMULINK a partir da opção do menu na tela da ferramenta opctool. Tanto
a seleção da opção write como na read um novo arquivo .mdl é gerado, conforme
Figura 78.
Figura 77
151
Figura 78
Os resultados desta aplicação circundam a implementação do sistema de
comunicação proposto na coluna de destilação piloto do IFF-Campos. As características
inerentes aos comandos necessários, bem como a integração da ferramenta opctool
com o SIMULINK para a geração do modelo de simulação já foram elucidadas acima.
Cabe então a apresentação do modelo de simulação utilizado e os gráficos referentes
aos sinais enviados e recebidos do processo pelo sistema de comunicação.
Na Figura 79 é apresentado o modelo de simulação comunicando com o
sistema real via protocolo OPC.
152
Figura 79
Na figura 80 são apresentados os sinais registrados pelo sistema de
comunicação OPC referente à temperatura de topo.
Figura 80
Observação: As informações contidas neste item foram extraídas da apostila
Sistemas de Comunicação OPC para uma Coluna de Destilação Piloto, elaborada por
Adelson S.C., Ronald C.S. e Dênis B.N.
153
CAPÍTULO 12 – ESTUDO DE CASO
Neste estudo de caso, iremos abordar um assunto muito utilizado em diversos
tipos de engenharia, porém as abordagens e ferramentas utilizadas serão voltadas
para aplicações de engenharia de controle e automação industrial. O assunto é:
Velocidade de um Motor DC.
Dentre as aplicações e ferramentas abordadas, estão:
Modelagem matemática e utilização do MATLAB;
Controle PID;
Lugar das raízes;
Resposta em freqüência;
Espaço estado;
Controle Digital;
Seguindo esta ordem, vamos começar fazendo uma análise matemática dos
componentes, funcionamento e das variáveis envolvidas para podermos modelar e em
seguida vamos utilizar o MATLAB para analisar a resposta do sistema modelado.
As informações contidas neste estudo de caso foram extraídas do site:
http://www.engin.umich.edu/class/ctms/.
154
12.1 - Modelagem Matemática e Utilização do MATLAB
Um atuador comum em sistemas de controle é o motor DC. O motor oferece
movimento rotativo e, acoplado com rodas ou cabos, pode oferecer movimento de
transição. O circuito elétrico da armadura e o diagrama de corpo livre do rotor são
mostrados na seguinte Figura 81.
Figura 81
Para este exemplo, serão assumidos os seguintes valores para os parâmetros
físicos:
Momento de inércia do rotor (J) = 0.01 kg.m^2/s^2;
Taxa de amortecimento do sistema mecânico (b) = 0.1Nms;
Força eletromotriz constante (K=Ke=Kt) = 0.01 Nm/Amp;
Resistência elétrica (R) = 1 ohm;
Indutância elétrica (L) = 0.5 H;
Entrada (V) = Fonte de Tensão;
Saída (theta) = Posição do eixo;
O rotor e o eixo são rígidos;
155
O torque do motor, T, é relacionado à corrente da armadura, i, pelo fator
constante Kt. A força eletromotriz contrária, e, é relacionada à velocidade de rotação
do motor pelas seguintes equações:
T= Kt*i
Kt=Ke (constante do motor)
Da figura acima nós podemos escrever as seguintes equações baseadas na lei
de Newton combinada com a lei de Kirchhoff:
12.1.1 - Função de transferência
Utilizando a transformada de Laplace, as equações modeladas acima podem ser
expressas em termos de s.
156
Substituindo uma equação na outra e eliminando o termo I(s) nós podemos
obter a função de transferência de malha aberta, onde a velocidade de rotação é a
saída e a tensão é a entrada.
12.1.2 - Espaço estado
Na forma de espaço estado, as equações acima podem ser expressas pela
escolha da velocidade de rotação e a corrente elétrica como sendo as variáveis de
estado e a tensão como sendo uma entrada. A saída é escolhida para ser a velocidade
de rotação.
Especificações de projeto:
Primeiro, nosso motor não compensado pode rotacionar somente a 0.1 rad/sec
com uma entrada em tensão de 1 Volt (isso será demonstrado depois quando a
resposta de malha aberta for simulada). Uma vez que o requisito básico de um motor é
que ele deve rodar na velocidade desejada, o erro de estado estacionário de
157
velocidade deve ser inferior a 1%. O outro requerimento de desempenho é que o
motor deve atingir a especificação anterior o mais breve possível, ou seja, em menos
de 2 segundos. Porém, seu máximo sobre sinal não deve ser maior que 5%.
12.1.3 - Representação no MATLAB e resposta em malha aberta
Função de transferência
Vamos criar uma M.file e escrever os seguintes comandos:
J=0.01;
b=0.1;
K=0.01;
R=1;
L=0.5;
num=K; % Numerador da F.T.
den=[(J*L) ((J*R)+(L*b)) ((b*R)+K^2)]; % Denominador da F.T.
motor=tf(num,den);
step(motor,0:0.1:3); % Comando para aplicar a entrada em degrau no
motor.
title('Step Response for the Open Loop System');
158
Na Figrua 82, é apresentado o gráfico gerado pelos comandos acima.
Figura 82
Espaço Estado
Nós podemos também representar o sistema usando as equações de espaço
estado. Crie uma M.file e digite os seguintes comandos:
J=0.01;
b=0.1;
K=0.01;
R=1;
L=0.5;
A=[-b/J K/J -K/L -R/L];
B=[0 1/L];
C=[1 0];
D=0;
motor_ss=ss(A,B,C,D);
step(motor_ss)
159
Clique em run na M.file e a saída obtida deve ser idêntica a da obtida na função
de transferência.
Conhecendo a natureza do sistema, vamos agora utilizar estas informações
para projetar um controlador PID de forma que as especificações do projeto sejam
atendidas.
12.2 - Método de Projeto de um Controlador PID para Controle de Velocidade do
Motor DC
Para o problema principal, vamos utilizar a função de transferência encontrada
e o diagrama esquemático mostrado na Figura 83.
Figura 83
Para 1 rad/s obtido pelo degrau unitário, as especificações do projeto são:
Tempo de acomodação menor que 2 segundos;
Overshoot menor que 5%;
Erro de regime permanente 1%;
160
Vamos projetar um controlador PID, lembrando que sua função de transfrencia
é dada pela equação:
Para entendermos a dinâmica do processo, vamos primeiro projetar um
controlador proporcional.
12.2.1 - Controle proporcional
Vamos primeiro tentar usar um controlador proporcional com ganho de 100.
Para determinar a função de transferência de malha fechada, podemos usar o
comando feedback. Adicione os seguintes comandos no final da sua M.file:
Kp=100;
contr=Kp;
sys_cl=feedback(contr*motor,1);
Agora vamos analisar a resposta do modelo compensado. Adicione no final da
sua M.file e clique em run para rodar os comandos.
t=0:0.01:5;
step(sys_cl,t)
title(Resposta ao degrau unitário com controle proporcional')
161
O gráfico gerado é mostrado na Figura 84.
Figura 84
Podemos observar que apenas a especificação de tempo de acomodação foi
atendida. Se acrescentarmos um controlador integral, ele será capaz de eliminar o erro
de regime permanente e se acrescentarmos um controlador derivativo, ele será capaz
de diminuir o overshoot. Porém, os valores de P, I e D devem ser otimizados de forma
que as especificações sejam atendidas.
162
12.2.2 - Controle PID
Vamos modificar nossa M.file e disponibilizá-la da seguinte forma:
% Função de transferência do motor DC.
J=0.01;
b=0.1;
K=0.01;
R=1;
L=0.5;
num=K;
den=[(J*L) ((J*R)+(L*b)) ((b*R)+K^2)];
motor=tf(num,den);
% Função de transferência do controlador.
Kp=100;
Ki=1;
Kd=1;
contr=tf([Kd Kp Ki],[1 0]);
% Fechando a malha.
sys_cl=feedback(contr*motor,1);
% Resposta do sistema controlado.
step(sys_cl)
title('Controle PID com pequenos valores de Ki e Kd')
163
Com os parâmetros escolhidos para o controlador, a resposta obtida é
apresentada na Figura 85.
Figura 85
12.2.3 - Sintonia fina do controlador
Existem inúmeras formas eficientes de se fazer uma sintonia fina. Porém,
vamos sintonizar de forma intuitiva, utilizando os conceitos de controle integral e
derivativo. Como o tempo de acomodação é muito grande, vamos aumentar a
constante Ki para 200 e verificar se a especificação de tempo de acomodação foi
atingida. A resposta obtida após alterar a M.file atribuindo Ki=200 pode ser visualizada
na Figura 86.
164
Figura 86
Vamos agora aumentar o Kd para que diminua o overshoot. Vamos modificar a
M.file atribuindo Kd=10 e analisar a resposta plotada na Figura 87.
Figura 87
165
Então, nós sabemos que se nós usarmos um controlador PID com:
Kp=100;
Ki=200;
Kd=10;
Todas as nossas especificações de projetos serão satisfeitas. Além disso,
podemos fazer algumas análises do modelo não compensado e do modelo
compensado de diferentes formas.
12.3 - Lugar das Raízes
Utilizando o comando rlocus, vamos analisar o lugar das raízes do modelo não
compensado para o modelo compensado. Para plotar o lugar das raízes do modelo não
compensado digite o comando:
>> rlocus(motor)
>> title(‘Lugar das raízes do modelo não compensado’)
166
O seguinte gráfico é apresentado na Figura 88.
Figura 88
Agora, para plotar o gráfico do lugar das raízes do modelo compensado digite
os seguintes comandos:
>> rlocus(sys_cl)
>> title(‘Lugar das raízes do modelo compensado’)
-12 -10 -8 -6 -4 -2 0 2-6
-4
-2
0
2
4
6
Lugar das raízes do modelo não compensado
Real Axis
Imagin
ary
Axis
167
Na Figura 89, é apresentado o gráfico gerado:
Figura 89
Caso você deseje entender mais sobre o assunto, visite o site:
http://www.engin.umich.edu/class/ctms/examples/motor/rlocus2.htm. Nele, as
informações são analisadas passo a passo.
12.4 - Resposta em frequência
Para analisar a resposta do modelo compensado e não compensado no
domínio da freqüência, devemos utilizar o comando bode. Para plotar o gráfico de
bode do modelo não compensado digite os comandos:
-350 -300 -250 -200 -150 -100 -50 0 50-100
-80
-60
-40
-20
0
20
40
60
80
100
Lugar das raízes do modelo compensado
Real Axis
Imagin
ary
Axis
168
>>bode(motor)
>>title(‘Gráfico de bode do modelo não compensado’)
>>grid
O gráfico gerado pode ser visto na Figura 90.
Figura 90
E para plotar o gráfico de bode do modelo compensado digite os comandos:
>>bode(sys_cl)
>>title(‘Gráfico de bode do modelo compensado’)
>>grid
-120
-100
-80
-60
-40
-20
Magnitu
de (
dB
)
10-1
100
101
102
103
-180
-135
-90
-45
0
Phase (
deg)
Gráfico de bode do modelo não compensado
Frequency (rad/sec)
169
Na Figura 91, é apresentado o gráfico gerado pelos comandos acima:
Figura 91
Para mais informações sobre os gráficos de bode e a resposta em freq., visite o
site: http://www.engin.umich.edu/class/ctms/examples/motor/freq2.htm.
-80
-60
-40
-20
0
20
Magnitu
de (
dB
)
100
101
102
103
104
-180
-135
-90
-45
0
Phase (
deg)
Gráfico de bode do modelo não compensado
Frequency (rad/sec)
170
12.5 - Espaço Estado
Para o problema principal, as equações dinâmicas de espaço estado são as
seguintes:
Lembrando que as especificações de resposta são:
Tempo de acomodação menor que 2 segundos;
Overshoot de 5%;
Erro de regime permanente menor que 1%;
Crie uma M.file contendo os seguintes comandos:
J = 0.01;
b = 0.1;
K = 0.01;
R = 1;
L = 0.5;
A = [-b/J K/J; -K/L -R/L];
B = [0; 1/L];
C = [1 0];
D = [0];
sys = ss(A,B,C,D); % Modelo na forma de espaço estado.
171
12.5.1 - Projetando um controlador de realimentação de estado completo
Como ambas as variáveis de estado em nosso problema são fáceis medir (basta
adicionar um amperímetro para corrente e um taquímetro para a velocidade), nós
podemos projetar um controlador de realimentação de estado completo para o
sistema sem se preocupar em ter que adicionar um observador. O esquema de um
sistema de realimentação de estado completo é mostrado na Figura 92.
Figura 92
Lembremos que o polinômio característico para este sistema de malha fechada
é o determinante de [sI-(A – B*K)] onde s é a variável de Laplace. Desde que as
matrizes A e B * K são matrizes 2x2, deve haver dois pólos para o sistema. Projetando
um controlador de realimentação de estado completo, podemos passar esses dois
pólos em qualquer lugar que quisermos. Vamos primeiro tentar colocá-los em -5 + i e -
5 - i (observe que isto corresponde a um zeta = 0,98, que dá um overshoot de 0,1% e
uma sigma = 5, que leva a um tempo de 1 segundo para acomodar). Uma vez que nós
vimos acima com os pólos que queremos, MATLAB irá encontrar o controlador de
matriz, K, para nós. Basta adicionar o seguinte código ao final de seu M.file:
172
p1 = -5 + i;
p2 = -5 - i;
K = place(A,B,[p1 p2]); % Calcula a matriz de realimentação K.
Agora, observe novamente o esquema (diagrama de blocos) acima. Podemos
observar que adicionando a matriz K no modelo, as equações de espaço estado se
tornam:
Podemos analisar a resposta do modelo compensado simplesmente
adicionando os seguintes comandos no final de nossa M.file:
t = 0:0.1:10;
sys_cl = ss(A-B*K,B,C,D);
step(sys_cl,t) % Aplica degrau unitária na planta compensada.
Clicando no botão run, a resposta do modelo compensado é mostrada na
Figura 93.
Figura 93
173
12.5.2 - Adicionando uma entrada de referência
A partir da resposta acima, vemos que o erro de estado estacionário é muito
grande. Em contraste com os métodos de design, onde se realimenta a saída e a
compara ao valor de referência para calcular um erro, aqui estamos devolvendo os
dois estados. Precisamos calcular qual o valor de regime permanente que os estados
deve ter, que se multiplicam pelo ganho escolhido K, e usar este novo valor como
referência para o cálculo da contribuição. Isso pode ser feito em uma única etapa,
adicionando um ganho constante Nbar após a referência. Veja o diagrama
esquemático mostrado na Figura 94.
Figura 94
Nós podemos encontrar esse fator Nbar usando o comando do MATLAB rscale:
Nbar = rscale(sys, K);
Este comando rscale não é um comando padrão do MATLAB. Na verdade,
rscale é uma function elaborada especialmente para este tipo de caso e deve ser
declarada no MATLAB. Crie uma M.file e adicione os seguintes comandos:
174
function[Nbar]=rscale(a,b,c,d,k) % A função rscale(sys,K) or rscale(A,B,C,D,K)
% encontra a constant N na qual eliminará o erro de regime
% permanente para uma entrada de referência do tipo degrau unitário
% no domínio do tempo contínuo. O sistema de simples entrada com
% realimentação de estado completo utiliza o esquema mostrado
% abaixo:
% % /-----------\ % R + u | . | % ---> N --->() ----------->|X=Ax+Bu |-----> y=Cx ---> y % - | \-----------/ % | | % |<---- K <--------- | % % 8/21/96 Yanjie Sun of the University of Michigan
% under the supervision of Prof. D. Tilbury
% 6/12/98 John Yook, Dawn Tilbury revised
error(nargchk(2,5,nargin)); % Determine qual sintaxe está sendo usada
nargin1 = nargin; if (nargin1==2), % System form [A,B,C,D] = ssdata(a); K=b; elseif (nargin1==5), % A,B,C,D matrices A=a; B=b; C=c; D=d; K=k; else error('Input must be of the form (sys,K) or (A,B,C,D,K)') end; % Calcular Nbar
s = size(A,1); Z = [zeros([1,s]) 1];
N = inv([A,B;C,D])*Z'; Nx = N(1:s); Nu = N(1+s); Nbar=Nu + K*Nx;
175
Observação: Não se esqueça de salvar o M.file com o nome da function: rscale.
Agora podemos plotar a resposta final digitando os seguintes comandos na
nossa M.file (espaço estado):
% Espaço Estado do motor DC.
J = 0.01;
b = 0.1;
K = 0.01;
R = 1;
L = 0.5;
A = [-b/J K/J
-K/L -R/L];
B = [0
1/L];
C = [1 0];
D = [0];
t=0:0.1:10;
u=ones(size(t)); % Entrada do tipo Degrau unitário.
sys = ss(A,B,C,D); % Modelo na forma de espaço estado.
x0=[0 0]; % Esta matriz x0 é opcional em alguns caso onde se utiliza o
comando lsim, porém neste caso sua utilização é obrigatória.
% Pólos desejados e matriz de realimentação K.
p1 = -5 + i; % O projetista pode escolher os pólos desejados em qualquer lugar
p2 = -5 - i;
K = place(A,B,[p1 p2]); % Calcula a matriz de realimentação K.
176
% Analisando a resposta compensada.
figure(1)
sys_cl1 = ss(A-B*K,B,C,D);
step(sys_cl1,t) % Resposta ao degrau no sistema compensado.
% Após analisar a sua resposta, podemos verificar que sua saída em regime
% permanente é igual a 0.0769.
% Cálculo do Nbar.
% O cálculo do Nbar consiste basicamente em encontrar o valor de uma
% constante. Essa constante será multiplicada pela entrada em degrau
% unitário para que a saída desejada do sistema compensado seja alcançada.
% Caso o usuário dividir o valor desejado (1) pelo valor da saída
% compensada (0.0769), o resultado será 13.003901 e este valor é a
% constante Nbar que será calculada. Portanto, pode-se dizer que a função
% rscale(sys,K) ou rscale(A,B,C,D,K) encontra a constante Nbar na qual
% eliminará o erro de regime permanente para uma entrada de referência do
% tipo degrau unitário no domínio do tempo continuo.
Nbar = rscale(sys, K)
177
% Resposta o modelo compensado.
figure(2)
sys_cl=ss(A-B*K,B*Nbar,C,D); % Multiplicamos Nbar pela matriz de entrada.
lsim(sys_cl,u,t,x0); % Comando para aplicar qualquer tipo de entrada. Neste
caso, vamos aplicar uma entrada em degrau no modelo compensado
axis([0 5 0 1.5]);
title('Step Response with K Controller and Nbar')
A Figura 95 a seguir apresenta a resposta do modelo compensado com a
constante Nbar:
Figura 95
178
12.6 - Controle Digital
Vamos utilizar para fazer o controle digital, os seguintes comandos:
% Função de transferência discreta do motor DC.
J=0.01;
b=0.1;
K=0.01;
R=1;
L=0.5;
num=K;
den=[(J*L) ((J*R)+(L*b)) ((b*R)+K^2)];
motor=tf(num,den);
ts=0.12;
motor_d=c2d(motor,ts,’zoh’)
% Função de transferência do controlador discreto.
Kp=100;
Ki=200;
Kd=10;
PID=tf([Kd Kp Ki],[1 0]);
contr=c2d(PID,ts,’Tustin’);
179
% Resposta do modelo compensado discreto.
sys_cl = feedback(contr*motor_d,1);
[x2,T] = step(sys_cl,12);
stairs(T,x2)
xlabel('Time (seconds)')
ylabel('Velocity (rad/s)')
title('Stairstep Response:with PID controller')
O gráfico do modelo discreto compensado é mostrado na Figura 96.
Figura 96
Como você pode ver acima, o gráfico do modelo em malha fechado apresenta
instabilidade. Portanto, deve haver algo errado com o sistema de compensação. Assim,
devemos dar uma olhada no lugar das raízes do sistema compensado. Vamos adicionar
o seguinte comando MATLAB no fim de nossa M.file:
0 2 4 6 8 10 12-4
-3
-2
-1
0
1
2x 10
36
Time (seconds)
Velo
city (
rad/s
)
Stairstep Response:with PID controller
180
rlocus(contr*motor_d)
title(‘Lugar das raízes do sistema compensado’)
O seguinte gráfico é mostrado na Figura 97:
Figura 97
A partir deste lugar das raízes, vemos que o denominador do controlador PID
tem um pólo em z -1. Sabemos que, se um pólo de um sistema está fora do círculo
unitário, o sistema será instável. Este sistema compensado será sempre instável para
qualquer ganho positivo, porque há um número par de pólos e zeros à direita do pólo
em -1. Por isso que o pólo vai sempre se mover para a esquerda e de fora do círculo
unitário. O pólo em -1 provém do compensador, e podemos mudar sua posição,
alterando o projeto compensador. Nós escolhemos para cancelar o zero em -0,62. Isso
fará com que o sistema estável por pelo menos alguns ganhos. Além disso, podemos
-3 -2.5 -2 -1.5 -1 -0.5 0 0.5 1 1.5-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
Lugar das raízes do sistema compensado
Real Axis
Imagin
ary
Axis
181
escolher um ganho apropriado a partir do lugar das raízes para satisfazer os requisitos
de design usando rlocfind. Digite o código MATLAB seguinte ao nosso M.file:
contr.den = conv([1 -1],[1/.62 1]);
figure(1)
rlocus(contr*motor_d) % Encontrar local onde o ganho é 0.2425.
figure(2)
rlocus(contr*motor_d) % Selecionar o local o ganho.
title('Root Locus of Compensated System');
[K,poles] = rlocfind(contr*motor_d)
sys_cl = feedback(K*contr*motor_d,1);
[x3,T] = step(sys_cl,12);
stairs(T,x3)
xlabel('Time (seconds)')
ylabel('Velocity (rad/s)')
title('Stairstep Response:with PID controller')
O novo pólo de malha fechada será um pólo em -0.625 ao invés de -1, o que
quase anula o zero do sistema não compensado. Na janela do MATLAB, você verá o
comando pedindo para selecionar um ponto no lugar das raízes. Você deve clicar sobre
o gráfico cujo ganho é aproximadamente 0.2425. A Figura 98 mostra a resposta.
182
Figura 98
O gráfico mostra que o tempo de acomodação é menor que 2 segundos e o
overshoot é de cerca de 3%. Em adição, o erro de estado estacionário é zero. O ganho,
K, é 0.2425. Portanto, esta resposta satisfaz todos os requisitos de concepção.
Para que não haja dúvidas, a M.file ficou assim:
% Função de transferência discreta do motor DC.
J=0.01;
b=0.1;
K=0.01;
R=1;
L=0.5;
num=K;
183
den=[(J*L) ((J*R)+(L*b)) ((b*R)+K^2)];
motor=tf(num,den);
ts=0.12;
motor_d=c2d(motor,ts,'zoh')
% Função de transferência do controlador discreto.
Kp=100;
Ki=200;
Kd=10;
PID=tf([Kd Kp Ki],[1 0]);
contr=c2d(PID,ts,'Tustin');
% Resposta do modelo compensado discreto.
contr.den = conv([1 -1],[1/.62 1]); % Permite modificar o denominador do
controlador.
figure(1)
rlocus(contr*motor_d) % Encontrar o local onde o ganho é igual a 0.2425.
figure(2)
rlocus(contr*motor_d) % Selecionar o local.
title('Root Locus of Compensated System');
[K,poles] = rlocfind(contr*motor_d)
sys_cl = feedback(K*contr*motor_d,1);
184
[x3,T] = step(sys_cl,12);
stairs(T,x3)
xlabel('Time (seconds)')
ylabel('Velocity (rad/s)')
title('Stairstep Response:with PID controller')
185
ADENDO – RESUMO DOS COMANDOS MAIS UTILIZADOS NO CURSO
Como este trabalho é composto por muitos tipos de comandos espalhados por
diferentes partes, este adendo foi elaborado com intuito de diminuir o tempo de
procura por algum comando desejado. A tabela abaixo contém os mais importantes
comandos utilizados neste trabalho e sua descrição. Caso o usuário não se recorde de
como utilizar um determinado comando, basta digitar o comando help ”nome do
comando” na Command Window.
Comandos e funções matriciais
comumente usados na solução de
problemas de engenharia de controle.
Descrição sobre o que o comando faz, o que
a função matricial significa, ou o que a declaração
significa.
abs acker angle ans antan axis
Valor absoluto, magnitude complexa. Matriz de realimentação K Ângulo de fase Resp. obtida para expressão sem atribuição Arcotangente Escala manual do eixo
bode bar bar3
Traçar diagrama de bode Plota gráficos no formato de barras Plota gráficos em três dimensões
c2d clear clf clg complex conj conv cos cosh cov ctrb
Transforma domínio contínuo para domínio discreto Limpar a área de trabalho Limpar figura Limpar tela gráfica Localização complexa de um número Conjugado complexo Convolução, multiplicação Co-seno Co-seno hiperbólico Co-variância A matriz de controlabilidade
186
ddeinit ddereq ddepoke deconv det diag diff disp dlqr
Inicia conversação do MATLAB com outras aplica. Solicita os dados da aplicação do servidor DDE Envia um dado do MATLAB para a aplicação Deconvolução, Divisão Determinante Matriz diagonal Derivada de uma função Mostra uma mensagem Regulador linear quadrático para sistemas discretos
eps eig exit ou quit exp expm eye
Tolerância numérica do MATLAB Autovalores e autovetores Término do programa Exponenciação, base e Matriz exponencial Matriz identidade
feedback filter fill figure format long format log e format short fromat short e freqs freqz
Fechar a malha Implementação de filtro Preencher uma área com uma cor desejada Escolhe a figura que se deseja utilizar Número real de 15 dígitos Número real de 15 dígitos em notação científica Número real de 5 dígitos Número real de 5 dígitos em notação científica Resposta de freq. no domínio da transfor. de laplace Resposta de freqüência no domínio da transf. Z
grid Desenhar linhas em uma grade reticulada
hold on help ilaplace imag impulse inf inv int interp1
Manter na tela o gráfico corrente Ajuda com a utilização dos comandos Transformada inversa de Laplace Parte imaginária de um número complexo Traçar a resposta ao impulso unitário Infinito Inversa Calcular integral de uma função Interpolar
j ou i Raiz quadrada de -1
length linspace limit linspace log loglog logm logspace log10 lqe
Tamanho do vetor Vetores linearmente espaçados Calcular limite de uma função Interpolação linear Logaritmo natural Gráfico loglog nos eixos x-y Logaritmo da matriz Vetores logariticamente espaçados Logaritmo de base 10 Projeto de estimador quadrático linear
187
lqr lsim
Projeto do regulador quadrático linear Traçar a resposta a qualquer tipo de entrada
max margin mean median min
Valor máximo Margem de ganho, fase e freq. de cruzamento Valor médio Valor da mediana Valor mínimo
nan nntool nyquist
Não-número Ferramenta para projeto de rede neural artificial Gráfico da resp. em freq. em coordenada de Nyquist
ones opctool obsv
Constante Conectar MATLAB a uma aplicação usando OPC Calcula matriz de observabilidade
parallel pi phase place plot polar poly ployfit plyñt polyval polyvalm pretty printsys prod pzmap
Funções de transferências em paralelo Número pi Calcula a fase de um número complexo Matriz de realimentação K Gráfico linear em coordenadas cartezianas x-y Gráfico em coordenadas polares Polinômio característico Interpolação por mínimos quadrados Ajuste polinomial de curvas Avaliação polinomial Avaliação de matriz polinomial Arrumar a resposta Arrumar a resposta em função de uma variável Produto de elementos Mapa com pólos e zeros de um sistema linear
ramp rand rank real rem residue rlocus roots
Traçar a resposta a entrada em rampa Gerar números e matrizes randômicos Calcular o posto (rank) de uma matriz Parte real de um número complexo Resto ou módulo Expansão em frações parciais Traçar lugar das raízes Raízes polinomiais
semilogx semilogy series sign sin sinh sisotool size sqrt sqrtm
Gráfico semilog x-y (eixo x logarítmico) Gráfico semilog x-y (eixo y logarítmico) Funções de transferências em série Função sinal Seno Seno hiperbólico Editor de compensadores Dimensões de linhas e colunas de uma matriz Raiz quadrada Raiz quadrada de uma matriz
188
ss2tf std stairs step subplot sum syms symsum
Transforma de espaço estado para função de transf. Desvio padrão Plota gráficos em formato de escada Traçar a resposta ao degrau unitário Dividir a janela plotada em partes Soma de elementos Atribuir uma letra como símbolo Somatório
tan tanh text tf tf2ss tf2zp title trace
Tangente Tangente hiperbólica Texto posicionado arbitrariamente Função de transferência Transforma de função de transf. para espaço estado Determina pólos e zeros de uma função de transfer. Colocar título em um gráfico Traço de uma matriz
who Lista de todas as variáveis atualmente na memória
xlabel Título do eixo dos x
ylabel Título do eixo dos y
zeros zgrid
Zero Grid no domínio discreto