Simulação do motor de indução trifásico por meio da transformação dq0 no Simulink
- Publicado em MATLAB
Este trabalho é um estudo referente à modelagem de um motor de indução trifásico com rotor em gaiola, potência nominal de 215HP, por meio da transformação dq0 aplicada aos eixos de referência estacionário, fixo e síncrono com partida sem carga e posterior aplicação de torque no eixo da máquina. O modelo foi simulado nos softwares Mathworks Simulink e MATLAB por meio de sub-sistemas e programação orientada a objetos.
Introdução
Este trabalho utilizou a transformação dq0 para simulação da dinâmica de um motor trifásico de 215HP, sem perdas mecânicas, com partida sem carga para análise das variáveis da máquina, assim como as mesmas após a transformação dq0. Analisaremos o torque dinâmico da máquina e sua comparação em regime permanente.
A transformação dq0 consiste em uma outra forma de representação das grandezas elétricas tensão, corrente e fluxo concatenado em um eixo de referência arbitrário com o objetivo de viabilizar a modelagem dinâmica da máquina. A transformação dq0 é assim definida para as grandezas correlacionados ao estator:
, onde:
Sendo:
Nas equações acima, refere-se à posição do eixo de referência arbitrário e a velocidade angular do eixo de referência arbitrário, as quais não devem ser confundidas com a velocidade e posição angular do rotor em si ou a velocidade angular síncrona do campo magnético girante. Para as grandezas do rotor, temos as seguintes matrizes de transformação:
Sendo:
As equações no sistema dq0 utilizadas durante as simulações decorrem das notas de aula e krause2013 e não serão aqui reproduzidas. Ressaltamos ainda que os gráficos referentes às grandezas 0 (zero) não serão exibidos pois sabe-se que em condições balanceadas, tais componentes são zero.
Neste texto, todas os parâmetros do rotor já se encontram expressos referidos às bobinas do estator, motivo pelo qual elas são escritas com um apóstrofe, e todas as grandezas foram normalizadas para pu (potência de base igual à potência nominal e tensão de base igual à tensão de pico nominal de fase da máquina).
Modelagem da máquina de indução trifásica
Para fins de maior integridade dos dados, organização e extensibilidade, o código-fonte anexos de controle dos dados da simulação foi desenvolvimento por meio da programação orientada a objetos, com a classe MIT responsável pelo encapsulamento dos dados da simulação, para posterior execução do modelo mit_dq0 do Simulink.
O modelo mit_dq0 anexo foi desenvolvido com a utilização de diversos subsistemas para maior profissionalismo do código-fonte. Destaca-se que o toque de carga é controlado pela entidade "Torque Carga", que é um diagrama de estados que permite configurar qualquer tipo de variação do toque da carga ao longo do tempo.
No modelo do simulink, os subsistemas em cinza refere-se às equações de , em azul claro às correntes do estator , em verde as equações referentes à e , em vermelho as equações de , em laranja as equações de e em rosa as equações correlacionadas ao torque elétrico e velocidade angular do rotor. Os demais blocos são auxiliares e destinam-se às transformadas em si ou exportação de dados para o workspace do MATLAB.
Em relação ao sistema, destaca-se que as componentes (zero) da transformada de fato não estão associadas com o eixo de referência arbitrário e demais componentes q e d uma vez que não há a entradas de variáveis de estado , ou nos subsistemas correlacionados à essa componente no modelo, conforme a teoria estudada.
Por fim, destacamos que todo o sistema é simulado em grandezas pu e as grandezas reais são devidamente convertidas por meio do código-fonte em MATLAB. Todos os eixos de referência usualmente empregados serão simulados: para (eixo de referência estacionário ou no estator), (eixo de referência no rotor) e (eixo de referência no campo magnético girante ou velocidade síncrona).
Simulação da partida sem carga (variáveis da máquina)
Correntes no estator
Na simulação da máquina de indução trifásica, obtemos o gráfico da figura abaixo, o qual demonstra que a corrente de partida é cerca de 10 (dez) vezes a sua corrente nominal durante cerca de 300 ms após a energização da máquina sem carga:
Conforme figura acima, percebe-se que além do período de energização com corrente elevada de 10 pu, temos um período subtransitório na qual a corrente é ainda mais elevada, mas decresce para a corrente de partida em apenas um ciclo elétrico. Após o período transitório, as correntes no estator tendem a um valor menor, mas não nulo, devido à resistência e reatância de dispersão das bobinas do estator e à reatância de magnetização.
Correntes no rotor refletidas
De maneira similar às correntes das bobinas do estator, a corrente induzida no rotor (valores de correntes refletidas ao estator), a mesma também é cerca de 10 (dez) vezes a sua corrente nominal durante a partida da máquina e tendem a 0 (zero) em regime permanente sem carga:
Todavia, de maneira diferente das correntes nas bobinas do estator, conforme figura acima, há uma redução na frequência das correntes no rotor de maneira proporcional à velocidade do rotor, em relação à síncrona, de acordo com a equação abaixo (também constatável nas componentes qd das transformações com eixo de referência no rotor):
Conforme observaremos a seguir, o período de cerca de 300 ms supramencionado é justamente o tempo dispendido para que o rotor se aproxime da sua velocidade nominal.
Torque elétrico desenvolvido e velocidade do rotor
Por se tratar de uma máquina de 4 polos acionada por uma fonte de tensão com frequência nominal de 50 Hz, sabemos que a velocidade síncrona é de 1500 rpm (rotações por minuto). Portanto, considerando-se que o modelo adotado despreza quaisquer atritos ou perdas mecânicas e não temos ainda aplicação de carga no eixo da máquina, esperamos que a velocidade do rotor praticamente se iguale à essa velocidade síncrona.
O torque elétrico em pu desenvolvido pela máquina foi calculado pela expressão seguinte (o torque elétrico de base difere do torque elétrico nominal da máquina pois consideramos a potência de base igual à potência nominal da máquina, desconsiderando-se que a potência nominal de motores de indução trifásicos são estabelecidos na velocidade nominal, que é menor do que a síncrona, conforme livro de máquinas do Krause (2013):
Por meio dessa expressão, obtemos o gráfico da figura abaixo, que por sua vez independe da velocidade angular do eixo de referência da transformação dq0.
Conforme o gráfico da figura acima, visualizamos que o torque elétrico desenvolvido é oscilatório durante a partida e após a obtenção de uma velocidade próxima à síncrona, o mesmo apresenta um amortecimento oscilatório que converge à zero uma vez que a simulação despreza as perdas mecânicas e ainda não temos a aplicação de nenhuma carga no eixo da máquina. Ou seja, esse torque desenvolvido visa meramente para superar a inércia do rotor desse motor, que inicialmente se encontrava parado.
Conforme o gráfico da figura acima, visualizamos que o rotor atinge até mesmo um valor superior à velocidade síncrona temporariamente e depois converge de maneira oscilatória até a mesma (simulação sem carga), que nesse gráfico consiste na imagem de um vertedouro na velocidade final.
Tempo de aceleração do rotor
Conforme supracitado, constatamos que o tempo de aceleração do rotor em gaiola de esquilo deste motor é de cerca de 300 ms, conforme gráfico da figura abaixo, a partir do qual podemos visualizar que a velocidade nominal é próxima à síncrona:
Ainda, conforme o gráfico abaixo, de maneira intuitiva, o tempo de aceleração do rotor varia proporcionalmente com a inércia do rotor:
Simulação da partida sem carga (eixo de referência estacionário = 0)
Variáveis d no estator
Após a tansformação dq0 com eixo de referência estacionário (eixo fixo no estator), obtemos as seguintes tensões e correntes d no estator:
Variáveis q no estator
Por se tratar de um sistema trifásico simétrico, obtemos as seguintes tensões e correntes q senoidais e de mesma amplitude do que o gráfico anterior:
A diferença primária entre as variáveis q e d nessas simulações é o fato das mesmas estarem defasas em noventa graus no tempo.
Correntes dq induzidas no rotor
Ainda para o eixo estacionário, obtemos as seguintes correntes dq induzidas no rotor, cujas grandezas foram refletidas ao estator na figura abaixo, sendo que o módulo da corrente do rotor durante a partida será discutido posteriormente.
Novamente constatamos que, por se tratar de um motor simétrico, as componentes q e d possuem o mesmo módulo e forma em regime permanente, sendo as mesmas defasadas em noventa graus.
Como o eixo de referência encontra-se fixo no estator, as correntes do rotor tendem a uma constante, que no caso sem carga e perdas mecânicas, é zero.
Torque elétrico desenvolvido e velocidade do rotor
Ressaltamos que a equação do torque elétrico, referente ao cálculo do torque elétrico a partir das componentes d e q, continua válida para o eixo de referência estacionário na transformação dq0, motivo pelo qual o gráfico da figura abaixo é idêntico ao da figura 5:
Em relação à velocidade do rotor, observamos ainda a oscilação do mesmo nos instantes iniciais e outro transitório oscilatório amortecido após o rotor ultrapassar a velocidade síncrona após o instante de 350 ms devido às oscilações no torque elétrico desenvolvido.
Por fim, como o torque elétrico praticamente para de oscilar no período entre 250ms e 350ms (intervalo de 100ms), constata-se que o rotor acelerou de 50% até 100% da velocidade síncrona em apenas 100ms, enquanto o mesmo dispensou 250ms para acelerar apenas até metade da velocidade final.
Simulação da partida sem carga (eixo de referência no rotor )
Variáveis d no estator
Após a tansformação dq0 no eixo de referência no rotor, obtemos as seguintes tensões e correntes d no estator. Desta vez, como o eixo de referência encontra-se no rotor, as variáveis do estator que variam de frequência conforme disposto na figura 9.
Variáveis q no estator
Ainda, obtemos as seguintes tensões e correntes q no estator, que possuem as mesmas características em relação às componentes d supramencionadas no caso de um sistema simétrico:
Correntes dq induzidas no rotor
Após a tansformação dq0, obtemos as seguintes correntes dq induzidas no rotor, cujas grandezas foram refletidas ao estator. No caso da simulação com o eixo de referência no rotor, constata-se variação de frequência nas variáveis do rotor, conforme fenômeno já explanado:
Torque elétrico desenvolvido e velocidade do rotor
Ressaltamos que a equação do torque elétrico, referente ao cálculo do torque elétrico a partir das componentes d e q, continua válida para o eixo de referência empregado na transformação dq0, motivo pelo qual o gráfico da figura abaixo é idêntico ao da figura 5:
Simulação da partida sem carga (eixo de referência síncrono )
Variáveis d no estator
Após a tansformação dq0 com eixo de referência síncrono, obtemos as seguintes tensões e correntes d no estator. Desta vez, qualquer componente dq correspondente a uma variável com frequência igual à síncrona tenderá a uma constante.
Variáveis q no estator
Ainda, obtemos as seguintes tensões e correntes q no estator:
Os resultados coadunam-se com a teoria da transformação dq0 uma vez que as componentes q e d são constantes em regime permanente (e não senoidais como nos demais casos) para o caso em que o eixo de referência estiver na velocidade síncrona.
Correntes dq induzidas no rotor
Da mesma maneira, obtemos as seguintes correntes dq induzidas no rotor, cujas grandezas foram refletidas ao estator:
Torque elétrico desenvolvido e velocidade do rotor
Ressaltamos que a equação do torque elétrico, referente ao cálculo do torque elétrico a partir das componentes d e q, continua válida para o eixo de referência empregado na transformação dq0, motivo pelo qual o gráfico da figura abaixo é idêntico ao da figura 5:
Influências da variação das reatâncias de magnetização e dispersão e resistências do rotor e estator no torque e tempo de aceleração do motor
A seguir, apresentamos sucintamente as consequências da variação de parâmetros correlacionados ao design da máquina como as reatâncias , , e da resistência do rotor :
Acréscimo de 100% no valor da reatância de magnetização
Conforme figura a seguir, não houve variação no torque elétrico em função da alteração do valor da reatância de magnetização para o dobro do seu valor original, tampouco no tempo de aceleração do motor:
Portanto, teoricamente, poderíamos reduzir a corrente do estator com o acréscimo de , sem alterações na performance da máquina em relação ao torque elétrico.
Acréscimo de 20% no valor das reatâncias de dispersão e simultaneamente
Conforme figura a seguir, com o acréscimo de apenas 20% no valor das reatâncias de dispersão no rotor e estator (simultaneamente) houve redução significativa no torque elétrico, quase dobrando o tempo de aceleração do rotor:
Portanto, em relação ao torque elétrico desenvolvido, devemos reduzir o valor das reatâncias de dispersão para seus menores valores possíveis, o que é obtido principalmente pela redução da distância do entreferro entre o estator e rotor.
Acréscimo de 100% no valor da resistência do estator
Conforme figura a seguir, houve redução significativa no torque elétrico em função da alteração do valor da resistência do estator para o dobro do seu valor original, aumentando-se o tempo de aceleração do motor:
Destaca-se que a corrente no estator, fornecida diretamente pela fonte de tensão, varia proporcionalmente ao valor da resistência do estator em regime permanente. Portanto, o dimensionamento desse parâmetro da máquina é um compromisso entre torque elétrico, corrente em regime permanente e estrutura mecânica do estator.
Acréscimo de 100% no valor da resistência do rotor
Conforme figura a seguir, houve acréscimo significativo no torque elétrico em função da alteração do valor da resistência do rotor para o dobro do seu valor original, reduzindo-se o tempo de aceleração do motor:
Além do aumento do torque elétrico gerado em função do acréscimo na resistência do rotor, destaca-se que comparando-se a figura abaixo com a figura 29, essa variação também eleva o escorregamento da máquina, reduzindo a eficiência energética da mesma uma vez que :
Simulação da partida sem carga e acréscimo de 100% de torque nominal (eixo de referência síncrono )
Nas simulações anteriores, não houve aplicação de carga no motor, exceto no gráfico da figura 23. Nesta seção, investigaremos o efeito da aplicação de 100% da carga nominal em degrau após a obtenção do regime permanente (cerca de 800 ms).
No modelo empregado no Simulink, utilizamos um diagrama de estados do Stateflow, denominado "Torque Carga", com o qual podemos simular qualquer configuração de torque da carga dinamicamente.
Os gráficos a seguir demonstram que há novas oscilações amortecidas após a aplicação da carga em degrau e que as componentes dq das correntes no rotor não mais tendem a zero e sim a uma constante, assim como as componentes dq da corrente do estator que tende a uma constante maior do que o estado em regime sem carga.
Variáveis d no estator
Variáveis q no estator
Correntes induzidas no rotor
Torque elétrico e velocidade do rotor
Conforme supracitado, o torque mecânico é aplicado em degrau no instante 800ms e resulta no desenvolvimento dinâmico de torque elétrico, conforme figura abaixo:
Conforme o gráfico disposto na figura acima, houve uma oscilação exponencialmente amortecida após a aplicação do torque nominal. Destaca-se que a mesma tem amplitude bem menor do que a oscilação transitória inicial.
Na figura abaixo, a curva em azul representa o torque dinâmico e a em vermelho o torque em regime permanente. Constate-se que no início da partida, a curva em vermelho representa o valor médio do torque dinâmico oscilatório amortecido e que próximo à velocidade síncrona, os vértices convergem para o ponto da curva de torque em regime permanente de escorregamento correspondente.
Na figura acima, destacamos a região compreendida entre torque nulo e o nominal e a velocidade nominal até a síncrona, com a sobreposição do gráfico de torque elétrico em regime permanente. Na curva em azul é possível perceber claramente a convergência inicial para o estado de torque nominal nulo e velocidade síncrona (condição final antes da aplicação da carga nominal) e após alguns instantes, a convergência para o estado de torque e velocidade nominais com escorregamento não-nulo. Os vértices decorrem exatamente da natureza oscilatória amortecida do torque para a máquina em análise.
Questionamentos
Questão 01) Por que o valor eficaz da corrente do motor na partida é elevado, mesmo considerando a partida em vazio?
A corrente do motor de indução trifásico na partida é elevado, com ou sem carga inicial, pois a impedância de entrada equivalente com o rotor em baixa velocidade ou parado é essencialmente as componentes , e em série ( no circuito equivalente constante no livro fitzgerald2013), as quais possuem valores baixos, uma vez que a tensão induzida é diretamente proporcional à velocidade (na transformação dq, essa tensão induzida equivale a e ).
Questão 02) Por que a curva de torque em função do tempo tem caráter oscilatório nos instantes iniciais da partida?
O motor de indução trifásico apresenta torque pulsante durante a energização, com frequência modulante igual à da fonte, devido ao transitório elétrico nas bobinas do rotor e do estator. A maior parcela desse torque pulsante é devido ao transitório elétrico do estator, o que pode ser constatado no gráfico da figura abaixo, que demonstra a variação transitória dos fluxos magnéticos durante a partida:
O envelope da corrente do período transitório também varia e é devido à interação transitória entre o campo magnético produzido pelo estator e o rotor.
Ressalta-se que exatamente pelo fato do torque transitório médio ser próximo da curva de torque em regime permanente, a utilização deste produz resultados satisfatórios na maioria dos casos, conforme induction_handbook.
Questão 03) Uma variação de 10% no torque de carga corresponde a uma variação de 10% nas amplitudes das correntes de estator?
Na simulação da figura abaixo, houve a aplicação de 110% do torque de carga no instante t = 1s, cuja máquina já estava em regime permanente com 100% de torque de carga nominal. Constata-se que a corrente do estator também aumenta em 10% uma vez que o torque elétrico produzido precisa elevar-se em 10% também, o qual por sua vez é proporcional ao módulo da corrente do estator ( e ):
Questão 04) De que forma seria possível considerar a saturação do circuito magnético no modelo descrito no eixo de referência arbitrário?
Para a simulação da saturação do circuito magnético, bastaria alterar a expressão de e do modelo no Simulink de maneira a subtrair as expressões e , respectivamente, nas quais a função representa a saturação do material magnético (considerada igual para q e d uma vez que o rotor não é saliente), obviamente reduzindo o fluxo resultante.
Questão 05) De que maneira a inclusão de perdas por atrito e ventilação alteraria as curvas de partida de torque, corrente e velocidade em função do tempo?
As perdas por atrito e ventilação variam como cubo da velocidade de rotação da máquina e, por isso, não haveria alterações significativas nessas curvas durante a partida da máquina, instantes nos quais a velocidade do rotor é pequena.
Código-fonte do software desenvolvido no Mathworks Simulink 2014
Código-fonte do software desenvolvido no Mathworks MATLAB 2014
classdef MIT < handle %MIT Simulação de um MIT % Detailed explanation goes here %% Constantes properties (Constant = true) % Fatores de Conversão FATOR_HP_W = 746; % Fator de conversão entre HP e watt % Formatação Gráficos LIM_Y_IS = [-2 2]; % Eixo Y, variáveis da máquina LIM_Y_IDQ0_PU = [-2 2]; % Eixo Y, variáveis de corrente dq0 LIM_Y_VDQ0_PU = [-1.2 1.2]; % Eixo Y, variáveis de tensão dq0 TORQUE_PU = [0 2]; % Eixo Y, variáveis de corrente dq0 VELOCIDADE_LIM = [1450 1550]; end %% Propriedades properties Tensao_pico; % Tensão de pico aplicado no estator Frequencia_eletrica_angular; % Frequência elétrica no estator Numero_polos; % Número de Polos do MIT Potencia_MIT_HP; % Potência Nominal do MIT em HP %% Parâmetros de Base Potencia_base; % Potência de base Frequencia_base; % Frequência de Base Tensao_base_abc; % Tensão de base ABC Tensao_base_qd0; % Tensão de base qd0 Impedancia_base_abc; % Impedância de Base ABC Impedancia_base_qd0; % Impedância de Base ABC Rs; % Resistência da bobina Xm; % Reatância de Magnetização Xls; % Reatância de Dispersão %% Parâmetros Inércia J; % Momento de Inércia H; % Constante de Inércia normalizado Rr_linha; % Resistência do rotor refletida Xlr_linha; % Reatância de dispersão do rotor refletida Xaq; % Reatância inv (1/Xm + 1/Xls + 1/Xlr') Xad; % Reatância inv (1/Xm + 1/Xls + 1/Xlr') % Eixo de Referência EixoReferencia; % Estabelece o eixo de referência dinamicamente %% Resultados Resultado_Te_wr_rpm; % Resultados de torque e velocidade do rotor em RPM Resultado_ir_linha_abc; % Corrente do rotor refletida (variáveis da máquina) Resultado_ir_linha_qd0 % Corrente do rotor refletida (transformada dq0) Resultado_is_abc; % Correntes do estator abc Resultado_is_qd0; % Correntes do estator dq0 Resultado_vs_abc; % Tensões da fonte abc Resultado_vs_qd0; % Tensões da fonte dq0 %Gráficos INICIO_SIM; % Início da plotagem dos gráficos (eixo x) TEMPO_SIM; % Tempo total de simulação X_TICK; % Posicionamento dos ticks no eixo x end %% Métodos methods % Construtor Padrão com os dados do trabalho function obj = MIT() obj.setFrequenciaNominal_Hz(50); % estabelece a frequência aplica de 50Hz obj.setNumeroPolos(4) % máquina de 4 polos obj.setPotenciaMIT_HP(215); % potência de 215HP obj.setTensaoBaseLL(400); % tensão de linha de 400V obj.setMomentoInercia_kg_m2(2.9); % momento de inércia J em kg/m² obj.setRs_Ohm(0.01379); % resistências das bobinas do estator em ohms obj.setXm_Ohm(2.4159); % reatância de magnetização em ohms obj.setXls_Ohm(0.0478); % reatância de dispersão do estator em ohms obj.setRr_linha_Ohm(0.007728); % resistência refletida do rotor em ohms obj.setXlr_linha_Ohm(0.0478); % reatância de dispersão do rotor refletida em ohms obj.calcularXas(); end %% Carrega os parâmetros do exemplo da pág. 20 function carregarDadosExemplo(obj) %% testar simulação com dados do exemplo obj.Numero_polos = 6; obj.Frequencia_eletrica_angular = 2 * pi * 60; obj.Frequencia_base = obj.Frequencia_eletrica_angular; obj.Tensao_pico = 127*sqrt(2); obj.Tensao_base_abc = 127*sqrt(2); obj.Rs = 0.0453; obj.Xm = 2.042; obj.Xls = 0.0775; obj.H = 0.5; obj.Rr_linha = 0.0222; obj.Xlr_linha = 0.0322; obj.calcularXas(); end %% Carrega os parâmetros do exemplo da pág. 20 function carregarDadosKrause(obj) %% testar simulação com dados do exemplo obj.setFrequenciaNominal_Hz(60); % estabelece a frequência aplica de 50Hz obj.setNumeroPolos(4) % máquina de 4 polos obj.setPotenciaMIT_HP(3); % potência de 215HP obj.setTensaoBaseLL(220); % tensão de linha de 400V obj.setMomentoInercia_kg_m2(0.089); % momento de inércia J em kg/m² obj.setRs_Ohm(0.435); % resistências das bobinas do estator em ohms obj.setXm_Ohm(26.13); % reatância de magnetização em ohms obj.setXls_Ohm(0.754); % reatância de dispersão do estator em ohms obj.setRr_linha_Ohm(0.816); % resistências das bobinas refletidas do rotor em ohms obj.setXlr_linha_Ohm(0.754); % reatância de dispersão do rotor refletida em ohms obj.calcularXas(); end % Calcula Xas a partir de Xm, Xls e Xlr_linha já definidos function calcularXas(obj) obj.Xaq = (1/obj.Xm + 1/obj.Xls + 1/obj.Xlr_linha)^-1; obj.Xad = obj.Xaq; end % Estabelece momento de inércia do rotor function setMomentoInercia_kg_m2(obj, inercia) obj.J = inercia; obj.H = 0.5*(2/obj.Numero_polos)^2*(obj.Frequencia_base^2/obj.Potencia_base)*obj.J; end % Estabelece a reatância de dispersão do rotor em ohms function setXlr_linha_Ohm(obj, reatancia_ohm) obj.Xlr_linha = reatancia_ohm/obj.getImpedanciaBaseABC(); end % Estabelece resistência da bobina do rotor refletida function setRr_linha_Ohm(obj, resistencia_ohm) obj.Rr_linha = resistencia_ohm/obj.getImpedanciaBaseABC(); end % Estabelece a reatância de dispersão do estator function setXls_Ohm(obj, reatancia_ohm) obj.Xls = reatancia_ohm/obj.getImpedanciaBaseABC(); end % Estabelece a reatância de magnetização function setXm_Ohm(obj, reatancia_ohm) obj.Xm = reatancia_ohm/obj.getImpedanciaBaseABC(); end % Estabelece a resistência da bobina do estator function setRs_Ohm(obj, resistencia_ohm) obj.Rs = resistencia_ohm/obj.getImpedanciaBaseABC(); end % Estabelece a tensão de base em função da tensão de linha function setTensaoBaseLL(obj,tensao_LL) tensao_LN = tensao_LL/sqrt(3); obj.Tensao_base_abc = tensao_LN; % rms obj.Tensao_base_qd0 = obj.Tensao_base_abc*sqrt(2); % pico obj.Tensao_pico = tensao_LN*sqrt(2); end % Estabelece a frequência nominal da fonte function setFrequenciaNominal_Hz(obj, freq_Hz) obj.Frequencia_eletrica_angular = 2 * pi * freq_Hz; obj.Frequencia_base = obj.Frequencia_eletrica_angular; end % Estabelece número de polos da máquina function setNumeroPolos(obj, num_polos) obj.Numero_polos = num_polos; end % Retorna a impedância de base ABC function impedancia = getImpedanciaBaseABC(obj) obj.Impedancia_base_abc = 3*obj.Tensao_base_abc^2/obj.Potencia_base; impedancia = obj.Impedancia_base_abc; end % Retorna a impedância de base dq0 function impedancia = getImpedanciaBaseQD0(obj) obj.Tensao_base_qd0 = sqrt(2)*obj.Tensao_base_abc; obj.Impedancia_base_qd0 = (3/2)*obj.Tensao_base_qd0^2/obj.Potencia_base; impedancia = obj.Impedancia_base_qd0; end % Estabelece a potência trifásica do MIT em HP function setPotenciaMIT_HP(obj, potencia_HP) obj.Potencia_MIT_HP = potencia_HP; obj.Potencia_base = potencia_HP * obj.FATOR_HP_W; end % Exporta as variáveis para o workspace base para torná-las % acessíveis ao Simulink function exportarVariaveisWorkspace(obj) assignin('base','Xls',obj.Xls); assignin('base','Tensao_pico',obj.Tensao_pico); assignin('base','Frequencia_eletrica_angular',obj.Frequencia_eletrica_angular); assignin('base','Numero_polos',obj.Numero_polos); assignin('base','Potencia_base',obj.Potencia_base); assignin('base','Frequencia_base',obj.Frequencia_base); assignin('base','Tensao_base_abc',obj.Tensao_base_abc); assignin('base','Tensao_base_qd0',obj.Tensao_base_qd0); assignin('base','Impedancia_base_abc',obj.Impedancia_base_abc); assignin('base','Rs',obj.Rs); assignin('base','Xm',obj.Xm); assignin('base','Xls',obj.Xls); assignin('base','H',obj.H); assignin('base','Frequencia_base',obj.Frequencia_base); assignin('base','Rr_linha',obj.Rr_linha); assignin('base','Xlr_linha',obj.Xlr_linha); assignin('base','Xaq',obj.Xaq); assignin('base','Xad',obj.Xad); assignin('base','EixoReferencia',obj.EixoReferencia); end % Exporta as variáveis atuais para o workspace padrão, % executa a simulação no Simulink e depois obtém os resultados. function executarSimulink(obj) obj.exportarVariaveisWorkspace(); sim('mit_dq0'); obj.Resultado_Te_wr_rpm = Te_wr_rpm; obj.Resultado_ir_linha_abc = ir_linha_abc; obj.Resultado_ir_linha_qd0 = ir_linha_qd0; obj.Resultado_is_abc = is_abc; obj.Resultado_is_qd0 = is_qd0; obj.Resultado_vs_abc = vs_abc; obj.Resultado_vs_qd0 = vs_qd0; end % Fixa o eixo de referência da transformada como o do estator % (estacionário) function simularEixoReferenciaEstacionario(obj) obj.EixoReferencia = 1; % 1 para w = 0, 2 para w = wr e 3 para w = we obj.executarSimulink(); end % Fixa o eixo de referência da transformada como o do rotor % (velocidade do rotor) function simularEixoReferenciaRotor(obj) obj.EixoReferencia = 2; % 1 para w = 0, 2 para w = wr e 3 para w = we obj.executarSimulink(); end % Fixa o eixo de referência da transformada como o síncrono % (velocidade síncrona) function simularEixoReferenciaSincrono(obj) obj.EixoReferencia = 3; % 1 para w = 0, 2 para w = wr e 3 para w = we obj.executarSimulink(); end % Gera os gráficos para as correntes no estator (variáveis da % máquina) function h = gerarGraficos_Is(obj) %% Gráfico vas [pu] subplot(4,1,1); h_plot(1) = plot(obj.Resultado_vs_abc.Time,obj.Resultado_vs_abc.Data(1,:),'LineWidth',1); xlabel(''); ylabel('V_{as} (pu)', 'FontSize',11); xlim([obj.INICIO_SIM obj.TEMPO_SIM]); set(gca,'XTick',obj.X_TICK); grid on; %% Gráfico ias [pu] subplot(4,1,2); h_plot(2) = plot(obj.Resultado_is_abc.Time,obj.Resultado_is_abc.Data(:,1),'LineWidth',1); xlabel(''); ylabel('I_{as} (pu)', 'FontSize',11); xlim([obj.INICIO_SIM obj.TEMPO_SIM]); ylim(obj.LIM_Y_IS); set(gca,'XTick',obj.X_TICK); %title(''); grid on; %% Gráfico ibs [pu] subplot(4,1,3); h_plot(3) = plot(obj.Resultado_is_abc.Time,obj.Resultado_is_abc.Data(:,2),'LineWidth',1); xlabel(''); ylabel('I_{bs} (pu)', 'FontSize',11); xlim([obj.INICIO_SIM obj.TEMPO_SIM]); ylim(obj.LIM_Y_IS); set(gca,'XTick',obj.X_TICK); %title(''); grid on; %% Gráfico ics [pu] subplot(4,1,4); h_plot(4) = plot(obj.Resultado_is_abc.Time,obj.Resultado_is_abc.Data(:,3),'LineWidth',1); xlabel('tempo (s)', 'FontSize',11); ylabel('I_{cs} (pu)', 'FontSize',11); xlim([obj.INICIO_SIM obj.TEMPO_SIM]); ylim(obj.LIM_Y_IS); set(gca,'XTick',obj.X_TICK); %title(''); grid on; set(gcf,'Color','white'); h = h_plot; end % Gera os gráficos para as correntes no rotor (variáveis da % máquina) function h = gerarGraficos_Ir(obj) %% Gráfico vas [pu] subplot(4,1,1); h_plot(1) = plot(obj.Resultado_vs_abc.Time,obj.Resultado_vs_abc.Data(1,:),'LineWidth',1); xlabel(''); ylabel('V_{as} (pu)', 'FontSize',11); xlim([obj.INICIO_SIM obj.TEMPO_SIM]); set(gca,'XTick',obj.X_TICK); grid on; %% Gráfico i'ar [pu] subplot(4,1,2); h_plot(2) = plot(obj.Resultado_ir_linha_abc.Time,obj.Resultado_ir_linha_abc.Data(:,1),'LineWidth',1); xlabel(''); ylabel('I''_{ar} (pu)', 'FontSize',11); xlim([obj.INICIO_SIM obj.TEMPO_SIM]); ylim(obj.LIM_Y_IDQ0_PU); set(gca,'XTick',obj.X_TICK); %title(''); grid on; %% Gráfico i'br [pu] subplot(4,1,3); h_plot(3) = plot(obj.Resultado_ir_linha_abc.Time,obj.Resultado_ir_linha_abc.Data(:,2),'LineWidth',1); xlabel(''); ylabel('I''_{br} (pu)', 'FontSize',11); xlim([obj.INICIO_SIM obj.TEMPO_SIM]); ylim(obj.LIM_Y_IDQ0_PU); set(gca,'XTick',obj.X_TICK); %title(''); grid on; %% Gráfico i'cr [pu] subplot(4,1,4); h_plot(4) = plot(obj.Resultado_ir_linha_abc.Time,obj.Resultado_ir_linha_abc.Data(:,3),'LineWidth',1); xlabel('tempo (s)', 'FontSize',11); ylabel('I''_{cr} (pu)', 'FontSize',11); xlim([obj.INICIO_SIM obj.TEMPO_SIM]); ylim(obj.LIM_Y_IDQ0_PU); set(gca,'XTick',obj.X_TICK); %title(''); grid on; set(gcf,'Color','white'); h = h_plot; end % Gera os gráficos de torque e velocidade do rotor function h = gerarGraficos_Te_Vel_R(obj) %% Gráfico Te [pu] hold on; subplot(2,1,1); h_plot(1) = plot(obj.Resultado_Te_wr_rpm.Time,obj.Resultado_Te_wr_rpm.Data(:,1),'LineWidth',1); xlabel(''); ylabel('T_E (pu)', 'FontSize',11); xlim([obj.INICIO_SIM obj.TEMPO_SIM]); ylim(obj.TORQUE_PU); set(gca,'XTick',obj.X_TICK); %title(''); grid on; %% Gráfico wr/wb% hold on;% subplot(3,1,2);% h_plot(2) = plot(obj.Resultado_Te_wr_rpm.Time,obj.Resultado_Te_wr_rpm.Data(:,2),'LineWidth',1);% xlabel('');% ylabel('\omega_r/\omega_b', 'FontSize',11);% xlim([obj.INICIO_SIM obj.TEMPO_SIM]);% ylim([0 1.2]);% set(gca,'XTick',obj.X_TICK);% %title('');% grid on; %% Gráfico RPM [pu] hold on; subplot(2,1,2); h_plot(2) = plot(obj.Resultado_Te_wr_rpm.Time,obj.Resultado_Te_wr_rpm.Data(:,3),'LineWidth',1); xlabel('tempo (s)', 'FontSize',11); ylabel('Vel. [rpm]', 'FontSize',11); xlim([obj.INICIO_SIM obj.TEMPO_SIM]); ylim(obj.VELOCIDADE_LIM); set(gca,'XTick',obj.X_TICK); grid on; set(gcf,'Color','white'); h = h_plot; end % Gera os gráficos de Te versus tempo function h = gerarGraficos_Te_versus_Tempo(obj) %% Gráfico Te [pu] h_plot(1) = plot(obj.Resultado_Te_wr_rpm.Time,obj.Resultado_Te_wr_rpm.Data(:,1),'LineWidth',1); xlabel('tempo (s)'); ylabel('T_E (pu)', 'FontSize',11); xlim([obj.INICIO_SIM obj.TEMPO_SIM]); ylim(obj.TORQUE_PU); set(gca,'XTick',obj.X_TICK); grid on; set(gcf,'Color','white'); h = h_plot; end % Gera o gráfico de torque elétrico versus velocidade base function h = gerarGraficos_Te_vel_base(obj) %% Gráfico Te [pu] h_plot(1) = plot(obj.Resultado_Te_wr_rpm.Data(:,2),obj.Resultado_Te_wr_rpm.Data(:,1),'LineWidth',1); xlabel('\omega_r/\omega_b', 'FontSize',11); ylabel('T_E (pu)', 'FontSize',11); %title('Torque elétrico (pu) versus \omega_r/\omega_b','FontSize',14); xlim([0 1.1]); %set(gca,'XTick',obj.X_TICK); grid on; set(gcf,'Color','white'); h = h_plot; end % Gera o gráfico de torque elétrico versus velocidade em RPM function h = gerarGraficos_Te_vel_rpm(obj) %% Gráfico Te [pu] h_plot(1) = plot(obj.Resultado_Te_wr_rpm.Data(:,3),obj.Resultado_Te_wr_rpm.Data(:,1),'LineWidth',1); xlabel('Velocidade (rpm)', 'FontSize',11); ylabel('T_E (pu)', 'FontSize',11); %title('Torque elétrico (pu) versus velocidade em RPM','FontSize',14); %xlim([obj.INICIO_SIM 1.2]); %set(gca,'XTick',obj.X_TICK.*3600); grid on; set(gcf,'Color','white'); h = h_plot; end function h = gerarGraficos_Vas_Vqs_Iqs(obj) %% Gráfico vas [pu] subplot(3,1,1); h_plot(1) = plot(obj.Resultado_vs_abc.Time,obj.Resultado_vs_abc.Data(1,:),'LineWidth',1); xlabel(''); ylabel('V_{as} (pu)', 'FontSize',11); xlim([obj.INICIO_SIM obj.TEMPO_SIM]); set(gca,'XTick',obj.X_TICK); grid on; %% Gráfico vqs [pu] subplot(3,1,2); h_plot(2) = plot(obj.Resultado_vs_qd0.Time,obj.Resultado_vs_qd0.Data(1,:),'LineWidth',1); xlabel(''); ylabel('V_{qs} (pu)', 'FontSize',11); xlim([obj.INICIO_SIM obj.TEMPO_SIM]); ylim(obj.LIM_Y_VDQ0_PU); set(gca,'XTick',obj.X_TICK); %title(''); grid on; %% Gráfico iqs [pu] subplot(3,1,3); h_plot(3) = plot(obj.Resultado_is_qd0.Time,obj.Resultado_is_qd0.Data(:,1),'LineWidth',1); xlabel('tempo (s)', 'FontSize',11); ylabel('I_{qs} (pu)', 'FontSize',11); xlim([obj.INICIO_SIM obj.TEMPO_SIM]); ylim(obj.LIM_Y_IDQ0_PU); set(gca,'XTick',obj.X_TICK); %title(''); grid on; set(gcf,'Color','white'); h = h_plot; end function h = gerarGraficos_Vas_Vds_Ids(obj) %% Gráfico vas [pu] subplot(3,1,1); h_plot(1) = plot(obj.Resultado_vs_abc.Time,obj.Resultado_vs_abc.Data(1,:),'LineWidth',1); xlabel(''); ylabel('V_{as} (pu)', 'FontSize',11); xlim([obj.INICIO_SIM obj.TEMPO_SIM]); set(gca,'XTick',obj.X_TICK); grid on; %% Gráfico vds [pu] subplot(3,1,2); h_plot(2) = plot(obj.Resultado_vs_qd0.Time,obj.Resultado_vs_qd0.Data(2,:),'LineWidth',1); xlabel(''); ylabel('V_{ds} (pu)', 'FontSize',11); xlim([obj.INICIO_SIM obj.TEMPO_SIM]); ylim(obj.LIM_Y_VDQ0_PU); set(gca,'XTick',obj.X_TICK); %title(''); grid on; %% Gráfico iqs [pu] subplot(3,1,3); h_plot(3) = plot(obj.Resultado_is_qd0.Time,obj.Resultado_is_qd0.Data(:,2),'LineWidth',1); xlabel('tempo (s)', 'FontSize',11); ylabel('I_{ds} (pu)', 'FontSize',11); xlim([obj.INICIO_SIM obj.TEMPO_SIM]); ylim(obj.LIM_Y_IDQ0_PU); set(gca,'XTick',obj.X_TICK); %title(''); grid on; set(gcf,'Color','white'); h = h_plot; end function h = gerarGraficos_Vas_Iqr_Idr(obj) %% Gráfico vas [pu] subplot(3,1,1); h_plot(1) = plot(obj.Resultado_vs_abc.Time,obj.Resultado_vs_abc.Data(1,:),'LineWidth',1); xlabel(''); ylabel('V_{as} (pu)', 'FontSize',11); xlim([obj.INICIO_SIM obj.TEMPO_SIM]); set(gca,'XTick',obj.X_TICK); grid on; %% Gráfico Iqr [pu] subplot(3,1,2); h_plot(2) = plot(obj.Resultado_ir_linha_qd0.Time,obj.Resultado_ir_linha_qd0.Data(:,1),'LineWidth',1); xlabel(''); ylabel('I_{qr} (pu)', 'FontSize',11); xlim([obj.INICIO_SIM obj.TEMPO_SIM]); ylim(obj.LIM_Y_IDQ0_PU); set(gca,'XTick',obj.X_TICK); %title(''); grid on; %% Gráfico Idr [pu] subplot(3,1,3); h_plot(3) = plot(obj.Resultado_ir_linha_qd0.Time,obj.Resultado_ir_linha_qd0.Data(:,2),'LineWidth',1); xlabel('tempo (s)', 'FontSize',11); ylabel('I_{dr} (pu)', 'FontSize',11); xlim([obj.INICIO_SIM obj.TEMPO_SIM]); ylim(obj.LIM_Y_IDQ0_PU); set(gca,'XTick',obj.X_TICK); %title(''); grid on; set(gcf,'Color','white'); h = h_plot; end function gerarGraficos_VariaveisMaquina_Is(obj) obj.gerarGraficos_Is(); subplot(4,1,1); %title('Partida sem carga - Variáveis da Máquina (valores em pu)', 'FontSize',14); obj.salvarPlotAtual('VariaveisMaquina_Is'); end function gerarGraficos_VariaveisMaquina_Ir(obj) obj.gerarGraficos_Ir(); subplot(4,1,1); %title('Partida sem carga - Variáveis da Máquina (valores em pu)', 'FontSize',14); obj.salvarPlotAtual('VariaveisMaquina_Ir'); end function gerarGraficos_VariaveisMaquina_Te_versus_Tempo(obj) obj.gerarGraficos_Te_versus_Tempo(); %title('Partida sem carga - Variáveis da Máquina (valores em pu)', 'FontSize',14); obj.salvarPlotAtual('VariaveisMaquina_Te_versus_Tempo'); end function gerarGraficos_VariaveisMaquina_Te_Vel_R(obj) obj.gerarGraficos_Te_Vel_R(); subplot(2,1,1); %title('Partida sem carga - Variáveis da Máquina (valores em pu)', 'FontSize',14); obj.salvarPlotAtual('VariaveisMaquina_Te_Vel_R'); end function gerarGraficos_EixoEstacionario_Te_versus_Tempo(obj) obj.gerarGraficos_Te_versus_Tempo(); %title('Partida sem carga - Eixo Estacionário (valores em pu)', 'FontSize',14); obj.salvarPlotAtual('EixoEstacionario_Te_versus_Tempo'); end function gerarGraficos_EixoRotor_Te_versus_Tempo(obj) obj.gerarGraficos_Te_versus_Tempo(); %title('Partida sem carga - Eixo no Rotor (valores em pu)', 'FontSize',14); obj.salvarPlotAtual('EixoRotor_Te_versus_Tempo'); end function gerarGraficos_EixoSincrono_Te_versus_Tempo(obj) obj.gerarGraficos_Te_versus_Tempo(); %title('Partida sem carga - Eixo Síncrono (valores em pu)', 'FontSize',14); obj.salvarPlotAtual('EixoSincrono_Te_versus_Tempo'); end function gerarGraficos_EixoEstacionario_Te_Vel_R(obj) obj.gerarGraficos_Te_Vel_R(); subplot(2,1,1); %title('Partida sem carga - Eixo Estacionário (valores em pu)', 'FontSize',14); obj.salvarPlotAtual('EixoEstacionario_Te_Vel_R'); end function gerarGraficos_EixoRotor_Te_Vel_R(obj) obj.gerarGraficos_Te_Vel_R(); subplot(2,1,1); %title('Partida sem carga - Eixo Rotor (valores em pu)', 'FontSize',14); obj.salvarPlotAtual('EixoRotor_Te_Vel_R'); end function gerarGraficos_EixoSincrono_Te_Vel_R(obj) obj.gerarGraficos_Te_Vel_R(); subplot(2,1,1); %title('Partida sem carga - Eixo Síncrono (valores em pu)', 'FontSize',14); obj.salvarPlotAtual('EixoSincrono_Te_Vel_R'); end function gerarGraficos_VariaveisMaquina_Te_vel_base(obj) obj.gerarGraficos_Te_vel_base(); ylim([-3 4]); %title('Torque elétrico (pu) versus \omega_r/\omega_b','FontSize',14); obj.salvarPlotAtual('VariaveisMaquina_Te_vel_base'); end function gerarGraficos_VariaveisMaquina_Te_vel_rpm(obj) obj.gerarGraficos_Te_vel_rpm(); ylim([-3 4]); %title('Torque elétrico (pu) versus velocidade do rotor em RPM','FontSize',14); obj.salvarPlotAtual('VariaveisMaquina_Te_vel_rpm'); end function gerarGraficos_VariaveisMaquina_Te_vel_rpm_zoom(obj) obj.gerarGraficos_Te_vel_rpm(); %title('Torque elétrico (pu) versus velocidade do rotor em RPM','FontSize',14); hold on; obj.adicionarGrafico_Te_regime(); xlim([1400 1650]); ylim([-2.8 2.8]); legend('T_E dinâmico','T_E regime');%,'Location','North'); obj.salvarPlotAtual('VariaveisMaquina_Te_vel_rpm_regime_com_zoom'); end function gerarGraficos_VariaveisMaquina_Te_vel_rpm_regime(obj) obj.gerarGraficos_Te_vel_rpm(); hold on; obj.adicionarGrafico_Te_regime(); legend('T_E dinâmico','T_E regime','Location','North'); %title('Torque elétrico (pu) versus velocidade do rotor em RPM','FontSize',14); obj.salvarPlotAtual('VariaveisMaquina_Te_vel_rpm_regime2'); end function gerarGraficos_EixoEstacionario_Vas_Vqs_Iqs(obj) obj.gerarGraficos_Vas_Vqs_Iqs(); subplot(3,1,1); %title('Partida sem carga - Eixo Estacionário (valores em pu)', 'FontSize',14); obj.salvarPlotAtual('EixoEstacionario_Vas_Vqs_Iqs'); end function gerarGraficos_EixoEstacionario_Vas_Vds_Ids(obj) obj.gerarGraficos_Vas_Vds_Ids(); subplot(3,1,1); %title('Partida sem carga - Eixo Estacionário (valores em pu)', 'FontSize',14); obj.salvarPlotAtual('EixoEstacionario_Vas_Vds_Ids'); end function gerarGraficos_EixoEstacionario_Vas_Iqr_Idr(obj) obj.gerarGraficos_Vas_Iqr_Idr(); subplot(3,1,1); %title('Partida sem carga - Eixo Estacionário (valores em pu)', 'FontSize',14); obj.salvarPlotAtual('EixoEstacionario_Vas_Iqr_Idr'); end function gerarGraficos_EixoRotor_Vas_Vqs_Iqs(obj) obj.gerarGraficos_Vas_Vqs_Iqs(); subplot(3,1,1); %title('Partida sem carga - Eixo fixo no rotor (valores em pu)', 'FontSize',14); obj.salvarPlotAtual('EixoRotor_Vas_Vqs_Iqs'); end function gerarGraficos_EixoRotor_Vas_Vds_Ids(obj) obj.gerarGraficos_Vas_Vds_Ids(); subplot(3,1,1); %title('Partida sem carga - Eixo fixo no rotor (valores em pu)', 'FontSize',14); obj.salvarPlotAtual('EixoRotor_Vas_Vds_Ids'); end function gerarGraficos_EixoRotor_Vas_Iqr_Idr(obj) obj.gerarGraficos_Vas_Iqr_Idr(); subplot(3,1,1); %title('Partida sem carga - Eixo fixo no rotor (valores em pu)', 'FontSize',14); obj.salvarPlotAtual('EixoRotor_Vas_Iqr_Idr'); end function gerarGraficos_EixoSincrono_Vas_Vqs_Iqs(obj) obj.gerarGraficos_Vas_Vqs_Iqs(); subplot(3,1,1); %title('Partida sem carga - Eixo síncrono no rotor (valores em pu)', 'FontSize',14); subplot(3,1,2); obj.salvarPlotAtual('EixoSincrono_Vas_Vqs_Iqs'); end function gerarGraficos_EixoSincrono_Vas_Vds_Ids(obj) obj.gerarGraficos_Vas_Vds_Ids(); subplot(3,1,1); %title('Partida sem carga - Eixo síncrono no rotor (valores em pu)', 'FontSize',14); subplot(3,1,2); obj.salvarPlotAtual('EixoSincrono_Vas_Vds_Ids'); end function gerarGraficos_EixoSincrono_Vas_Iqr_Idr(obj) obj.gerarGraficos_Vas_Iqr_Idr(); subplot(3,1,1); %title('Partida sem carga - Eixo síncrono no rotor (valores em pu)', 'FontSize',14); obj.salvarPlotAtual('EixoSincrono_Vas_Iqr_Idr'); end % Salva o gráfico atual em um arquivo. function salvarPlotAtual(obj, nome_arquivo) pasta = 'graficos_com_carga\'; saveas(gca, [pasta nome_arquivo '.fig']); I = getframe(gcf); arqv = [pasta, nome_arquivo,'.png']; imwrite(I.cdata, arqv, 'Quality', '100', 'WriteMode','overwrite'); close; end function adicionarGrafico_Te_regime(obj) tensao_fonte_pu = 1; frequencia_eletrica_Hz = obj.Frequencia_eletrica_angular/(2*pi); Xrr=obj.Xlr_linha + obj.Xm; Xss=obj.Xls + obj.Xm; vel_sincrona = 120*frequencia_eletrica_Hz/obj.Numero_polos; frequencia_fonte = obj.Frequencia_eletrica_angular; freq_base = frequencia_fonte; %torque = zeros(vel_sincrona); %Ia = zeros(vel_sincrona); for velocidade_rotor=0:1:vel_sincrona escorregamento=(vel_sincrona-velocidade_rotor)/vel_sincrona; torque(velocidade_rotor+1) = (frequencia_fonte/freq_base)*(obj.Rr_linha/escorregamento)*(obj.Xm^2)*(tensao_fonte_pu^2)/ ... (((obj.Rr_linha*obj.Rs/escorregamento) + ((frequencia_fonte/freq_base)^2)*(obj.Xm^2 - Xss*Xrr))^2 + ... ((frequencia_fonte/freq_base)^2)*((obj.Rr_linha*Xss/escorregamento) + obj.Rs*Xrr)^2); end velocidade=0:1:vel_sincrona; hold on; plot(velocidade,torque,'r'); end function gerarGrafico_corrente_estator_regime(obj) tensao_fonte_pu = 1; frequencia_eletrica_Hz = obj.Frequencia_eletrica_angular/(2*pi); Xrr=obj.Xlr_linha + obj.Xm; Xss=obj.Xls + obj.Xm; vel_sincrona = 120*frequencia_eletrica_Hz/obj.Numero_polos; frequencia_fonte = obj.Frequencia_eletrica_angular; freq_base = frequencia_fonte; %torque = zeros(vel_sincrona); %Ia = zeros(vel_sincrona); for velocidade_rotor=0:1:vel_sincrona escorregamento=(vel_sincrona-velocidade_rotor)/vel_sincrona; corrente_estator(velocidade_rotor+1) = tensao_fonte_pu/abs(((obj.Rr_linha*obj.Rs/escorregamento) + ((frequencia_fonte/freq_base)^2)*(obj.Xm^2-Xss*Xrr) + ... j*(frequencia_fonte/freq_base)*(obj.Rr_linha*Xss/escorregamento)+obj.Rs*Xrr)/((obj.Rr_linha/escorregamento) + j*(frequencia_fonte/freq_base)*Xrr)); end velocidade=0:1:vel_sincrona; plot(velocidade,corrente_estator,'r'); ylabel('Is (s)'); xlabel('velocidade (rpm)'); set(gcf,'Color','white'); grid on; obj.salvarPlotAtual('VariaveisMaquina_corrente_estator_regime'); end %% Análise comparativa de variações de parâmetros % Análise da variação de Xm no torque elétrico function gerarGraficos_VariaveisMaquina_Te_vel_rpm_DobrarXm(obj) obj.gerarGraficos_Te_vel_rpm(); hold on; obj.Xm = obj.Xm*2; obj.simularEixoReferenciaEstacionario(); h = obj.gerarGraficos_Te_vel_rpm(); ylim([-3 4]); legend('Xm','2*Xm'); set(h,'Color','r') %title('Torque elétrico (pu) versus velocidade do rotor em RPM','FontSize',14); obj.salvarPlotAtual('VariaveisMaquina_Te_vel_rpm_DOBRO_Xm'); obj.Xm = obj.Xm/2; obj.simularEixoReferenciaEstacionario(); % Retornar estado anterior end % Análise da variação de Rs no torque elétrico function gerarGraficos_VariaveisMaquina_Te_vel_rpm_DobrarRs(obj) obj.gerarGraficos_Te_vel_rpm(); hold on; obj.Rs = obj.Rs*2; obj.simularEixoReferenciaEstacionario(); h = obj.gerarGraficos_Te_vel_rpm(); ylim([-3 4]); legend('Rs','2*Rs'); set(h,'Color','r') %title('Torque elétrico (pu) versus velocidade do rotor em RPM','FontSize',14); obj.salvarPlotAtual('VariaveisMaquina_Te_vel_rpm_DOBRO_Rs'); obj.Rs = obj.Rs/2; obj.simularEixoReferenciaEstacionario(); % Retornar estado anterior end % Análise da variação de Rr no torque elétrico function gerarGraficos_VariaveisMaquina_Te_vel_rpm_DobrarRr(obj) obj.gerarGraficos_Te_vel_rpm(); hold on; obj.Rr_linha = obj.Rr_linha*2; obj.simularEixoReferenciaEstacionario(); h = obj.gerarGraficos_Te_vel_rpm(); ylim([-4 6]); legend('Rr''','2*Rr'''); set(h,'Color','r') %title('Torque elétrico (pu) versus velocidade do rotor em RPM','FontSize',14); obj.salvarPlotAtual('VariaveisMaquina_Te_vel_rpm_DOBRO_Rr'); obj.Rr_linha = obj.Rr_linha/2; obj.simularEixoReferenciaEstacionario(); % Retornar estado anterior end % Análise da variação de Xl no torque elétrico function gerarGraficos_VariaveisMaquina_Te_vel_rpm_DobrarXl(obj) obj.gerarGraficos_Te_vel_rpm(); hold on; obj.Xls = obj.Xls*1.2; obj.Xlr_linha = obj.Xlr_linha*1.2; obj.simularEixoReferenciaEstacionario(); h = obj.gerarGraficos_Te_vel_rpm(); ylim([-3 4]); legend('Xls e Xlr''','1,2*Xls e 1,2*Xlr'''); set(h,'Color','r') %title('Torque elétrico (pu) versus velocidade do rotor em RPM','FontSize',14); obj.salvarPlotAtual('VariaveisMaquina_Te_vel_rpm_DOBRO_Xl'); obj.Xls = obj.Xls/1.2; obj.Xlr_linha = obj.Xlr_linha/1.2; obj.simularEixoReferenciaEstacionario(); % Retornar estado anterior end % Análise da variação de J no torque elétrico function gerarGraficos_VariaveisMaquina_Te_vel_rpm_DobrarJ(obj) obj.gerarGraficos_Te_vel_rpm(); hold on; inercia_antiga = obj.J; obj.setMomentoInercia_kg_m2(inercia_antiga*2); obj.simularEixoReferenciaEstacionario(); h = obj.gerarGraficos_Te_vel_rpm(); ylim([-3 4]); legend('J','2*J'); set(h,'Color','r') %title('Torque elétrico (pu) versus velocidade do rotor em RPM','FontSize',14); obj.salvarPlotAtual('VariaveisMaquina_Te_vel_rpm_DOBRO_J'); obj.setMomentoInercia_kg_m2(inercia_antiga); obj.simularEixoReferenciaEstacionario(); % Retornar estado anterior end % Análise da variação de J no torque elétrico e velocidade do rotor versus tempo function gerarGraficos_VariaveisMaquina_Te_Vel_R_DobrarJ(obj) obj.gerarGraficos_Te_Vel_R(); inercia_antiga = obj.J; obj.setMomentoInercia_kg_m2(inercia_antiga*2); obj.simularEixoReferenciaEstacionario(); h = obj.gerarGraficos_Te_Vel_R(); subplot(2,1,1); legend('J','2*J'); set(h,'Color','r') obj.salvarPlotAtual('gerarGraficos_Te_Vel_R_DOBRO_J'); obj.setMomentoInercia_kg_m2(inercia_antiga); obj.simularEixoReferenciaEstacionario(); % Retornar estado anterior end % Análise da variação de Xl no torque elétrico e velocidade do rotor versus tempo function gerarGraficos_VariaveisMaquina_Te_Vel_R_DobrarXl(obj) obj.gerarGraficos_Te_Vel_R(); hold on; obj.Xls = obj.Xls*1.2; obj.Xlr_linha = obj.Xlr_linha*1.2; obj.simularEixoReferenciaEstacionario(); h = obj.gerarGraficos_Te_Vel_R(); subplot(2,1,1); legend('Xls e Xlr''','1,2*Xls e 1,2*Xlr'''); set(h,'Color','r') obj.salvarPlotAtual('gerarGraficos_Te_Vel_R_DOBRO_Xl'); obj.Xls = obj.Xls/1.2; obj.Xlr_linha = obj.Xlr_linha/1.2; obj.simularEixoReferenciaEstacionario(); % Retornar estado anterior end % Análise da variação de Xlr_linha no torque elétrico e velocidade do rotor versus tempo function gerarGraficos_VariaveisMaquina_Te_Vel_R_DobrarXlr_linha(obj) obj.gerarGraficos_Te_Vel_R(); hold on; %obj.Xls = obj.Xls*1.2; obj.Xlr_linha = obj.Xlr_linha*1.2; obj.simularEixoReferenciaEstacionario(); h = obj.gerarGraficos_Te_Vel_R(); subplot(2,1,1); legend('Xlr''','1,2*Xlr'''); set(h,'Color','r') obj.salvarPlotAtual('gerarGraficos_Te_Vel_R_DOBRO_Xlr_linha'); %obj.Xls = obj.Xls/1.2; obj.Xlr_linha = obj.Xlr_linha/1.2; obj.simularEixoReferenciaEstacionario(); % Retornar estado anterior end % Análise da variação de Xls no torque elétrico e velocidade do rotor versus tempo function gerarGraficos_VariaveisMaquina_Te_Vel_R_DobrarXls(obj) obj.gerarGraficos_Te_Vel_R(); hold on; obj.Xls = obj.Xls*1.2; %obj.Xlr_linha = obj.Xlr_linha*1.2; obj.simularEixoReferenciaEstacionario(); h = obj.gerarGraficos_Te_Vel_R(); subplot(2,1,1); legend('Xls','1,2*Xls'); set(h,'Color','r') obj.salvarPlotAtual('gerarGraficos_Te_Vel_R_DOBRO_Xls'); obj.Xls = obj.Xls/1.2; %obj.Xlr_linha = obj.Xlr_linha/1.2; obj.simularEixoReferenciaEstacionario(); % Retornar estado anterior end % Análise da variação de Rr no torque elétrico e velocidade do rotor versus tempo function gerarGraficos_VariaveisMaquina_Te_Vel_R_DobrarRr(obj) obj.gerarGraficos_Te_Vel_R(); hold on; obj.Rr_linha = obj.Rr_linha*2; obj.simularEixoReferenciaEstacionario(); h = obj.gerarGraficos_Te_Vel_R(); subplot(2,1,1); ylim([-4 6]); legend('Rr''','2*Rr'''); set(h,'Color','r') obj.salvarPlotAtual('gerarGraficos_Te_Vel_R_DOBRO_Rr'); obj.Rr_linha = obj.Rr_linha/2; obj.simularEixoReferenciaEstacionario(); % Retornar estado anterior end end end
5 comentários
-
Nuccia Quinta, 29 Agosto 2019 23:33 Link do comentário
boa noite...
poderia me enviar o código.m para o motor trifásico -
Cialis Sexta, 01 Março 2019 11:29 Link do comentário
That is a good tip especially to those fresh to the blogosphere.
Brief but very precise information… Thanks for sharing
this one. A must read article! -
Chico João Sexta, 05 Fevereiro 2016 06:49 Link do comentário
Bom dia,
Achei o texto muito interessante para estudantes e profissionais de engenharia. -
Chico João Sexta, 05 Fevereiro 2016 06:49 Link do comentário
Bom dia,
Achei o texto muito interessante para estudantes e profissionais de engenharia. -
Chico João Sexta, 05 Fevereiro 2016 06:48 Link do comentário
Bom dia,
Achei o texto muito interessante para estudantes e profissionais de engenharia.