Autor Tema: PWM CONFIGURACION  (Leído 4970 veces)

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

Desconectado andpic

  • PIC10
  • *
  • Mensajes: 30
PWM CONFIGURACION
« en: 07 de Noviembre de 2005, 05:13:00 »
Hola Muchachos: Tengo un problemita y necesito de su solidaria ayuda. Abajo coloque un codigo que encontre de como configurar un PWM para un 16f877. Lo que estoy necesitando es hacer esto mismo pero para un 16f819 y que me largue una frecuencia de 153.600Hz.
Por favor necesitaría que me digan como modificarlo para lo que necesito y si es posible alguna explicación de como se arma la formula.

Gracias

#include <16f877.h>
#fuses XT, NOPROTECT, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOCPD, WRT
#use delay(clock=4000000)



void main(void){

   long duty_PWM1, duty_PWM2;
   // Para cristal de 4 mhz, frecuencia de 20 khz ,
   // T2DIV set to 1
   // Para calcular la frecuencia:
   // (4/frecuencia cristal)*T2_DIV*(periodo+1)


   // (4/4000000)*1*(49+1)=0.00005seg
   setup_timer_2(T2_DIV_BY_1, 49, 3);

   // seleccionamos PWM para los dos módulos CCP
   setup_ccp1 (CCP_PWM);
   setup_ccp2 (CCP_PWM);

   // cargamos el duty cicle para cada PWM. La frecuencia es igual para
ambas, 20KHz.
   // Para calcular el tiempo en nivel alto, dado que usamos un LONG, sería:
   // Valor*T2_DIV*(1/frecuencia del cristal). Si se usa un valor tipo INT
en lugar
   // de LONG se calcularía multiplicando la fórmula por 4:
Valor*T2_DIV*(1/frecuencia del cristal)*4
   duty_PWM1 = 100; // 0.000025seg/(1*(1/4000000))=100, que es el valor a
cargar. Duty 50%
   duty_PWM2 = 200; // 0.000050seg/(1*(1/4000000))=200. Si te fijas, con
20KHZ el T=50us,
                    // que es lo que se ha puesto para el duty, osea, todo.
                    // Por tanto la señal será continua a 5v. Duty cicle
100%
   set_pwm1_duty(duty_PWM1);
   set_pwm2_duty(duty_PWM2);

   while(1){   //bucle infinito.
   }
}

Desconectado vszener

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2395
RE: PWM CONFIGURACION
« Respuesta #1 en: 07 de Noviembre de 2005, 05:42:00 »
La frecuencia se obtiene mediante esta formula:
Codigo:

(1/clock)*4*t2div*(periodo+1)


donde esta involucrado el TMR2 en esta funcion para configurarlos:
Codigo:

setup_timer_2 (mode, period, postscale)


Luego para la anchura del pulso mediante esta relacion:
Codigo:

valor*(1/clock)*t2div donde valor=%nivel alto del pulso  Anchura del pulso(Duty)


De todas formas mirate en el subforo de c los ejemplitos en c donde el 45 y 46 son de PWM, aqui el enlace
http://miarroba.com/foros/ver.php?foroid=46840&temaid=4061462
Suerte!!!Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado andpic

  • PIC10
  • *
  • Mensajes: 30
RE: PWM CONFIGURACION
« Respuesta #2 en: 07 de Noviembre de 2005, 06:47:00 »
Gracias vszener. Ahora respecto a la frecuencia que necesito tengo las siguientes dudas.
1) Es necesario colocar un Oscilador Externo para usar el PWM? o me sirve el interno?

2) En cuanto al calculo para lafrecuencia que necesito como debería armar la formula. El oscilador del pic es de 8Mhz y la frecuencia que necesito 153.600hz. Como debería configurar el prescaler y el poscaler?

3) No me queda claro para que es el postescaler?. Es decir de la formula Codigo: setup_timer_2 (mode, period, postscale) que valor le tengo que poner en postscaler? o Mejor dicho porque en el ejemplo que puse yo tiene 3 y en los ejemplos que me mostraste tiene 1?

Desconectado vszener

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2395
RE: PWM CONFIGURACION
« Respuesta #3 en: 07 de Noviembre de 2005, 15:17:00 »
Buenas!!!haber por partes
1) No necesitas ningun oscilador externo si vas a usar el interno, eso si usando el interno debes saber que el clock de la formula es el interno.

2)Para obtener dicha frecuencia deberas jugar con la primera formula que te puse en el anterior post: (1/clock)*4*t2div*(periodo+1) = frec

3)Como bien dice la ayuda del compilador CCS, postcale es un numero de 1-16 el cual indica cuantas veces ha de desbordarse el TMR2(cuantas veces ha de resetearse) antes de llamar la interrupcion.

Suerte!!!Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado andpic

  • PIC10
  • *
  • Mensajes: 30
RE: PWM CONFIGURACION
« Respuesta #4 en: 08 de Noviembre de 2005, 05:49:00 »
Vszener: Gracias por tu respuesta. A ver si entendí bien... por favor corregime si el calculo lo estoy haciendo bien. La frecuencia del oscilador es de 8Mhz (pic 16f819)
=>(1/clock)*4*t2div*(periodo+1) =De donde por lo que estuve leyendo tengo que despejar el período (PR2). Es decir quedaría así:
PR2=Tpwm/(4*Tosc*Tmr2 presc).
El periodo Tpwm para la frecuencia que necesito es 153600Hz es 1/153600 => Tpwm=0,0000065104 o 6,5 micro
=>PR2=6,5 micro/(4*(1/8Mhz)*1)=12
=>En el programa tendría que poner setup_timer_2(T2_DIV_BY_1, 12, 1). Esta bien?

Saludos

Desconectado vszener

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2395
RE: PWM CONFIGURACION
« Respuesta #5 en: 08 de Noviembre de 2005, 16:12:00 »
Holaaa!!! bien, decirte que hay dos variables con las cuales puedes jugar, una es PR2 y la otra es el preescaler del TMR2 tu esta ultima las dao como fija a 1, y has despejado el periodo(PR2) y te ha dado 12, esta bien asi, eso si, ponlo en la formula y veras que (1/clock)*4*t2div*(periodo+1)=1/frec
(1/8000000)·4·1·(12+1)=6,5us -> frec=1/6,5us=153,846KHz se pasa un pokito de lo que tu pides, para ello intenta afinar mas con los divisores del TMR2 y cuando lo tengas, como bien has indicado tu mediante esta instruccion lo tienes configurado
setup_timer_2(T2_DIV_BY_1, 12, 1);

Suerte!!!Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado andpic

  • PIC10
  • *
  • Mensajes: 30
RE: PWM CONFIGURACION
« Respuesta #6 en: 09 de Noviembre de 2005, 12:37:00 »
Gracias vszener por la ayuda. Pero ayer lo probé y no me anduvo. Tenés idea en que puedo estar fallando?. No hay muchas cosas para fallarle ya que se ve simple, sin embargo no me anduvo. Por favor le podrías dar una mirada al programa y decirme que me está faltando.
Basta con esta configuración para que ande o ademas tengo que configurar los puertos RB3 (en este caso) como salida?

#include <16f819.h>
#fuses XT, NOPROTECT, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOCPD, WRT
#fuses INTRC
#use delay(clock=8000000)

void main(void){

   long duty_PWM1;
   setup_timer_2(T2_DIV_BY_1, 12, );
   setup_ccp1 (CCP_PWM);
   duty_PWM1 = 26;
   set_pwm1_duty(duty_PWM1);
   while(1){
   }
}

Saludos y Gracias

Desconectado man3s

  • PIC12
  • **
  • Mensajes: 69
Re: PWM CONFIGURACION
« Respuesta #7 en: 27 de Abril de 2012, 08:32:39 »
ajajaja posiblemente ya hallas solucionado tu problema, valla que ya van 2 meses sin respuesta, pero aun asi: en tus fuses estas configurando un reloj externo de baja velocidad (#fuses XT) y debajo estas usando tambien el interno del PIC (#fuses INTRC),  intenta quitando esta linea:

#fuses INTRC //de esta manera usas el interno mas no el externo XT que es el que necesitabas.

en cuanto a la configuracion de entrada/salida puedes usar #standard_io(PUERTO), donde puerto puede ser A,B,C etc..

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: PWM CONFIGURACION
« Respuesta #8 en: 27 de Abril de 2012, 14:37:24 »
ajajaja posiblemente ya hallas solucionado tu problema, valla que ya van 2 meses sin respuesta

ya van 7 años desde el ultimo post :mrgreen:
"Nada es imposible, no si puedes imaginarlo"

Desconectado man3s

  • PIC12
  • **
  • Mensajes: 69
Re: PWM CONFIGURACION
« Respuesta #9 en: 29 de Abril de 2012, 02:10:44 »
ajajaja que conste que quise ayudar  :D.


 

anything