Colapsar columna

Menu Usuario -

Hola, Visitante
avatar


Mas Activos -

nocturno
Mensajes: 1645
djfreeman
Mensajes: 269
Meta
Mensajes: 254
spiderman
Mensajes: 198
residente
Mensajes: 164

Autor Tema: Programar un dspic30f4013 para generar pulsos con el PWM  (Leído 2253 veces)

Desconectado javism

  • Nuevo fichaje
  • *
  • Mensajes: 4
Hola buenas, a ver si alguien me puede ayudar,
quiero programar el pic30f4011 de tal forma, que genere pulsos con el PWM y después, leerlo con el conversor A/D, y todo esto en lenguaje C.
Un saludo y muxas gracias
« última modificación: Junio 16, 2010, 12:25 por javism »

Desconectado nocturno

  • Administrator
  • MicroPIC Gurú
  • *****
  • Mensajes: 1645
    • MicroPIC
Re: Programar un dspic30f4011 para generar pulsos con el PWM
« Respuesta #1 en: Abril 29, 2010, 23:39 »
Será un placer ayudarte, pero necesito que pegues tu programa y me indiques cuál es tu duda concreta.
Un saludo desde Sevilla, España

Desconectado javism

  • Nuevo fichaje
  • *
  • Mensajes: 4
Re: Programar un dspic30f4011 para generar pulsos con el PWM
« Respuesta #2 en: Mayo 03, 2010, 10:26 »
El problema es que no sé cómo se hace dicho programa, si me puedes mandar algún tutorial o algo, te lo agradecería.
Un saludo, Javi

Desconectado nocturno

  • Administrator
  • MicroPIC Gurú
  • *****
  • Mensajes: 1645
    • MicroPIC
Re: Programar un dspic30f4013 para generar pulsos con el PWM
« Respuesta #3 en: Mayo 03, 2010, 19:47 »
Pues no tengo ningún tutorial para eso. Si encuentras algo que te sirva y te animas a meterle mano ya nos cuentas cómo vas.
Un saludo desde Sevilla, España

Desconectado javism

  • Nuevo fichaje
  • *
  • Mensajes: 4
Re: Programar un dspic30f4013 para generar pulsos con el PWM
« Respuesta #4 en: Mayo 05, 2010, 12:33 »
Pero ya sin contar con el tutorial, alguien sabría hacer dicho programa en picc o mplab?
un saludo y si si encuentro un tutorial lo envio.

Desconectado woodenleg

  • Nuevo fichaje
  • *
  • Mensajes: 1
Re: Programar un dspic30f4013 para generar pulsos con el PWM
« Respuesta #5 en: Mayo 31, 2010, 07:06 »
Hola, llevo 15 dias matandome con eso y nadiesabe, me puse a escarbar en los ejemplos del PICC y me encontre que la cosa es bien simple si se han programado previamente algun pic de los pequeños, la cosa va asi:

en el main con el resto de la configuracion:

   setup_compare(1,COMPARE_PWM | COMPARE_TIMER2 );            //INICIALIZACION DEL PWM1
   setup_timer2(TMR_INTERNAL | TMR_DIV_BY_1,2047);      //CONFIGURACION DEL TIMER 2 CON 2047 CICLOS
                                    //ES DECIR 11 BITS DA 19.500Hz
   setup_compare(2,COMPARE_PWM | COMPARE_TIMER2 );      //INICIALIZACION DEL PWM2
   setup_timer2(TMR_INTERNAL | TMR_DIV_BY_1,2047);             // IGUAL QUE EL ANTERIOR

esto reemplaza a las lineas      setup_timer_2(T2_DIV_BY_1,249,1); de los micros pequeños.

y en el programa se pone:

   SET_ADC_CHANNEL(0);
   delay_us(10);
   valor1=READ_ADC();

   SET_ADC_CHANNEL(1);
   delay_us(10);
   valor2=READ_ADC();

        set_pwm_duty(1,valor1);
        set_pwm_duty(2,valor2);

observar que en un pic pequeño el pwm seria:   set_pwm1_duty(valor1);

eso es todo, ojala les sirva.

Desconectado oscar_oae

  • Nuevo fichaje
  • *
  • Mensajes: 1
Re: Programar un dspic30f4013 para generar pulsos con el PWM
« Respuesta #6 en: Junio 05, 2010, 02:59 »
Buenas!

Bueno, primero cabe aclarar algo: El dsPIC 30F4013, no viene con modulo interno de PWM, asi que creo que haces referencia al 30F4011, que es de la familia de motores de dsPIC.

Yo programo en assembler (ensamblador), pero me gustaría hacerme una idea de lo que deseas (o deseabas) realizar con el micro, pues creo que estoy medio confundido: es realizar PWM, con el micro, para luego usar el ADC del micro para leer el PWM?

Bueno, igual empezaré a trabajar una rutina en ensamblador para cualquiera que desee saber como se implementa el PWM.

Saludos!

Desconectado pikolo84

  • Amigo MicroPIC
  • **
  • Mensajes: 48
  • si se puede ayudar se ayudara
Re: Programar un dspic30f4013 para generar pulsos con el PWM
« Respuesta #7 en: Junio 07, 2010, 08:56 »
Personalmente creo que programar un dsPIC en ASM es una locura, en C sa hace mucho más rapido y el programa queda más claro.

Desconectado niuton

  • Nuevo fichaje
  • *
  • Mensajes: 3
Re: Programar un dspic30f4013 para generar pulsos con el PWM
« Respuesta #8 en: Junio 11, 2010, 09:34 »
Hola a todos, yo he utilizado el PWM en los PIC18 y lo he implementado como coloca woodenleg.

Ahora me estoy adentrando en los dsPIC y quería utilizar los generadores de los dsPIC pero en este caso para controlar un servo, se que con los PIC no se puede generar la señal PWM de 50Hz para los servos por hardware, pero me comentaron que con el dspic se podía utilizar el postcale del timer y generar este PWM de 50 hz por hardware.

¿esto es cierto?, ¿hay algun dsPIC que lo permita?

un saludo.

Desconectado pikolo84

  • Amigo MicroPIC
  • **
  • Mensajes: 48
  • si se puede ayudar se ayudara
Re: Programar un dspic30f4013 para generar pulsos con el PWM
« Respuesta #9 en: Junio 12, 2010, 17:49 »
ahora mismo no me acuerdo bien pero sin mirarlo creo que se puede poner el oscilador de 32khz interno para generar el pwm (yo estoy en el curro y no puedo verlo porque estoy desde el movil), saludos.

Desconectado niuton

  • Nuevo fichaje
  • *
  • Mensajes: 3
Re: Programar un dspic30f4013 para generar pulsos con el PWM
« Respuesta #10 en: Junio 13, 2010, 23:12 »
Hola pikolo84,

el problema de poner el oscilador interno es que todos los calculo se relentizan por que el dspic trabaja a menos MIPS ¿cierto?.
¿Sería buena idea utilizar el CCP para dicho fin?

bye

Desconectado pikolo84

  • Amigo MicroPIC
  • **
  • Mensajes: 48
  • si se puede ayudar se ayudara
Re: Programar un dspic30f4013 para generar pulsos con el PWM
« Respuesta #11 en: Junio 14, 2010, 19:48 »
esta noche cuando llegue a mi casa lo miro, pero yo lo que digo es utilizar el lprc para generar el pwm no para el olscilador principal no se si tambien se puede usar un reloj externo, luego edito el mensaje, de todas formas que necdesidad tienes de meterle 50 hz creo que no hace falta y otra cosa mas, de donde puedes sacar una señal de 50 hz (o 100), pues de la red, saludos.

Luego edito el mensaje.

Desconectado niuton

  • Nuevo fichaje
  • *
  • Mensajes: 3
Re: Programar un dspic30f4013 para generar pulsos con el PWM
« Respuesta #12 en: Junio 16, 2010, 00:07 »
Hola te cuento la idea, lo que quiero es utilizar el dspic30F3013 para controlar 4 servos, a demás de realizar unos pocos de cálculos.

Se que los 50Hz se pueden hacer por software, pero la idea sería utilizar los dos comparadores que trae el dspic para controlar con cada uno dos servos y hacerlo medio software hardware  ::). sería coger el timer y ponerlo que desborde a 20ms y realizar unas comparaciones con el dutycicle para activar la interrupción colocar el pin a nivel bajo y vuelta a empezar.

Esta es la idea que tenía, pero tengo un problema y es que tengo que utilizar el ADC desde el pin AN7 hasta la AN9 y el comparador al saltar una interrupción automáticamente coloca el pin OCx a nivel alto o bajo según toque y estas salidas están multiplexadas con el ADC. ¿Existe alguna forma de sólo utilizar la interrupción del comparador y usar los pines para el ADC?

Lo que tu comentas es usar el oscilador RC?, pero en ese caso se tendría que poder utilizar como fuente para el TIMER y para el oscilador del dsPIC el de cristal XT.

un saludo.

Desconectado javism

  • Nuevo fichaje
  • *
  • Mensajes: 4
Re: Programar un dspic30f4013 para generar pulsos con el PWM
« Respuesta #13 en: Junio 18, 2010, 09:39 »
Hola a todos, aver tengo echo esto, pero le falta algo al programa para que me genere pwm, os lo dejo aki para ver si alguien m puede ayudar por favor lo necesito con urgencia, en unos días tengo que entregar el proyecto, y mi tutor  de esto no tiene ni idea, asi que si alguien me echa una maano encantado, y cualkier cosa que necesiten no duden en comunicarmelo.Un saludo y aki os dejo el programa:
#include "p30f4011.h"
unsigned int ADResult1 = 0;
void InicializaOC1(void)
{


OC1RS = 0;
OC1R = 0;
OC1CON = 0x0006;
T2CON = 0x8030;

}
//Functions and Variables with Global Scope:

void __attribute__((__interrupt__)) _ADCInterrupt(void);
void __attribute__((__interrupt__)) _ADCInterrupt(void)
{
    IFS0bits.ADIF = 0;
    ADResult1=ADCBUF0;
 
}
//Esta función atiende a la interrupción del temporizador
void __attribute__((__interrupt__)) _T3Interrupt(void)
{
IFS0bits.T3IF = 0; //Borramos el flag de la interrupción

}
void __attribute__((__interrupt__)) _INT0Interrupt(void)
{
IFS0bits.INT0IF = 0;

}
void config_pwm(int per_pwm){
    PTPER=per_pwm;            //    almacenamos valor del periodo que generara el pwm
    PTCON=0x8008;
    PWMCON1=0X0F70;
    PWMCON2=0X0002;
    DTCON1=0X0002;
    FLTACON=0x0000;
    OVDCON=0xFF00;
}





void InicializaTimer32(int valor)
{
        //para variar el pwm de cada uno de ellos yo lo hago fuera, haciendo simplemente lo siguiente:

  PDC1 =65535;  //al porcentaje de ciclo que quieras que este a 1 correspondiente al pwm1 (varia de 0 a 65535 (16 bits) 0=0% 65535 =100%)
  PDC2 =32212;
  PDC3 =0;

 T2CON=0;
 T3CON=0;
 TMR3=0;
 TMR2=0;
 PR3=100;
 PR2 = 0;
 IPC1 = 0x4444;
 IFS0bits.T3IF = 0;
 IEC0bits.T3IE = 1;
 T2CON = 0x8008;
 IEC0 = 0x0080;
}
void InicializaINT0()
{
   IEC0bits.INT0IE = 1;
  //Tratamiento interrupción externa
}

void InicializaADC()
{
 ADPCFG =0xFFFF;
 ADCON1 = 0;
 ADCSSL = 1;
 ADCHS = 0;
 ADPCFG = 0;
 ADCON3 = 0x0016;
 ADCON2 = 0;
 ADCON1 = 0x80E4;
 IPC0 = 0x4444;
 IPC1 = 0x4444;
 IPC2 = 0x4444;

 IEC0bits.ADIE = 1;// = 0x0800;
}
//Programa principal

int main (void)
{
  InicializaOC1();
   TRISF=0x0003;
   ADPCFG=0;
   PR2=0x100;
 
 while(1)
  {
   asm("clrwdt");  //Esperamos en un bucle infinito
   if (PORTF == 0)
       OC1RS = 0;
   if (PORTF == 1)
       OC1RS = 0x0030; 

   if (PORTF == 2)
      OC1RS = 0x0080;
   if (PORTF == 3)
      OC1RS = 0x0100;
   }
{
 
  InicializaADC(); 
 while(1)
  {
   asm("clrwdt");  //Esperamos en un bucle infinito
   }
}



}

Desconectado pikolo84

  • Amigo MicroPIC
  • **
  • Mensajes: 48
  • si se puede ayudar se ayudara
Re: Programar un dspic30f4013 para generar pulsos con el PWM
« Respuesta #14 en: Junio 19, 2010, 09:06 »
utiliza el visual initializar si no tienes mucha idea, saludos.