Autor Tema: Como funciona el PWM  (Leído 13830 veces)

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

Desconectado j_fernandez

  • PIC12
  • **
  • Mensajes: 89
Como funciona el PWM
« en: 20 de Octubre de 2005, 05:58:00 »
Hola, me gustaria hacer una conmutada mediante el pwm de un pic pero no tengo ni idea de como funciona.

Alguien puede explicarme un pikillo como funciona el PWM del pic?? Teneis algun ejemplo??

Gracias y un saludo

Jose

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Como funciona el PWM
« Respuesta #1 en: 20 de Octubre de 2005, 07:17:00 »
PWM=Modo de modulacion de anchura de pulsos
Este modulo sirve para obtener impulsos logicos cuya anchura del nivel alto es variable(Anchura variable=Duty Cycle)
El tiempo que dura el periodo de la onda viene determinado por el valor cargado en PR2(tener en cuenta que PR2 es la parte alta del TMR2):
Codigo:

   Periodo=[ (PR2)+1] · 4 · Tosc · Valor Preescaler PR2


Cuando el valor del TMR2=PR2 ocurren tres acontecimientos:
Codigo:

   1. Se borra TMR2
   2. La patita del CCP1 se pone a 1
   3. El valor CCPR1L(determina anchura del pulso) se carga en CCPR1H


Para obtener la anchura del pulso:
Codigo:

   Anchura del pulso=(CCPR1L:CCP1CON<5:4> ) · Tosc·Valor Preescaler TMR2



Pasos para configurar PWM:
Codigo:

   1. Asignar el periodo cargando valor oportuno en PR2
   2. Asignar la anchura del pulso(Duty Cycle)
   3. Configurar CCP1 como salida
   4. Asignar valor predivisor y activar TMR2
   5. Configurar modulo CCP1 como PWM.



Asi lo hago yo.....no se si ha quedado claro....de todas formas mirate estas transparencias:
http://www2.ate.uniovi.es/8696/transp.htm
Clave: micro
Suerte!!!Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado j_fernandez

  • PIC12
  • **
  • Mensajes: 89
RE: Como funciona el PWM
« Respuesta #2 en: 20 de Octubre de 2005, 08:45:00 »
Gracias por tu respuesta vszener, me lo miraré con calma a ver si me aclaro. Por cierto, he ido a mirar las transparencias del enlace y al abrirlo me pide contraseña por lo que no he podido verlas.

Gracias y un saludo

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Como funciona el PWM
« Respuesta #3 en: 20 de Octubre de 2005, 08:56:00 »
Esta puesto en mi anterior post: Contraseña= micro
Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado j_fernandez

  • PIC12
  • **
  • Mensajes: 89
RE: Como funciona el PWM
« Respuesta #4 en: 21 de Octubre de 2005, 03:52:00 »
Lo siento no no habia visto, ahora le exare un vistazo.

Muchas gracias, eres muy amable.

Un saludo!!!!

Desconectado nicola

  • PIC10
  • *
  • Mensajes: 19
Re: Como funciona el PWM
« Respuesta #5 en: 30 de Septiembre de 2009, 20:04:37 »
hola que tal? siempre yo pidiendo ayuda, pero bueno sepan que son una fuente de informacion todos los dias! espero que en algun momento me llegue a mi el momento de ayudar jeje...


quiero generar una onda cuadrada de 1mhz. si utilizo la formula que postearon aca, la frecuencia maxima seria de 5mhz con un clock de 20mhz...ahora mi pregunta: a esas frecuencias funciona bien el pic? (16f877) no seria problema poner un schmitt trigger de ultima. ya use el ccp1 a 4khz y no tuve problemas, funciona genial.
la frutilla del postre seria poder variar la frecuencia del pwm con un potenciometro en alguna entrada A/D, alguien me podria echar una mano introductoria al uso del a/d?
la idea es poder guardar en la eeprom diferentes valores de frecuencia y despues poder volver a leerlos...

si les interesa saber en que ando, estoy buscando la manera de controlar con un pic los PT2395 (integrado de delay con a/d sigma delta, ram externa, d/a, comparadores, etc etc) variandole el clock varias los tiempos de delay y justamente quiero generarle el clock con el pic para poder guardar la frcuencia justa...

gracias de antemano, un saludo!

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Como funciona el PWM
« Respuesta #6 en: 30 de Septiembre de 2009, 20:17:23 »
Como bien tu indicaste a 20 MHz podes obtener como maximo 5Mhz y no tendras problema en el funcionamiento del PIC porque la generación del PWM se hace por Hardware  ;-)

Aquí hay un pdf donde presenta el módulo de conversión Analógico/digital muy bien explicado más un ejemplo al final.

Revisa el siguiente hilo, donde hay ejemplo de uso del PWM.



Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado nicola

  • PIC10
  • *
  • Mensajes: 19
Re: Como funciona el PWM
« Respuesta #7 en: 08 de Octubre de 2009, 23:34:18 »
muchismas gracias suky, no me olvido queusted es el quesiempre me reponde las preguntas  :mrgreen:

el ejemplo del a/d no lo entiendo mucho, no se nada de assembly mas que equ...  :(
ahora me pongo a buscar algo en C

ya tengo al pwm funcionando!!!

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Como funciona el PWM
« Respuesta #8 en: 08 de Octubre de 2009, 23:42:05 »
En CCS es sencillo, para empezar se debe indicar cuantos bits vamos a utilizar en la conversión:

Código: C
  1. /* ********************* Conversor A/D de 8 bits *************************** */
  2. #device adc=8

Luego al inicio del main queda configurar el módulo analógico:
Código: C
  1. setup_adc_ports(ALL_ANALOG);
  2.    setup_adc(ADC_CLOCK_INTERNAL);

Los parámetros de estas funciones las podemos ver en el include (.h) del microcontrolador que estemos utilizando.

Y para realizar la conversión:
Código: C
  1. set_adc_channel(0);
  2.    delay_us(20);
  3.    Data=read_adc();

La declaración de data depende si se usa 8 o 10 bits.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado nicola

  • PIC10
  • *
  • Mensajes: 19
Re: Como funciona el PWM
« Respuesta #9 en: 09 de Octubre de 2009, 03:59:14 »
bueno, son las 4 de la mañana y mañana a las 7 arriba para ir a trabajar...esto es amor por los pic (?)
debo admitir que no puedo parar de mover el potenciometro y mirar cambiar el display, es hipnotizante.
aca dejo el codigo, que en muy gran medida es gracias al foro!
es muy simplelo que hace: tiene un pote divisor de tension en la entrada A0 y muestra la posicion de 0 a 9 en un display de 7 segmentos. es el hola mundo de los adc  :lol:

un saludo suky, gracias de nuevo por la ayuda!


Código: C
  1. #include <16f877a.h>    
  2. #fuses XT,NOWDT,NOPROTECT,PUT,NOLVP
  3. #DEVICE ADC=8
  4. #use delay (clock=4000000)
  5.  
  6. void main(void)
  7. {
  8.    char data;
  9.  
  10.    setup_adc_ports(ALL_ANALOG);
  11.    setup_adc(ADC_CLOCK_INTERNAL);
  12.    set_tris_b(0x00);
  13.  
  14.    set_adc_channel(0);
  15.  
  16.    do{
  17.       delay_us(20);
  18.       data=read_adc();
  19.       delay_us(20);
  20.  
  21.       if((data>=0x00)&&(data<0x18))
  22.       output_b(0b01111101);               //0
  23.       if((data>=0x18)&&(data<0x30))
  24.       output_b(0b01001000);               //1
  25.       if((data>=0x30)&&(data<0x48))
  26.       output_b(0b00111110);               //2
  27.       if((data>=0x48)&&(data<0x60))
  28.       output_b(0b01011110);               //3
  29.       if((data>=0x60)&&(data<0x78))
  30.       output_b(0b01001011);               //4
  31.       if((data>=0x78)&&(data<0x90))
  32.       output_b(0b01010111);               //5
  33.       if((data>=0x90)&&(data<0xA8))
  34.       output_b(0b01110111);               //6
  35.       if((data>=0xA8)&&(data<0xC0))
  36.       output_b(0b01001100);               //7
  37.       if((data>=0xC0)&&(data<0xD8))
  38.       output_b(0b01111111);               //8
  39.       if((data>=0xD8)&&(data<0xFF))
  40.       output_b(0b01001111);               //9
  41.  
  42.       delay_ms(100);
  43.              
  44.      }while(TRUE);      
  45. }

Desconectado PPGando

  • PIC10
  • *
  • Mensajes: 5
Re: Como funciona el PWM
« Respuesta #10 en: 10 de Octubre de 2009, 14:06:16 »
interesantisimo chicos, voy a probar el codigo de suky en lo que llegue a casa de ver el futbol, pero quiero hacer una consulta, tengo entendido, que se pueden generar 2 pwm independientes en frecuencia y periodo de trabajo con el 18f, es cierto??, algun ejemplo??, no cual es la frecuencia mas pequeña en la que se puede trabajar(periodomas largo).

gracias de antemano por su atencion y respuestas

Desconectado nicola

  • PIC10
  • *
  • Mensajes: 19
Re: Como funciona el PWM
« Respuesta #11 en: 14 de Octubre de 2009, 03:49:44 »
cuando vi el ejemplo de como usar el pwm, note que el periodo q pongo en el setup del timer2 siempre era la mitad del numero que ponia en el pwm duty.
Código: C
  1. setup_timer_2(T2_DIV_BY_4, 127, 1);      //512us -> 1,95kHz
  2. set_pwm1_duty(256);                  //256us/(4*(1/4000000)) = 256

pero con numeros menores a 127 no se mantiene esa relacion, de hecho es todo lo contrario y no tengo la menor idea del porque, pero probando valores encontre que el valor del pwm duty tiene q ser exactamente la mitad para tener un 50% de ancho de pulso.

Código: C
  1. #include <16f877a.h>
  2. #fuses XT,NOWDT,NOPROTECT,PUT,NOLVP
  3. #DEVICE ADC=8
  4. #use delay (clock=4000000)
  5.  
  6. void main(void)
  7. {
  8.    char frec,pwm;
  9.  
  10.    setup_adc_ports(ALL_ANALOG);
  11.    setup_adc(ADC_CLOCK_INTERNAL);
  12.    setup_ccp1(CCP_PWM);
  13.  
  14.    do{
  15.       set_adc_channel(0);
  16.       frec=read_adc();
  17.       delay_us(50);
  18.       frec=2+frec/2;
  19.       pwm=frec/2;
  20.  
  21.       setup_timer_2(T2_DIV_BY_1, frec, 1);
  22.       set_pwm1_duty(pwm);
  23.      
  24.        }while(TRUE);    
  25. }

ese es el ejemplito que hice.
con periodo igual a 10 saque 90,90khz
con periodo 50 saque 20khz
con periodo 127 saque 7,14Khz.

resumiendo, no se si anda por algun lugar del foro (yo no lo pude encontrar), pero aca dejo un simple generador de onda cuadrada variable con una entrada analogica.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Como funciona el PWM
« Respuesta #12 en: 14 de Octubre de 2009, 09:11:05 »
Revisa por aquí lo que es la teoría del PWM, dependiendo de la frecuencia que selecciones trabajaras con cierta resolución (n bits) y de ello dependerá los valores que debas ingresar en duty_cycle.

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado pablolode

  • PIC16
  • ***
  • Mensajes: 123
Re: Como funciona el PWM
« Respuesta #13 en: 16 de Octubre de 2009, 11:11:06 »
 Hola  colegas,con respecto a el tiempo real de ejecucion en cuanto a ms y us en CCS ¿ es real?...
es que adapte un codigo PMW del un maestro del foro para hacerlo trabajar en us y con el ociloscopio de PROTEUS me da los tieMpos asignados ...
PERO por ahi lei que en CCS DEMORA MAS AL EJECUTARLO EN UN CIRCUITO REAL  por el tiempo de ejecucion de las rutinas,¿¿ como saber mas o menos el tiempo real???

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Como funciona el PWM
« Respuesta #14 en: 16 de Octubre de 2009, 11:21:46 »
Pero el PWM que estas implementando es por Hard? Si es así no hay modificación. Si es por software, si esta bien calculado (Con demoras + ciclos de instrucción utilizados), tampoco deberías de tener problemas  :undecided:

Saludos!
No contesto mensajes privados, las consultas en el foro