octave
Octave – Sistema de transferência Malha fechada

No vídeo anterior, apresentamos uma pequena apresentação de um sistema de malha aberta.

Agora iremos apresentar um exemplo de malha fechada.

Conforme o wiki:

“Também chamado de controle retroativo (realimentação ou feedback) necessita de informações da saída do controlador através de elementos sensores ou transdutores, compara o sinal da saída com o set-point(referência) e corrige a saída caso a mesma esteja desviando-se dos parâmetros programados.”

O vídeo de treinamento deste material pode ser visto aqui.

Primeiramente, temos que carregar a função control, através do comando:

 pkg load control

Em seguida criamos o num01 e den01, da planta.

Em seguida criamos o num02 e den02 da função de controle.

Por fim atribuimos a função de feedback, através da união de ambas as funções:

sys01= feedback(tf01,tf02);

Lembrando que a função feedback , aceita mais um parâmetro, que é o sinal de realimentação.

“Se sign for omitido ou definido como +1, indica que o sinal de realimentação é positivo (realimentação negativa). Se sign for definido como -1, indica realimentação positiva.”

%Apresentação do sistema de malha fechada

pkg load control

%Sistema de transferencia da planta.
num01 = [1];
den01 = [1,2,10];

%tf01 - Sistema da Planta
%tf01=tf([1],[1,2,10])
tf01=tf(num01,den01);

num02=[2];
den02=[1];
% Função de controle
tf02=tf(num02,den02);

% Construir o sistema de malha fechada
sys01= feedback(tf01,tf02);

disp(sys01);

step(sys01);

xlabel('tempo');
ylabel('saida v');
title('Sistema malha fechada');

Resultado da função de malha fechada

octave
Octave – Função de transferência

Pelo wiki: “Função de transferência é a representação matemática da relação entre a entrada e a saída de um sistema físico.”

Desta forma podemos simular equipamentos físicos através de funções matemáticas, simulando seus resultados.

De forma geral existem 2 tipo de simulação.

Sistema Malha Abertos – São sistemas que apresentam apenas uma entrada – > Com sua respectiva saída.

Já um sistema de malha fechada, possui feedback, sendo definido pela wiki como:

“Também chamado de controle retroativo (realimentação ou feedback) necessita de informações da saída do controlador através de elementos sensores ou transdutores, compara o sinal da saída com o set-point(referência) e corrige a saída caso a mesma esteja desviando-se dos parâmetros programados.”

Entendendo como funciona o sistema de malha aberta no OCTAVE:

Para entender o sistema de malha aberta , com uso da função de transferência, montei este vídeo para voces.

Podemos inicialmente verificar, que faz-se necessário o uso da lib control, pois o octave precisa desta lib para utilizar o sistema de transferencia.

Para isso usamos o comando:

pkg load control

Em seguida precisamos criar a função de transferência atribuindo o numerador num01 e denominador den01. Em criando a função de transferência, que será utilizada para injetar os valores de entrada.

Logo atribuimos a função tf(num,den) criando a variavel S01, que armazena a função de transferencia.

Agora por fim, atuaremos passando os valores de entrada, através do t, e plotando no gráfico, conforme a função step.

O resultado final fica conforme apresentado a seguir:

% Carrega o pacote da função de transferencia.
pkg load control

%      1
%  -------------
%   S^2 +2S + 10

% num01
% den01

%num01= [0,0,1];
num01 = [1];

den01= [1,2,10];

% Cria a funçao de transferencia
S01= tf(num01,den01);

disp(S01);

%Atribui um vetor de tempo
t= 0:0.1:10;



%Resposta ao degrau da função de transferencia
step(S01,t);

xlabel('Tempo');
ylabel('Saida (v)');
title('Resposta da Função de transferencia');
octave
Octave – Primeiro contato

Comentário

o Comentário é o % seguido do texto.

Conforme o exemplo:

% Isso é um comentário

Declaração de variável

x = 14;
resultado = x + 2;
resultado2 = x ^2 ;
resultado3 = (x ^2)/ (x*2)

As variáveis podem ser declaradas livremente no octave, conforme apresentado no código acima.

Trabalhando com vetor

Trabalhar com vetor é tão simples como manipular variáveis, para isso, basta declarar os elementos entre chaves [ ]

vt = [10,20,30]

resultado4 = vt*2;

vt2 = [1,2,3]
resultado5 = vt + vt2;

resultado6 = vt .* vt2;
disp(resultado6);
printf("O Resultado: %d",resultado6);

Podemos ver, no exemplo acima, que temos a variável vt, que tem 3 elementos, 10,20 e 30, armazenados.

Desta forma sempre que falarmos em vt, estaremos trabalhando com os valores [10,20,30]. Até que este seja modificado.

Ao declarar resultado4, fazemos a operação matemática de multiplicação por 2, ficando [20,40,60 como resultado na variável resultado4.

Comparando valores

Agora iremos usar o valor armazenado na variável para tomar uma decisão. Para isso usamos o comando if, conforme nosso exemplo.

x = 14;

printf("\n\n");
if (x == 12)
  printf("O valor bateu\n");
else
  printf("O valor nao bateu\n");
end;

printf("\n\n");
if (x < 12)
  printf("O valor é menor que 12\n");
else
  printf("O valor é maior ou igual a 12\n");
end;

Neste exemplo testamos o valor de x, verificando se este atende a condição onde == é valor igual ao definido, < (menor que o definido).

Atendendo o primeiro print será mostrado. Caso contrário, ele mostrará o print atribuído após o else.

O Else pode ser omitido, não tendo então exceção. Apenas condição de atendimento ao teste if.

Mathlab octave
Alternativa para o Mathlab


O Octave é uma linguagem de programação de alto nível e um ambiente de desenvolvimento numérico, projetado para realizar cálculos numéricos e análises científicas. Ele fornece uma interface fácil de usar para a manipulação de matrizes, implementação de algoritmos, criação de gráficos e solução de problemas numéricos em geral.

Características do Octave:

  1. Linguagem de programação: O Octave possui uma linguagem de programação própria, que permite aos usuários escreverem scripts e programas para realizar operações numéricas, implementar algoritmos e automatizar tarefas.
  2. Matrizes e cálculos numéricos: O Octave é especialmente adequado para trabalhar com matrizes e realizar cálculos numéricos. Ele suporta operações matriciais, álgebra linear, manipulação de vetores e escalares, além de funções matemáticas avançadas.
  3. Funções embutidas: O Octave possui uma ampla gama de funções embutidas para realizar cálculos matemáticos, estatísticos, trigonométricos, lógicos e outros tipos de operações numéricas.
  4. Gráficos e visualização: O Octave oferece recursos para criar gráficos e visualizar dados. Ele suporta plotagem de gráficos 2D e 3D, diagramas de dispersão, histogramas e outras formas de visualização de dados.
  5. Extensibilidade: O Octave permite estender sua funcionalidade por meio de pacotes e bibliotecas. Existem diversos pacotes disponíveis que fornecem recursos adicionais para áreas específicas, como processamento de sinais, controle, otimização, entre outros.
  6. Código aberto: O Octave é um software de código aberto, o que significa que o seu código-fonte está disponível gratuitamente para acesso, modificação e distribuição. Isso permite que a comunidade contribua para o seu desenvolvimento e oferece flexibilidade aos usuários.

Em resumo, o Octave é uma ferramenta poderosa para realizar cálculos numéricos, análises científicas e implementação de algoritmos, sendo uma alternativa popular ao MATLAB.

Ele é amplamente utilizado por pesquisadores, engenheiros, cientistas e estudantes em diversas áreas acadêmicas e industriais.

Baixando o Octave

O Octave pode ser baixado através do seguinte site:

https://octave.org/download

Baixe o arquivo octave para a plataforma alvo, conforme figura abaixo:

Exemplo comparativo

Octave código

Fonte do projeto:

pkg load control

Kp = 36;
Kd = 0.2 * Kp;

num4 = [0 0 5];
den4 = [1 4.42 4];
Gp4 = tf(num4, den4);

PD = Kp + Kd * Gp4;
Gp5 = PD * Gp4;

num10 = [0 3.6 80];
den10 = [1 4.42 4];
G10 = tf(num10, den10);

G_fechado = feedback(G10, 1);

% Traçar o diagrama de Bode do sistema em malha fechada
bode(G_fechado);
grid on;

% Traçar o passo de resposta ao impulso do sistema em malha fechada
step(G_fechado);
grid on;

Mathlab

Neste fragmento, podemos notar as semelhanças entre os códigos:

Agora iremos ver o código do projeto.

num1=[005];
den1=[1,4.42,4];
Gp= tf(num1,den1);
ft1 = feedback(Gp,1);
step(ft1);


num2=[36];
den2=[1];
Gp2= tf(num2,den2);

Gp3 = series(Gp,Gp2);
ft2 = feedback(Gp3,1);
step(ft2);

%% 
%% 

Kp = 36;
Kd= 0,2 * Kp;


num4=[005];
den4=[1,4.42,4];
Gp4= tf(num4,den4);


%PD = Kp+ Kd * Gp4b ;
%Gp5 = PD * Gp4;

num10=[0,3.6,80];
den10=[1,4.42,4];
G10= tf(num10,den10);
G_fechado= feedback(G10,1);

% G_fechado = feedback(Gp5,1);

step(G_fechado)
%% 
s=tf('s');
num6=[1];
den6=[1,2];
uGp6=tf(num6,den6);

num7=[1];
den7=[1,2];
mGp7=tf(num7,den7);

G8=series(uGp6,mGp7);
ft9=feedback(G8,1);
impulse(ft9);
 %%
 %%
 s=tf('s');
num6=[1];
a=200;
den6=[1,a];
uGp6=tf(num6,den6);

num7=[1];
den7=[1,2];
mGp7=tf(num7,den7);

G8=series(uGp6,mGp7);
G9= Kp*G8;
ft9=feedback(G9,1);
impulse(ft9);

maurinsoft.com.br