controle eletônico de um motor de indução trifásico

Propaganda
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
DEPARTAMENTO ACADÊMICO DE ELETROTÉCNICA
CURSO SUPERIOR DE TECNOLOGIA EM AUTOMAÇÃO INDUSTRIAL
ANDERSON SIQUEIRA SILVA
LUCAS VINICIUS PEREIRA
RENAN KEITYRO YAOITA
CONTROLE ELETÔNICO DE UM MOTOR DE INDUÇÃO TRIFÁSICO
RELATÓRIO
CURITIBA
2016
ANDERSON SIQUEIRA SILVA
LUCAS VINICIUS PEREIRA
RENAN KEITYRO YAOITA
CONTROLE ELETÔNICO DE UM MOTOR DE INDUÇÃO TRIFÁSICO
Relatór io de APS apresentado ao
Prof essor W . Sanchez, docent e do Curso
Super ior de Tecnologia em Automação
Industrial do Depar tamento Acadêmico
de Eletrotécnica
–
DAELT
– da
Universidade Tecnológica Federal do
Paraná – UTFPR.
CURITIBA
2016
LISTA DE FIGURAS
Figura 1: Circuito de potência demonstrando um acionamento via PWM................................. 4
Figura 2: Circuito de potência. ................................................................................................... 5
Figura 3: Circuito de comando para acionar um motor de indução trifásico. ............................ 6
Figura 4: Pinagem do dsPIC33FJ32MC204. .............................................................................. 7
Figura 5: Pinagem do dsPIC33FJ32MC204 nos softwares. ....................................................... 8
Figura 6: Circuito de comando da APS no software Proteus. .................................................... 8
SUMÁRIO
1.
2.
3.
INTRODUÇÃO .................................................................................................................. 4
OBJETIVO .......................................................................................................................... 4
PROCEDIMENTOS ........................................................................................................... 5
4
1.
INTRODUÇÃO
A base do funcionamento das máquinas industriais está no controle de
movimento das mesmas. Este controle tem por objetivo o domínio da variação de
velocidade e também do torque no sistema. Isto se torna claro, pois é desejável não
somente a variação de velocidade de uma máquina, mas também que esta tenha a
possibilidade durante todo o tempo de sua variação, de manter a habilidade de
movimentar a carga que lhe é imposta.
Em termos de máquina de indução, já está muito explorado o assunto de
controle de velocidade, principalmente no modo escalar e aplicando-se um inversor
de frequência atuando em V/f e injetando tensão no sistema via um modulador de
largura de pulso (PWM), como na Figura 1.
Figura 1: Circuito de potência demonstrando um acionamento via PWM.
Pode-se resumidamente entender que o controle de velocidade e torque de
uma máquina de corrente alternada assíncrona pode se dar especificamente em
alguns modos:
2.

Controle de tensão do estator;

Controle de tensão do rotor;

Controle de frequência;

Controle de corrente do estator;

Controle de tensão e frequência do estator;

Controle de tensão, frequência e corrente do estator.
OBJETIVO
5
Controlar a velocidade de um motor de indução trifásico através do
microcontrolador dsPIC33FJ32MC204, cuja a entrada de sinal para a variação da
velocidade será feito por um potenciômetro.
Montar o circuito de controle e de potência para acionar o motor.
3.
PROCEDIMENTOS
O circuito de controle e de potência foi montado em uma placa de circuito
impresso universal. A montagem dos circuitos foi seguida nos modelos abaixo:
Figura 2: Circuito de potência.
6
Figura 3: Circuito de comando para acionar um motor de indução trifásico.
7
Figura 4: Pinagem do dsPIC33FJ32MC204.
8
Figura 5: Pinagem do dsPIC33FJ32MC204 nos softwares.
Para controlar o dsPIC33FJ32MC204, foi usado o código que a companhia
Microchip Technology Incorporated disponibilizou. O código foi compilado no software
MPLAB (também da Microchip Technology Incorporated), e simulado no software
Proteus, seguindo os esquemas de ligação dos circuitos acima.
Figura 6: Circuito de comando da APS no software Proteus.
O código foi recomentado para entender o funcionamento do
microcontrolador, o código original foi disponibilizado pela Microchip Technology
9
Incorporated em um documento chamado de AN984 – “An Introduction to AC
Induction Motor Control Using the dsPIC30F MCU”.
;********************************************************************************************
;*
*
;*
Software License Agreement
*
;*
*
;* The software supplied herewith by Microchip Technology
*
;* Incorporated (the "Company") for its dsPIC controller
*
;* is intended and supplied to you, the Company's customer,
*
;* for use solely and exclusively on Microchip dsPIC
*
;* products. The software is owned by the Company and/or its
*
;* supplier, and is protected under applicable copyright laws. All
*
;* rights are reserved. Any use in violation of the foregoing
*
;* restrictions may subject the user to criminal sanctions under
*
;* applicable laws, as well as to civil liability for the breach of
*
;* the terms and conditions of this license.
*
;*
*
;* THIS SOFTWARE IS PROVIDED IN AN "AS IS" CONDITION. NO
*
;* WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY,
*
;* INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
*
;* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
*
;* APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, IN ANY
*
;* CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR
*
;* CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
*
;*
*
;********************************************************************************************/
;********************************************************************************************
;
*
;Nome do arquivo: an984_ygaq_acim_3_phase_v_per_hz.s
*
;
*
;
*
;----------------------------------------------------------------------------------------------------------*
; Date
Revision Name Desrcription
*
; (mmddyy)
(MM.mm)
*
;----------------------------------------------------------------------------------------------------------*
; 08/22/07
0.1
M. Cheles Ported from dspic30f to dspic33f
; 08/23/07
1.0
M. Cheles Updated after internal review
; 20/5/09
2.0
D. Torres Migrated to dsPICDEM MCHV development board
;********************************************************************************************/
;********************************************************************************************
; Notes:
*
; ======
*
; O conversor A/D é habilitado para uma amostra na porta do dsPICDEM
*
; MCHV 100 PIN conectado por AN1 (o potenciômetro R6 é usado para
*
; variar a frequência).
*
10
;********************************************************************************************
.equ __33FJ32MC204, 1
; dá um nome simbólico (33FJ32MC204) a uma constante numérica (similar ao
; #define)
.include "p33FJ32MC204.inc"
; inclui a biblioteca p33FJ32MC204.inc no código
.global __reset
; cefinição para iniciar o programa, indica reset como global
;...............................................................................................................................
;Configuração dos bits:
;...............................................................................................................................
config __FBS, BSS_NO_FLASH & BWRP_WRPROTECT_OFF
; nenhuma proteção do setor de inicialização e gravação desabilitado
config __FOSCSEL, IESO_ON & FNOSC_PRIPLL
; o chip é iniciado usando o módulo de oscilação FRC depois muda para XT W/PLL
config __FWDT, FWDTEN_OFF
; desliga o Watchdog Timer (dispositivo eletrônico temporizador que dispara um
; reset ao sistema)
config __FGS, GSS_OFF & GCP_OFF & GWRP_OFF
; desabilita a proteção do código para todo o segmento
config __FOSC, FCKSM_CSDCMD & IOL1WAY_OFF & OSCIOFNC_OFF &
POSCMD_XT
; interruptor de clock e monitoramento desativado
; remapeamento I/O habilitado
; o pino OSC2 é o clock O/P
; o oscilador é o módulo de oscilação XT
config __FPOR, PWMPIN_ON & HPOL_ON & LPOL_ON & ALTI2C_ON &
FPWRT_PWR128
; o modo do PWM é o registro de Port
; PWM alto e baixo ativado em alta
; alternar I2C mapeado para SDA1/SCL1 (data line/data clock)
; redefinição ao ligar, no tempo de 128ms
;...............................................................................................................................
; Variáveis não inicializadas em memória de dados Near
;...............................................................................................................................
.section .nbss,bss,near
; Nomes de seção reservados e de caracteres individuais para determinar a
; colocação de memória eventual
11
Frequency: .space 2
; Esta variável é adicionada à tabela de onda senoidal de 16 bits em cada período de
; PWM . Um valor de 246 irá fornecer modulação de frequência de 60 Hz com
; 16 KHz no PWM
Amplitude: .space 2
; Esta variável é utilizada para definir a amplitude de modulação e dimensiona o
; valor recuperado a partir da tabela de onda senoidal. Os valores válidos variam
; de 0 a 32767
Phase:
.space 2
; Esta variável é o ponteiro para a tabela de onda senoidal. Ele é incrementado
; pelo valor da variável de frequências em cada interrupção de PWM.
DelayCount: .space 2
; Esta variável é usada na função Delay. Especifica o número de milissegundos de
; espera
;..............................................................................
; Constantes armazenados no espaço de programa
;..............................................................................
.section .const,psv
; Nomes de seção reservados e de caracteres individuais para determinar
; colocação de memória eventual
.align 256
; Permite aplicar alinhamento da instrução ou dados imediatamente posteriores
; à directiva, em um endereço de memória
SineTable:
.hword 0,3212,6393,9512,12539,15446,18204,20787,23170,25329
.hword
27245,28898,30273,31356,32137,32609,32767,32609,32137,31356,30273,28898
.hword
27245,25329,23170,20787,18204,15446,12539,9512,6393,3212,0,-3212,6393
.hword -9512,-12539,-15446,-18204,-20787,-23170,-25329,-27245,-28898,-30273
.hword -31356,-32137,-32609,-32767,-32609,-32137,-31356,-30273,-28898,-27245
.hword -25329,-23170,-20787,-18204,-15446,-12539,-9512,-6393,-3212
;
; Esta é uma tabela de onda senoidal de 64 registros cobrindo 360 graus da
; função seno. Estes valores foram calculados usando o Microsoft Excel e colado
; a este programa.
;..............................................................................
; Constantes para esta aplicação
;..............................................................................
12
; Parâmetro V/Hz para ACIM (motor de indução trifásica)
; se ACIM tem 230V e 60 Hz , então, V/Hz = ct = 3,8 (3)
; então, a constante é 3,83 * 0,244140625 * 256 / max_volt
; desde max freq é 62,3Hz com esse algoritmo,
; max_volt deve ser maior 239V
; no teste teve-se tensão de 239V , o que significa V/Hz constante era 1
.equ ACIM_V_per_Hz_const, 0x7FFF
; Esta constante é usado para dimensionar o valor de pesquisa do seno ao
; intervalo válido de ciclos de trabalho PWM . Esta baseia-se no valor de escrita
; para PTPER .
; usa PTPER = 1,250 para esta aplicação , que permite que os ciclos
; de funcionamento entre 0 e 2500. Os dados da tabela seno são assinado, por
; isso multiplica os dados da tabela por 1250, em seguida, adiciona
; um deslocamento para escalar os dados de pesquisa para valores
; constantes positivos
.equ PWM_Scaling, 1250
; O ponteiro para a tabela de sinal de onda é de 16 bits . Adicionando 0x5555 para o
ponteiro irá fornecer um deslocamento de 120 graus e 0xAAAA dará um deslocamento
de 240 graus . Essas compensações são utilizadas para obter os valores de pesquisa
para a fase 2 e fase 3 das saídas PWM .
.equ Offset_120, 0x5555
;..............................................................................
; Seção do código na memória do programa
;..............................................................................
.text
__reset:
MOV
MOV
MOV
NOP
CALL
;Início da seção do código
#__SP_init, W15
; inicializar o ponteiro de pilha
#__SPLIM_init, W0 ; inicializa o registro limite do ponteiro de pilha
W0, SPLIM
; adiciona NOP para seguir a inicialização SPLIM
_wreg_init
; chama a sub-rotina _wreg_init
; opcionalmente usa RCALL ao invés de CALL
call Setup
; chama a rotina de configuração do I/O e PWM
;-----------------------------------------------------------------------------; Inicialização de variáveis
;-----------------------------------------------------------------------------clr
clr
Frequency
Amplitude
;-----------------------------------------------------------------------------; Código de loop principal
; O flag da interrupção PWM é consultada no circuito principal
13
;-----------------------------------------------------------------------------PushButton:
btscPORTC,#RC8
bra
PushButton
call Delay
Loop: btss
IFS3,#PWM1IF
bra
CheckADC
; sondar o flag da interrupção PWM
; se estiver definido, continua
call
bclr
Modulation
IFS3, #PWM1IF
; chama a rotina modulação senoidal
; limpa o flag da interrupção PWM
btss
bra
IFS0,#AD1IF
Loop
call
ReadADC
CheckADC:
btscPORTC,#RC8
bra
Loop
clr
mov
mov
mov
call
bra
W0
W0, PDC1
W0, PDC2
W0, PDC3
Delay
PushButton
;-----------------------------------------------------------------------------; Processamento da sub-rotina ADC
;-----------------------------------------------------------------------------ReadADC:
push.d
push.d
W0
W4
mov
bclr
asr
ADCBUF0,W0
IFS0,#AD1IF
W0,#2,W4
; lê os resultados ADC em W0
; limpa a flag da interrupção A/D
; deslocamento para a direita de 2 bits
; para obter
; frequência
; deslocamento para a esquerda AN
; para obter o valor Q15
mov
sl
W4,Frequency
W4,#7,W4
mov
mpy
#ACIM_V_per_Hz_const,W5
W4*W5,A
; multiplica frequência por ganho de
; V/Hz para obter modulação de
; amplitude
14
sac
mov
A,W0
#28000,W1
cp
W1,W0
bra
mov
GE,NoLimit
W1,W0
mov
W0,Amplitude
; Fornece o resultado no W0
; Limitar a modulação de amplitude
; para evitar
; tempo-morto induzida na distorção
; da modulação do PWM
NoLimit:
pop.d W4
pop.d W0
return
;-----------------------------------------------------------------------------; Sub-rotina da modulação senoidal do PWM
;-----------------------------------------------------------------------------Modulation:
push.d
W0
;salva os registradores de trabalho
push.d
W2
push.d
W4
push.d
W6
push.d
W8
push.d
W10
; As próximas três instruções inicializam o TBLPAG e o registro de ponteiro para
; o acesso aos dados de onda sinoidal na memória de programa usando a tabela
; de leitura
mov
#tblpage(SineTable),W0
mov
W0,TBLPAG
mov
#tbloffset(SineTable),W0
; O próximo bloco de instruções carrega várias constantes e variáveis utilizadas
; na rotina de modulação de onda senoidal
mov
Phase,W1
; coloca o ponteiro da tabela de onda senoidal
mov
#Offset_120,W4
; este é o valor para 120 graus compensado
mov
Amplitude,W6
; carrega o fator de escala de amplitude
mov
#PWM_Scaling,W7
; coloca o valor de escala PWM
mov
Frequency,W8
; Coloca a constante de frequência que será adicionado ao ponteiro da tabela
; em cada interrupção.
15
; Este é o código de ajustamento ponteiro. O valor de frequência é adicionado
; ao ponteiro de seno para se mover através da tabela de seno. Em seguida,
; as compensações são adicionados a este ponteiro para obter os ponteiros fase 2
; e fase 3.
; Nota: Se os diferentes desvios de fase são desejados, outros valores
; constantes podem ser usados aqui. Adicionar 0x4000 para obter um grau de
; deslocamento de 90, 0x8000 irá fornecer um deslocamento de 180 graus.
; Aqui, 0x5555 foi carregado para W4 para proporcionar 120 graus.
add
W8,W1,W1
add
W1,W4,W2
add
W2,W4,W3
; adiciona o valor de frequência para
; o ponteiro sine
; adiciona o valor de 120 graus
; deslocado para a fase 2
; adiciona outros 120 graus deslocado
; para a fase 3
; A tabela seno tem 64 entradas, assim os ponteiros são deslocados para a
; direita para obter um valor de ponteiro de 6 bits.
lsr
W1,#10,W9
sl
W9,#1,W9
lsr
W2,#10,W10
sl
W10,#1,W10
lsr
W3,#10,W11
sl
W11,#1,W11
; deslocar -se para a direita o ponteiro
; da fase 1 para obter os superiores
; 6 bits
; deslocamento para a esquerda
; por um para converter-se ao
; endereço de byte
; deslocar -se para a direita o
; ponteiro da fase 2 para obter
; os superiores 6 bits
; deslocamento para a
; esquerda por um para converter-se
; ao endereço de byte
; deslocar -se para a direita o ponteiro
; da fase 3 para obter os superiores
; 6 bits
; deslocamento para a esquerda por
; um para converter-se ao endereço
; de byte
; Agora, o ponteiro para cada fase é adicionado ao ponteiro da tabela base para
; obter o endereço da tabela absoluto para o valor de pesquisa. O valor de
; pesquisa é então escalado para a amplitude correta e para a gama de ciclos
; de funcionamento válidos.
; O próximo bloco de instruções calcula o ciclo de trabalho para a fase 1. O código
; de fase 2 e Fase 3 é o mesmo.
add
W0,W9,W9
tblrdl [W9],W5
mpy
W5*W6,A
; formar o endereço da tabela para a fase 1
; lê o valor de pesquisa para a fase 1
; multiplica pela escala de amplitude
16
sac
mpy
sac
add
A,W5
W5*W7,A
A,W8
W7,W8,W8
mov
W8,PDC1
; armazena o resultado escalado
; multiplicado pelo fator escalado do PWM
; armazena o resultado escalado
; adicionar o fator de escala do PWM para
; produzir 50% compensado
; faz o ciclo de trabalho do PWM
; O próximo bloco de código calcula o ciclo de trabalho para a fase 2.
add
W0,W10,W10 ; formar o endereço da tabela para
; a fase 2
tblrdl [W10],W5
; lê o valor de pesquisa para a fase 2
mpy
W5*W6,A
; multiplica pela escala de amplitude
sac A,W5
; armazena o resultado escalado
mpy
W5*W7,A
; multiplicado pelo fator escalado do PWM
sac
A,W8
; armazena o resultado escalado
add
W7,W8,W8
; adicionar o fator de escala do PWM para
; produzir 50% compensado
mov
W8,PDC2
; faz o ciclo de trabalho do PWM
; O próximo bloco de código calcula o ciclo de trabalho para a fase 3.
add
W0,W11,W11 ; formar o endereço da tabela para
; a fase 3
tblrdl [W11],W5
; lê o valor de pesquisa para a fase 3
mpy
W5*W6,A
; multiplica pela escala de amplitude
sac A,W5
; armazena o resultado escalado
mpy
W5*W7,A
;multiplicado pelo fator escalado do PWM
sac
A,W8
; armazena o resultado escalado
add
W7,W8,W8
; adicionar o fator de escala do PWM para
; produzir 50% compensado
mov
W8,PDC3
; faz o ciclo de trabalho do PWM
; Agora, salvar fora o ponteiro da tabela de onda senoidal ajustada para que ele possa
ser usado durante a próxima iteração deste código.
mov
pop.d
pop.d
pop.d
pop.d
pop.d
pop.d
return
W1,Phase
W10
W8
W6
W4
W2
W0
; restaurar os registradores de trabalho
; retorna para a sub-rotina que o chamou
;-----------------------------------------------------------------------------; Código de configuração do PWM e do ADC
17
;------------------------------------------------------------------------------
Setup:
; setup Fcy at 40MIPS
; external osc is 8MHz
mov
#0x3000,W0
mov W0,CLKDIV
mov
#0x0026,W0
mov W0,PLLFBD
; configuraçao de PPLPRE & PLLPOST
; N1=N2=2
; configuração de PLLDIV
; M=40
; espera pelo bloqueio de PLL
Lock_loop:
btss
bra
OSCCON,#LOCK
Lock_loop
; Configuração do ADC
;**************************************************************************
mov
#0x0400,W0
; digitaliza a entrada para CH0 durante
; a amostra do bit A
mov
W0,AD1CON2
; 1 amostra convertida por interrupção
mov
#0x0001,W0
mov
W0,AD1CON3
; Tad é 2*Tcy
clr
AD1CHS123
; modo de digitalização – sem
; necessidadde para eles
clr
AD1CHS0
mov
#0x01E0,W0
mov
W0,AD1PCFGL ; apenas os pinos AN0,1,2,3,4 em
; modo analógico
bset AD1CSSL,#1
;define digitalização para somente AN1
mov
#0x8066,W0
; habilita A/D , o gatilho de PWM ,
; amostra automática
mov
W0,AD1CON1
; formata inteiro
bclr IFS0,#AD1IF
; limpa o flag da interrupção A/D
; Agora, configuração dos registradores de PWM
;**************************************************************************
mov
mov
mov
mov
#0x0077,W0
W0,PWM1CON1
#0x0068,W0
W0,P1DTCON1
; modo complementar, #1, #2 e #3
; pares são habilitados
; tempo-morto de 2usec a 40 MIPS
mov
#PWM_Scaling, W0
; define o period para PWM de
; 16KHz a 40 MIPS
mov
W0,P1TPER
mov
mov
#0x0001,W0
W0,P1SECMP
; configuração do acionador de
; evento especial para o ADC
18
mov
#0x0F00,W0
mov
W0,PWM1CON2
mov
#0x8002,W0
mov
W0,P1TCON
return
; definir evento especial do
; postscaler a 1:16
; timebase do PWM é habilitado,
; modo centro alinhado
; retorna para a rotina Setup
;..............................................................................
;Sub-rotina: Inicialização dos registradores W para o endereço 0x0000
;..............................................................................
_wreg_init:
CLR W0
MOV W0, W14
REPEAT #12
MOV W0, [++W14]
CLR W14
RETURN
;..............................................................................
; Sub-rotina: Debounce Delay
;..............................................................................
Delay:
mov
mov
#2000, W0
W0, DelayCount
outer:
dec DelayCount
cp0 DelayCount
bra z, done
do #3200, inner
nop
inner:
nop
bra outer
done:
return
;--------Fim de todas as seções de códigos --------------------------------------------.end
;Fim do código de programação deste arquivo
Download