J

japifer

Usuario (Chile)

Primer post: 23 mar 2011Último post: 23 mar 2011
1
Posts
8
Puntos totales
0
Comentarios
como generar pwm con el pic
como generar pwm con el pic
InfoporAnónimo3/23/2011

como generar un PWM con el pic: primero tenemos que saber a que frecuencia queremos nuestro PWM, donde a este se le calcula el periodo de la frecuencia: periodo del PWM=1/(frecuencia del PWM) luego tenemos que saber que cristal vamos a utilizar para sacarle de igual forma el periodo: Tosc=1/(cristal del pic) ahora como PR2 tiene que estar entre 0 y 255 vemos que Preescaler nos sirve, en esto solo puede tomar tres valores de Preescaler los cuales son 1, 4 ó 16. PR2=((Periodo del PWM)/(4*Tosc*TMR2 Preescaler))-1 y por ultimo tenemos que saber cuál va a ser nuestro rango de trabajo del PWM. esto quiere decir que si vamos a hacer un Dady cicle por ejemplo del 50% ó 100%. CCPR1L:CCP1CON=(Ciclo de trabajo del PWM)/(Tosc*TMR2 Preescaler) y por último la configuración del programa tiene que ser: setup_ccp1(CCP_PWM); //ccp1 modo PWM ó setup_ccp2(CCP_PWM); //ccp2 modo PWM ó setup_ccp3(CCP_PWM); //ccp3 modo PWM como también pueden ser las tres juntas luego de esto se tiene que poner: setup_timer_2(modo, period, postcaler); Esta función inicializa el timer2; mode especifica el divisor del reloj del oscilador. period es un número comprendido entre 0-255, y determina el momento en el que el valor del reloj se resetea a 0. postscale es un número de 0 a 15, que determina cuántos reset del timer se han producido antes de una interrupción. 0 significa 1 reset, 1 significa 2 reset, y así sucesivamente. El valor del timer puede leerse y puede escribirse utilizando GET_TIMER2() y SET_TIMER2(). Los valores de mode son: o T2_DISABLED o T2_DIV_BY_1 o T2_DIV_BY_4 o T2_DIV_BY_16 (los tres ultimos casos equivalen al preescaler utilisado) ejemplo: setup_timer_2(T2_DIV_BY_1,PR2, 1); y por ultimo SET_PWM1_DUTY(value) SET_PWM2_DUTY(value) Estas funciones escriben los 10 bits de value al dispositivo PWM para establecer el ciclo de trabajo. Se puede usar un valor de 8 bits si no son necesarios los bits menos significativos. ejemplo: SET_PWM1_DUTY(CCPR1L:CCP1CON); esto equivale al ciclo de trabajo del PWM ejemplo completo: cristal del pic 4MHz, Preescaler 1:1, ciclo de trabajo del PWM 50% y frecuancia del PWM igual a 20KHz Periodo PWM= 1/20KHz = 50us Tosc= 1/ 4MHz =250ns PR2= (50us/(4*250ns*1))-1 = 49 CTPWM 50%= Periodo PWM / 2 = 25us CCPR1L:CCP1CON = 25us/(250ns*1) = 100 por lo tanto la configuracion de esto es: setup_ccp1(ccp_PWM); setup_timer_2(t2_div_By_1,49,1); set_pwm_duty(100); saludos y espero que les sirva.

8
0
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.