Esta simulação aborda o projeto de controle para um inversor trifásico, empregando uma estrutura de malha fechada baseada em controladores PI, com o objetivo de mitigar o acoplamento entre os eixos d e q no sistema de coordenadas rotativo. A implementação é realizada no ambiente MATLAB/Simulink.
Um passo fundamental é a transformação de coordenadas, que converte as correntes trifásicas do sistema estático (abc) para o sistema rotativo (dq). O código a seguir exemplifica essa transformação, alterando variáveis e adicionando clareza nos cálculos:
function [corrente_d, corrente_q] = transformar_abc_para_dq(ia, ib, ic, angulo)
% Componentes no referencial estático (alfa-beta)
alfa = (2/3) * (ia - 0.5*ib - 0.5*ic);
beta = (2/3) * ((sqrt(3)/2)*ib - (sqrt(3)/2)*ic);
% Projeção no referencial síncrono (d-q)
corrente_d = alfa * cos(angulo) + beta * sin(angulo);
corrente_q = -alfa * sin(angulo) + beta * cos(angulo);
end
O controlador PI é implementado com um mecanismo de anti-windup para evitar saturação do integrador. A estrutura da classe segue:
classdef ControladorPI
properties
ganho_proporcional = 0.5;
ganho_integral = 20;
periodo_amostragem = 1e-5;
saida_maxima = 100;
integrador = 0;
end
methods
function saida = calcular(obj, erro)
% Atualização condicional do integrador
if abs(obj.integrador) < obj.saida_maxima
obj.integrador = obj.integrador + obj.ganho_integral * erro * obj.periodo_amostragem;
end
saida = obj.ganho_proporcional * erro + obj.integrador;
% Limitação da saída
saida = max(min(saida, obj.saida_maxima), -obj.saida_maxima);
end
end
end
Para desacoplar os eixos d e q, são adicionados termos compensatórios baseados na velocidade angular e indutâncias do motor. O código utiliza um filtro passa-baixa para suavizar a leitura da velocidade:
function [tensao_d, tensao_q] = aplicar_desacoplamento(id, iq, velocidade_angular, indutancia_d, indutancia_q)
persistent velocidade_anterior;
if isempty(velocidade_anterior)
velocidade_anterior = velocidade_angular;
end
% Filtragem da velocidade angular
velocidade_filtrada = 0.2 * velocidade_angular + 0.8 * velocidade_anterior;
% Cálculo das tensões de compensação
vd_desacoplado = -velocidade_filtrada * indutancia_q * iq;
vq_desacoplado = velocidade_filtrada * indutancia_d * id;
velocidade_anterior = velocidade_filtrada;
tensao_d = vd_desacoplado;
tensao_q = vq_desacoplado;
end
Na geração de sinais PWM, é crucial incluir a compensação do tempo morto para evitar curto-circuitos nos semicondutores. A função abaixo implementa essa correção digital:
function [saida_a, saida_b, saida_c] = compensar_tempo_morto(ua, ub, uc, tempo_morto_ns, frequencia_chaveamento)
% Conversão do tempo morto para unidades normalizadas
dt_normalizado = tempo_morto_ns * 1e-9 * frequencia_chaveamento * 1e3;
saida_a = ua - sign(ua) * dt_normalizado;
saida_b = ub - sign(ub) * dt_normalizado;
saida_c = uc - sign(uc) * dt_normalizado;
end
Ao executar a simulação no Simulink, recomenda-se pré-carregar o valor enicial do integrador do PI no regime permanante para reduzir oscilações na partida. A análise espectral via powergui permite avaliar a distorção harmônica total (THD), que deve ser inferoir a 2% em condições adequadas.