Sie sind auf Seite 1von 11

Electrónica de Potencia 2

Inversor Trifásico con DsPic

Alumnos: Santiago Baez Edgar Eduardo


Martínez Méndez Adrián

Profesor: Fermi Vázquez Villanueva

19 de junio de 2017
Los inversores, o convertidores CC-CA, son un circuito utilizado para convertir
corriente continua en corriente alterna. Un inversor tiene como función la de
cambiar un voltaje CC de entrada en un voltaje CA simétrico a la salida,
procurando que este posea la magnitud y frecuencia deseada por el usuario.

Los inversores trifásicos son utilizados para la alimentación de cargas trifásicas


que requieran corriente alterna. Algunas de las aplicaciones de estos inversores
son las siguientes:

 Fuentes de tensión alterna trifásica sin interrupciones


 Puesta en marcha de motores de corriente alterna trifásicos
 Conexión de fuentes que producen energía en continua con las cargas
trifásicas (paneles fotovoltaicos

LCD1
LM016L
VDD
VSS

VEE

RW
RS

D0
D1
D2
D3
D4
D5
D6
D7
E
1
2
3

4
5
6

7
8
9
10
11
12
13
14

R1 Decremento

C
A

B
10k
Incremento
D4
D5
D6
D7
RS

E
RW

U1
1 4 S. Giro
MCLR RB0/CN4/RP0/C2IN-/AN2/EMUD1/PGD1 g
20 5
VCAP/VDDCORE RB1/CN5/RP1/C2IN+/AN3/EMUC1/PGC1
6
RB2/CN6/RP2/AN4 A
2
RA0/CN2/VREF+/AN0 RB3/CN7/RP3/AN5
7
1 R4
3
RA1/CN3/VREF-/AN1 RB4/CN1/RP4/SOSCI
11
RS R2 R3 1.2k B
9 14 1.2k 1.2k
RA2/CN30/CLKI/OSCI RB5/CN27/RP5/ASDA1/EMUD3/PGD3 E
10 15
g RA3/CN29/CLKO/OSCO RB6/CN24/RP6/ASCL1/EMUC3/PGC3 D4 C
12 16
RW RA4/CN0/T1CK/SOSCO RB7/CN23/RP7/INT0 D5
17
RB8/CN22/RP8/SCL1/PWM2H1/TCK D6 D
18
RB9/CN21/RP9/SDA1/PWM2L1/TDO D7
21
RB10/CN16/RP10/PWM1H3/TDI/EMUD2/PGD2 H3
22
RB11/CN15/RP11/PWM1L3/TMS/EMUC2/PGC2 L3
RB12/CN14/RP12/PWM1H2
23
H2 C4 C5
RB13/CN13/RP13/PWM1L2
24
L2 2.2uF 2.2uF C6
28 25 2.2uF
AVDD RB14/CN12/RP14/PWM1H1 H1
27 26
AVSS RB15/CN11/RP15/PWM1L1 L1
DSPIC33FJ32MC202

+24V
+24V +24V

+15V

+15V
D1 +15V
D2 C2
C1 0.47uF
D3 C3
0.47uF 0.47uF
1N4148
3 U2 3 1N4148 Q3
Q1 U3 IRF540 3 1N4148 Q5
10 6 IRF540 10 6 U4 IRF540
H1 HIN VC VB H2 HIN VC VB
10 6
H3 HIN VC VB
11 7 11 7
SD HO SD HO
5 5 11 7
VS VS SD HO
12 1 12 1 5
L1 LIN COM LO L2 LIN COM LO VS
12 1
A B L3 LIN COM LO
C
2 IR2112 2 IR2112
Q2 2 IR2112
IRF540 Q4
IRF540 Q6
IRF540

Diagrama General del inversor trifásico


DsPIC

Es un microcontrolador es un circuito integrado digital que puede ser programado


para diversas tareas. Los lenguajes típicos que se usan para este caso son
ensamblador y C, pero su compilación tiene que ser en hexadecimal.

Diagrama del DsPIC

Mediante el DsPic se generaran lo pulsos de PWM que entraran a los drives, estos
pulsos estarán regulados por push botón desde el micro. Otra de las tareas a
programar en el micro es el desfase de cada una de las líneas con respecto a la
otra, este desfase debe de ser de 120° entre cada línea.

Después de haber programado el micropocesador se simula. A continuación, en la


siguiente figura, se muestran las formas de onda desfasadas 120°.

Las siguientes imágenes muestran la correcta programación del DsPIC


Pulsos que salen del DsPIC a los drivers

Ondas desfasadas 120°, imagen el osciloscopio en el simulador


Implementación de circuito

Después de la programación y simulación del circuito se precedió al ensamble.

Circuito ensamblado

Después de ensamblar el circuito, se procedió a realizar las pruebas del mismo. A


continuación se muestran las señales obtenidas.
La siguiente imagen, muestra el desfasamiento entre cada una de la fases, esta
debe de ser de 120° entre cada línea. Se observan sólo dos líneas, ya que el
osciloscopio cuenta únicamente con dos canales y no es posible visualizar la
tercera línea, con su respectivo desfasamiento.

La siguiente imagen muestra el display y como este da en tiempo real el ciclo de


trabajo del PWM, mientras más grande sea el ciclo de trabajo, más grande será el
valor de la señal sinusoidal obtenida.
Se mostró que es posible realizar el inversor trifásico de baja calidad, controlando
su amplitud mediante el ancho de pulso (PWM). La construcción de este también
se llevó acabo con pocos elementos.

Esta práctica mostró que para este caso es necesario tener las tierras comunes,
ya que sino los drivers no activaban, esto se debe a que los pulsos de DsPIC no
estaban referenciados y el micro no lo detectaba.

MATERIAL

LCD

dsPIC33FJ32MC202

6 MOSFET

3 DRIVER IR2110

3 DIODOS MUR 160

3 CAPACITORES 105

CABLES

PROTOBOAR
3 CONDENSADORES DE 22U

3 RESISTENCIA DE 1.2K

Código del Micro

#include "stdio.h" void config_timer1(void){

#include "config.h" T1CONbits.TCS = 0;

#include "LCD.h" T1CONbits.TGATE = 0;

#include "xc.h" T1CONbits.TCKPS = 1;

#include "libpic30.h" PR1 = cuenta_timer1;

#define PREESCALA 8 IPC0bits.T1IP = 1;

#define FTEMP 100 //Hz, T = 10 ms IFS0bits.T1IF = 0;

int cuenta_timer1 = IEC0bits.T1IE = 1;


(FCY/(FTEMP*PREESCALA))-1;
T1CONbits.TON = 1;
short bandera = 0;
}
void _ISR _T1Interrupt(void){

IFS0bits.T1IF = 0;
#define NUM_MUESTRAS 36
bandera = 1;
#define OFFSET_180 18
}_FOSCSEL( FNOSC_FRC &
IESO_ON ) #define OFFSET_120 12

_FOSC( POSCMD_NONE & #define OFFSET_240 24


OSCIOFNC_ON &
FCKSM_CSECMD)
unsigned int
_FWDT( FWDTEN_OFF) muestrasSeno[NUM_MUESTRAS] = {
_FICD( ICS_PGD1 & JTAGEN_OFF ) 17059, 20021, 22893,
_FPOR( LPOL_ON & HPOL_ON & 25588, 28024,
PWMPIN_ON)
30126, 31832, 33089, PWM1CON1bits.PEN1H = 1;
33858, 34118,
PWM1CON1bits.PEN2L = 1;
33858, 33089, 31832,
30126, 28024, PWM1CON1bits.PEN2H = 1;

25588, 22893, 20021, PWM1CON1bits.PEN3L = 1;


17059, 14096, PWM1CON1bits.PEN3H = 1;
11224, 8529, 6093, AD1PCFGLbits.PCFG5 = 1;
3991, 2285,
RPINR12bits.FLTA1R = 3;
1028, 259, 0, 259,
1028, TRISBbits.TRISB3 = 1;

2285, 3991, 6093, P1FLTACONbits.FAEN1 = 1;


8529, 11224,
P1FLTACONbits.FAEN2 = 1;
14096
P1FLTACONbits.FAEN3 = 1;
};
P1FLTACONbits.FLTAM = 1;
#define FPWM 2160
P1FLTACONbits.FAOV1H = 0;
#define PRESCALA 1
P1FLTACONbits.FAOV1L = 0;
unsigned int ValRegPer =
P1FLTACONbits.FAOV2H = 0;
((FCY/(FPWM*PRESCALA))-1);
P1FLTACONbits.FAOV2L = 0;
void InitPWM( void ){
P1FLTACONbits.FAOV3H = 0;
P1TCONbits.PTEN = 0;
P1FLTACONbits.FAOV3L = 0;
P1TCONbits.PTCKPS = 0;
P1DTCON1bits.DTAPS = 0;
P1TCONbits.PTMOD = 0;
P1DTCON1bits.DTBPS = 0;
P1TMR = 0;
P1DTCON1bits.DTA = 37;
P1TPER = ValRegPer;
P1DTCON1bits.DTB = 37;
PWM1CON1bits.PMOD1 = 0;
P1DTCON2bits.DTS1A = 0;
PWM1CON1bits.PMOD2 = 0;
P1DTCON2bits.DTS1I = 1;
PWM1CON1bits.PMOD3 = 0;
P1DTCON2bits.DTS2A = 0;
PWM1CON1bits.PEN1L = 1;
P1DTCON2bits.DTS2I = 1; indiceSen120 = indiceSen-
OFFSET_240;
P1DTCON2bits.DTS3A = 0;
P1DC2 =
P1DTCON2bits.DTS3I = 1; escala*muestrasSeno[indiceSen120];
P1TCONbits.PTOPS = 0; indiceSen240 = indiceSen +
IFS3bits.PWM1IF = 0; OFFSET_240;

IEC3bits.PWM1IE = 1; if( indiceSen240 >=


NUM_MUESTRAS )
IPC14bits.PWM1IP = 3;
indiceSen240 = indiceSen-
P1DC1 = 0; OFFSET_120;

P1DC2 = 0; P1DC3 =
escala*muestrasSeno[indiceSen240];
P1DC3 = 0;
if(++indiceSen ==
P1TCONbits.PTEN = 1;
NUM_MUESTRAS)
}
indiceSen = 0;
short Amplitud = 95;
}
float escala = 0.95;
short contador = 0;
short indiceSen = 0;
short s_giro = 0;
void __attribute__((interrupt,
short CT = 50;
auto_psv)) _MPWM1Interrupt(void){
#define INCREMENTO _RB1
IFS3bits.PWM1IF = 0;
#define DECREMENTO _RB0
unsigned char indiceSen120,
indiceSen240; #define SGIRO _RA3

P1DC1 = char buffer[15];


escala*muestrasSeno[indiceSen];
int main(void) {
indiceSen120 = indiceSen +
OFFSET_120; CLKDIVbits.FRCDIV = 0;

if( indiceSen120 >= CLKDIVbits.PLLPOST = N2-2;


NUM_MUESTRAS ) CLKDIVbits.PLLPRE = N1-2;

PLLFBDbits.PLLDIV = M-2;
RCONbits.SWDTEN=0; bandera = 0;

__builtin_write_OSCCONH(0x01); if( ++contador == 10 ){

__builtin_write_OSCCONL(0x01); contador = 0;

while (OSCCONbits.COSC != if(INCREMENTO == 0){


0b001);
if(Amplitud<100){
while(OSCCONbits.LOCK!=1){};
Amplitud++;
SET_CPU_IPL(0);
}
lcd_init();
}
config_timer1();
if(DECREMENTO == 0){
InitPWM();
if(Amplitud>0){
LATBbits.LATB0 = 0;
Amplitud--;
TRISBbits.TRISB0 = 1;
}
CNPU1bits.CN4PUE = 1;
}
AD1PCFGLbits.PCFG2 = 1;
escala = Amplitud*0.01;
LATBbits.LATB1 = 0;
lcd_gotoxy(1,2);
TRISBbits.TRISB1 = 1;
sprintf(buffer, "A= %f",
CNPU1bits.CN5PUE = 1; (float)Amplitud);

AD1PCFGLbits.PCFG3 = 1; lcd_putstr(buffer);

LATAbits.LATA3 = 0; }

TRISAbits.TRISA3 = 1; }

CNPU2bits.CN29PUE = 1; }

lcd_gotoxy(1,1); return 0;

lcd_putstr("Hola Mundo"); }

while(1){

if(bandera == 1){

Das könnte Ihnen auch gefallen