problema Puente_H mosfet

Hola Bueno este es un circuito que estoy implementando para el control de dos motores, el problema es que al hacer un cambio de sentido o a veces tan solo parando el accionador estallan los mosfets, despues de 8 mosfets rotos ya me dolio el bolsillo y lo enpece a probar con unos fusibles en la alimentacion y estos se queman en el mismo momento. Los diodos no se queman, siguen funcionando bien. Es muy posible que sea el programa porque probando directamente las entradas con 5 volts no hay problema...no se. Tambien agrego el programa de control en ccs.
Si alguien se da cuenta del problema desde ya muchas gracias.





Código:
#include <16F628A.h> 
#fuses XT,NOMCLR
#use delay(clock = 4000000) 


void main()
{ 
set_tris_b(0b00110000);
output_low(PIN_b1);
output_low(PIN_B2);                  // Seteo CCP1 output low 
setup_ccp1(CCP_PWM);                 // Configuro CCP1 as a PWM 
setup_timer_2(T2_DIV_BY_1,50, 1);    // Aprox 20Khz (los valores del Duty 0-50)     
    
while(true){
               

pri: 
  if (input(PIN_B4)==0 && input(PIN_B5)!=0) { set_pwm1_duty(0);    
                                               output_high(PIN_B2);  
                                                 if (input(PIN_B4)==0 && input(PIN_B5)!=0)goto pri;
                                                     else { delay_ms(250);
                                                            goto cero;}
                                              }
                                              
sec:                                            
  if (input(PIN_B4)!=0 && input(PIN_B5)==0) { set_pwm1_duty(50);    
                                               output_low(PIN_B2); 
                                                 if (input(PIN_B4)!=0 && input(PIN_B5)==0) Goto sec;
                                                    else { delay_ms(250);
                                                           goto cero;}
                                            }
ter:  
  if (input(PIN_B4)!=0 && input(PIN_B5)!=0) { set_pwm1_duty(40);    
                                               output_low(PIN_B2); 
                                                 if (input(PIN_B4)!=0 && input(PIN_B5)!=0)goto ter;
                                                   else  { delay_ms(250);
                                                           goto cero;}
                                            }
cero:
     set_pwm1_duty(0);
     output_low(PIN_B2);



}
}
 
yo diria que mas que el programa la corriente que consume el motor en el momento del cambio del giro la cual al parecer es mayor que la que soportan los mofet's, debido a que justo en ese momento incrementa mucho la corriente, tienes algo conectado al motor o lo tienes libre? si tienes las caracteristicas del motor o una foto seria bueno. Lo del programa esta bien dificil que sea a menos que se quemen por la frecuencia? chequea la hoja de datos de los mofet's hablan con respecto a una capacitancia de entrada y tiempo de de recoperacion reversa hojealo y me avisas cualquier cosa...saludosss
 

Adjuntos

  • Irf540.pdf
    150.5 KB · Visitas: 30
El problema me parece que está en la forma como controlás los gates. Queda unida la rama de arriba con la de abajo, y si sabemos que la tensión G-S debe estar en unos 10 o 12 volts para que conduzca correctamente, para el fet de arriba, la tensión debería ser de VCC + 10 volts, y en el de abajo, solo 10 volts. De la forma que lo controlás, y si la tensión en MC34 es de digamos 22 volts es muy probable que estés quemando del gate del fet inferior.
 
Hola, gracias por responder...

yo diria que mas que el programa la corriente que consume el motor en el momento del cambio del giro la cual al parecer es mayor que la que soportan los mofet's, debido a que justo en ese momento incrementa mucho la corriente, tienes algo conectado al motor o lo tienes libre?

En realidad no son los mosfets que dice el diagrama, me olvide de mencionarlo, es que no tenia la libreria del que buscaba, uso los FQP50N06, un reemplazo de los IRFZ44N, aca esta el datasheet:
http://www.fairchildsemi.com/ds/FQ/FQP50N06.pdf

Los mosfets soportan un maximo de 50A y el maximo pico que pude medir en un cambio de sentido del motor fueron unos 7A, incluso los probe sin disipador y siempre estan frios. Estos valores los pruebo con y sin carga y practicamente es despreciable el incremento.

si tienes las caracteristicas del motor o una foto seria bueno. Lo del programa esta bien dificil que sea a menos que se quemen por la frecuencia? chequea la hoja de datos de los mofet's hablan con respecto a una capacitancia de entrada y tiempo de de recoperacion reversa hojealo y me avisas cualquier cosa

El motor es un toshiba modelo DGM-3460-2A del que no encontre la hoja de datos , una foto:

http://img812.imageshack.us/img812/1715/sdc132002.jpg

No se bien como sera lo de las capacidades, pero el datasheet habla de 1Mhz, yo estoy en 20Khz y y los tiempos de cambio estan en los 200 Ns maximo.

El problema me parece que está en la forma como controlás los gates. Queda unida la rama de arriba con la de abajo, y si sabemos que la tensión G-S debe estar en unos 10 o 12 volts para que conduzca correctamente, para el fet de arriba, la tensión debería ser de VCC + 10 volts, y en el de abajo, solo 10 volts. De la forma que lo controlás, y si la tensión en MC34 es de digamos 22 volts es muy probable que estés quemando del gate del fet inferior.

Hola Black Tiger1954, la verdad no creo que ese sea el problema ya que como te cuento arriba al probarlo accionando directamente con 5 volt los gates de cada rama me sale perfectamente los 12V, ahora el problema parece ser los del programa ya qie accionandolo con el es que se queman las cosas.

Saludos a todos.

Pregunta
¿ Se te quema SOLO al detenerlo o al invertir el giro ?
¿ O sea que mientras marcha . . . marcha ?

Controlandolo con lo del programa arrancan, pero al detenerlos se queman, ni si quiera alcanzan los cambios de giro, ahora activando directamente con 5 volt las entradas esto no pasa, funciona bien...Me leo y cada vez pienso mas que es el programa, pero no se porque..

Saludos!
 
Última edición:
lo que esta pasando es que los mosfet de la parte de arriba no quedan bien polarizados, si mides el voltaje entre gate y source probablemente te das cuenta que es menor al que necesita para conducir, esto hace que el voltaje entre drain y source sea alto y este se disipa en calor y hace que se te queme el mosfet, la solucion es utilizar mosfet tipo P para el lazo de arriba y tipo N para el de abajo, asi esatrias polarizando correctamente los mosfets.

aqui un ejemplo de lo que te digo... esta probado y funciona perfectamente..
http://www.todorobot.com.ar/documentos/hbridge-mosfet.pdf
saludos.
 
¿ Se te quema SOLO al detenerlo o al invertir el giro ?
¿ O sea que mientras marcha . . . marcha ?

Accionando con el control(los pics ) arrancan, pero al parar se queman, en cambio si solo exito las entradas con 5v esto no pasa, funciona bien...Me leo y cada vez pienso mas que el problema es el programa, pero no se porque..

Saludos!
 
otra cosa que veo en tu programa es que solo utilizas un solo modulo ccp (pwm), y asi solo podras controlar la velocidad en un solo sentido, ademas al ser cuatro entradas del puente H para controlar es mas complicado... revisa el que te pase (solo son dos entradas)...
tambien tengo un ejemplo funcionando en proteus con programacion en ccs, por si te sirve
 
exacto, no lo habia notado tiene razon jairo cuero, para que el puente funciene debes de tener dos npn y dos pnp de otra forma ni que quieras, si tu dices que le colocas directamente 5V y funciona sera por pura coincidencia, fijate el los puentes H con transistores todos tienen 2 NPN y 2 PNP.
 
lo que esta pasando es que los mosfet de la parte de arriba no quedan bien polarizados, si mides el voltaje entre gate y source probablemente te das cuenta que es menor al que necesita para conducir, esto hace que el voltaje entre drain y source sea alto y este se disipa en calor y hace que se te queme el mosfet, la solucion es utilizar mosfet tipo P para el lazo de arriba y tipo N para el de abajo, asi esatrias polarizando correctamente los mosfets.

Hola jairo, entiendo perfectamente lo que me decis, pero una cosa, los mosfets de canal P son caros y dificiles de conseguir, y para mitigar ese problema uso el elevador de tension con el mc34068. Sin este hay una caida de voltage de aprox 3 volt en los mos de arriba (no fueron hecho para esto) y tengo una salida funcionando perfectamente todo pero de 9V, con el elevador subo la tension de los gates de arriba a 15 v aproximadamente y asi elimino ese problema y obtengo los 12V.
Saludos.
 
Última edición:
bueno entonces el problema esta en el programa... no veo porque utilizas dos pic, cuando con uno perfectamente sale....este es el ejemplo que te decia
Código:
#include <16f877a.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP//, CCP2C1
#use delay(clock=4000000)
//#endif

#include <lcd.c>
#use fast_io(c)
#use fast_io(b)
#byte portb = 6

int1 direccion;
int    select,giro;
int16  rpm,duty,duty1,duty2;

 #INT_TIMER1
 void isr_tmr1()
 {rpm=2*get_timer0();
  set_timer0(0);
  set_timer1(20000);
}



 #INT_RB
 void isr_rb()
{ select=portb;
  giro=portb&16;
 select=select&224;

 switch(select)
 {case  32: duty=142; break;
  case  96: duty=285; break;
  case  64: duty=428; break;
  case 192: duty=570; break;
  case 224: duty=713; break;
  case 160: duty=856; break;
  case 128: duty=999; break;
  default : duty=0;   break;}

if (select==32)
   { switch(giro)
   {case   16:direccion=1;  break;
    case   0 :direccion=0;  break;
    default  :  break;}}

switch(direccion)
 {case   1: duty1=duty;
            duty2=0;  break;
  case   0: duty2=duty;
            duty1=0;  break;
  default : duty=duty1=duty2=0;
            break;}

 }


void main(){
disable_interrupts(GLOBAL);
set_tris_c(0);
set_tris_b(255);
setup_timer_0(RTCC_EXT_L_TO_H|RTCC_DIV_2);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_4);


setup_ccp1(CCP_PWM);
setup_ccp2(CCP_PWM);
setup_timer_2(T2_DIV_BY_16, 255, 1);

duty=duty1=duty2=rpm=0;
select=giro=0;
output_c(0);
output_b(0);
lcd_init();
lcd_gotoxy(1,1);
lcd_putc("CONTROL MOTOR DC");
delay_ms(1500);
lcd_putc("\f");

enable_interrupts(INT_RB);
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
output_high(PIN_C0);
set_timer0(0);
set_timer1(20000);

 while( TRUE )
 {lcd_gotoxy(1,1);
  printf(lcd_putc,"   RPM = %03lu",rpm);
  set_pwm1_duty(duty1);
  set_pwm2_duty(duty2);
  if(direccion==1&&rpm!=0)
   {lcd_gotoxy(1,2);
    lcd_putc(" Giro izquierda ");}
  if(direccion==0&&rpm!=0)
   {lcd_gotoxy(1,2);
    lcd_putc("  Giro derecha  ");}
  if(rpm==0)
   {lcd_gotoxy(1,2);
    lcd_putc("  MOTOR APAGADO ");}
  delay_ms(300);
  //output_low(portb);
  }
}

con Rb4 controlo el sentido de giro y con rb5,rb6,rb7 controlo la velocidad
 

Adjuntos

  • Imagen4.jpg
    Imagen4.jpg
    118.5 KB · Visitas: 23
Última edición:
bueno entonces el problema esta en el programa... no veo porque utilizas dos pic, cuando con uno perfectamente sale....este es el ejemplo que te decia

Gracias jairo, lo voy a probar y vemos que pasa, una pregunta, si manejas bien ccs, que problema le ves al que yo hice?
Yo lo hice con 2 16f628 por tres razones: uno porque ya los tenia, dos porque queria probar los ccp y tres porque no manejo muy bien el ccs y no se bien todavia manejar los timers.

Saludos
 
Atrás
Arriba