Autor Tema: PWM en el DSPIc  (Leído 9068 veces)

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

Desconectado franco

  • PIC10
  • *
  • Mensajes: 12
PWM en el DSPIc
« 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)

Desconectado Rulo

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 168
Re: PWM en el DSPIc
« Respuesta #1 en: 31 de Octubre de 2006, 19:44:45 »

       Puedes pasarte por la paguina de nocturno, Motores musicales

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

        saludos   :)

Editado por Nocturno: link actualizado
« Última modificación: 25 de Mayo de 2007, 01:59:27 por Nocturno »

Desconectado franco

  • PIC10
  • *
  • Mensajes: 12
Re: PWM en el DSPIc
« Respuesta #2 en: 31 de Octubre de 2006, 21:58:10 »
ok gracias vamos aver

Desconectado jalejob

  • PIC10
  • *
  • Mensajes: 2
Re: PWM en el DSPIc
« Respuesta #3 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

Desconectado fram_22

  • PIC18
  • ****
  • Mensajes: 316
Re: PWM en el DSPIc
« Respuesta #4 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

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: PWM en el DSPIc
« Respuesta #5 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

Desconectado blackcat

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 600
Re: PWM en el DSPIc
« Respuesta #6 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!! ...
Control Automático, DSP & Microcontroladores

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3216
Re: PWM en el DSPIc
« Respuesta #7 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.
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: PWM en el DSPIc
« Respuesta #8 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).

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3216
Re: PWM en el DSPIc
« Respuesta #9 en: 09 de Septiembre de 2009, 10:51:29 »
Entonces como maximo solo puedo tener 292 pasos ?

Un saludo.
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3216
Re: PWM en el DSPIc
« Respuesta #10 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.
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado Renatox_

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 541
    • máquinas cnc
Re: PWM en el DSPIc
« Respuesta #11 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
control de movimiento