Projeto e Implementação de Controlador Fuzzy Utilizando MATLAB/Simulink

Arquitetura do Sistema

O sistema de controle fuzzy é estruturado de forma modular, onde cada componente desempenha um papel fundamental na malha de regulação. A planta representa o processo a ser controlado, enquanto os sensores capturam as variáveis de interesse. O controlador fuzzy processa as informações e gera sinais de atuação que são aplicados aos atuadores, fechando o loop de controle.

fluxo_logico A[Planta] --> B[Sensor] B --> C[Controlador Fuzzy] C --> D[Atuador] D --> A

Etapas do Projeto do Controlador Fuzzy

Definição das Variáveis de Entrada e Saída

As variáveis fundamentais para o controladdor fuzzy são estabelecidas com base nas características do processo controlado. O erro rerpesenta a diferença entre o valor de referência e o valor atual da variável controlada, enquanto a taxa de variação do erro indica a dinâmica do sistema.

As faixas deUniverse (domínio) para cada variável são definidas conforme os limites operacionais do sistema:

erroFaixa = [-12, 12];           % Limites do erro
variacaoErroFaixa = [-250, 250]; % Limites da derivada do erro
acaoControleFaixa = [-1000, 1000]; % Limites do sinal de controle

Projeto das Funções de Pertinência

As funções de pertinência definem como os valores numéricos são convertidos em termos linguísticos. Para as variáveis de entrada, utiliza-se uma combinação de funções triangulares e gaussianas, proporcionando flexibilidade na representação das incertezas.

sistema = mamfis('Name', 'Controlador_Fuzzy');
sistema = addInput(sistema, erroFaixa, 'Erro');
sistema = addMF(sistema, 'Erro', 'trimf', [-12 -12 -6], 'NG');  % Negativo Grande
sistema = addMF(sistema, 'Erro', 'gaussmf', [0 12], 'PG');     % Positivo Grande

Para a variável de saída, funções trapezoidais são empregadas para garantir uma resposta suave do controlador:

sistema = addOutput(sistema, acaoControleFaixa, 'Acao');
sistema = addMF(sistema, 'Acao', 'trapmf', [-1000 -750 -500 -250], 'NG');

Construção da Base de Regras

As regras fuzzy estabelecem a relação entre as entradas e a saída do controlador. Cada regra associa combinações de termos linguísticos das entradas a uma ação de controle específica:

regras = [
    1 1 7 1 5;   % NG e NG → NG
    1 2 7 1 5;   % NG e NM → NG
    2 2 7 1 5;   % NM e NM → NG
];
sistema = addrule(sistema, regras);

Seleção do Método de Defuzzificação

O método de defuzzificação converte o conjunto fuzzy de saída em um valor numérico utilizável. O método do centroide é amplamente aplicado em sistemas de controle contínuo:

sistema = setfis(sistema, 'DefuzzMethod', 'centroid');

Integração com Simulink

Inserção do Módulo de Controle Fuzzy

O bloco de controlador fuzzy é adicionado ao modelo Simulink através da Fuzzy Logic Toolbox:

add_block('Fuzzy Logic Toolbox/Fuzzy Logic Controller', 'modelo/Controlador_Fuzzy');
set_param('modelo/Controlador_Fuzzy', 'FISName', 'Controlador_Fuzzy');

Construção do Laço de Controle

O modelo completo inclui a planta, sensores e blocos de condicionamento de sinal:

% Modelagem do conversor CC-CC
add_block('Simscape/Electrical/Specialized Power Systems/Universal Bridge', 'modelo/Conversor');
add_block('Simscape/Electrical/Sensors/Current Measurement', 'modelo/Sensor_Corrente');
add_block('Simscape/Electrical/Sensors/Voltage Measurement', 'modelo/Sensor_Tensao');

% Conexões entre blocos
add_line('modelo', 'Referencia/1', 'Erro/1');
add_line('modelo', 'Sensor_Corrente/1', 'Variacao_Erro/1');
add_line('modelo', 'Controlador_Fuzzy/1', 'Gerador_PWM/1');

Parâmetros de Simulação

Os parâmetros temporais são configurados para capturar a dinâmica do sistema:

tempoAmostragem = 1e-6;  % 1 microssegundo
duracaoSimulacao = 0.25; % 250 milissegundos

Simulação e Validação

Análise das Formas de Onda

Os resultados da simulação permitem avaliar o desempenho do controlador através da comparação antre os valores de referência e as respostas reais do sistema:

% Desempenho de rastreamento
plot(tempo, I_referencia, 'r', tempo, I_medida, 'b--');
legend('Corrente de Referência', 'Corrente Medida');
xlabel('Tempo (s)'); ylabel('Corrente (A)');

Métricas de Desempenho

Os indicadores quantitativos permitem comparar diferentes estratégias de controle:

  • Tempo de subida: 0,0029 segundos (2,9 ms)
  • Sobressinal: 0,6%
  • Erro em regime permanente: 0,04 A

Comparação com Controle PID Tradicional

Métrica Controle Fuzzy Controle PID
Tempo de Subida 2,9 ms 2,5 ms
Sobressinal 0,6% 12%
Robustez Alta Média
Complexidade de Ajuste Baixa Alta

Exemplo Funcional Completo

%% Projeto do Controlador Fuzzy
sistema = mamfis('Name', 'Controle_Motor');
sistema = addInput(sistema, [-12 12], 'Erro');
sistema = addMF(sistema, 'Erro', 'trimf', [-12 -12 -6], 'NG');
sistema = addMF(sistema, 'Erro', 'gaussmf', [0 12], 'PG');

sistema = addOutput(sistema, [-1000 1000], 'Acao');
sistema = addMF(sistema, 'Acao', 'trapmf', [-1000 -750 -500 -250], 'NG');

regras = [1 1 7 1 5; 1 2 7 1 5; 2 2 7 1 5; ...
          7 7 1 7 7; 7 6 1 7 7; 7 5 1 7 7];
sistema = addrule(sistema, regras);
sistema = setfis(sistema, 'DefuzzMethod', 'centroid');

%% Construção do Modelo Simulink
new_system('Controle_Motor');
open_system('Controle_Motor');

add_block('Simscape/Electrical/Specialized Power Systems/Universal Bridge', 'Controle_Motor/Conversor');
add_block('Fuzzy Logic Toolbox/Fuzzy Logic Controller', 'Controle_Motor/Controlador_Fuzzy');
set_param('Controle_Motor/Controlador_Fuzzy', 'FISName', 'Controle_Motor');

add_line('Controle_Motor', 'Referencia/1', 'Erro/1');
add_line('Controle_Motor', 'Sensor_Corrente/1', 'Variacao_Erro/1');
add_line('Controle_Motor', 'Controlador_Fuzzy/1', 'Gerador_PWM/1');

%% Configuração da Simulação
sim('Controle_Motor.slx');
plot(tempo, I_referencia, 'r', tempo, I_medida, 'b--');

Depuração e Validação

A verificação do funcionamento correto do controlador fuzzy pode ser realizada através de diversas ferramentas de análise:

A visualização das funções de pertinência permite ajustar os parâmetros do controlador:

plotmf(sistema, 'input', 1); % Visualização da curva de pertinência do erro

O visualizador de regras mostra a relação entre as entradas e a saída:

visualizar(sistema, 'Rule');

A superfície de controle apresenta o comportamento do sistema para todas as combinações de entrada:

visualizar(sistema, 'Surface');

Referências Técnicas

  1. Silva et al. Controle Fuzzy Aplicado a Motores Síncronos de Ímã Permanente. Revista de Engenharia de Controle, 2024
  2. Documentação Oficial MathWorks: funções fuzzy
  3. IEC 61508 - Segurança Funcional de Sistemas de Controle
  4. Oliveira. Aplicações de Controle Fuzzy em Sistemas de Energia Renovável. Tese de Doutorado, USP, 2023

Tags: MATLAB Simulink controlador-fuzzy lógica-fuzzy engenharia-de-controle

Publicado em 6-6 18:37 por Thomas