Autor Tema: Control de motor de inducción trifásico usando dsPIC 33fj32MC204  (Leído 10091 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado mmX

  • PIC10
  • *
  • Mensajes: 37
Hola a todos, estoy desarrollando un variador de frecuencia, y el módulo de control lo estoy realizando con el dsPIC 33fj32MC204, ya que me permite hacer simulaciones en proteus para ir verificando (Por ahora no tengo mi kit de desarrollo) y se me ha presentado el siguiente problema. Buscando en la web de microchip encontré con un código que lleve al dsp que estoy usando, y que genera las salidas de PWM sinusoidal para la activación de los IGBT's, el detalle es que al hacer la corrida en el MPLAB verifico que todos los registros de configuración del modulo MCPWM están bien configurados, pero el valor del ciclo útil no se modifica y creo que el problema está en la multiplicación fraccionaria del dsp. Aqui les cuelgo el código, para ver si alguien me ayuda, repito, en el while(1) luego de unas cuantas iteraciones se resetea el micro.... o eso pienso.... Alguna idea?

Código: [Seleccionar]
#define FCY 7372800        // 7.37 MIPS
#define FPWM 16000          // 4 kHz
#define DEADTIME (unsigned int)(0.000002 * FCY)
#define _DES_FREQ 60        // 50 Hz sine wave is required
#define _DELTA_PHASE (unsigned int)(_DES_FREQ * 65536 / FPWM)
unsigned int Phase, Delta_Phase,Phase_Offset;


signed long sinetable[64]={0, 3263, 6493, 9658, 12728, 15671, 18458, 21062,
23457, 25618, 27525, 29158, 30502, 31542, 32269, 32675, 32757, 32513,
31945, 31061, 29867, 28377, 26605, 24568, 22287, 19785, 17086, 14217,
11207, 8085, 4884, 1633, -1633, -4884, -8085, -11207, -14217, -17086,
-19785, -22287, -24568, -26605, -28377, -29867, -31061, -31945, -32513,
-32757, -32675, -32269, -31542, -30502, -29158, -27525, -25618, -23457,
-21062, -18458, -15671, -12728, -9658, -6493, -3263, 0};

void iniciarMCPWM(void)
{
 TRISB = 0xFC00; // PWM pins as outputs, and FLTA as input
 P1TPER = (FCY/FPWM - 1) >> 1; // Compute Period for desired frequency
 P1OVDCON = 0x0000; // Disable all PWM outputs.
 P1DTCON1 = DEADTIME; // ~2 us of dead time @ 20 MIPS and 1:1 Prescaler
 PWM1CON1 = 0x0077; // Enable PWM output pins and enable complementary mode
 P1DC1 = P1TPER; /* 0 Volts on Phase A. This value corresponds to
 50% of duty cycle, which in complementary mode
 gives an average of 0 Volts */
 P1DC2 = P1TPER; // 0 Volts on Phase B.
 P1DC3 = P1TPER; // 0 Volts on Phase C.
 IFS3bits.PWM1IF = 0; // Clear PWM Interrupt flag
 IEC3bits.PWM1IE = 1; // Enable PWM Interrupts
 P1OVDCON = 0x3F00; // PWM outputs are controller by PWM module
 P1TCONbits.PTMOD = 2; // Center aligned PWM operation
 Phase = 0; // Reset Phase Variable
 Delta_Phase = _DELTA_PHASE; // Initialize Phase increment for 60Hz sine wave
 P1TCONbits.PTEN = 1; // Start PWM
 return;
}




#define _120_DEGREES 0x5555
#define _240_DEGREES 0xAAAA
int Multiplier, Result;
int main (void)
{
  iniciarMCPWM();
while (1)
{
  Phase += Delta_Phase;       // Accumulate Delta_Phase in Phase variable
  Phase_Offset = _120_DEGREES;// Add proper value to phase offset
  Multiplier = sinetable[(Phase + Phase_Offset) >> 10];// Take sine info
 
  asm("MOV _Multiplier, W4"); // Load first multiplier
  asm("MOV _P1TPER, W5");      // Load second multiplier
  asm("MOV #_Result, W0");    // Load W0 with the address of Result
  asm("MPY W4*W5, A");        // Perform Fractional multiplication
  asm("SAC A, [W0]");         // Store multiplication result in var Result
  P1DC1 = Result + P1TPER;      // Remove negative values of the duty cycle


}


}


« Última modificación: 31 de Marzo de 2009, 12:17:14 por mmX »

Desconectado mmX

  • PIC10
  • *
  • Mensajes: 37
Re: Control de motor de inducción trifásico usando dsPIC 33fj32MC204
« Respuesta #1 en: 31 de Marzo de 2009, 13:02:46 »
Bueno al parecer todo lo que esta dentro del while no deberia estar ahi, si no en una rutina de interrupcion por MCPWM.... El asunto es que estoy novato en C30 y no le hallo como definir la rutina de interrupción.... se que en PIC C es solamente #INT_XXX, y de ahi se definia la funcion de tratamiento, pero aqui no se como....

Desconectado mmX

  • PIC10
  • *
  • Mensajes: 37
Re: Control de motor de inducción trifásico usando dsPIC 33fj32MC204
« Respuesta #2 en: 31 de Marzo de 2009, 16:17:58 »
Bueno, sigo aqui intentando resolver este problemita.... No se que pensar ya que lo que sucede no le encuentro ni pies ni cabeza xD!!! Ok, solucione lo de la interrupcion preguntando siempre por la bandera de interrupción en el ciclo principal.... Ahora, corriendo el siguiente segmento paso a paso:


Código: [Seleccionar]
while (1)
{

 if(IFS3 == 0x200){
  Phase += Delta_Phase;       // Accumulate Delta_Phase in Phase variable
  Phase_Offset = _120_DEGREES;// Add proper value to phase offset
  Multiplier = sinetable[(Phase + Phase_Offset) >> 10];// Take sine info
  asm("MOV _Multiplier, W4"); // Load first multiplier
  asm("MOV _P1TPER, W5");      // Load second multiplier
  asm("MOV #_Result, W0");    // Load W0 with the address of Result
  asm("MPY W4*W5, A");        // Perform Fractional multiplication
  asm("SAC A, [W0]");         // Store multiplication result in var Result
  P1DC1 = Result + P1TPER;      // Remove negative values of the duty cycle
  IFS3bits.PWM1IF = 0;
}
}

Y haciendo de watch para todas esas variables, me encuentro con que para los dos primeros incrementos la variable Phase, se incrementa modificando asi el valor de MULTIPLIER, pero ya para el tercero y en adelante, se incrementa PHASE pero no se incrementa MULTIPLIER... Que es el valor del Seno en la tabla....

Código: [Seleccionar]
signed long sinetable[64]={0, 3263, 6493, 9658, 12728, 15671, 18458, 21062,
23457, 25618, 27525, 29158, 30502, 31542, 32269, 32675, 32757, 32513,
31945, 31061, 29867, 28377, 26605, 24568, 22287, 19785, 17086, 14217,
11207, 8085, 4884, 1633, -1633, -4884, -8085, -11207, -14217, -17086,
-19785, -22287, -24568, -26605, -28377, -29867, -31061, -31945, -32513,
-32757, -32675, -32269, -31542, -30502, -29158, -27525, -25618, -23457,
-21062, -18458, -15671, -12728, -9658, -6493, -3263, 0};

Pues no se.... Y no entiendo para que sirve el ">>10" asi que no se exactamente por donde buscar el problema...

Desconectado mmX

  • PIC10
  • *
  • Mensajes: 37
Re: Control de motor de inducción trifásico usando dsPIC 33fj32MC204
« Respuesta #3 en: 01 de Abril de 2009, 12:53:34 »
Sigo aqui.... solo probando el pwm me encontre con el siguiente problema..... Al colocarle al registro del periodo 32168, y modificando el ciclo util este varia perfectamente en el simulador.... con una frecuencia de 1,2 KHz... Luego hice el calculo para una frecuencia de 20 KHz, y el PT1PER queda con un valor  de 499 y bueeeno... en la simulacion mido la frecuencia de la PWM y no da en lo absoluto los 50 uS que deberia dar... Y al asignar los valores de 11 bits al ciclo util este simplemente NO varia para nada... me refiero a 11 bits en vez de 16 porque la resolucion varia logaritmicamente con la frecuencia de la pwm. Alguien interesado en este tema_?

Desconectado mmX

  • PIC10
  • *
  • Mensajes: 37
Re: Control de motor de inducción trifásico usando dsPIC 33fj32MC204
« Respuesta #4 en: 02 de Abril de 2009, 10:18:17 »
Es posible que el proeteus tenga un mal funcionamiento? Eso ya me ha pasado antes con un PIC18, no simulaba bien pero funcionaba al montar el circuito.

Al simular paso a paso en MPLAB el registro del ciclo útil si se modifica, pero no lo hace al simular en proteus....

Nadie?

Desconectado mmX

  • PIC10
  • *
  • Mensajes: 37
Re: Control de motor de inducción trifásico usando dsPIC 33fj32MC204
« Respuesta #5 en: 02 de Abril de 2009, 20:20:40 »
Despues de tanto sufrir al fin descubri la falla....!! Resulta que cada ciclo de PWM yo actualizaba el ciclo util, ¿Como detectaba cada ciclo de pwm? solamente testeando la bandera de interrupcion del reinicio del P1TMR, que activaba la interrupcion de MCPWM cada vez que el P1TMR llegaba a 0, resulta que tenia activada la interrupción de PWM por lo tanto al producirse la primera interrupción, el micro se quedaba como loco buscando en el vector de interrupción la rutina de la pwm y se reseteaba, por eso no funcionaba.... Ya que no utilice el vector de interrupcion ni lo defini en ningun lado.. -_- '

Aqui les dejo colgado el enlace del resultado obtenido, una bella señal de 62 Hz trifásica generada con un dsPic, sé que no estoy descubriendo el agua tibia... pero avances son avances....
 :) :) :)
Si alguien está interesado hagalo saber... Ya que no pareciera haber interes.... El Post es sobre el control de motores.

Proximo paso:

Establecer la conversion A/D para mantener la relación V/F igual y asegurar un buen torque a baja y alta velocidad.  :mrgreen:

En caso de no poder descargar la imagen aqui les dejo un link:

http://rapidshare.com/files/216742104/mcpwm.JPG.html
« Última modificación: 02 de Abril de 2009, 20:22:53 por mmX »

Desconectado blackcat

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 600
Re: Control de motor de inducción trifásico usando dsPIC 33fj32MC204
« Respuesta #6 en: 02 de Abril de 2009, 22:48:14 »
Que bien te felicito ... la persistencia hace al fuerte!

Fuera de tema:

Estas mostrando la tipica barra de tareas de todo un señor programador:

- MPLAB abierto
- El messenger para socializar en esos momentos de quema de neuronas!
- El notepad: utilizado para ver ejemplos de codigo en C
- El mozilla: para buscar ejemplos e informacion
- La calculadora para convertir de decimal a hex .. y viceversa
- El proteus para simular
- El reproductor de musica ... por mientras se programa.
- El explorador de windows para buscar los archivos
- Ares para bajar mas musica ...

 :D :D :D :D ... Despues nos quejamos porque no tenemos RAM!

Saludos!

Control Automático, DSP & Microcontroladores

Desconectado mmX

  • PIC10
  • *
  • Mensajes: 37
Re: Control de motor de inducción trifásico usando dsPIC 33fj32MC204
« Respuesta #7 en: 08 de Abril de 2009, 13:56:17 »
Bueno, el sistema de control VF es realmente fácil. Solo hay que preservar la relacion entre el voltaje del motor y la frecuencia del mismo. Un simple cálculo nos permite preservar esta relación facilmente. La modulación que se utilizará es HIPWM (modulacion con inyección de armónica), en el que se inyecta al motor una señal equivalente al 3er armónico de una señal sinosoidal, que al aplicarse trifásicamente se obtiene un voltaje de Fase sinusoidal de mayor amplitud, utilizando una tensión del bus DC mayor obteniendo un mejor desempeño y ahorro de energía.

En la imagen se ve el circuito y la señal trifásica que se ve en las bobinas del motor. Al aumentar la frecuencia el voltaje disminuye proporcionalmente tal como se quiere. preservando un nivel de torque máximo a altas y bajas velocidades.

Utilizando el fj32MC204 utilizo no mas del 5% de RAM, y pensar que el dspic a utilizar finalmente es el 256MC710(capacidad 8 veces mayor), así que queda mucho espacio para otras cosas... Estos dsPIC no dejan de sorprenderme....

Desconectado juanpavz

  • PIC12
  • **
  • Mensajes: 77
Re: Control de motor de inducción trifásico usando dsPIC 33fj32MC204
« Respuesta #8 en: 08 de Abril de 2009, 14:25:03 »
Hola mmX,
Me parece bastante interesante el tema, en lo personal solo he programado PICs de gama media y uno que otro de gama alta y todo en el PIC C,
conozco de electronica de potencia en general (la parte teorica), pero me interesaria empezar a plasmar los conocimientos en algo funcional, te agradeceria mucho, si podrias recomendar algun enlace o libro para empezar a indagar.
Ahh y una duda el C30 tiene version libre (desde que conoci el PIC C deje de usar el mplab).
Gracias por abrir el post
Saludos...
Hazlo o no lo hagas... Pero no lo intentes

Desconectado mmX

  • PIC10
  • *
  • Mensajes: 37
Re: Control de motor de inducción trifásico usando dsPIC 33fj32MC204
« Respuesta #9 en: 08 de Abril de 2009, 14:35:35 »
El compilador C30 tiene una version "Libre" para estudiantes, que no es más que la versión full por un límite de días (45 creo), yo también utilizaba PIC C, pero por problemas con los dsPIC empecé a usar el C30 y la transición ha sido bastante amigable. Ahora en lo que revise subiré unos cuantos libros y documentos de la microchip en cuanto a la parte de electrónica de potencia. Y del compilador, no se realmente si se pueden publicar enlaces a versiones "originales" aqui en el foro, pero yo me baje una 100% funcional sin límites de dias.... si quieres me envias un m.p y te digo donde.

Desconectado jjcblanco

  • PIC10
  • *
  • Mensajes: 20
Re: Control de motor de inducción trifásico usando dsPIC 33fj32MC204
« Respuesta #10 en: 18 de Mayo de 2009, 13:56:10 »
Yo tambien estoy trabando en eso pero con pic30f ya que aca en arg no consigo pic33

Desconectado jjcblanco

  • PIC10
  • *
  • Mensajes: 20
Re: Control de motor de inducción trifásico usando dsPIC 33fj32MC204
« Respuesta #11 en: 18 de Mayo de 2009, 14:22:19 »
en la version que tengo de mplab compilo tu codigo me tira

Executing: "C:\Program Files\Microchip\MPLAB C30\bin\pic30-gcc.exe" -mcpu=33FJ32MC204 -x c -c   "pwmpic33f.c" -o"pwmpic33f.o" -D__DEBUG -g -Wall
pic30-coff-cc1.exe: error: Invalid -mcpu option.  CPU 33FJ32MC204 not recognized.

Halting build on first failure as requested.

Supongo que no tengo las librerias del micro pero las busque y nos las encuentro
Que version usas del c compiler?

Desconectado jjcblanco

  • PIC10
  • *
  • Mensajes: 20
Re: Control de motor de inducción trifásico usando dsPIC 33fj32MC204
« Respuesta #12 en: 18 de Mayo de 2009, 18:03:05 »
ya lo pude compilar y lo simule


Desconectado mauroskit

  • PIC10
  • *
  • Mensajes: 4
Re: Control de motor de inducción trifásico usando dsPIC 33fj32MC204
« Respuesta #13 en: 09 de Diciembre de 2009, 02:06:50 »
Hola, sabes que a mi me interesa mucho el tema ya que estoy trabajando con modulacion pwm para motores trifasicos y soy nuevo en esto, no pude ver el link ya que esta caido, podrias mandarme la info que tengas sobre esta modulacion o lo que tenias en el link. mi mail es mauricio.moscoso.Q@gmail.com
Gracias.

Desconectado mauroskit

  • PIC10
  • *
  • Mensajes: 4
Re: Control de motor de inducción trifásico usando dsPIC 33fj32MC204
« Respuesta #14 en: 14 de Diciembre de 2009, 00:36:13 »
Amigo MMX o alguien que se maneje en el control de motores por pwm. Como ocupaste la interrupcion para la modulacion PWM, por favor si me puedes ayudar. Gracias.


 

anything