desktop

Curso de programación de PIC en PICBasic Pro

... me encuentro con el problema de que el mosfet Q3 que en proteus es Q6 del puente, calienta un monton y revisando con el osciloscopio de mi taller, he notado que la señal de control que llega al mosfet, es diferente incluso en el pin del micro, por lo que deje el microcontrolador funcionando solo y efectivamente, la señal que sale del micro tambien es diferente. aca subo el codigo y el diseño en proteus para ver si me dan una mianito. por cierto, la señal se ve normal en proteus pero en el diseño real no es lo mismo, de hecho, ni en proteus ni en el diseño real, la señal de control se parece a lo que deberia ser...
Hola amigo, un gusto saludarte.
Te comento que todos los software de simulacion, si bien son una excelente herramienta de diseño, hay que tener en cuenta que el software desprecia muchos factores, por eso, no hay que confiar un 100%.
El problema que presentas, puede estar dado por la carencia de una proteccion apropiada al semiconductor. Lo que debes hacer, es implementar una red snuber y estaria solucionado en un 50%. No vi el circuito, lo tienes por ahi en formato imagen? mas que nada para ver que consumo tiene la carga y que mosfet implementastes (digo imagen por que no estoy en mi PC y aca no tengo proteus)....
Bien no recuerdo si fuistes vos u otra persona que habia presentado un dimmer con pic, pero en ese mismo caso, tambien carecia de una proteccion y por ende, la respuesta de otro forista,que se le calentaba el triac y se le quemaba...
Para ese caso en particular, la proteccion es una sencilla bobina de autoinduccion, que si se le asocia dos elementos pasivos mas (resistencia y capacitor), se puede controlar hasta un pequeño motor AC.
Saludos


PD: te sumo teoria al respecto
http://pels.edv.uniovi.es/pels/Pels/Pdf/Leccion Snubbers.pdf
http://www.uv.es/marinjl/electro/transistores.html
 
Última edición:
Hola amigo, un gusto saludarte.
Te comento que todos los software de simulacion, si bien son una excelente herramienta de diseño, hay que tener en cuenta que el software desprecia muchos factores, por eso, no hay que confiar un 100%.
El problema que presentas, puede estar dado por la carencia de una proteccion apropiada al semiconductor. Lo que debes hacer, es implementar una red snuber y estaria solucionado en un 50%. No vi el circuito, lo tienes por ahi en formato imagen? mas que nada para ver que consumo tiene la carga y que mosfet implementastes (digo imagen por que no estoy en mi PC y aca no tengo proteus)....
Bien no recuerdo si fuistes vos u otra persona que habia presentado un dimmer con pic, pero en ese mismo caso, tambien carecia de una proteccion y por ende, la respuesta de otro forista,que se le calentaba el triac y se le quemaba...
Para ese caso en particular, la proteccion es una sencilla bobina de autoinduccion, que si se le asocia dos elementos pasivos mas (resistencia y capacitor), se puede controlar hasta un pequeño motor AC.
Saludos


PD: te sumo teoria al respecto
http://pels.edv.uniovi.es/pels/Pels/Pdf/Leccion Snubbers.pdf
http://www.uv.es/marinjl/electro/transistores.html

pues muchas gracias amigo por el interes. mira, aca subo unas imagenes de la simulacion en proteus, los codigos en pbp de las dos secuencias que estoy experimentando y las formas de ondas que obtengo con ellas. primero tengo que aclarar que en esta simulacion estoy usando transistores y no mosfets por el hecho de que, asi ahorro recursos en la pc para la simulacion.
vamos con la primera:

esquematico:
esquematico.JPG

codigo sin pwm

Código:
@ DEVICE MCLR_ON,  hs_osc, WDT_OFF, LVP_OFF, BOD_OFF, PWRT_ON, PROTECT_OFF
define osc 20
CMCON=7
TRISA=%11111111 
TRISB=%00000000

pas:
portb=%00000000
high portb.0
high portb.5
pause 10

portb=%00000000
high portb.0
high portb.6
pause 10

portb=%00000000
high portb.1
high portb.6
pause 10

portb=%00000000
high portb.1
high portb.4
pause 10

portb=%00000000
high portb.2
high portb.4
pause 10

portb=%00000000
high portb.2
high portb.5
pause 10
goto pas

forma de onda obtenida:
ondas.JPG

se puede decir que con este codigo, obtengo la señal correcta pero sin pwm por lo que los mosfets calientan muchisimo. (correcto pero no viable)

codigo con pwm:
Código:
@ DEVICE MCLR_ON,  hs_osc, WDT_OFF, LVP_OFF, BOD_OFF, PWRT_ON, PROTECT_OFF
define osc 20
CMCON=7
TRISA=%11111111 
TRISB=%00000000

pas:
portb=%00000000
pwm portb.0,50,1
high portb.5
pause 10

portb=%00000000
pwm portb.0,50,1
high portb.6
pause 10

portb=%00000000
pwm portb.1,50,1
high portb.6
pause 10

portb=%00000000
pwm portb.1,50,1
high portb.4
pause 10

portb=%00000000
pwm portb.2,50,1
high portb.4
pause 10

portb=%00000000
pwm portb.2,50,1
high portb.5
pause 10
goto pas

forma de onda obtenida:
pwm.JPG
la señal obtenida no es correcta y por lo tanto, no sirve

me gustaria saber como lograr hacer que la señal pwm se presente en la parte positiva de la onda cubriendo todo el tiempo on de la misma y no como dos pulsos que ademas, estan invertidos...
saludos y espero alguien me de una mano con esto...(y)
 
Me preocupan esos Picos que se ven en las graficas..... casi podria asegurar que son corto-circuitos entre los transistores en la simulacion, y la posible causa de que se calienten en la aplicacion...

Que transistores manejas? y cuales son las caracteristicas de la carga?
 
Que transistores manejas? y cuales son las caracteristicas de la carga?

hola chico.
Si, ami tambien me llama la atencion esos picos que se ven en la simulacion. te cuento que estoy utilizando mosfets del tipo IRFZ44N que segun el datasheet, se aguantan hasta 49 amper.
tambien estoy utilizando unos pre driver en los mosfets T1, T2, T3, del tipo bc548 Q7,8y9 configurados como inversor. aca subo el puente de transistores que estoy utilizando, en un rar porque la imagen es muy grande jeje... saludos y gracias por contestar :) ah, el codigo para este puente es algo diferente porque los estados logicos que se necesitan son diferentes al del diagrama anterior.
aca una muestra del codigo sin pwm.

Código:
@ DEVICE MCLR_ON,  hs_osc, WDT_OFF, LVP_OFF, BOD_OFF, PWRT_ON, PROTECT_OFF
define osc 20
CMCON=7
TRISA=%11111111 
TRISB=%00000000

pas:
portb=%00000111
low portb.0
high portb.5
pause 10

portb=%00000111
low portb.0
high portb.6
pause 10

portb=%00000111
low portb.1
high portb.6
pause 10

portb=%00000111
low portb.1
high portb.4
pause 10

portb=%00000111
low portb.2
high portb.4
pause 10

portb=%00000111
low portb.2
high portb.5
pause 10
goto pas
 

Adjuntos

  • puente h.rar
    94.5 KB · Visitas: 130
Última edición:
OK... van unas preguntas por que no se mucho de programacion en bsic...

Veo que defines el oscilador a 20, son 20MHz? por que estudiando la hoja de datos el tiempo de apagado del mosfet es de 44nS y se acerca mucho al ciclo de trabajo del PIC que estimo que es de 200nS, si no se cuida el codigo puede haber un caso donde 2 mosfets (Q1 y Q4 o Q2 y Q5 o Q3 y Q6) pueden estar encendidos al mismo tiempo y provocar un corto...

Es necesario el pre-driver inversor? no podrias encender todos los mosfets directos???
 
Dario:
La verdad es que yo no entiendo lo que necesitas porque nunca he manejado un brushless, pero ya intentaste esto...
Código:
pas:
portb=%00100001
pause 10
portb=%01000001
pause 10
portb=%01000010
pause 10
portb=%00010010
pause 10
portb=%00010100
pause 10
portb=%00100100
pause 10
goto pas
 
hola chico.
si, el oscilador es de 20mhz pero la pausa entre conmutaciones es de 10 milisegundos osea que eso esta bien lejos del ciclo de trabajo del pic.

puede haber un caso donde 2 mosfets (Q1 y Q4 o Q2 y Q5 o Q3 y Q6) pueden estar encendidos al mismo tiempo y provocar un corto...

mi sospecha es justamente esa ya que, he visto por ahi en una pagina de bicicletas electricas que para controlar un motor trifacico de contina, usan un pic16f84 y pic basic para su programacion y las bobinas son conmutadas directamente sin pwm. segun su diseñador, el codigo es totalmente funcional, pero yo lo he modificado para un f628, lo he cargado y sin pwm los mosfets hierven hasta su ruptura. y eso que estoy usando un motor de una cd rom sin modificar. este es el sitio http://bicicletaselectricas.wordpress.com/programa-de-control-para-un-motor-de-bicicleta-con-un-pic/
edit2. (claro, el sujeto utilizo reles para la conmutacion, eso explica su funcionamiento, de otra manera le hubiese pasado lo mismo que ami :D )
si lubeck ya lo intente... pero el resultado es el mismo...
saludosss
 
Última edición:
Ya revise la secuencia y es correcta... asi que el problema debe estar en otro lado.... no sera que tienes algun cable mal conectado? que motor estas usando y cuantos cables tiene?

tambien comenzaria por quitar el predriver... y hacer todo positivo...
 
Hola amigo, perdon por tardar.... como no me llega notificaciones a mi correo, me olvido. Respecto a tu tema, si es esa la configuracion que estas implementando en tu etapa de potencia, esta claro el problema, es como te comentaba al principio (te estaria faltando la protecciones adecuadas para los transistores)... Yo en tu caso, en vez de usar los npn, implementaria un array con entrada ttl. .. si no le pifio, creo que el TTL era el uln2803...
Te digo de implementar el array, ya que este ya viene con sus propias protecciones internas.
De ultima, si queres usar ese mismo, implementa un zener segun la carga o quizas, si es pequeñó el motor, con un simple diodo en paralelo al transistor ya tendria que funcionar perfecto en frecuencias bajas... en altas frecuencias no sabria decirte...
 
no sera que tienes algun cable mal conectado?
jeje... ya revise las conexiones y nada... esta todo ok.
que motor estas usando y cuantos cables tiene?
estoy usando un motor de una cd rom
tambien comenzaria por quitar el predriver... y hacer todo positivo...
ya he probado eso y nada...

Hola amigo, perdon por tardar.... como no me llega notificaciones a mi correo, me olvido.
jeje... pues no hay problemas amigo, no te preocupes :D

Respecto a tu tema, si es esa la configuracion que estas implementando en tu etapa de potencia, esta claro el problema, es como te comentaba al principio (te estaria faltando la protecciones adecuadas para los transistores)...
¿ya viste el rar? estoy utilizando mosfets. les cuento que esta etapa de potencia, esta copiada de un variador brushles que funciona y por lo tanto, no tengo dudas al respecto. aca lo pueden ver en el diagrama del rar se me pasaron por alto 3 resistencias que van a masa jeje...
saludos y gracias por responder. PD:(seria muy facil hacer este variador pero yo quiero aprender como hacerlo yo mismo desde cero :D)
 
Última edición:
hola gentes yo por aqui de nuevo para dejarles mis avances en esto del blmc. :) bueno, al final me decidi por generar una señal PWM maestra por hardware con el pic y luego inyectarla al puente mediante puertas AND. la señal que obtuve es la siguiente:
pwm hard.JPG
como veran, la señal es correcta y todo de maravillas en la siguiente simulacion con transistores:
diagrama and.JPG
pero el verdadero problema se da en el diseño real y se da porque la conmutacion de los mosfets, inserta demasiado ruido en la alimentacion del micro haciendo que este, conmute erraticamente y por lo tanto, se da el calentamiento extremo de los mismos. ese ya es un problema que no se soluciona con programacion sino con el diseño de algun filtro para la tension de la circuiteria logica. aqui dejo el diseño final del inversor trifacico que voy a utilizar. obviamente el tema de la programacion del micro no se termina aqui ya que, todavia falta la deteccion de cruce por cero y su posterior procesado, asi que estense listos para una nueva consulta de mi parte jejeje :D saludos a todos y gracias por ayudarme amigos :apreton:

edit2: me olvidaba de dejarles tambien el codigo que utilice jeje...

@ DEVICE MCLR_ON, hs_osc, WDT_OFF, LVP_OFF, BOD_OFF, PWRT_ON, PROTECT_OFF
define osc 20
CMCON=7
TRISB.3 = 0 ' RB.3=PWM output
PR2 = 25 ' Set PWM for approximately 38KHz
CCPR1L = 255 ' Set PWM Duty-Cycle to 50%
CCP1CON = %00001100 ' Mode select = PWM
T2CON = %00000100 ' Timer2 ON + 1:1 prescale
TRISA=%11111111
TRISB=%00000000

paso2:
hpwm 2,175,2700
portb=%00100001
pause 10
portb=%01000001
pause 10
portb=%01000010
pause 10
portb=%00010010
pause 10
portb=%00010100
pause 10
portb=%00100100
pause 10
goto paso2
end
 

Adjuntos

  • hpuente.rar
    113.3 KB · Visitas: 103
Última edición:
Dario, como te comente desde un principio, el problema que persistes, es justamente problemas por carencia de una proteccion apropiada, de ahi mi recomendacion de que miraras la teoria sobre redes snuber... :unsure:
Una vez mas, te recomiendo que leas aunque sea este documento, que es un poco mas practico qu8e el resto, y notaras que con la asociacion de un par de elementos mas, tu problema se va ;)
http://es.scribd.com/doc/54810284/Diseno-y-constr-de-un-inversor-trifasico
Saludos
 
hola gentes yo por aqui de nuevo para dejarles mis avances en esto del blmc. :) bueno, al final me decidi por generar una señal PWM maestra por hardware con el pic y luego inyectarla al puente mediante puertas AND. la señal que obtuve es la siguiente:
Ver el archivo adjunto 58541
como veran, la señal es correcta y todo de maravillas en la siguiente simulacion con transistores:
Ver el archivo adjunto 58540
pero el verdadero problema se da en el diseño real y se da porque la conmutacion de los mosfets, inserta demasiado ruido en la alimentacion del micro haciendo que este, conmute erraticamente y por lo tanto, se da el calentamiento extremo de los mismos. ese ya es un problema que no se soluciona con programacion sino con el diseño de algun filtro para la tension de la circuiteria logica. aqui dejo el diseño final del inversor trifacico que voy a utilizar. obviamente el tema de la programacion del micro no se termina aqui ya que, todavia falta la deteccion de cruce por cero y su posterior procesado, asi que estense listos para una nueva consulta de mi parte jejeje :D saludos a todos y gracias por ayudarme amigos :apreton:

edit2: me olvidaba de dejarles tambien el codigo que utilice jeje...


Hola:

Como curiosidad. ¿Realmente hace falta usar las puertas que has puesto?

http://www.educaplus.org/play-164-Puerta-lógica-AND.html
 
Dario, como te comente desde un principio, el problema que persistes, es justamente problemas por carencia de una proteccion apropiada, de ahi mi recomendacion de que miraras la teoria sobre redes snuber...
perdon por mi ignorancia :oops: es que yo no conocia esa clase de proteccion con el nombre de SNUBBER :oops: ahora estoy viendo la forma de implementarla en mi circuito :)

Como curiosidad. ¿Realmente hace falta usar las puertas que has puesto?
pues generando una sola señal pwm si...
se que se puede hacer que el micro genere una señal pwm independiente por cada salida pero ya me canse de experimentar...;) lo que todavia no entiendo, es porque cuando diseñe el controlador brushless discreto, no tube problemas. sin embargo con micro deberia ser mas facil pero no es asi para mi sorpresa... :confused:
saludosss
 
Lo que meta trata de decirte es que el circuito se puede simplificar aun mas.... siento que quieres correr antes de aprender a caminar...

Primero elimina esas AND que salen sobrando, solo invierte los bits desde dentro del codigo del programa, el PIC puede hacer eso sin problemas... Despues te recomendaria que probaras el motor con un puente de transistores normales y revisaras que todo funciona bien... para posteriormente hacer el mismo intento cambiando los transistores por los MOSFETS

Asi vas eliminando errores y vas asegurando que cada etapa anterior funciona bien antes de pasar a la siguiente...
 
...ahora estoy viendo la forma de implementarla en mi circuito :)...
Implementa un sencillo diodo en el transistor, y si vemos despues con el oscillooscopio en la placa que estas experimentando que mejora la señal, con los datos de corriente del motor, le sumamos un capacitor y una resisitencia... necesitas un diagrama para ver como va el diodo?chiflame cualquier cosa, saludos
 
Implementa un sencillo diodo en el transistor
¿te referis a algo como esto?
los irfz44n, tienen diodo interno...
Dibujo.JPG

Primero elimina esas AND que salen sobrando, solo invierte los bits desde dentro del codigo del programa, el PIC puede hacer eso sin problemas
:unsure: perdon si estoy entendiendo mal pero,esas AND no estan ahi para invertir bits, estan ahi para distribuir la señal PWM a cada mosfet. la señal pwm, no son bits, es una señal de onda cuadrada de anchura variable con la que se puede variar el torque del motor. :)

hola que tal, estuve viendo tu idea y esta muy buena he conseguido algo de información que te puede ayudar no se si ya la has visto te la coloco para que lo revises, estuve viendo que si necesitas de un filtro para el circuito a la final.

http://www.neoteo.com/Default.aspx?s...>>+buscar+
gracias reyvilla. esta muy interesante, lo voy a estudiar un poco, talves me sirva.
saludosss
 
Última edición:
Esas AND las puedes quitar y hacer los PWM en cada pin del PIC. Si es más fácil hacerlo como dices ya que en un sólo pin del PIC, puedes generar tres PWM iguales para los transistores. Por un lado es buena idea, si lo haces directamente con el PIC y te ahorra electrónica, mejor que mejor, aunque tengas que programar mucho.

Cuanto más complejo es el circuito, más posibilidad hay de tener errores, más cuesta encontrarlos, más caro, etc.

Usted decide campeón.
 
Esas AND las puedes quitar y hacer los PWM en cada pin del PIC. Si es más fácil hacerlo como dices ya que en un sólo pin del PIC, puedes generar tres PWM iguales para los transistores. Por un lado es buena idea, si lo haces directamente con el PIC y te ahorra electrónica, mejor que mejor, aunque tengas que programar mucho.

Cuanto más complejo es el circuito, más posibilidad hay de tener errores, más cuesta encontrarlos, más caro, etc.

Usted decide campeón.

el problema es que cuando genero el pwm en cada pin del pic, al parecer ocurre un retraso que termina deformando la señal como habras visto en los post anteriores. al final de tanto intentar hacerlo asi, me canse y decidi aumentar un componenta mas. aparte de eso, generar el pwm asi, me ahorra proceso del micro ya que es generada por hardware interno del pic. si conoces alguna manera de que el comando PWM del pbp funcione sin deformar la señal, me avisas:D gracias amigo :apreton: .
saludosss
 
Atrás
Arriba