TODOPIC

Microcontroladores PIC => dsPIC => Mensaje iniciado por: franco en 30 de Octubre de 2006, 18:56:16

Título: PWM en el DSPIc
Publicado por: franco en 30 de Octubre de 2006, 18:56:16
quiero experimentar con los puertos PWM del dspic si alguien tiene un programa sencillo de entrenamiento que me sirva como base  para comprender un poco el funcionamiento del PWM . 8)
Título: Re: PWM en el DSPIc
Publicado por: Rulo en 31 de Octubre de 2006, 19:44:45

       Puedes pasarte por la paguina de nocturno, Motores musicales (http://www.micropic.es/index.php?option=com_content&task=view&id=3&Itemid=57)

  en la seccion de descargas encuentras "Motores musicales", donde viene un programita que te puede ayudar.

        saludos   :)

Editado por Nocturno: link actualizado
Título: Re: PWM en el DSPIc
Publicado por: franco en 31 de Octubre de 2006, 21:58:10
ok gracias vamos aver
Título: Re: PWM en el DSPIc
Publicado por: jalejob en 24 de Mayo de 2007, 20:56:07
no tenes por hay un codigo simple para el pwm es que este link no funciona correo jalejob53@hotmail.com
Título: Re: PWM en el DSPIc
Publicado por: fram_22 en 27 de Noviembre de 2007, 19:48:10
Hola:

Estoy empezando autilizar el PWM en un DSPIC, lo quiero hechar a andar en modo de subida/bajada, de tal manera que pueda controlar el ciclo de trabajo por medio de un potenciometro a travéz del ADC, sin embargo aun no me queda muy claro como funciona el PWM, alguien sabe de un buen documento que explique claramente el funcionamiento del mismo?
gracias
Título: Re: PWM en el DSPIc
Publicado por: Nocturno en 28 de Noviembre de 2007, 03:03:55
El mejor documento es la propia datasheet. Si quieres algún ejemplo de uso, puedes mirar Motores musicales (http://www.micropic.es/index.php?option=com_content&task=view&id=3&Itemid=39)
Título: Re: PWM en el DSPIc
Publicado por: blackcat en 28 de Noviembre de 2007, 12:19:52
Diay solo la hoja de datos ... aunque es mejor el manual de referencia que es mas detallado ... la hoja de datos es un resumen del manual de referencia ... de igual manera se puede bajar de microchip!! ...
Título: Re: PWM en el DSPIc
Publicado por: micro_pepe en 08 de Septiembre de 2009, 14:37:57
Quiero hacer un PWM con un dsPIC30F4012 de 100KHz, y poder variar el ciclo de 0 a 100% con un minimo de 1024 pasos.

Estoy usando este codigo muy similar al ejemplo de Nocturno:


Código: [Seleccionar]
#define __dsPIC30F4012__
#include <p30f4012.h>

#include <pwm.h>


  _FOSC( CSW_FSCM_OFF  & FRC_PLL16);
  _FWDT(WDT_OFF);
  _FBORPOR(PBOR_ON  & PWRT_OFF & MCLR_DIS);

#define MIPS 29200
/********************************************************/
  void DelayUs(unsigned int v)  {    //  pierde 8+2
 /********************************************************/


   while(v != 0){

  asm("nop");asm("nop");
  asm("nop");asm("nop");
  asm("nop");asm("nop");
  asm("nop");asm("nop");
  asm("nop");asm("nop");
  asm("nop");asm("nop");
asm("nop");asm("nop");
asm("nop");asm("nop");
asm("nop");asm("nop");
asm("nop");asm("nop");
asm("nop");asm("nop");
asm("nop");asm("nop");
  asm("nop");asm("nop");

    v--;
  }
 }


 /******************************************************/
   void DelayMs(unsigned int v) {
 /******************************************************/

   while (v != 0 ){ DelayUs(1000); v--;}

 }

int main(void){

TRISE=0;TRISB=0;
unsigned int sptime, config1, config2, config3, PeriodoPWM, duty;

while(1){

PeriodoPWM = (long) MIPS * 1000 / 100000;

sptime = 0;
config1 = (PWM_EN  & PWM_OP_SCALE1 & PWM_IPCLK_SCALE1 & PWM_MOD_FREE);
config2 = (PWM_MOD1_IND & PWM_PDIS3H & PWM_PDIS2H & PWM_PDIS1H &
    PWM_PDIS3L & PWM_PDIS2L & PWM_PEN1L);
config3 = (PWM_SEVOPS1 & PWM_OSYNC_PWM & PWM_UEN);
OpenMCPWM(PeriodoPWM,sptime,config1,config2,config3);
duty=222;
SetDCMCPWM(1,duty,0);
DelayMs(2);

}
return 0;


Los 100KHz de la señal los tengo, pero el ciclo de trabajo cuando pongo en la variable duty un valor aproximado de 550, el porcentaje del ciclo esta proximo al 100%.

Segun entiendo en el dataseet del dsPIC, el ciclo de trabajo se ajusta con el valor del registro PDC1 (para el modulo1) que tiene un tamaño de 16bit. Segun entiendo yo el 100% del ciclo seria con el valor 65535.

Un saludo.
Título: Re: PWM en el DSPIc
Publicado por: Nocturno en 09 de Septiembre de 2009, 10:45:14
No, micro_pepe, para que el duty esté al 100%, debe ser igual al periodo del PWM (en el ejemplo es 292).
Título: Re: PWM en el DSPIc
Publicado por: micro_pepe en 09 de Septiembre de 2009, 10:51:29
Entonces como maximo solo puedo tener 292 pasos ?

Un saludo.
Título: Re: PWM en el DSPIc
Publicado por: micro_pepe en 09 de Septiembre de 2009, 15:40:55
Os comento lo que he echo, en el codigo que adjunto (pongo solo el main el resto no lo he tocado), en un principio puse el limite de la variable a 292, con eso llegaba al 50% del ciclo; entonces puse el doble 584 y llega hasta el 100%.

Me parece un poco raro por lo que he leido, pero no creo que mi osciloscopio me engañe.

Código: [Seleccionar]
int main(void){

TRISE=0;TRISB=0;
unsigned int sptime, config1, config2, config3, PeriodoPWM, duty;

while(1){

PeriodoPWM = (long) MIPS * 1000 / 100000;

sptime = 0;
config1 = (PWM_EN  & PWM_OP_SCALE1 & PWM_IPCLK_SCALE1 & PWM_MOD_FREE);
config2 = (PWM_MOD1_IND & PWM_PDIS3H & PWM_PDIS2H & PWM_PDIS1H &
    PWM_PDIS3L & PWM_PDIS2L & PWM_PEN1L);
config3 = (PWM_SEVOPS1 & PWM_OSYNC_PWM & PWM_UEN);
OpenMCPWM(PeriodoPWM,sptime,config1,config2,config3);
duty=0;
DelayMs(500);
for(duty==0;duty!=584;duty++){
SetDCMCPWM(1,duty,0);
DelayMs(200);
}

}
return 0;
}


Un saludo.
Título: Re: PWM en el DSPIc
Publicado por: Renatox_ en 10 de Septiembre de 2009, 00:05:09
hola, Asi es, debes poner el dobre del valor del periodo para obtener 100%, y asi se escalan todos los porcentajes. A medida que aumenta tu frecuencia de PWM baja la resolución que puedas lograr.

saludos