TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: diego20david en 05 de Agosto de 2016, 14:13:31

Título: generar 3 señales pwm desfasadas 120 grados pic 184431
Publicado por: diego20david en 05 de Agosto de 2016, 14:13:31
estoy utilizando el pic18f4431, para generar señales pwm en el modo complementado, pero no logro que se desfasen 120 grados entre ellas, si alguien conoce sobre esta programacion en mikroC codigo C, o que registro es el que necesito configurar ,estaria muy agradecido,

las señeles deberian ser asi 120 grados de diferencia entre ella
             ________
            |               |
______|               |__________   fase A
                 ________
                |               |
________|               |__________   fase B

                     ________
                    |               |
__________|               |__________   fase C

ya el micro permite realizar las señales complementarias de las fases


int TABLAA[257] =
{480,479,479,479,480,481,481,481,480,479,479,479,
   480,   481,   481,   481,   480,   479,   479,   479,   480,   481,   481,   481,
   480,  479,   479,   479,   480,   481,   481,   481,   480,   479,   479,   479,
   480, 481,   481,   481,   480,   479,   479,   479,   480,   481,   481,   481,
   480,479,   479,   479,   480,   481,   481,   481,   480,   479,   479,   479,
   480,   481,   481,   481,   480,   479,   479,   479,   480,   481,   481,   481,
   480,   479,   479,   479,   480,   481,   481,   481,   480,   479,   479,   479,
   480,   481,   481,   481,   480,   479,   479,   479,   480,   481,   481,   481,
   480,   479,   479,   479,   480,   481,   481,   481,   480,   479,   479,   479,
   480,  481,   481,   481,   480,   479,   479,   479,   480,   481,   481,   481,
   480,   479,   479,   479,   480,   481,   481,   481,   480,   479,   479,   479,
   480,   481,   481,   481,   480,   479,   479,   479,   480,   481,   481,   481,
   480,   479,   479,   479,   480,   481,   481,   481,   480,   479,   479,   479,
   480,   481,   481,   481,   480,   479,   479,   479,   480,   481,   481,   481,
   480,   479,   479,   479,   480,   481,   481,   481,   480,   479,   479,   479,
   480,   481,   481,   481,   480,   479,   479,   479,   480,   481,   481,   481,
   480,   479,   479,   479,   480,   481,   481,   481,   480,   479,   479,   479,
   480,   481,   481,   481,   480,   479,   479,   479,   480,   481,   481,   481,
   480,   479,   479,   479,   480,   481,   481,   481,   480,   479,   479,   479,
   480,   481,   481,   481,   480,   479,   479,   479,   480,   481,   481,   481,
   480,   479,   479,   479,   480,   481,   481,   481,   480,   479,   479,   479,
   480,   481,   481,   481,
   };

   void pwm_config(void)
{
PTCON0=0b00000010;//countinuous UP/Down Count mode
PTCON1=0;
PWMCON0=0b01010000;
PWMCON1=0;
DTCON=0b01111111;

OVDCOND=255;
OVDCONS=255;

FLTCONFIG=0;
//Frequencia



PTPERL= 0xFF;  //0x1F4;
PTPERH=0;

}
void pwm_start(void)
{
PTCON1.PTEN=1;
}
void adc_config(void)
{
ADCON0=0b00010001;
ADCON1=0b00010000;
ADCON2=0b11000010;
ADCON3=0b11000000;
ADCHS=0b00000000;
ANSEL0=0b00000011;
ANSEL1=0b00000000;
}
void adc_start(void)
{
ADCON0.GO=1;
}
void main(void)
{
int y=0;
pwm_config();
pwm_start();
adc_config();
TRISA.TRISA0=1;
LATA.LATA0=1;
while(1)
{
while(PTCON1.PTDIR==1)
{}
PWMCON1.UDIS=0;
PDC0H=TABLAA[y]/256;
PDC0L=TABLAA[y];

PDC1H=TABLAA[y]/256;
PDC1L=TABLAA[y];

PDC2H=TABLAA[y]/256;
PDC2L=TABLAA[y];

PWMCON1.UDIS=0;
while(PTCON1.PTDIR==0)
{}
y++;
if(y==257){y=0;}
}
}
Título: Re:generar 3 señales pwm desfasadas 120 grados pic 184431
Publicado por: KILLERJC en 05 de Agosto de 2016, 15:19:39
Trata de mantenerte en un solo hilo, no es necesario abrir otro mas y creo que va en contra de las reglas ya que se trata del mismo "asunto", ahi te respondi en el anterior.
Título: Re:generar 3 señales pwm desfasadas 120 grados pic 184431
Publicado por: fjld93 en 14 de Agosto de 2016, 17:12:19
Yo tu utilizaría una interrupción por timer.
Configura el timer para que genere una interrupción luego de transcurrido el tiempo en el que la señal se haya desfasado 120 grados. por ejemplo, si tu frecuencia es de 50 Hz, tendrás un periodo de 20ms, necesitas una interrupción cuando haya transcurrido 20/3 ms, unos 667 us.

Luego, dentro de la interrupción, activas tu segunda señal pwm.

Debes hacer todo esto, sincronizado con tu primera señal, por lo que puedes activar el timer contador, inmediatamente luego de que se haya activado la primera señal pwm. Generalmente, los pics trabajan los pwm con Timer2/4/6, pero muchos tienen solo timer 2. suponiendo que usas sólo timer 2, puedes activar su interrupción (o verificar el estado de la bandera, aunque ésta, creo que lo hará menos precisa).

Dentro de la interrupcion del timer 2, activar el timer contador, por ejemplo timer 1, configurado para que su interrupción se active justamente pasados 667 us (al desfasarse 120 grados si tu señal es de 50 Hz), y después hacer todo lo que te dije más arriba.

Espero que haya ayudado. Saludos!
Título: Re:generar 3 señales pwm desfasadas 120 grados pic 184431
Publicado por: DANI9405 en 26 de Noviembre de 2016, 12:14:13
Hola quería saber si logro el desfase entre las señales?? y si fue asi porque lado lo logro? porque yo he intentado y no me ha dado. Gracias por la repsuesta
Título: Re:generar 3 señales pwm desfasadas 120 grados pic 184431
Publicado por: KILLERJC en 26 de Noviembre de 2016, 13:27:15
Hola quería saber si logro el desfase entre las señales?? y si fue asi porque lado lo logro? porque yo he intentado y no me ha dado. Gracias por la repsuesta

Te dirijo al otro post que hizo el usuario, con el mismo problema.

http://www.todopic.com.ar/foros/index.php?topic=46621.msg389658#msg389658