Título: PWM con salida en 4 pines de un pic desfasados entre ellos Publicado por: xiruko en 17 Mayo 2013, 00:53 am Buenas a todos,
necesito programar un pic para dar un PWM por hardware en 4 pines con los pulsos solapados entre ellos. algo asi que espero que se entienda: salida 1: __-----_________ salida 2: ____-----_______ salida 3: ______-----_____ salida 4: ________-----___ el tema es que me han pedido que investigue si es posible hacerlo con el modulo EPWM de algun pic o sino con el modulo SMPS de algun dspic. con el EPWM he estado leyendo el datasheet y no parece que haya ningun modo de funcionamiento asi, pero nunca se sabe. por software ya me han dicho que no ya que entonces el micro no podria hacer apenas nada mas. entonces pregunto.. alguien sabe si es posible hacerlo? y si es que si, me pueden dar alguna palabra clave o un tema especifico para buscarlo? muchas gracias! Título: Re: PWM con salida en 4 pines de un pic desfasados entre ellos Publicado por: Firos en 18 Mayo 2013, 17:05 pm No entiendo muy bien qué es lo que quieres hacer pero por software no parece muy complicado.
De hecho, si tienes 4 salidas PWM es tan facil como configurar las 4, calcular un tiempo de estado lógico uno de... por ejemplo 1 segundo cada uno, y cuando uno lleve 60ms activar el otro. Podrias hacerlo activando uno, haciendo un retardo de 60ms y activar el segundo, hacer un retardo de 60ms y activar el tercer; y asi sucesivamente, haciendo un bluce de 5. Un saludo. Título: Re: PWM con salida en 4 pines de un pic desfasados entre ellos Publicado por: xiruko en 18 Mayo 2013, 17:15 pm gracias por responder, pero como ya dije por software ya me han dicho que no lo haga, ya que con tanto retardo el micro no podria hacer nada mas.
el tema es si hay algun modo de funcionamiento por hardware que haga lo que he explicado. por ejemplo, igual que hay un modo half-bridge en el modulo EPWM, en el que tu lo configuras y te da la salida PWM por un pin y su complementaria por otro, sin necesidad de preocuparse de retardos ni nada. me aconsejaron informarme sobre el modulo para el control de fuentes conmutadas (SMPS) de algun dspic, pero ya he estado buscando y no encontre nada, igual porque no usaba las palabras correctas. asi que a ver si alguien tiene alguna idea... gracias igualmente! Título: Re: PWM con salida en 4 pines de un pic desfasados entre ellos Publicado por: skapunky en 19 Mayo 2013, 01:52 am Por programación de software quizá gastes la capacidad de trabajo del micro haciendo retardos, pero piensa que los micros tienen temporizadores, como mínimo 2 o 3 que puedes configurar.
Mucha gente usa rutinas de tiempo mediante software..pero el úso de temporizadores es muy útil aunque claro...debes configurarlos. Título: Re: PWM con salida en 4 pines de un pic desfasados entre ellos Publicado por: xiruko en 19 Mayo 2013, 22:40 pm ya bueno pero es que ya me dijeron explicitamente que no lo hiciera por software asi que esa opcion esta completamente descartada.
con los temporizadores ya lo habia pensado, estoy con el pic18f458 que tiene 4 timers disponibles, aunque preferiria (si existiera) otra solucion ya que no se si luego tendre que usar alguno. bueno ya lo preguntare el martes y a ver que me dicen... gracias por responder! Título: Re: PWM con salida en 4 pines de un pic desfasados entre ellos Publicado por: Firos en 21 Mayo 2013, 13:42 pm Podrías hacer que se activaran por interrupción externa. Seguramente te habrán dicho que hagas eso con el módulo SMPS.
Haciendo una pequeña búsqueda he encontrado este: Viper50/SP: http://www.datasheetcatalog.org/datasheet/SGSThomsonMicroelectronics/mXyywxv.pdf (http://www.datasheetcatalog.org/datasheet/SGSThomsonMicroelectronics/mXyywxv.pdf) ¿No te pide ningún tiempo de DUTY CYCLE? Pues no es tan difícil... si el Viper50/SP te da una señal pulsatoria pues es tan fácil como hacerlo por interrupción externa, variación de puerto o flancos externos. - Detecta señal externa. - Aumenta contador (indica qué PWM activar). - Compara para detectar qué PWM es. - contador es = a 3 o 4? (ha llegado al final?) borrar contador - goto hasta el que tengas que activar. - Activa PWM. - Sleep. Aunque vamos... yo antes que usar un SMPS usaría un AOP (amplificador operacional) o una puerta lógica NAND con un condensador, una resistencia y un potenciómetro para hacer un circuito oscilador (el mismo efecto que conseguimos con el SMPS) y haciéndo un cálculo mínimo ajustarle la frecuencia al tiempo que tu quieras y voalá, ya tendríamos señal externa pulsatoria para generar las interrupciones externas. :) Un saludo! Título: Re: PWM con salida en 4 pines de un pic desfasados entre ellos Publicado por: xiruko en 21 Mayo 2013, 15:06 pm Muchas gracias Firos, esto me será de gran ayuda. Me miraré bien estas dos alternativas a ver si puedo sorprender a mi jefe que ahora estoy en periodo de prueba... xD
Citar ¿No te pide ningún tiempo de DUTY CYCLE? Bueno no me han dicho nada sobre eso. Solo me dijo que quería los pulsos solapados, así que ya intentaré hacer algo para dejarlo en función de una variable. Citar Haciendo una pequeña búsqueda he encontrado este: Viper50/SP Como curiosidad, qué buscaste para dar con estos resultados? Porque estuve un rato poniendo cosas como "pwm phase shifted" ademas de "smps" y cosas así, y no encontré nada que me iluminara. Gracias de nuevo! edito: Citar Aunque vamos... yo antes que usar un SMPS usaría un AOP (amplificador operacional) o una puerta lógica NAND con un condensador, una resistencia y un potenciómetro para hacer un circuito oscilador (el mismo efecto que conseguimos con el SMPS) y haciéndo un cálculo mínimo ajustarle la frecuencia al tiempo que tu quieras y voalá, ya tendríamos señal externa pulsatoria para generar las interrupciones externas. Pero a ver... el SMPS, no es más que un módulo ECCP mejorado no? Con más rapidez y precisión, y algunos modos de funcionamiento más. Entonces lo que tu me comentas de detectar interrupciones externas... Se haría el PWM por software o con el módulo SMPS? Quiero decir, al detectar la interrupción, tendría que ir cambiando los pines de salida para hacer los pulsos, o solo sería activarlo una vez y ya luego el módulo continuaría con el PWM? No sé si me he explicado muy bien así que si necesitas que lo aclare un poco dímelo... Un saludo! Título: Re: PWM con salida en 4 pines de un pic desfasados entre ellos Publicado por: Firos en 21 Mayo 2013, 15:59 pm Mmmm a lo mejor no te he entendido del todo.
Tu lo que necesitas hacer es que el PIC que tienes genere 4 señales escalonadas por 4 PWM's distintos, ¿no? Pues ahora, solo te falta definir cómo tiene que trabajar el PIC, si no quieres hacerlo por software para que el PIC no tenga "tanto trabajo" (que sigo pensando que ese trabajo es mínimo, puesto que si configuras los timers con interrupción puedes seguir haciendo otras cosas) pues tendrás que hacerlo de forma externa. Para hacerlo de forma externa la única manera que se me ocurre ahora mismo es mediante impulsos externos, ya sea por una patilla de interrupción, o por una patilla de un puerto por variación o por detección de flanco. Yo activaría las interrupciones externas en el PIC por la patilla X y me olvidaría de configurar nada más. De tal forma que cuando se detecte una variación en esa patilla saltase a una interrupción, desactivando uno de los PWM's y activando el siguiente y saldría de la interrupción. Salta otra interrupción, desactivas el PWM's activado anteriormente y conectas el siguiente (con una diferencia de menos de 1us trabajando a 8Mhz o menos si el PIC trabaja con más frecuencia). Y así en un bucle. En este caso el microprocesador esta completamente sin hacer nada, puesto que estarías esperando a una interrupción externa. Exactamente no se como funciona un módulo SMPS... nos explicaron las fuentes conmutadas muy por encima pero el funcionamiento creo que era básicamente un circuito que se encargaba de conmutar (que creo que era el SMPS) la tensión de salida del puente recitificador, elevando la frecuencia, con lo que se conseguía perder menos potencia por el circuito conmutador que se calentaba menos. Por esto he llegado a la conclusión de que si lo que quieres es un SMPS para generar una serie de "impulsos" que lleguen al PIC en forma de señal cuadrada para hacer lo anteriormente descrito, podrías hacerlo mejor con un circuito oscilador que te genere una señal cuadrada. Con una puerta NAND trigger schmitt, un condensador, una resistencia y un potenciómetro lo tienes hecho. De tal forma que no tienes que incluir el SMPS y es posible que ahorres dinero, peeeeeeeero, que siempre hay peros, el circuito oscilador requiere que le configures la señal manualmente y nunca será la misma en todos los dispositivos por temas de tolerancia. Es posible que el SMPS solucione esto. Así que... tu mismo :) Si me pones exactamente cómo lo quieres hacer exactamente podría concretar más :) Un saludo. AÑADO: Se me olvidaba!! La búsqueda que he hecho en Google ha sido: "fuentes conmutadas schematic smps". ¿Por qué?... Pues porque buscando sólo fuentes conmutadas salían fabricantes, con smps podían salirme referencias a cualquier cosa y poniendo esas cuatro palabras reduzco toda la busqueda a páginas donde haya un esquema de una fuente con un SMPS, en el cual habrá un componente con una referencia :P . Hay veces que al realizar búsquedas tienes que hacerlo especificando un poco "quién" y "cómo" lo expondría alguien explicándolo en alguna página. Si pones el nombre de algo muy concreto es posible que te de resultados de fabricantes y cosas así. Título: Re: PWM con salida en 4 pines de un pic desfasados entre ellos Publicado por: Meta en 22 Mayo 2013, 14:58 pm Hola:
Este es un ejemplo en asm y otro en C para el PIC16F886. Código
En C de CCS: Código
Espero que te de algo de ideas. Un saludo. Título: Re: PWM con salida en 4 pines de un pic desfasados entre ellos Publicado por: xiruko en 24 Mayo 2013, 01:21 am @Firos
Citar Pues ahora, solo te falta definir cómo tiene que trabajar el PIC, si no quieres hacerlo por software para que el PIC no tenga "tanto trabajo" (que sigo pensando que ese trabajo es mínimo, puesto que si configuras los timers con interrupción puedes seguir haciendo otras cosas) pues tendrás que hacerlo de forma externa. No lo he probado, pero tratándose de que necesito una frecuencia del PWM de unos 50KHz y de que el micro trabaja a 40MHz (100 nsec/instrucción), si configurara los timers para cambiar los pines por la interrupción, el micro no pararía de entrar y salir de interrupciones. Además recuerda que dije que los pulsos deben estar solapados, por lo que en 20usec el micro debería entrar 8 veces en la rutina de interrupción para cambiar pines, y así a ojo la ISR tendrá unas 15-20 instrucciones entre contadores, cambios de pin, y otras instrucciones de control, así que los 20usec estarían casi exprimidos sin dejar al micro hacer mucho más. Citar Yo activaría las interrupciones externas en el PIC por la patilla X y me olvidaría de configurar nada más. De tal forma que cuando se detecte una variación en esa patilla saltase a una interrupción, desactivando uno de los PWM's y activando el siguiente y saldría de la interrupción. Salta otra interrupción, desactivas el PWM's activado anteriormente y conectas el siguiente (con una diferencia de menos de 1us trabajando a 8Mhz o menos si el PIC trabaja con más frecuencia). Y así en un bucle. En este caso el microprocesador esta completamente sin hacer nada, puesto que estarías esperando a una interrupción externa. [...] Bueno esto sería complicado por el tema de que los pulsos deben estar solapados. Debería llevar algunos contadores para detectar cuando tengo que llevar un pin a alto y cuando debo llevarlo a bajo. Supongo que se podría hacer y es buena idea pero ya me han dicho que quieren evitar a toda costa el uso de circuitería de control externa al micro, así que... xD En fin, ya me han dado otras tareas para hacer y me han dicho que me olvide de eso. De hecho ni ellos saben qué sistema van a implementar cuando en 1 mes y poco deben entregar el proyecto... Pero bueno, yo soy un mandado así que ellos sabrán. Igualmente gracias por la ayuda, todo lo que pueda aprender mientras estoy de prácticas es más que bienvenido :D @Meta Te agradezco también la ayuda pero... No has leído el hilo verdad? xD Si te fijas el programa que has puesto solo se parece a lo que había pedido porque salen las siglas PWM, pero por lo demás... Pero bueno gracias igualmente, supongo que a alguien le servirá. Un saludo! Título: Re: PWM con salida en 4 pines de un pic desfasados entre ellos Publicado por: Firos en 24 Mayo 2013, 12:21 pm Pues vaya faena... que te hagan investigarlo y luego te digan que no. En fin, jefes.
Por otro lado, intentando hallar una solución a tu problema. En el caso del PIC16F876A el PORTB tiene una peculiaridad. Me imagino que en tu PIC también esta así que échale un vistazo y nos comentas, aunque sea sólo por gusto y no por trabajo. La característica es que el PORTB si varía produce una interrupción, como cuando hacemos un teclado matricial. ¿Sabes a que me refiero? Imagínate que tienes el PORTB de la siguiente manera (PB- 0,0,0,0,0,0,0,0 - PB7). Creo que solo era en las cuatro líneas de más peso, pero bueno, nos da igual porque nos sirve. En caso de que PB0 se ponga a 1, producirá una interrupción, si PB1 se pusiera a 1 aunque PB0 también lo esté volverá a pedir interrupción y así hasta PB3 (creo que solo eran los 4 BITS de menor peso en el caso del 16F876A, mira a ver en el tuyo si tienes algo parecido...). Me parece un poco raro tu jefe... jajajaja te dice que te hagas eso, sin hacerlo por software y sin añadir circuitería o componentes externos. Mándalo a tomar fanta :-X Un saludo :D AÑADO: Por otro lado... la única manera de hacerlo mediante software sería indicándole un tiempo (menor que el DUTY CYCLE del primero, o el anterior al que quieras solapar) a un TIMER para que produzca una interrupción y active la salida. el TIMER correría en segundo plano dejando libre al micro y en la interrupción gastarías no más de 4 ciclos de reloj (400nanosec). El desvío sería mínimo y podrías ajustarlo en el TIMER clavándolo casi a la perfección. El PIC solo estaría procesando cada 400 nanosegundos y el resto del tiempo podrías seguir con el programa. Título: Re: PWM con salida en 4 pines de un pic desfasados entre ellos Publicado por: xiruko en 27 Mayo 2013, 01:33 am Citar Imagínate que tienes el PORTB de la siguiente manera (PB- 0,0,0,0,0,0,0,0 - PB7). Creo que solo era en las cuatro líneas de más peso, pero bueno, nos da igual porque nos sirve. En caso de que PB0 se ponga a 1, producirá una interrupción, si PB1 se pusiera a 1 aunque PB0 también lo esté volverá a pedir interrupción y así hasta PB3 (creo que solo eran los 4 BITS de menor peso en el caso del 16F876A, mira a ver en el tuyo si tienes algo parecido...). De qué sirve detectar un cambio en esos 4 pines? Habría que generar la frecuencia a la que quisieras el PWM fuera del micro no? Y entonces estaríamos como antes. Citar Por otro lado... la única manera de hacerlo mediante software sería indicándole un tiempo (menor que el DUTY CYCLE del primero, o el anterior al que quieras solapar) a un TIMER para que produzca una interrupción y active la salida. el TIMER correría en segundo plano dejando libre al micro y en la interrupción gastarías no más de 4 ciclos de reloj (400nanosec). El desvío sería mínimo y podrías ajustarlo en el TIMER clavándolo casi a la perfección. El PIC solo estaría procesando cada 400 nanosegundos y el resto del tiempo podrías seguir con el programa. Lo acabo de comprobar porque estaba convencido y me da unas 35-45 instrucciones la rutina de interrupción (3.5 - 4.5 usec), así que sí que quedaría tiempo de sobras para otras tareas. Diría que puse un 0 de más la otra vez que lo pensé... xD Y bueno, se lo comentaré el martes a mi jefe a ver si quiere intentarlo por software, que ahora ya no sé porque no quiere hacerlo así. Citar En fin, jefes. ;-) edito: Vale, vuelvo a cambiar de opinión y creo que no sería posible hacerlo con timers por interrupciones xD El tema es, como dije la isr estaría formada por unas 35-45 instrucciones, digamos que 40 de media y serían unos 4usec. Para tener los pulsos solapados y teniendo 4 salidas, harían falta 8 interrupciones para hacer 1 ciclo del PWM. Y teniendo en cuenta que necesitaría poder llevarlo a una frecuencia de 50KHz (20usec) pues las cuentas no dan... Un saludo! Título: Re: PWM con salida en 4 pines de un pic desfasados entre ellos Publicado por: ingtasco en 28 Junio 2013, 04:54 am Hola muy buenas noches saludos desde colombia...
Bueno actualmente ando trabajando en el diseño de un inversor resonante de puente completo monofasico, la etapa de potecia esta conformado por IGBT de switching fast.. El proyecto consiste en poder variar tanto el ciclo de trabajo como la frecuencia de pwm del puente H. Para comenzar arranque generando una frecuencia fija y un ciclo de trabajo fijo en la parte de control. Ando trabajando con el PIC18F4550 el cual le ando utilizando P1A y el P1B para generar las dos señales de control complementaria.. mi primer inconveniente es que no he podido generar los tiempos muertos entre cada rama del puente H.. Algunos de ud tiene alguna idea... he mirado la hoja de datos del PIC pagina 160 pero no entiendo como generar ese tiempo muerto... Anexo el codigo que llevo hasta el momento. #include <18F4550.h> #fuses INTRC_IO,PUT,NOWDT,NOPROTECT,NOLVP,BROWNOUT,MCLR #use delay(clock=8000000) void main() { setup_ccp1(CCP_PWM_HALF_BRIDGE | CCP_PWM_H_H); setup_timer_2(T2_DIV_BY_1, 255, 1); set_pwm1_duty(124); // 25% duty cycle while(1); } |