Artigo: Controlador PID (Proporcional-Integral-Derivativo) - Parte 3 - Simulando PID no Scilab

Dando continuidade aos artigos anteriores (Parte-1 e Parte-2). Vamos mostrar como simular o PID no Scilab. O Scilab é um software científico para computação numérica semelhante ao Matlab que fornece um poderoso ambiente computacional aberto para aplicações científicas.

Primeiramente baixe o Scilab, clicando aqui. Instale e abra-o. Agora baixe o exemplo PID disponível neste link. Extraia o arquivo .zip em uma pasta de sua escolha.

Abra o Scilab e vá em "Aplicativos/Xcos". Irá abrir uma nova janela como a figura abaixo:

Nesta janela, clique em Arquivo/Abrir arquivo. E abra o arquivo "automatic_test.xcos". Irá abrir o diagrama abaixo:

A função do sistema está no bloco num(s)/den(s), clique duas vezes em cima deste bloco para ver ou colocar a função.

Agora vá para o Scilab e clique em Arquivo/Abrir arquivo. Selecione o arquivo "test_automatic.sce". Abaixo está a programação:

clear;

loadScicosLibs();

importXcosDiagram('/home/dalton-ldg/Downloads/scilab/PID/automatic_test.xcos');

w0 = 2*%pi*100;
m = 0.5;
K0 = 0.1;

///////////////////////
// Optimization loop //
///////////////////////

MaxEvalFunc = 10;
Pfact = 1;
Ifact = 1;
h_step = 1e-3; // the delta used to compute finite difference derivative
x0 = [1;5]; // Initial parameters
// P is proportionnal to Pfact
// I is proportionnal to Ifact
Lower = [0.01;0.01];
Upper = [1000; 100];

global Iter;
Iter = 0;

// Definition of the objective function

function y = f_pid(x)
global Iter;
%scicos_context.w0 = w0;
%scicos_context.m = m;
%scicos_context.K0 = K0;
%scicos_context.P = x(1)*Pfact;
%scicos_context.I = x(2)*Ifact;
Iter = Iter + 1;
Info = scicos_simulate(scs_m,list(),%scicos_context,flag='nw');
y_error = mean(abs((block_output('values')(:,1) - block_output('values')(:,2))));
y_diff = mean(abs(diff(block_output('values')(:,2))));
y = 0.5*y_error + 0.5*1*y_diff; ...
printf('Evaluation %d - P = %f I = %f y = %f (y_error = %f, y_diff = %f)\n',Iter,x(1),x(2),y,y_error,y_diff);
endfunction

// Definition of the optim wrapper for the objective function

// Using 'derivative' for computing partial derivatives

function [f,df,ind] = my_optim_pid(x,ind)
f = f_pid(x);
df = derivative(f_pid,x,h=h_step,order=4);
endfunction

// The error is a weighted sum beetwen the error and the derivative (the noise produced by the signal)

// Initial simulation for setting up everything (Info for example)

%scicos_context = [];
%scicos_context.w0 = w0;
%scicos_context.m = m;
%scicos_context.K0 = K0;
%scicos_context.P = Pfact*x0(1);
%scicos_context.I = Ifact*x0(2);

Info = scicos_simulate(scs_m,list(),%scicos_context);

Clique em executar e você verá primeiramente a figura abaixo:

A figura acima mostra o sistema com PID. A linha verde é a entrada e a linha preta é a saída.

Mudando a constante Pfact para 100 na programação a saída será muito parecida com a entrada como mostra a figura abaixo:

Portanto, podemos ver que mudando as constantes Pfact, Ifact e h_step ( variável do PD) mudamos a saída.

Pronto! Agora você sabe como simular um sistema com PID no Scilab. Caso esteja utilizando o Matlab, na internet você encontra vários lugares mostrando os códigos para simular no Matlab.

No Arduino existe a biblioteca AutotunePID para determinar as constantes para a biblioteca PID do Arduino. Para sistemas que exijam um controle mais preciso, PID é um ótimo controlador e pode ser implementado utilizando as bibliotecas PID e AutotunePID.

E é isso! Esperamos que tenha gostado! Caso tenha dúvidas, poste aqui neste blog ou neste link! Para sugestões de tutoriais, clique aqui! para ver outros tutoriais e projetos desenvolvidos pela equipe LdG e por outros garagistas, clique aqui e aqui, respectivamente! Até a próxima!

Referências:

http://www.scilab.org/

http://wiki.scilab.org/Xcos/Examples/PID

Exibições: 8317

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de Sergio Massao em 16 outubro 2018 às 15:15

Eu não consegui abrir PID.ZIP. diz esta corrompido.

Alguem conseguiu? 

Comentário de Rodrigo Paes em 10 agosto 2012 às 18:43

Cara, magnifico, mas e se minha função não for a padrão tem como adapta-la ? 

© 2021   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço