Autor Tema: Dudas, Muchas Dudas Sobre PWM CCP en CCS  (Leído 5691 veces)

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

Desconectado b.stronger

  • PIC10
  • *
  • Mensajes: 45
Dudas, Muchas Dudas Sobre PWM CCP en CCS
« en: 19 de Septiembre de 2011, 02:13:49 »
Saludos a todos. Hoy vengo preguntando experiencias sobre el uso del PWM del CCP. Porque estoy leyendo sobre como utilizarlo, he leido la seccion del PWM del libro de CCS y no viene mucha información acerca de su uso, quiero decir, si he entendido la teoría sobre su funcionamiento, ya he logrado configurarlo y usado, pero no logro utilizarlo como yo quiero. Y todavía no sé a que se debe....

En fin.... mi duda surge cuando al configurar el [ setup_timer_2(prescaler,periodo,postcaler); ] . Porq no logro comprender q relación tiene el periodo (PR2), con el duty.... porq.. cuando yo le coloco un valor al PERIODO de 255, y escojo un duty igual a 256 el Proteus me marca un duty de 25%, esto está bien!!! .... pero si por ejemplo al PERIODO le pongo un valor de 127,  y el duty igual a 256, en Proteus me marca un duty de 50%, yo siento como si de duplicara o algo parecido....

A alguien le ha pasado al parecido??... o que estoy haciendo mal!!... le pongo el codigo con el que estoy probando::


Código: [Seleccionar]
#include <16f873a.h>
#use delay (clock=4M)
#fuses xt, nowdt

#byte PortA=0x05
#byte PortB=0x06
#byte PortC=0x07

/*    PROGRAMA PRINCIPAL      */
void main ()
{
   int16 i;
   set_tris_a(0x03);
   set_tris_b(0x00);
   set_tris_c(0x00);
   PortA=0;
   PortB=0;
   PortC=0;
   setup_timer_2(T2_DIV_BY_16,127,1);     // con este periodo=127,... no funciona como yo quiero
   setup_ccp2(CCP_PWM);   
   
   do {
         i=256;                             //configuro un duty del 25%
         set_pwm2_duty(i);
         delay_ms(3000);
   
         i=512;                            //configuro un duty del 50%
         set_pwm2_duty(i);
         delay_ms(3000);
   
         setup_timer_2(T2_DIV_BY_16,255,1);    // con este periodo=255,... si funciona como yo quiero
   
   
         i=256;                             //configuro un duty del 25%
         set_pwm2_duty(i);
         delay_ms(3000);
   
         i=512;                             //configuro un duty del 50%
         set_pwm2_duty(i);
         delay_ms(3000);
   
         setup_timer_2(T2_DIV_BY_16,127,1);  // con este periodo=127,... no funciona como yo quiero
 
  }while (true);
   
}



En la imagen que adjunto, podrán darse cuenta encerrado en un circulo rojo (un circulo horrible por cierto) el momento en que hago la medicion, y si ven el codigo... entra en los primeros 3 segundos.. donde se supone que tendría un duty igual al 25%. sin embargo.. es casi igual al 50%    :? ... Bueno ahi les dejo mis dudas. espero poder resolverlas con su ayuda!!.. SAludos y gracias!!!  ;-)

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Dudas, Muchas Dudas Sobre PWM CCP en CCS
« Respuesta #1 en: 19 de Septiembre de 2011, 03:43:45 »
Creo que te falta calcular el Periodo del PWM que es lo que cargas en PR2

No son valores al azar porque dependiendo de la frecuencia el modulo tiene una resolución,es decir.
Si te da una resolucion de 8bits pues el PWM-Duty lo puedes cargar de 0-255 que sería de 0-100%,pero si pasas de este valor ya lo estas trabajando erroneamente.

Revisa la hoja de datos de tu pic.
Las formulas son muy sencillas.

---------

Lo que indicas de 127 y 256. Lo quie haces ahi es cambiar la frecuencia.Y estas variando un 50% más rapido o lento.
« Última modificación: 19 de Septiembre de 2011, 03:45:54 por AKENAFAB »

Desconectado b.stronger

  • PIC10
  • *
  • Mensajes: 45
Re: Dudas, Muchas Dudas Sobre PWM CCP en CCS
« Respuesta #2 en: 19 de Septiembre de 2011, 12:09:55 »
mmmm... como se que resolución utilizar?.. o donde la escojo.. o como sale.. o de donde sale??

Yo habia pensaba qe el duty del PWM siempre era de 10 bits (0-1023)... y que no dependía del valor del periodo... yo por ejemplo.... lo que hago para obtener un periodo de 4ms.. es escojer un valor de preescaler!... por ejemplo 16... entonces.. 4ms/16 = 250us... entonces... eso me daba a entender que mi PR2 debía tener un valor de 250

setup_timer_2(T2_DIV_BY_16,250,1);

Y entonces... lo único que tenia que hacer.. era otorgarle un valor cualquier al duty .. un valor entre 0 y 1023...

No sé qeu es lo que no estoy comprendiendo??....
« Última modificación: 19 de Septiembre de 2011, 12:16:25 por b.stronger »

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Dudas, Muchas Dudas Sobre PWM CCP en CCS
« Respuesta #3 en: 19 de Septiembre de 2011, 12:15:44 »
Revisa la hoja de datos del pic que usas , en ella vienen los cálculos y pasos para usar el modulo pwm.

Desconectado b.stronger

  • PIC10
  • *
  • Mensajes: 45
Re: Dudas, Muchas Dudas Sobre PWM CCP en CCS
« Respuesta #4 en: 19 de Septiembre de 2011, 12:17:41 »
ok.. investigo eso!

Desconectado b.stronger

  • PIC10
  • *
  • Mensajes: 45
Re: Dudas, Muchas Dudas Sobre PWM CCP en CCS
« Respuesta #5 en: 19 de Septiembre de 2011, 12:19:57 »
ahhhhhhhhh creo que ya comprendí como funciona eso!!.... lo reviso bien... y ahora te digo!! saludos gracias!!

Desconectado b.stronger

  • PIC10
  • *
  • Mensajes: 45
Re: Dudas, Muchas Dudas Sobre PWM CCP en CCS
« Respuesta #6 en: 19 de Septiembre de 2011, 13:03:15 »
Oye... me han surgido mas dudas.. estoy probando utilizar la formula.... Y bueno comienzo poniendote unos datos::

PIC16f873a
Cristal de 4MHz por lo tanto
Fosc=1MHz

Fpwm=480Hz
Periodo=2.083ms
Duty=25%

Preescaler=16
PR2=(2.083ms/16)=130.20us = 130

Resolucion= log(1MHz/480) / log(2) = 11.02 bits ????

Esto que significa??... por  eso no funciona correctamete??

Desconectado b.stronger

  • PIC10
  • *
  • Mensajes: 45
Re: Dudas, Muchas Dudas Sobre PWM CCP en CCS
« Respuesta #7 en: 19 de Septiembre de 2011, 13:45:41 »
:: Oye... la ecuacion para encontrar la resolucion no me cuadra, sin embargo.. ahora comprendo porqé no funcionaba.. ahora a base de pruebas puedo encontrar la resolucion que busco.... creo que eso será lo de menos.. al menos ya comprendo el porq no funcionaba... aunque me sigue intrigando el hecho... de que cuando activo el el CCP y luego lo desactivo.. el pin del CCP, ya no responde como un pin normal!! :?

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Dudas, Muchas Dudas Sobre PWM CCP en CCS
« Respuesta #8 en: 19 de Septiembre de 2011, 23:24:39 »
yo apenas me empiezo con el pwm, pero creo que tienes unos errores en la formula que aplicaste porque no tuviste en cuenta el Tosc, entonces yo lo diria asi, si estoy mal por favor alguien que nos corrija, de igual forma usando el buscador hay un hilo donde esta bien explicado lo del pwm.

remitiendonos a la imagen que puso akenafab de la ecuacion de PWMperiod debes despejar PR2, asi


        pwmperiod
____________________ - 1 = PR2
(4)(TMR2 prescale)(Tosc)

sustituyendo tus datos da PR2=129



En adelante me confundo un poco.. :?

si se quiere tenes un duty de 25% entonces se hace 2.03mS/4= 520.75uS, entonces con este valor despejo de la formula PWM duty cycle y hallo el valor que se debe cargar a los registros del duty, sustituyendo da  130. Es correcto?

Ahora para hallar la resolucion se aplica (Log (Fosc/Fpwm)) / Log 2    donde Fosc= 4Mhz para el caso

sustituyendo los datos da resolucion=13 bits.   De los cuales solon seran efectivos 10 bits. la explicacion esta en la imagen de akenafab, entonces

1. solo se puede poner en el duty valores que van de 0-1024?
2. Si vuelvo y despejo de la formula PWM duty cycle, no para 25% sino para 100%, es decir 2.03mS el valor a cargar es 520,  esto es en resolucion 2^10=1024   , pero entonces que pasa en el pwm con los valores comprendidos entre 520 y 1024?
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado b.stronger

  • PIC10
  • *
  • Mensajes: 45
Re: Dudas, Muchas Dudas Sobre PWM CCP en CCS
« Respuesta #9 en: 20 de Septiembre de 2011, 00:20:58 »
:: Bueno creo q mi calculo del PR2... no es tan malo.. me salió 130 y a ti 129.... Pero con lo de la resolución.. llegué a la conclusión de utilizar un metodo más práctico.. utilizo proteus para encontrar el valor maximo que puede tomar el duty.... Sé q es no es el mejor método.. pero pues.. no le entendido bien a la ecuacion esa...

Por ejemplo si tengo una frecuencia de PWM a 10kHz... lo que hago.. es ir probando valores minimos e irlos aumentando y en Proteus voy simulando y veo como se va anchando el pulso... hasta ver que el ancho de pulso llegue al maximo y en este caso.. de un PWM de 10KHz.. me dio un valor maximo del duty igual a  404... Que se que no tiene lógica.. pero el proteus eso me indica.. lástima que no tengo un oscilosciopio para verificarlos fisicamente!!..

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Dudas, Muchas Dudas Sobre PWM CCP en CCS
« Respuesta #10 en: 20 de Septiembre de 2011, 02:13:29 »
Lo más practico es hacer ese pequeño calculo.

Si les da una resolucion mayor a 10 pues juegan con el prescales.

Otra.

En CCS si la resolucion es de 10bits y ustedes usan una variable de 8bits no les van a cuadrar los numeros y el CCS solo escribira los 8 más altos.

Si les da 10bits y ustedes usan una variable de 10bits , CCS "respetará" cada paso.

Saludos!

Por cierto , creo que esos 13 bits de resolución pues indica que el pic no es capas de trabajar esa frecuencia , depende del cristal que usen , el PWM tiene un minimo y máximo , creo que por eso les salen eso 13bits.
« Última modificación: 20 de Septiembre de 2011, 02:16:18 por AKENAFAB »

Desconectado b.stronger

  • PIC10
  • *
  • Mensajes: 45
Re: Dudas, Muchas Dudas Sobre PWM CCP en CCS
« Respuesta #11 en: 20 de Septiembre de 2011, 11:17:41 »
sale gracias por sus puntos de vista!!... gracias a eso... ahora puedo trabajar bien!!.. saludos!

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 771
    • https://electronicadicto.wordpress.com/
Re: Dudas, Muchas Dudas Sobre PWM CCP en CCS
« Respuesta #12 en: 20 de Septiembre de 2011, 14:48:28 »
El periodo de la señal PWM se obtiene de configurar el TIMER2 y el contenido del registro PR2. Este registro de 8 bits contiene los 8 bits más significativos de una cuenta de 10bits. Para calcular el periodo de la señal PWM se utiliza la ecuación:

PWMT=(PR2+1)x4xToscx(valor del preescaler del TMR2)

eso es lo que me pone en el libro de CCS C que estoy siguiendo
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado b.stronger

  • PIC10
  • *
  • Mensajes: 45
Re: Dudas, Muchas Dudas Sobre PWM CCP en CCS
« Respuesta #13 en: 20 de Septiembre de 2011, 16:08:23 »
ahhh si.. con el cálculo del periodo.. no hay problema.. pero de todas formas gracias!!