apostila de matlab

188
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

Upload: glaucio-jose-pereira

Post on 25-Jul-2015

355 views

Category:

Documents


22 download

TRANSCRIPT

Page 1: Apostila de MATLAB

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

Page 2: Apostila de MATLAB

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

Page 3: Apostila de MATLAB

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

Page 4: Apostila de MATLAB

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

Page 5: Apostila de MATLAB

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

Page 6: Apostila de MATLAB

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

Page 7: Apostila de MATLAB

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:

Page 8: Apostila de MATLAB

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.

Page 9: Apostila de MATLAB

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.

Page 10: Apostila de MATLAB

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

Page 11: Apostila de MATLAB

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”.

Page 12: Apostila de MATLAB

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

Page 13: Apostila de MATLAB

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

Page 14: Apostila de MATLAB

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

Page 15: Apostila de MATLAB

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.

Page 16: Apostila de MATLAB

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 %.

Page 17: Apostila de MATLAB

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”.

Page 18: Apostila de MATLAB

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]

Page 19: Apostila de MATLAB

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

Page 20: Apostila de MATLAB

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.

Page 21: Apostila de MATLAB

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)

Page 22: Apostila de MATLAB

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

Page 23: Apostila de MATLAB

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

Page 24: Apostila de MATLAB

24

A =

1 2 0

2 5 -1

4 10 -1

O mesmo pode ser aplicado para as outras variáveis.

Page 25: Apostila de MATLAB

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

Page 26: Apostila de MATLAB

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

Page 27: Apostila de MATLAB

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

Page 28: Apostila de MATLAB

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

Page 29: Apostila de MATLAB

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

Page 30: Apostila de MATLAB

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

Page 31: Apostila de MATLAB

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)

Page 32: Apostila de MATLAB

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

Page 33: Apostila de MATLAB

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)

Page 34: Apostila de MATLAB

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)]

Page 35: Apostila de MATLAB

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

Page 36: Apostila de MATLAB

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

Page 37: Apostila de MATLAB

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

Page 38: Apostila de MATLAB

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

Page 39: Apostila de MATLAB

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

Page 40: Apostila de MATLAB

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')

Page 41: Apostila de MATLAB

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

Page 42: Apostila de MATLAB

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

Page 43: Apostila de MATLAB

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’)

Page 44: Apostila de MATLAB

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

Page 45: Apostila de MATLAB

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.

Page 46: Apostila de MATLAB

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

Page 47: Apostila de MATLAB

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

Page 48: Apostila de MATLAB

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

Page 49: Apostila de MATLAB

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).

Page 50: Apostila de MATLAB

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

Page 51: Apostila de MATLAB

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

Page 52: Apostila de MATLAB

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.

Page 53: Apostila de MATLAB

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

Page 54: Apostila de MATLAB

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.

Page 55: Apostila de MATLAB

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:

Page 56: Apostila de MATLAB

56

Outro exemplo:

Page 57: Apostila de MATLAB

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

Page 58: Apostila de MATLAB

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)

Page 59: Apostila de MATLAB

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

Page 60: Apostila de MATLAB

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

Page 61: Apostila de MATLAB

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

Page 62: Apostila de MATLAB

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

Page 63: Apostila de MATLAB

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

Page 64: Apostila de MATLAB

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

Page 65: Apostila de MATLAB

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)

Page 66: Apostila de MATLAB

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)

Page 67: Apostila de MATLAB

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

Page 68: Apostila de MATLAB

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:

Page 69: Apostila de MATLAB

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

Page 70: Apostila de MATLAB

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

Page 71: Apostila de MATLAB

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

Page 72: Apostila de MATLAB

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 é:

Page 73: Apostila de MATLAB

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)

Page 74: Apostila de MATLAB

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

Page 75: Apostila de MATLAB

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.

Page 76: Apostila de MATLAB

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.

Page 77: Apostila de MATLAB

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”.

Page 78: Apostila de MATLAB

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:

Page 79: Apostila de MATLAB

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.

Page 80: Apostila de MATLAB

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

Page 81: Apostila de MATLAB

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

Page 82: Apostila de MATLAB

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

Page 83: Apostila de MATLAB

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

Page 84: Apostila de MATLAB

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)

Page 85: Apostila de MATLAB

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

Page 86: Apostila de MATLAB

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.

Page 87: Apostila de MATLAB

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:

Page 88: Apostila de MATLAB

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:

Page 89: Apostila de MATLAB

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

Page 90: Apostila de MATLAB

90

Deve-se selecionar o compensador. Veja a Figura 39 para fazer

corretamente :

Figura 39

Page 91: Apostila de MATLAB

91

Passo 2:

Verificar Optimization options. Verifique o layout e os campos destacados

na Figura 40:

Figura 40

Page 92: Apostila de MATLAB

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:

Page 93: Apostila de MATLAB

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:

Page 94: Apostila de MATLAB

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.

Page 95: Apostila de MATLAB

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)

Page 96: Apostila de MATLAB

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

Page 97: Apostila de MATLAB

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

Page 98: Apostila de MATLAB

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

Page 99: Apostila de MATLAB

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

Page 100: Apostila de MATLAB

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

Page 101: Apostila de MATLAB

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')

Page 102: Apostila de MATLAB

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.

Page 103: Apostila de MATLAB

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.

Page 104: Apostila de MATLAB

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.

Page 105: Apostila de MATLAB

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

Page 106: Apostila de MATLAB

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.

Page 107: Apostila de MATLAB

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)

Page 108: Apostila de MATLAB

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.

Page 109: Apostila de MATLAB

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')

Page 110: Apostila de MATLAB

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)

Page 111: Apostila de MATLAB

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

Page 112: Apostila de MATLAB

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.

Page 113: Apostila de MATLAB

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.

Page 114: Apostila de MATLAB

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.

Page 115: Apostila de MATLAB

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.

Page 116: Apostila de MATLAB

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

Page 117: Apostila de MATLAB

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.

Page 118: Apostila de MATLAB

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.

Page 119: Apostila de MATLAB

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

Page 120: Apostila de MATLAB

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:

Page 121: Apostila de MATLAB

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.

Page 122: Apostila de MATLAB

122

Figura 56

Figura 57

Figura 58

Page 123: Apostila de MATLAB

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

Page 124: Apostila de MATLAB

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 `+`.

Page 125: Apostila de MATLAB

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.

Page 126: Apostila de MATLAB

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

Page 127: Apostila de MATLAB

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')

Page 128: Apostila de MATLAB

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`.

Page 129: Apostila de MATLAB

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

Page 130: Apostila de MATLAB

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.

Page 131: Apostila de MATLAB

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

Page 132: Apostila de MATLAB

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)

Page 133: Apostila de MATLAB

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:

Page 134: Apostila de MATLAB

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

Page 135: Apostila de MATLAB

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

Page 136: Apostila de MATLAB

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.

Page 137: Apostila de MATLAB

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.

Page 138: Apostila de MATLAB

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.

Page 139: Apostila de MATLAB

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:

Page 140: Apostila de MATLAB

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:

Page 141: Apostila de MATLAB

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

Page 142: Apostila de MATLAB

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:

Page 143: Apostila de MATLAB

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.

Page 144: Apostila de MATLAB

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.

Page 145: Apostila de MATLAB

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

Page 146: Apostila de MATLAB

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.

Page 147: Apostila de MATLAB

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

Page 148: Apostila de MATLAB

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.

Page 149: Apostila de MATLAB

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.

Page 150: Apostila de 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

Page 151: Apostila de MATLAB

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.

Page 152: Apostila de MATLAB

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.

Page 153: Apostila de MATLAB

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/.

Page 154: Apostila de MATLAB

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;

Page 155: Apostila de MATLAB

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.

Page 156: Apostila de MATLAB

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

Page 157: Apostila de MATLAB

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');

Page 158: Apostila de MATLAB

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)

Page 159: Apostila de MATLAB

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%;

Page 160: Apostila de MATLAB

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')

Page 161: Apostila de MATLAB

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.

Page 162: Apostila de MATLAB

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')

Page 163: Apostila de MATLAB

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.

Page 164: Apostila de MATLAB

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

Page 165: Apostila de MATLAB

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’)

Page 166: Apostila de MATLAB

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

Page 167: Apostila de MATLAB

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

Page 168: Apostila de MATLAB

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)

Page 169: Apostila de MATLAB

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)

Page 170: Apostila de MATLAB

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.

Page 171: Apostila de MATLAB

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:

Page 172: Apostila de MATLAB

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

Page 173: Apostila de MATLAB

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:

Page 174: Apostila de MATLAB

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;

Page 175: Apostila de MATLAB

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.

Page 176: Apostila de MATLAB

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)

Page 177: Apostila de MATLAB

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

Page 178: Apostila de MATLAB

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’);

Page 179: Apostila de MATLAB

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

Page 180: Apostila de MATLAB

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

Page 181: Apostila de MATLAB

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.

Page 182: Apostila de MATLAB

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;

Page 183: Apostila de MATLAB

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);

Page 184: Apostila de MATLAB

184

[x3,T] = step(sys_cl,12);

stairs(T,x3)

xlabel('Time (seconds)')

ylabel('Velocity (rad/s)')

title('Stairstep Response:with PID controller')

Page 185: Apostila de MATLAB

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

Page 186: Apostila de MATLAB

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

Page 187: Apostila de MATLAB

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

Page 188: Apostila de MATLAB

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