elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Informática
| |-+  Electrónica
| | |-+  PWM con salida en 4 pines de un pic desfasados entre ellos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: PWM con salida en 4 pines de un pic desfasados entre ellos  (Leído 16,522 veces)
Firos
Ex-Staff
*
Desconectado Desconectado

Mensajes: 1.410


Enseña lo que sepas... y oculta lo peor...


Ver Perfil
Re: PWM con salida en 4 pines de un pic desfasados entre ellos
« Respuesta #10 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.


« Última modificación: 24 Mayo 2013, 12:28 pm por Firos » En línea

El final del camino no está determinado, lo determinamos nosotros mismos paso a paso, día a día, y se puede cambiar.
xiruko


Desconectado Desconectado

Mensajes: 438


Ver Perfil
Re: PWM con salida en 4 pines de un pic desfasados entre ellos
« Respuesta #11 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!


« Última modificación: 27 Mayo 2013, 23:20 pm por xiruko » En línea

ingtasco

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: PWM con salida en 4 pines de un pic desfasados entre ellos
« Respuesta #12 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);
}


En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines