Autor Tema: múltiples PWM en CCS PIC18F4431  (Leído 4130 veces)

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

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
múltiples PWM en CCS PIC18F4431
« 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.

Desconectado NANO1985

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
    • Desarrollos Tecnologicos - Tucuman - Argentina
Re: múltiples PWM en CCS PIC18F4431
« Respuesta #1 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
"La inquebrantable voluntad de vencer"
"hay dos cosas infinitas... El universo y la Estupidez humana" Albert Einstein
 "El sabio actua sin anhelos, permanece sosegado,... así no es afectado por el resultado de sus acciones sean éstas el triunfo o el fracaso"
- UNIVERSIDAD TECNOLOGICA NACIONAL - FACULTAD REGIONAL TUCUMAN -

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: múltiples PWM en CCS PIC18F4431
« Respuesta #2 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

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: múltiples PWM en CCS PIC18F4431
« Respuesta #3 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.