TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: c4_esp_VR en 26 de Mayo de 2009, 09:56:39

Título: múltiples PWM en CCS PIC18F4431
Publicado por: c4_esp_VR en 26 de Mayo de 2009, 09:56:39
Hola compañeros:

Estoy intentando obtener 8 PWM independientes con dicho PIC y Power PWM pero por más que lo intento no sé como se hace, alguno sabría como realizarlo.

Ha modo introductorio os dejo una aplicación que genera 10 PWM pero 4 de ello son dependientes. Ya que los PWM0/1,  PWM2/3, PWM4/5, PWM6/7 son complementarios dos a dos por tanto 4 de ellos son independientes.

Código: [Seleccionar]
#include <18F4431.h>
#fuses NOWDT, NOPROTECT, NOBROWNOUT, PUT, NOLVP
#use delay(clock=12000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

#define POWER_PWM_PERIOD 1999 // 1 KHz pwm freq with 8 MHz osc.

void main()
{   
   setup_ccp1(CCP_PWM); // Configure CCP1 as a PWM
   setup_ccp2(CCP_PWM); // Configure CCP2 as a PWM

   setup_timer_2(T2_DIV_BY_16, 255, 1);//Temporizador del PWM
   set_pwm1_duty(63);
   set_pwm2_duty(125);
   
   //PWM_BOTH_ON -> La misma señal para los dos
   //PWM_ODD_ON  -> ¿No sé?
   //PWM_COMPLEMENTARY -> Señales complementarias
   //PWM_OFF -> "Apaga" una de las señales
   //setup_power_pwm_pins(PWM_COMPLEMENTARY,PWM_COMPLEMENTARY,PWM_COMPLEMENTARY,PWM_COMPLEMENTARY);
 
   setup_power_pwm(PWM_FREE_RUN, 1, 0, POWER_PWM_PERIOD, 0, 1,0); 
     
   set_power_pwm0_duty((int16)((POWER_PWM_PERIOD *4) * .1));
   set_power_pwm2_duty((int16)((POWER_PWM_PERIOD *4) * .4));
   set_power_pwm4_duty((int16)((POWER_PWM_PERIOD *4) * .6));
   set_power_pwm6_duty((int16)((POWER_PWM_PERIOD *4) * .75));

while (TRUE)//Bucle infinit
{}
}


Podeis ver como queda en Proteus en el adjunto.

Muchas gracias compañeros foreros.
Título: Re: múltiples PWM en CCS PIC18F4431
Publicado por: NANO1985 en 26 de Mayo de 2009, 13:17:39
muy buen proyecto c4_esp_VR .... yo recien estoy empezando con CCS... vamos a ver que me promete...
Saludos
Título: Re: múltiples PWM en CCS PIC18F4431
Publicado por: migsantiago en 03 de Junio de 2009, 13:00:38
Afortunadamente alguien revivió el tema de Diego que no pude encontrar con el buscador.

Te dejo el link para que lo estudies.

Algoritmo para controlar hasta 8 servos con una sola interrupción (en C)
http://www.todopic.com.ar/foros/index.php?topic=20335.0
Título: Re: múltiples PWM en CCS PIC18F4431
Publicado por: c4_esp_VR en 03 de Junio de 2009, 18:11:09
Muchas gracias migsantiago:

Esa parte ya la tengo solucionada desde hace algunos años  :P :P :P. Mi problema es que no estamos hablando de servos sino de motores de corriente continua que requieren de una señal continua en el tiempo sino el motor se pararía ya que el duty cycle de un motor va desde 0% hasta el 100% y en los servos es más o menos constante 1.2ms cada 20-50ms.

Un saludete y gracias.