Autor Tema: Problema con INVERSOR CC/CA de 60Hz  (Leído 37068 veces)

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

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Problemas con PWM e interrupcion externa en pic18f4550 al realizar una onda seno
« Respuesta #15 en: 03 de Agosto de 2013, 13:35:23 »
Fijate aqui esta el hilo donde hicimos hace poco un PWM con el modulo CCP es en un 12F pero no debe cambiar mucho:

http://www.todopic.com.ar/foros/index.php?topic=40247.0

Desconectado pgvs25

  • PIC12
  • **
  • Mensajes: 58
Re: Problemas con PWM e interrupcion externa en pic18f4550 al realizar una onda seno
« Respuesta #16 en: 04 de Agosto de 2013, 09:32:00 »
Fijate aqui esta el hilo donde hicimos hace poco un PWM con el modulo CCP es en un 12F pero no debe cambiar mucho:

http://www.todopic.com.ar/foros/index.php?topic=40247.0

ahora luego de descansar un poco del trabajo reviso... he estado un poco cargado en el trabajo asi q no he podido estar pendiente estos ultimos dias...

No, la unica interrupcion que veo que entra es TMR0 y como no borras ese flag no sale de ella. Para que entrara esa interrupcion tendria que haber cambio de estado y no lo hay.


cierto pero no se porque antes de que cambie el flanco de lectura me estaba entrando en la interrupcion a los 412,6uS como tu me lo diste viendo no se si para asegurar hay q declarar como alto el bit de recepcion antes del inicio del programa...


Ahora va a la tabla al cabo de 1.0568mS y carga los valores en CCPR1L, que seguramente esta bien??? porque segun dice aqui, pero mirate en los ejemplos de Suki, seguro que tiene un ejemplo practico de aplicacion. Hace muy poco estuvimos aqui mismo peleando con esto, a ver si te lo busco.



Tiene q cargar en la tabla al CCPR1L a los 260,468 Useg, para que luego de que haya cogido las 64 muestras en la tabla sean los 16,67ms de una frecuencia de 60Hz, asi que no esta tan bien.


Pero esta interrupcion nunca se activa, porque el CCPR1H no se actualiza esta siempre a 0,TMR2 debe estar en un preescaler y postscaler muy alto (imposible para generar 6KHz) en cambio TMR0 corre de la hostia  :lol: pero como borras el flag no sale de interrupcion???.


TMR2 esta asigado un Preescaler 1:8 y el postscaler 1:1 segun lo que yo declaro ahi... talves lo estoy declarando mal...

Esta es la segunda ves que me nombras el generar 6Khz, para que 6Khz?? intentare hacer algo para que sea 6khz el TMR2 q segun veo ese debe ser la frecuencia de muestreo


Yo es que el modulo CCP no lo suelo usar, prefiero hacer los PWM a "mano" porque en trifasica tengo que generar 6 PWM y hay que irse a PIC de gama alta que los tengan.



Y como es que hacer los PWM a "mano"?? y entiendo para trifasica es cierto que necesitas 6 o 3ECCP


Mirate bien como trabaja TMR2 y como se configura el modulo CCP, porque en esto es donde esta el principal problema, despues o mañana si tengo un rato te busco un hilo en el que hace poco estuvimos peleando con esto mismo, la verdad como lo uso tan poco no recuerdo como va.

ahora revisare esto tambien... quiero descansar unas horas ya que por mi trabajo no he podido dormir nada... en unas horas me pongo a revisar.

Gracias por tu tiempo

Saludos, Pedro.
« Última modificación: 04 de Agosto de 2013, 21:31:16 por pgvs25 »

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Problemas con PWM e interrupcion externa en pic18f4550 al realizar una onda seno
« Respuesta #17 en: 05 de Agosto de 2013, 13:28:42 »
Citar
cierto pero no se porque antes de que cambie el flanco de lectura me estaba entrando en la interrupcion a los 412,6uS como tu me lo diste viendo no se si para asegurar hay q declarar como alto el bit de recepcion antes del inicio del programa...

La interrupcion que entra es TMR0, las dos ultimas pruebas que hice estoy seguro que es esta interrupcion la que entra y ya no sale de ella, por tanto no debe estar bien, ya que mientras esta en una interrupcion no puede atender a otra.

Citar
Esta es la segunda ves que me nombras el generar 6Khz, para que 6Khz?? intentare hacer algo para que sea 6khz el TMR2 q segun veo ese debe ser la frecuencia de muestreo

Pues porque me parecio leerlo en algun mensaje tuyo  :lol: Los variadores industriales traen por defecto 4KHz de portadora y varian la frec resultante (senoidal) entre 0 y unos 300Hz, y se pueden poner para 8KHz, 12KHz y 16Khz y creo que tambien para 1KHz, asi que cualquiera de esta frec te vale, la que mejor te vaya.

Citar
Y como es que hacer los PWM a "mano"??

Muy facil te dejo un hilo donde se lo explicaba hace algun tiempo a una chica, este es muy basico se puede hacer mejor:

http://www.todopic.com.ar/foros/index.php?topic=33515.0

Citar
y entiendo para trifasica es cierto que necesitas 6 o 3ECCP

Para trifasica hay que generar 6 PWM, 3 simultaneos en cada momento, son 6 porque son dos por fase, uno para semiciclo positivo y otra para el negativo, igual que en monofasico hay que hacer dos uno para cada semiciclo, como ya te dije en un post anterior.

Desconectado pgvs25

  • PIC12
  • **
  • Mensajes: 58
Re: Problemas con PWM e interrupcion externa en pic18f4550 al realizar una onda seno
« Respuesta #18 en: 05 de Agosto de 2013, 18:24:24 »
Con respecto a la primera cita estoy revisando el codigo a ver si encuentro algo... solamente que como te comente anteriormente ando un poco a full con mi trabajo...

con respecto a la segunda cita, la verdad no recuerdo, pero puede ser que por ahi lo haya puesto jejejeje ahora estoy configurando el TMR2 para 6kHz ya en poco tiempo te paso el codigo para que me ayudes viendo que esta pasando...

A la tercera cita, heche un vistazo rapido y lo que hace es jugar con demoras... mas luego leere mas detenidamente porque me interesa el tema pero ando un poco a full...

y con respecto a tu ultima cita....
totalmente de acuerdo en lo que me dices pero tambien te habia comentado del ECCP, es un modulo de salida de PWM que es complementario, es decir mientras estes en el un pin en salida alta en el otro pin tienes salida baja.. incluso se puede introducir un tiempo muerto entre el cambio del uno y el otro... para que lo veas mas grafico y de pronto te interesa saber mas pues puedes verlo en el datasheet del 18f4550 que tiene uno de esos modulos... aqui te dejo el link para el datasheet

http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en010300

El modulo ECCP se encuentra a partir de la pagina 153 hasta la 163 pero para que se te haga un poco mas facil por si no cuentas con mucho tiempo solamente puedes fijarte en las graficas del salida en la pagina 157 que se encuentan los modos de salida simple, de medio puente y de puente entero, asi como en la 158 y 159 con una pequeña explicacion...

Saludos, Pedro.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Problemas con PWM e interrupcion externa en pic18f4550 al realizar una onda seno
« Respuesta #19 en: 06 de Agosto de 2013, 13:13:52 »
Citar
con respecto a la segunda cita, la verdad no recuerdo, pero puede ser que por ahi lo haya puesto jejejeje ahora estoy configurando el TMR2 para 6kHz ya en poco tiempo te paso el codigo para que me ayudes viendo que esta pasando...

Si vas a volver a recalcular, hazlo para los dos semiciclos, porque tarde o temprano tendras que hacerlo, si por ejemplo alimentas una lavadora, el motor no funcionara (tiene que haber cambio de polaridad) en una nevera creo que tampoco, casi todos los equipos que vengan para AC te daran problemas. Si trabajas a 6KHz tendras PWMs de 166,67uS y con 4KHz de 250uS, creo que es mas manejable 4KHz pero como te vaya mejor, entre 1 y 16KHz no hay problema.

Por otro lado una senoide de 48, 51, 54 niveles es una senoide muy muy buena, incluso una de 30 es ya muy buena (siempre multiplos de 3, para eliminar armonicos), eso si 30 de subida de 1/30 de variacion y oros 30 de bajada y esto en cada semiciclo (60 en cada semiciclo de 8,33mS), tendrias que meter 120 PWMs (minimo, si no quieres darle unos pocos PWMs en la V max. de la onda) en cada 16,67mS del ciclo completo, ahora si tu quieres hacerla de 256 niveles pues tambien vale, te quedara una senoide espectacular.

Citar
A la tercera cita, heche un vistazo rapido y lo que hace es jugar con demoras... mas luego leere mas detenidamente porque me interesa el tema pero ando un poco a full...

Si exacto, como ya te dije hay mejores maneras de hacerlas, bien con TIMER o con demoras y TIMER.

Citar
y con respecto a tu ultima cita....
totalmente de acuerdo en lo que me dices pero tambien te habia comentado del ECCP, es un modulo de salida de PWM que es complementario, es decir mientras estes en el un pin en salida alta en el otro pin tienes salida baja.. incluso se puede introducir un tiempo muerto entre el cambio del uno y el otro... para que lo veas mas grafico y de pronto te interesa saber mas pues puedes verlo en el datasheet del 18f4550 que tiene uno de esos modulos... aqui te dejo el link para el datasheet

http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en010300

El modulo ECCP se encuentra a partir de la pagina 153 hasta la 163 pero para que se te haga un poco mas facil por si no cuentas con mucho tiempo solamente puedes fijarte en las graficas del salida en la pagina 157 que se encuentan los modos de salida simple, de medio puente y de puente entero, asi como en la 158 y 159 con una pequeña explicacion...

Yo en un variador de frecuencia trifasico que hice hace algunos años y que no llegue a acabar, las hice con TMR0 y demoras, me quedo un poco largo el porgrama porque variaba entre 1Hz y 150Hz y para cada frec hacia una demora, el dia que lo retome lo mejorare  :lol: :lol:

Ya he mirado esos modulos y van bien pero sacan 4 PWMs (complementarios 2 a 2), ademas despues de generar las distintas frecuencias hay que hacer muchas cosas ya que era para un coche electrico y hay que regular potencia, rampas de aceleracio y decelaracion, hacer frenadas regenerativas, leer el acelerador, sensores de temperatura (tanto del motor como del variador), protecciones de sobrecorriente y cortocircuito y algo mas que se me olvidara y dentro de la onda (que no tiene ninguna interrupcion) ya tenia calculados los momentos en que podia hacer todas estas lecturas.

Me estas metiendo ganas de ponerme con el variador otra vez  :lol:, lo que pasa es que no tengo el coche para ponerla a funcionar  :5] :lol:

Desconectado pgvs25

  • PIC12
  • **
  • Mensajes: 58
Re: Problemas con PWM e interrupcion externa en pic18f4550 al realizar una onda seno
« Respuesta #20 en: 25 de Agosto de 2013, 15:18:20 »
Citar
Para trifasica hay que generar 6 PWM, 3 simultaneos en cada momento, son 6 porque son dos por fase, uno para semiciclo positivo y otra para el negativo, igual que en monofasico hay que hacer dos uno para cada semiciclo, como ya te dije en un post anterior.

Ahora que tengo un poco mas de tiempo estuve leyendo mas tus ayudas... aqui entonces me encuentro con que necesitare 2 modulos ccp (yo estoy haciendo monofasico nada mas) ahora bien el 16f871 tiene solamente un modulo ccp asi que no me serviria para mi proyecto.

Citar
Si vas a volver a recalcular, hazlo para los dos semiciclos, porque tarde o temprano tendras que hacerlo, si por ejemplo alimentas una lavadora, el motor no funcionara (tiene que haber cambio de polaridad) en una nevera creo que tampoco, casi todos los equipos que vengan para AC te daran problemas. Si trabajas a 6KHz tendras PWMs de 166,67uS y con 4KHz de 250uS, creo que es mas manejable 4KHz pero como te vaya mejor, entre 1 y 16KHz no hay problema.

Por otro lado una senoide de 48, 51, 54 niveles es una senoide muy muy buena, incluso una de 30 es ya muy buena (siempre multiplos de 3, para eliminar armonicos), eso si 30 de subida de 1/30 de variacion y oros 30 de bajada y esto en cada semiciclo (60 en cada semiciclo de 8,33mS), tendrias que meter 120 PWMs (minimo, si no quieres darle unos pocos PWMs en la V max. de la onda) en cada 16,67mS del ciclo completo, ahora si tu quieres hacerla de 256 niveles pues tambien vale, te quedara una senoide espectacular

Entiendo pero me confundides un poco con lo de los semiciclos, al parecer mas bien tendria que hacerlos con un pic q tenga 2 modulos ccp o no??

ahora con la opcion que me dijiste de "manual", pienso que podria utilizar cualquier pic, verdad?? es solamente cuestion de darle los tiempos al timer y asignar la salida o me equivoco??

La verdad es que no necesariamente tengo que utilizar el modulo ccp, solamente tiene q funcionar pero pues si hay la oportunidad y se aprende pues mejor pero creo que eso lo dejare para cuando tenga un poco mas de tiempo...

La tabla que estaba haciendo tiene 64 valores y si los pones en un exel y lo graficas (en decimal claro esta) te da un ciclo completo.

voy a intentar hacerlo con demoras en el mismo pic ya que creo que tu me podrias ayudar ya que como dije enteriormente este pic no tiene 2 modulos ccp. el otro pic que tenia a la mano y si tiene 2 modulos ccp es el 18f4550 pero creo que ahi se te hace un poco dificil ayudarme asi que prefiero hacerlo por ahora con demoras y mas adelante a ver si lo hago con pwm.

Muchas gracias por tu ayuda y apenas tenga el codigo lo cargo por aqui a ver si me hechas una mano.

Saludos, Pedro.

Desconectado pgvs25

  • PIC12
  • **
  • Mensajes: 58
Re: Problemas con PWM e interrupcion externa en pic18f4550 al realizar una onda seno
« Respuesta #21 en: 26 de Agosto de 2013, 13:11:58 »
Nuevamente por molestar....

Amigo Tapi8,

Ya tengo en PWM... a ver si le hechas un vistazo y me indicas como podria mejorarlo... lo hice basandome en el hilo y el programa que me recomendaste donde le indicabas a la chica....

Ahora lo que tengo que hacer es sincronizarla con la red... a ver si me hechas una mano con eso... en mi pais es 60Hz, es por eso que cada ciclo dura aproximadamente 16,66ms...

Lo que yo pensaba era cortar la forma de onda en el momento que se encuentre, para de esta manera igualar a la red, es decir activar una interrupcion externa en el pic, y mediante ella hacer que la forma de onda se resetee y me mande al inicio de la onda, esto debido a que hay que sincronizarla mediante un detector de cruce por cero... no se si se te ocurre una mejor manera... a ver si me la haces saber.... ademas no se si exista algun problema al resetear de dicha forma la sinusoide, si sabes algo por favor me lo indicas....

Y bueno ahi te dejo el codigo que lo tengo hasta ahora, intentare seguirlo trabajando a fin de mejorarlo pero ya veremos que se puede hacer...

Saludos, Pedro.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Problemas con PWM e interrupcion externa en pic18f4550 al realizar una onda seno
« Respuesta #22 en: 26 de Agosto de 2013, 14:52:49 »
Citar
Ya tengo en PWM... a ver si le hechas un vistazo y me indicas como podria mejorarlo... lo hice basandome en el hilo y el programa que me recomendaste donde le indicabas a la chica....

Bueno ahora por lo menos se activa y se desactiva la salida ya hace PWM, ya es algo  :lol:. Unas preguntas importantes:

¿Este PIC va a estar dedicado a hacer esto solamente?
¿A que frec. tienes el PIC trabajando?
¿De cuantos niveles esta haciendo la onda?
¿A que frec. de portadora estas trabajando?

Citar
Ahora lo que tengo que hacer es sincronizarla con la red... a ver si me hechas una mano con eso... en mi pais es 60Hz, es por eso que cada ciclo dura aproximadamente 16,66ms...

Para sincronizarla con la red hay que detectar el cruce por 0 de la red, el que vas a generar tu no necsitas detectarlo, porque lo generas tu y por tanto sabes cuando cruza, que es cuando generas un PWM sin DUTTY cada 8,33mS.

Detectar el cruce por 0 la mejor manera es con un optoacoplador NPN, tambien se puede hacer con un simple resistencia pero queda el PIC mas expuesto al ruido y esto puede afectarle mucho...¿Esto no va a funcionar cuando se va la corriente??? ¿O tambien funcionara cuando haya corriente?

Citar
Lo que yo pensaba era cortar la forma de onda en el momento que se encuentre, para de esta manera igualar a la red, es decir activar una interrupcion externa en el pic, y mediante ella hacer que la forma de onda se resetee y me mande al inicio de la onda,

Si exactamente conectas un opto o una R a un pin del PORTB  y te porvocara dos interrupciones una en flanco ascendente, esta sera la valida que se activara unos uS antes del cruce por 0, y otra en el flanco descendente, esta no la tendras en cuenta, diferenciaras una de la otra porque el pin donde esta estara a 1 en la primera, la que vale y en la otra que no vale estara a 0. Como la que vas a tomar como valida es unos uS antes, reatardas esos uS y empiezas a generar y ya estara sincronizada ¿No?

Citar
Y bueno ahi te dejo el codigo que lo tengo hasta ahora, intentare seguirlo trabajando a fin de mejorarlo pero ya veremos que se puede hacer...

Le echare un ojo, pero ando un poco liado estos dias, vale, en cuando tenga un rato te lo miro, no me olvido.


Desconectado pgvs25

  • PIC12
  • **
  • Mensajes: 58
Re: Problemas con PWM e interrupcion externa en pic18f4550 al realizar una onda seno
« Respuesta #23 en: 26 de Agosto de 2013, 19:29:59 »
Citar
Bueno ahora por lo menos se activa y se desactiva la salida ya hace PWM, ya es algo  :lol:. Unas preguntas importantes:

¿Este PIC va a estar dedicado a hacer esto solamente?
¿A que frec. tienes el PIC trabajando?
¿De cuantos niveles esta haciendo la onda?
¿A que frec. de portadora estas trabajando?

Si, el PIC va a estar dedicado a hacer esto nada mas, si acepto recomendaciones.

La frecuencia del cristal es a 20MHZ

Son 30 por cada cuarto de onda o sea son 120 niveles que conforman la onda (60 con el semiciclo positivo de 8,33ms con la una salida y los otros 60 con la otra salida que seria el semiciclo negativo)

No tengo muy clara la frecuencia de la portadora, hice calculos segun lo que necesitaba para el numero de niveles para de esa manera manejar las demoras y los tiempos de encendido y apagado, a ver si me puedes explicar mejor esto.


Citar
Detectar el cruce por 0 la mejor manera es con un optoacoplador NPN, tambien se puede hacer con un simple resistencia pero queda el PIC mas expuesto al ruido y esto puede afectarle mucho...¿Esto no va a funcionar cuando se va la corriente??? ¿O tambien funcionara cuando haya corriente?

Sip... lo habia pensado de esa manera... tengo armado uno pero aun me falta afinarle un poco mas....

Esto si va a funcionar cuando no hay corriente y tambien cuando hay corriente, porque la pregunta??

Citar
Si exactamente conectas un opto o una R a un pin del PORTB  y te porvocara dos interrupciones una en flanco ascendente, esta sera la valida que se activara unos uS antes del cruce por 0, y otra en el flanco descendente, esta no la tendras en cuenta, diferenciaras una de la otra porque el pin donde esta estara a 1 en la primera, la que vale y en la otra que no vale estara a 0. Como la que vas a tomar como valida es unos uS antes, reatardas esos uS y empiezas a generar y ya estara sincronizada ¿No?

porque dices que la interrupción se activara unos uS antes?? la idea es hacer que sea lo mas instantaneo posible....
Si la idea es que cuando detecta el cruce por cero empieza a generar el pic y ya este sincronizada...

Citar
Le echare un ojo, pero ando un poco liado estos dias, vale, en cuando tenga un rato te lo miro, no me olvido.

Muchas gracias y a ver si me puedes hechar una mano con las dudas que ahora se me generaron...

Saludos, Pedro.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Problemas con PWM e interrupcion externa en pic18f4550 al realizar una onda seno
« Respuesta #24 en: 28 de Agosto de 2013, 13:43:21 »
Citar
Si, el PIC va a estar dedicado a hacer esto nada mas, si acepto recomendaciones.

Bien mejor, asi podemos programar sin preocupaciones, por ejemplo podemos abusar de las demoras por bucle sin precupaciones.

Citar
La frecuencia del cristal es a 20MHZ

Bien, era para saber como tenia que ponerla en la simulacion, nos ira bien una frec. "rapida"

Citar
Son 30 por cada cuarto de onda o sea son 120 niveles que conforman la onda (60 con el semiciclo positivo de 8,33ms con la una salida y los otros 60 con la otra salida que seria el semiciclo negativo)

Bueno asi saldria:

8,33*1000/60=138,83uS El periodo de cada PWM, por tanto la portadora nos que daria en 7,2KHz ¿No? Repasalo tu que yo soy muy peligroso con la calculadora  :lol: :lol: podemos meterle unos PWMs de relleno para ajustarla, si se quiere.

Citar
porque dices que la interrupción se activara unos uS antes?? la idea es hacer que sea lo mas instantaneo posible....
Si la idea es que cuando detecta el cruce por cero empieza a generar el pic y ya este sincronizada...

Bien esto depende de como se conecte el opto, a mi me gusta mucho usar el PS2505 (opto especial para cruce por 0) y lo estaba pensando de esta manera, aqui una nota de aplicacion:

http://imageshack.us/photo/my-images/255/cruceporcerofu1.jpg/

De todas maneras se puede usar un opto cualquiera, solo hay que tener en cuenta que los optos normales durante el semiciclo - no conducen y por tanto durante ese tiempo dan 1logico=5V (colocandolo como en el esquema de arriba) creo que nos va mejor asi, nos dara un 1 cuando el semiciclo + sea casi 0 (un poco antes, pero despues por software ya lo ponemos exacto) provocara una interrupcion por flanco ascendente, seguira dando un 1 durante el semiciclo - y cuando empiece el semiciclo + otra vez pasara a 0 provocando interrupcion por flanco descendente, a esta no le haremos caso, ya que nuestro inverter ya estara funcionando desde el flanco anterior.

¿La corriente de la red en tu zona es buena? Si no fuera buena iriamos leyendo cruces por 0 y sincronizandola, podemos hacerlo cada ciclo, cada 16,67mS

Citar
Esto si va a funcionar cuando no hay corriente y tambien cuando hay corriente, porque la pregunta??

¿Se llevaran bien una onda senoidal y una cuasisenoidal juntas?  :lol: Bueno espero que si se hagan buenas amigas  :lol: :lol:

Desconectado pgvs25

  • PIC12
  • **
  • Mensajes: 58
Re: Problemas con PWM e interrupcion externa en pic18f4550 al realizar una onda seno
« Respuesta #25 en: 29 de Agosto de 2013, 21:36:31 »
Citar
Bien mejor, asi podemos programar sin preocupaciones, por ejemplo podemos abusar de las demoras por bucle sin precupaciones.

Ok, pues asi lo podemos hacer...

Citar
Bueno asi saldria:

8,33*1000/60=138,83uS El periodo de cada PWM, por tanto la portadora nos que daria en 7,2KHz ¿No? Repasalo tu que yo soy muy peligroso con la calculadora  :lol: :lol: podemos meterle unos PWMs de relleno para ajustarla, si se quiere.

Correcto, segun mis calculos son esos los numeros que me salen tambien a menos que yo tambien sea medio peligroso con la calculadora jajajajajajajaja

Citar
Bien esto depende de como se conecte el opto, a mi me gusta mucho usar el PS2505 (opto especial para cruce por 0) y lo estaba pensando de esta manera, aqui una nota de aplicacion:

http://imageshack.us/photo/my-images/255/cruceporcerofu1.jpg/

De todas maneras se puede usar un opto cualquiera, solo hay que tener en cuenta que los optos normales durante el semiciclo - no conducen y por tanto durante ese tiempo dan 1logico=5V (colocandolo como en el esquema de arriba) creo que nos va mejor asi, nos dara un 1 cuando el semiciclo + sea casi 0 (un poco antes, pero despues por software ya lo ponemos exacto) provocara una interrupcion por flanco ascendente, seguira dando un 1 durante el semiciclo - y cuando empiece el semiciclo + otra vez pasara a 0 provocando interrupcion por flanco descendente, a esta no le haremos caso, ya que nuestro inverter ya estara funcionando desde el flanco anterior.

¿La corriente de la red en tu zona es buena? Si no fuera buena iriamos leyendo cruces por 0 y sincronizandola, podemos hacerlo cada ciclo, cada 16,67mS

pues la verdad lo veo bastante mejor a tu esquema... yo tenia otro pero me detecta siempre el cruce por cero, ya sea positivo o negativo, iba a hacerle algunos ajustes en las resistencias y el condensador pero creo que mejor me quedo con tu esquema y de paso asi tambien me puedes ayudar con la demora.... el circuito que pensaba hacer es el siguiente:

http://prntscr.com/1o7vm7

Pero creo que me quedo con el que tu me has dado... Espero y aca en Ecuador existe ese opto.

No es tan buena, incluso tenemos interconexion con colombia para intentar mejorar la forma de onda asi que desde un principio pensaba en sincronizarla a cada ciclo... ahora mismo estoy teniendo un problema al resetear la forma de onda... no se si meterle toda la forma de onda dentro de la interrupcion o mandar a resetear el pic... en un poco de tiempo mas te mando un codigo que estoy haciendolo para que me ayudes viendo que pasa ya q hasta ahora me esta dando error en la simulacion y me dice que no esta simulando en tiempo real en Proteus.

Citar
¿Se llevaran bien una onda senoidal y una cuasisenoidal juntas?  :lol: Bueno espero que si se hagan buenas amigas  :lol: :lol:

Pues la verdad hay inversores con no tan buena resolucion que se conectan a la red pero no se si aca en mi pais exista eso...

En todo caso como mi inversor es de poca potencia pues deberia acoplarse a la onda con mayor potencia sin problema alguno y seguirla.

Ahora no se si de pronto vale la pena hacer mi señal senoidal con mayor resolucion para mejorar un poco mas aun la forma de onda... tu que dices??

Saludos, Pedro.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Problemas con PWM e interrupcion externa en pic18f4550 al realizar una onda seno
« Respuesta #26 en: 30 de Agosto de 2013, 13:47:36 »
Citar
Correcto, segun mis calculos son esos los numeros que me salen tambien a menos que yo tambien sea medio peligroso con la calculadora jajajajajajajaja


Bien, malo sera que nos equivoquemos los dos  :lol: Entonces si es de 30 niveles haremos una demora 1/30 de 138, es decir de 4,6uS, el primer PWM sera el cruce por 0 por tanto sera un PWM sin dutty=0V, el segundo tendra un dutty de 1*4,6uS=4,6uS, el tercero de 2*4,6=9,2, el cuarto de 3*4,6=13,8uS y asi sucesivamente hasta llegar a un dutty de 30*4,6=138 es decir del 100% esto sera la cresta de la onda y empezara a decrecer, la 31 que sera la primera de la bajada de la onda sera de 29*4,6=133,4uS y asi sucesivamente hasta llegar a 1*4,6=4,6 esta sera la ultima del semiciclo positivo, ya que la siguiente que sera de dutty 0 sera la primera del semiciclo negativo, el semiciclo negativo sera exactamente igual pero sobre otro pin del PIC.

Preguntandole a alguien que sabe mas que yo sobre lo de tener dos ondas al mismo tiempo, me dijo que tenian que tener el mismo voltaje, entonces me vino una duda ¿En Ecuador teneis 120V de tension eficaz en la red, verdad? esto quiere decir que teneis una onda desde 0V hasta 170V (120*1,41=169,2V, 1,41 es la raiz de 2) te digo esto porque para generar una onda de 120V a partir de una CC esta CC tiene que ser de 170V, ya que no podemos darle mas V que la que tenemos en continua...

Citar
pues la verdad lo veo bastante mejor a tu esquema... yo tenia otro pero me detecta siempre el cruce por cero, ya sea positivo o negativo, iba a hacerle algunos ajustes en las resistencias y el condensador pero creo que mejor me quedo con tu esquema y de paso asi tambien me puedes ayudar con la demora.... el circuito que pensaba hacer es el siguiente

Yo siempre vi asi los detectores de cruce por 0, pero si el tuyo funciona bien usa el tuyo, en dimmers para lamparas incluso con una resistencia solamente, aqui el problema de hacerlo con una R es el ruido ya que eso alimentara un hogar donde habra motores (lavadora, nevera, etc) y ese ruido descontrolara el PIC.

Citar
Pero creo que me quedo con el que tu me has dado... Espero y aca en Ecuador existe ese opto.

Con ese opto que tienes en el esquema te vale, lo unico que pasa con ese opto es que en semiciclo - el diodo esta en inversa y no conduce por tanto no polariza el transistor y tenemos un nivel alto 5V durante ese tiempo, pero en cuanto empieza el semiciclo + y la onda alcanza un valor suficiente (unos pocos uS) el diodo polariza el NPN tira los 5V a masa y tenemos 0V=0 logico lo que nos dara un flanco descendente que provocara una interrupcion que no tendremos en cuenta, al caer la V en el semiciclo + llegara un momento, unos uS antes del cruce por 0 real, la V sera insuficiente para encender el LED el NPN dejara de conducir y tendremos 5V en el pin del PIC que nos provocara una interrupcion por flanco ascendente, "esta interrupcion es la que nos servira de referencia para empezar a generar nuestra onda", fijate que esto te explico es conctandolo como en el esquema que te pongo mas arriba, como esta en tu esquema, tambien funciona pero nos da las señales a la inversa, ¿no se si me explico?

Citar
Pero creo que me quedo con el que tu me has dado... Espero y aca en Ecuador existe ese opto.

No es tan buena, incluso tenemos interconexion con colombia para intentar mejorar la forma de onda asi que desde un principio pensaba en sincronizarla a cada ciclo... ahora mismo estoy teniendo un problema al resetear la forma de onda... no se si meterle toda la forma de onda dentro de la interrupcion o mandar a resetear el pic... en un poco de tiempo mas te mando un codigo que estoy haciendolo para que me ayudes viendo que pasa ya q hasta ahora me esta dando error en la simulacion y me dice que no esta simulando en tiempo real en Proteus.

No te fies mucho de Proteus en la parte analogica y menos en AC.

Si la corriente no es muy buena, sobre todo en frec. la sincronizaremos en cada ciclo, no hay problema, esperemos  :lol:
« Última modificación: 30 de Agosto de 2013, 13:51:50 por tapi8 »

Desconectado pgvs25

  • PIC12
  • **
  • Mensajes: 58
Re: Problemas con PWM e interrupcion externa en pic18f4550 al realizar una onda seno
« Respuesta #27 en: 31 de Agosto de 2013, 01:04:47 »
Citar
Bien, malo sera que nos equivoquemos los dos  :lol: Entonces si es de 30 niveles haremos una demora 1/30 de 138, es decir de 4,6uS, el primer PWM sera el cruce por 0 por tanto sera un PWM sin dutty=0V, el segundo tendra un dutty de 1*4,6uS=4,6uS, el tercero de 2*4,6=9,2, el cuarto de 3*4,6=13,8uS y asi sucesivamente hasta llegar a un dutty de 30*4,6=138 es decir del 100% esto sera la cresta de la onda y empezara a decrecer, la 31 que sera la primera de la bajada de la onda sera de 29*4,6=133,4uS y asi sucesivamente hasta llegar a 1*4,6=4,6 esta sera la ultima del semiciclo positivo, ya que la siguiente que sera de dutty 0 sera la primera del semiciclo negativo, el semiciclo negativo sera exactamente igual pero sobre otro pin del PIC.

Preguntandole a alguien que sabe mas que yo sobre lo de tener dos ondas al mismo tiempo, me dijo que tenian que tener el mismo voltaje, entonces me vino una duda ¿En Ecuador teneis 120V de tension eficaz en la red, verdad? esto quiere decir que teneis una onda desde 0V hasta 170V (120*1,41=169,2V, 1,41 es la raiz de 2) te digo esto porque para generar una onda de 120V a partir de una CC esta CC tiene que ser de 170V, ya que no podemos darle mas V que la que tenemos en continua...

sip.... aunq yo no estaba tomando en cuenta los cm (ciclos de maquina) de cada instruccion hasta llegar al bsf o al bcf, la verdad ajuste la demora al calculo y ajuste el tiempo con una demora poniendo a 1 en la parte alta de la onda... ahora voy a calcular ya bien intentando dejar a todos con los 23 cm (cada ciclo de maquina es 0,2us)

ahora hice una pequeña tabla de los calculos de ciclos de maquinas que toma cada instruccion, te la adjunto aunq no te servira mas que para verla ya que voy a ver la manera de ajustarla para que sean justamente 23 ciclos de maquina entre los pwm... Pero lo por ajustado es en el caso 31 pwm... incluso sin la demora q hice extra esta pesimamente mal... ya te daras cuenta al ver el archivo... voy a ver que puedo hacer con respecto a eso y pues ajustar los ciclos.....

Para el calculo en el archivo lo inclui a la intruccion bsf o bcf....

Si son 120 eficaces (no tan exactos tampoco)... La verdad pensaba generar la onda, convertirla en alterna y luego meterle a un transformador para elevar el voltaje, no funcionaria asi??

Citar
Yo siempre vi asi los detectores de cruce por 0, pero si el tuyo funciona bien usa el tuyo, en dimmers para lamparas incluso con una resistencia solamente, aqui el problema de hacerlo con una R es el ruido ya que eso alimentara un hogar donde habra motores (lavadora, nevera, etc) y ese ruido descontrolara el PIC.

Entiendo y me sigo quedando con tu opto ya que ahora vi las caracteristicas en el datasheet y esta diseñado justamente para input AC... el que yo utilizo al parecer esta dedicado a DC y en bajos niveles de voltaje, ahora no me encuentro en ciudad pero apenas salga (en 6 dias) buscare si existe en mi ciudad el opto que me das en tu diagrama o almenos un equivalente.

Citar
Con ese opto que tienes en el esquema te vale, lo unico que pasa con ese opto es que en semiciclo - el diodo esta en inversa y no conduce por tanto no polariza el transistor y tenemos un nivel alto 5V durante ese tiempo, pero en cuanto empieza el semiciclo + y la onda alcanza un valor suficiente (unos pocos uS) el diodo polariza el NPN tira los 5V a masa y tenemos 0V=0 logico lo que nos dara un flanco descendente que provocara una interrupcion que no tendremos en cuenta, al caer la V en el semiciclo + llegara un momento, unos uS antes del cruce por 0 real, la V sera insuficiente para encender el LED el NPN dejara de conducir y tendremos 5V en el pin del PIC que nos provocara una interrupcion por flanco ascendente, "esta interrupcion es la que nos servira de referencia para empezar a generar nuestra onda", fijate que esto te explico es conctandolo como en el esquema que te pongo mas arriba, como esta en tu esquema, tambien funciona pero nos da las señales a la inversa, ¿no se si me explico?

si.... te explicas bastante bien.... solamente tendriamos que saber cuantos us son los que se deberia dar la interrupcion para caer justamente en el cero.... segun el datasheet
High-speed switching (tr = 3 us TYP., tf = 5 us TYP.)

El de bajada es de 5ms, pero esta probado a VCC = 10 V, IC = 2 mA, RL = 100 ohm, no se si con la frecuencia de la red y las resistencias varie... tu talves has hecho alguna prueba a ver si este valor se mantiene??

Citar
No te fies mucho de Proteus en la parte analogica y menos en AC.

Si la corriente no es muy buena, sobre todo en frec. la sincronizaremos en cada ciclo, no hay problema, esperemos  :lol

Ok, entonces ya veremos que es lo que pasa... por ahora me dedicare a ajustar mis ciclos de trabajo jejejejejeje en cuanto tenga el codigo lo cuelgo por aca.

Pues yo tambien espero que no haya ningun problema al sincronizarla en cada ciclo jejejeje... solamente que ahi si me tienes que indicar como hacerlo ya que tendriamos que entrar en la interrupcion y salir de ella para que este nuevamente disponible y no tengo idea de como hacerlo ya que cuando entras en la interrupcion y sales de ella pues vuelve al lugar en donde estabas antes en el programa y como te dije esto va a funcionar tanto conectado como desconectado de la red.

Saludos, Pedro.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Problemas con PWM e interrupcion externa en pic18f4550 al realizar una onda seno
« Respuesta #28 en: 01 de Septiembre de 2013, 06:44:06 »
Citar
sip.... aunq yo no estaba tomando en cuenta los cm (ciclos de maquina) de cada instruccion hasta llegar al bsf o al bcf, la verdad ajuste la demora al calculo y ajuste el tiempo con una demora poniendo a 1 en la parte alta de la onda... ahora voy a calcular ya bien intentando dejar a todos con los 23 cm (cada ciclo de maquina es 0,2us)

ahora hice una pequeña tabla de los calculos de ciclos de maquinas que toma cada instruccion, te la adjunto aunq no te servira mas que para verla ya que voy a ver la manera de ajustarla para que sean justamente 23 ciclos de maquina entre los pwm... Pero lo por ajustado es en el caso 31 pwm... incluso sin la demora q hice extra esta pesimamente mal... ya te daras cuenta al ver el archivo... voy a ver que puedo hacer con respecto a eso y pues ajustar los ciclos.....

Para el calculo en el archivo lo inclui a la intruccion bsf o bcf....

He estado pensando y creo que la mejor manera de hacerlo es sin interrupcion, ya que como tu dices una vez que entramos en interrupcion despues nos sigue donde estaba, tendriamos que encender un FLAG despues chequearlo y nos daria mas problemas.

Hacerlo sin interrupcion es facil, se pone TMR0 a contar los 138uS del ciclo completo del PWM y el tiempo del dutty se cuenta por demoras, quedaria asi mas o menos, es solo la idea no lo depure ni nada:


Código: [Seleccionar]
POSITIVO_0 ;este es el primer PWM que no tiene dutty, es el paso por 0

nop ;estos nop son de relleno, despues pondremos mas o menos
nop
movlw .85 ;valoe del offset del TMR0 para 136,80uS
mowf TMR0 ;aqui empieza a contar
btfss INTCON,T0IF ;chequeamos si desbordo
goto $-1 ;todavia no pasaron los 138uS, esperamos

POSITIVO_1 ;este sera el primer PWM con dutty

bsf PORTC,2 ;lo activamos (pon el que tu quieras)
movlw .85 ;valoe del offset del TMR0 para 136,80uS
mowf TMR0 ;aqui empieza a contar
call DEMORA_1 ;llamamos demora
bcf PORTC,2 ;acabo tiempo dutty, apagamos
btfss INTCON,T0IF ;chequeamos si desbordo
goto $-1 ;todavia no pasaron los 138uS, esperamos

POSITIVO_2 ;este sera el segundo PWM con dutty

bsf PORTC,2 ;lo activamos (pon el que tu quieras)
movlw .85 ;valoe del offset del TMR0 para 136,80uS
mowf TMR0 ;aqui empieza a contar
call DEMORA_1 ;llamamos demora
call DEMORA_2 ;tambien llamamos demora completa
bcf PORTC,2 ;acabo tiempo dutty, apagamos
btfss INTCON,T0IF ;chequeamos si desbordo
goto $-1 ;todavia no pasaron los 138uS, esperamos

POSITIVO_3 ;este sera el tercer PWM con dutty

bsf PORTC,2 ;lo activamos (pon el que tu quieras)
movlw .85 ;valoe del offset del TMR0 para 136,80uS
mowf TMR0 ;aqui empieza a contar
call DEMORA_1 ;llamamos demora
call DEMORA_2 ;tambien llamamos demora completa
call DEMORA_2 ;otra demora completa
bcf PORTC,2 ;acabo tiempo dutty, apagamos
btfss INTCON,T0IF ;chequeamos si desbordo
goto $-1 ;todavia no pasaron los 138uS, esperamos











DEMORA_1 ;demora de 4,1uS, descontamos los tiempos de las instrucciones precedentes 
movlw     .4        ; 1 set numero de repeticion
        movwf     PDel0     ; 1 |
PLoop0  clrwdt              ; 1 clear watchdog
        decfsz    PDel0, 1  ; 1 + (1) es el tiempo 0  ?
        goto      PLoop0    ; 2 no, loop
        return              ; 2+2 Fin.

DEMORA_2 ;esta si tendra 4,6uS ya que no hay que descontar instrucciones 
movlw     .4        ; 1 set numero de repeticion
        movwf     PDel0     ; 1 |
PLoop0  clrwdt              ; 1 clear watchdog
        decfsz    PDel0, 1  ; 1 + (1) es el tiempo 0  ?
        goto      PLoop0    ; 2 no, loop
        return              ; 2+2 Fin.

Como ves es bastante sencillo, solo hay que ir añadiendo llamadas a demoras, y el timer nos cuenta el tiempo total asi tendremos tiempo de chequear el pin donde este el opto y detectar el cruce por 0, seguramente habra que ajustar mas los tiempos pero eso yo siempre lo hago una vez que el programa esta hecho.

Citar
si.... te explicas bastante bien.... solamente tendriamos que saber cuantos us son los que se deberia dar la interrupcion para caer justamente en el cero.... segun el datasheet
High-speed switching (tr = 3 us TYP., tf = 5 us TYP.)

Si pero esos tiempos son los de commutacion del opto, pero no tienen nada que ver, ya que lo que hay que saber es cuando la V de la onda no es suficiente para encender el LED del opto, y no es lo mismo con 230V que con 120V, igual que no llevan la misma R, en el esquema que yo te pongo es para 220V por tanto en tu pais con 120V esa R sera difarente y este tiempo variara ¿No tienes un osciloscopio? con el osciloscopio se pone un canal en alterna y otra en la salida y se ve perfecto, sino ya buscaremos otra manera de hacerlo, o a ver si algun ecuatiorano por el foro que te haga esa prueba.

Citar
Si son 120 eficaces (no tan exactos tampoco)... La verdad pensaba generar la onda, convertirla en alterna y luego meterle a un transformador para elevar el voltaje, no funcionaria asi??

Si, correcto, asi funcionara sin problemas, ademas el primario del trafo hara de filtro para convertir los PWMs en niveles de tension, o eso espero  :lol: :lol:

Desconectado pgvs25

  • PIC12
  • **
  • Mensajes: 58
Re: Problemas con PWM e interrupcion externa en pic18f4550 al realizar una onda seno
« Respuesta #29 en: 01 de Septiembre de 2013, 21:55:43 »
Citar
He estado pensando y creo que la mejor manera de hacerlo es sin interrupcion, ya que como tu dices una vez que entramos en interrupcion despues nos sigue donde estaba, tendriamos que encender un FLAG despues chequearlo y nos daria mas problemas.

Hacerlo sin interrupcion es facil, se pone TMR0 a contar los 138uS del ciclo completo del PWM y el tiempo del dutty se cuenta por demoras, quedaria asi mas o menos, es solo la idea no lo depure ni nada:

Como ves es bastante sencillo, solo hay que ir añadiendo llamadas a demoras, y el timer nos cuenta el tiempo total asi tendremos tiempo de chequear el pin donde este el opto y detectar el cruce por 0, seguramente habra que ajustar mas los tiempos pero eso yo siempre lo hago una vez que el programa esta hecho.

Pues te comento que se me vino muchas ideas a la cabeza.... ahora el problema creo que es el hecho de hacerlo sin interrupcion....

El hecho de hacerlo contar al TMR0 se puede hacer tambien con interrupcion de esa forma, bueno eso creo yo...

En cuanto a testear el pin del opto pues no se, eso es lo que mas me da vueltas la cabeza ya que podria darse el caso de que justamente el cruce por cero de la onda testeada se de cuando estemos en una demora... eso nos daria lugar a que el tiempo que supuestamente contabilizamos para el cruce por cero y empezar ahi nuestra forma de onda pues no sea tan cierto y no iniciemos bien nuestra forma de onda.

Ahora lo que se me viene a la mente es aun hacerlo con interrupcion externa pero dentro de la interrupcion nuevamente formar una onda senoidal, ahi el problema es que ya no podriamos registrar nuevamente la interrupcion, pero se me ocurre salir de la interrupcion para el ultimo ciclo (ciclo que es cero toda la portadora), pero ahi el problema seria que al salir de la interrupcion podria caer en cualquier lugar de la forma de onda cuando debería de ser cero.... Dejame un poco aclararme la mente y ver como mismo se podria hacer jejejejejejeje.... creo q eso de activar un flag podria servir y preguntar por ese flag justo antes de mandar a uno cualquier bit de salida...... luego de eso limpiarlo, como solo seria un ciclo que se necesitara de eso...

Por ahora creo que trabajare con tu codigo pero manteniendo la opcion de la interrupcion externa.... queria simplificar un poco el codigo y hacerlo mas corto pero de la forma que estaba haciendolo ocupo mucho mas tiempo en hacerlo y por ahora lo mejor es que funcione ya que necesito hacerlo.... luego podre estar mejorando el codigo con mas calma....

Ahora lo que me esta preocupando un poco es el espacio en el PIC ya que al hacerlo de esta forma voy a ocupar muchisima memoria...... espero tener suficiente... la verdad no habia hecho nunca codigos muy largos y de por si el formar la forma de onda como lo voy a hacer es largo, no se diga el hacer 2 formas de onda.

Citar
Si pero esos tiempos son los de commutacion del opto, pero no tienen nada que ver, ya que lo que hay que saber es cuando la V de la onda no es suficiente para encender el LED del opto, y no es lo mismo con 230V que con 120V, igual que no llevan la misma R, en el esquema que yo te pongo es para 220V por tanto en tu pais con 120V esa R sera difarente y este tiempo variara ¿No tienes un osciloscopio? con el osciloscopio se pone un canal en alterna y otra en la salida y se ve perfecto, sino ya buscaremos otra manera de hacerlo, o a ver si algun ecuatiorano por el foro que te haga esa prueba.

No tengo un osciloscopio de laboratorio... tengo un "mini osciloscopio DS203", podria ver ahi la forma de onda pero no se si me responda o se me queme al meterle continua en otra entrada... tiene 4 entradas dos ac/dc y 2 dc.... voy a intentar averiguar si me serviria.... ademas eso lo tengo en la ciudad y aun faltan algunos dias para salir alla...


Citar
Si, correcto, asi funcionara sin problemas, ademas el primario del trafo hara de filtro para convertir los PWMs en niveles de tension, o eso espero  :lol: :lol:

Pues tambien lo espero... esperaba poder trabajar con 12Vdc sobre los transistores y eso transformalo a los 120Vca

Saludos, Pedro