Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tutoriales PIC
Fundamentos de microcontroladores aplicados a la familia PIC de Microchip. Proyectos y Aplicaciones.
Seleccionar idioma
Con la tecnología de Traductor de Google
Nuestro controlador (digital) eventualmente tendrá que interactuar con el mundo exterior (analógico). Al SEARCH IN THIS BLOG
margen de usar dispositivos externos (convertidor digital analógico o DAC) muchos microcontroladores Buscar
cuentan con un módulo PWM (Pulse Width Modulation) que puede usarse (con ciertas limitaciones) para
mandar "ordenes" analógicas.
LO MÁS VISTO ESTE MES
En este tutorial describiremos en que consiste la modulación por ancho de pulsos (PWM), veremos las Modulación PWM (Pulse
rutinas disponibles en C18 y, como hacemos habitualmente, describiremos los registros asociados y su Width Modulation)
funcionalidad.
Conversor ADC
Aprovecharemos los conocimientos adquiridos para escribir una rutina para inicializar el módulo PWM
Manejo de motores DC
especificando la frecuencia deseada y escribiremos un pequeño programa para usar los dos módulos usando PWM
PWM de un PIC para crear transiciones de colores en un LED bicolor.
Controlador PID para
posición de un motor DC
En una entrada posterior aplicaremos lo que hemos aprendido a una aplicación más interesante usando el
módulo PWM como conversor DAC para un archivo de audio. Comunicaciones puerto
serie (UART)
Archivos de código asociados a esta entrada: pwm1.c y pwm2.c
-------------------------------------------------------------------------------------------- PROYECTOS:
Audio con PWM
Brújula electrónica
Levitador magnético
Descripción de la modulación por ancho de pulso (PWM) Medidor de potencia
Monitor pulso cardíaco
En algunos de los tutoriales anteriores usábamos un truco para estimar la ocupación del PIC. Consistía en
poner a 1 un cierto pin mientras estábamos haciendo una cierta tarea. Luego, nos bastaba con medir el
voltaje medio (con un voltímetro) en dicho pin. Dicho voltaje (dividido por los 5V de alimentación) nos ARCHIVO DEL BLOG
daba el % del tiempo que el pin estaba alto. ► 2013 (16)
▼ 2012 (13)
La modulación PWM consiste precisamente en eso. El módulo PWM del micro genera una onda cuadrada
► julio (3)
con una frecuencia dada (típicamente bastante alta, por ejemplo 10 KHz). Luego nosotros podemos ir
▼ junio (10)
cambiando el ciclo de trabajo (% del periodo en ON) de la señal:
Aplicación: Audio con
PWM
Modulación PWM
(Pulse Width
Modulation)
Decodificador de un
mando a distancia
Comunicaciones UART
con paridad
Comunicaciones UART
Si usamos un dispositivo externo con un ancho de banda suficiente (p.e. un osciloscopio) veremos la con interrupciones
señal al completo, esto es, la modulación rápida (o portadora) de 10 KHz y las variaciones más lentas Comunicaciones
(señal a transmitir) del ciclo de trabajo. puerto serie (UART)
Uso de
Si por el contrario aplicamos un filtro paso-bajo a la señal PWM, los cambios rápidos (10 KHz) de la señal temporizadores
se eliminarán y simplemente veremos los cambios lentos del ciclo de trabajo, observando un voltaje (timers)
"medio" entre 0 y 5V dependiendo del ciclo de trabajo (0% -> 100%) programado. Niveles de prioridad en
interrupciones
No siempre es necesario implementar un filtro paso-bajo de forma explícita. Muchas veces usamos un Interrupciones
dispositivo externo (voltímetro, motor, etc) con suficiente "inercia", de forma que no es capaz de seguir (conceptos básicos)
los cambios rápidos de la señal (los 10 KHz). Por así decirlo el dispositivo (motor, altavoz) lleva Introducción al BLOG
incorporado su propio filtro paso-bajo.
picfernalia.blogspot.mx/2012/06/modulacion-pwm-pulse-width-modulation.html 1/14
11/12/13 Tutoriales PIC: Modulación PWM (Pulse Width Modulation)
DATOS PERSONALES
Lo que hemos conseguido es una especie de conversor digital analógico que nos permite traducir una Antonio
orden digital (ciclo de trabajo del periodo PWM) en una variable analógica (el voltaje medio a la salida Ver todo mi perfil
entre 0 y 5V).
SEGUIDORES
Obviamente tendremos algunas limitaciones. Como queremos que desaparezca la frecuencia de
modulación (los 10 KHz) de antes los cambios (frecuencia) de la señal que queremos transmitir deben Participar en este sitio
ser lo suficientemente lentos (frecuencia baja) para que no desaparezcan también en el filtrado paso-bajo Google Friend Connect
El valor máximo del divisor previo PRE es 16 y el de (PR2+1) es 256. Por lo tanto la frecuencia PWM más
baja posible será Fosc/16384. Para un oscilador de 20 MHz tenemos una Fpwm mínima de 1.22 KHz
(20000/16384).
Notad que el módulo PWM usa el timer TMR2, por lo que éste no podrá usarse como temporizador de
propósito general mientras se esté usando PWM. Si que es posible usarlo (y ahorrarnos gastar otro
timer) si queremos hacer saltar una interrupción cada cierto tiempo. El postscaler del TMR2 no tiene
efecto sobre la frecuencia PWM, pero si influye sobre cuando salta (si está habilitada) la correspondiente
interrupción (TMR2_flag). Si por ejemplo el post-scaler es 1:16 entonces la interrupción del TMR2 saltará
cada 16 periodos del PWM.
Lo primero que tenemos que hacer para usar el módulo PWM es habilitarlo indicando que va a usarse
como generador de una onda PWM, ya que dicho módulo es compartido con otras funciones
(Capture/Compare). La forma de hacerlo es poner a 11XX los 4 bits menos significativos del registro
CCP1CON. Los PIC18 suelen tener 2 módulos PWM por lo que existe un segundo registro CCP2CON.
Podemos habilitar uno o los dos módulos independientemente. Sin embargo, como ambos usan el
registro PR2 y el timer TMR0 como base de tiempos, la frecuencia programada será la misma en ambos
módulos.
Lo que si es posible variar por separado es el ciclo de trabajo (duty cicle o DC) de cada módulo. El ciclo
de trabajo se codifica con un número de hasta 10 bits (0-1023) almacenado de la siguiente forma:
La programación del % ON del segundo módulo es similar pero usando los registros CCP2CON y CCPR2L.
Con los 10 bits dados el ciclo de trabajo se podrá especificar en principio con 1024 niveles (0
corresponde a 0% y 1023 al 100%). Sin embargo, los valores válidos pueden ser menores que los 1024
posibles.
La razón es que el valor de DC (duty_cicle) determina el tiempo que la señal se mantiene alta (ON) de la
forma:
picfernalia.blogspot.mx/2012/06/modulacion-pwm-pulse-width-modulation.html 2/14
11/12/13 Tutoriales PIC: Modulación PWM (Pulse Width Modulation)
T_pwm = [ (PR2+1) x 4 x PRE ] x Tosc
Comparando ambas fórmulas y siendo obvio que el tiempo total ON no puede exceder el tiempo total del
periodo tenemos que el valor máximo de DC es (PR2+1) x 4. Por lo tanto, aunque podemos dar a DC
cualquier valor entre 0 y 1023 está claro que en realidad debemos limitarnos al rango [ 0, (PR2+1)x4 ].
Valores más altos van a hacer que Ton > Tpwm, o lo que es lo mismo, la señal PWM se mantiene alta
todo el rato (100%).
En resumen, para mantener la máxima resolución (10 bits) a la hora de especificar DC es preciso usar
PR2=255. Para una cierta frecuencia del oscilador Fosc podemos optar por tres frecuencias con la
máxima resolución:
Frecuencias por debajo de Fosc/16384 no son posibles porque los valores de PR2 y PRE están ya en su
máximo posible.
Frecuencias por encima de Fosc/1024 son posibles pero a costa de bajar PR2 y por lo tanto disponer de
menor resolución para el ciclo de trabajo. Por ejemplo si aceptamos trabajar con 8 bits (valores de DC de
0 a 255) podemos llegar a una frecuencia de:
La razón por la que para frecuencias muy altas no podemos especificar con tanta precisión el ciclo es que
el periodo empieza a hacerse muy pequeño. En el caso anterior (Fpwm = Fosc/256) es obvio que en un
ciclo del PWM sólo entran 256 ciclos del oscilador. Como es imposible que el micro haga algo entre ciclos
de reloj, está claro que sólo puede bajar la línea del PWM en 256 puntos como mucho (esto es, con una
resolución de 8 bits).
Valores de frecuencias intermedios son también posibles, pero de nuevo van a exigir PR2<255. Por
ejemplo para conseguir 10 KHz con un oscilador de 20 MHz
Fosc / Fpwm =20000/10 = 2000 = 4 x PRE x (PR2+1) -> PRE x (PR2+1) = 500
lo que puedo conseguir con PRE=2 y PR2 = 249. Pero entonces el valor del ciclo de trabajo (DC) tiene
que moverse en el rango 0 a 4(PR2+1) = 1000. Con DC=1000 ya alcanzamos un 100% del ciclo de
trabajo y valores superiores no tendrán ningún efecto extra.
En cuanto al pin de salida al que se manda la señal PWM, usualmente la salida PWM1 va al pin RC2 y la del
PWM2 al RC1 (notad el cambio 1-2). En algunos dispositivos (consultar datasheet) es posible cambiar la
salida de PWM2 a otro pin mediante un bit de configuración.
Las rutinas básicas del compilador C18 para manejar los módulos PWM son las siguientes (las
declaraciones se encuentran en pwm.h):
Notad que las rutinas anteriores no tocan el timer TMR2. Es responsabilidad del usuario invocar a la rutina
OpenTimer2 para fijar el valor del divisor o pre-scaler y arrancar el temporizador.
El siguiente programa (código en pwm1.c) pone en marcha ambos módulos y va variando el ciclo de
trabajo de PWM1 entre 0 y DC_max (valor máximo = 1023, correspondiente a un 100%).
Simultáneamente el ciclo de PWM2 se establece como el valor complementario. Tras los #include (no
olvidar añadir pwm.h, timer.h y delays.h) y los #pragma de configuración habituales el programa principal
es simplemente:
void main()
{
picfernalia.blogspot.mx/2012/06/modulacion-pwm-pulse-width-modulation.html 3/14
11/12/13 Tutoriales PIC: Modulación PWM (Pulse Width Modulation)
int8 inc=1;
DC_max=1023;
while(1)
{
SetDCPWM1(dd); SetDCPWM2(DC_max-dd); // Set complementary DC in PWM1 and PWM2
}
}
Vemos que hemos usado PR2=255 y pre-scaler = 1. Esto nos da una frecuencia PWM de :
El siguiente video es una captura de pantalla del osciloscopio monitorizando PWM1 y PWM2. Se observa
que el periodo del PWM (unos 51 usec, correspondientes a 19.5 KHz) no cambia y es común a ambos
canales. El tiempo en ON de PWM1 (arriba) es justo el tiempo OFF del PWM2 (abajo) ya que los hemos
programado para ser complementarios: dd y (DC_max-dd)
Los saltos que se observan en las transiciones del duty_cicle son debidas a la frecuencia (baja) con la que
se refrescan en pantalla los datos del osciloscopio. En el osciloscopio se ve una variación gradual, como
corresponde a un incremente de 1 en 1 en el ciclo de trabajo.
La frecuencia son justo los 25 KHz esperados. Sin embargo, se aprecia que algo va mal. Ahora ambos
canales no son complementarios. El canal PWM1 llega al 100% y permanece allí, no empezando a bajar
hasta después de un rato. El comportamiento de PWM1 y PWM2 no parece ser el que hemos
programado. La evolución del ciclo de trabajo antes describía la función de la izquierda (como
correspondía a nuestro programa), y ahora parece describir la de la derecha.
picfernalia.blogspot.mx/2012/06/modulacion-pwm-pulse-width-modulation.html 4/14
11/12/13 Tutoriales PIC: Modulación PWM (Pulse Width Modulation)
La razón es que al haber bajado PR2 hemos subido la frecuencia (correcto) pero sin darnos cuenta
también hemos alterado el rango de valores posible para DC. El valor máximo para el que alcanzamos e
100% es de 4x(200) = 800. Al llegar dd a 800, la señal PWM alcanza un 100% y se mantiene mientras
dd sigue subiendo hasta 1023 y vuelve a bajar. Sólo cuando volvemos a entrar en el rango [0 800]
volvemos a notar variación.
En resumen, recordar que si PR2 no es 255 el valor máximo de DC no será 1024 sino DC_max = 4 x
(PR2+1).
Ahora que entendemos como funciona el módulo PWM y conocemos los registros involucrados, vamos a
escribir nuestras propias rutinas de manejo del PWM. En primer lugar las rutinas para ajustar el duty cicle:
Vemos que sólo es cuestión de poner los 2 bits menos significativos del argumento en los bits DC1b0 y
DC1b1 de CCP1CON y los 8 más significativos en CCPR1L. Lo mismo para los registros CCP2CON y
CCPR2L para PWM2.
Obviamente, estas rutinas no aportan nada sobre las suministradas por C18, sólo nos permiten confirmar
que lo que se está haciendo no es nada complicado.
Veamos una rutina con algo de "valor añadido". Era un poco incomodo tener que acordarnos de
configurar y arrancar TMR2 por separado. Vamos a escribir una rutina que combine la configuración del
módulo y el arranque del timer TMR2. Además, en vez de aportar como argumentos los valores de PR2 y
del prescaler de TMR2 vamos a especificar la frecuencia Fpwm deseada (en KHz) y dejar que la rutina
calcule y configure los registros adecuados. Como siempre está rutina puede ser combinada con las del
C18. Podemos usar esta rutina para inicializar el módulo y luego usar las rutinas de C18 para fijar el ciclo
de trabajo. El código es el siguiente:
uint16 x, DC_max;
uint8 pre;
uint8 log2,pr2;
if (x>16384) {pre=16; pr2=255;} // Requested Fpwm too low -> set Fpwm = Fosc/16384
else
{
pre=0;
while(x>256) {x>>=2; pre++;} // Find pr2 and pre so that (pr2+1)*pre=(Fosc/4)/Fpwm
picfernalia.blogspot.mx/2012/06/modulacion-pwm-pulse-width-modulation.html 5/14
11/12/13 Tutoriales PIC: Modulación PWM (Pulse Width Modulation)
}
PR2=pr2;
T2CON = 0b00000100 | pre; // start TMR2 with prescaler pre and postscaler 1:1
// | || |
// | | | |_ Prescale: 00 (1) 01 (4) 1X(16)
DC_max = pr2; DX_max++; DC_max<<=2; // 4 x (PR2+1) // MAX value for Duty cicle
return DC_max;
}
La rutina recibe la frecuencia del oscilador y la frecuencia PWM deseada (ambas en KHz, uint16 para Fosc
y uint8 para Fpwm) y el canal PWM que deseamos inicializar (1 para PWM1, 2 para PWM2 o 3 para
ambos). Todo esto pensando en PICs con dos módulos PWM, aunque sería fácilmente modificable para
otros casos. El tener una sola función para inicializar todos los canales tiene sentido porque los
parámetros calculados (PR2, pre-scaler) son comunes entre canales.
La función calcula el valor de PR2 y PRE que consiguen la frecuencia pedida y los usa para el registro PR2
y para configurar el divisor previo del TMR2. También arranca el timer por lo que no es necesaria una
llamada adicional.
Si la frecuencia requerida es demasiado baja se fija la frecuencia permitida más baja posible. Como es
posible que en PR2 resulte un valor < 255, la función devuelve el valor de DC que corresponde a un
100% del ciclo ON.
void main()
{
uint16 DC_max,dd=0;
int8 inc=1;
while(1)
set_pwm1(dd); set_pwm2(DC_max-dd);
dd+=inc; // Increase duty cicle
Delay10KTCYx(5);
}
}
Vemos como para DC_max no usamos el valor nominal 1023 sino el que nos devuelve la función
setup_PWM.
La aplicación más sencilla que podemos ver del uso de PWM es modular la luminosidad de un LED. Al
contrario que con una lámpara incandescente no podemos atenuar un LED bajando su voltaje ya que al
ser esencialmente un diodo, pasará de no conducir (OFF) a conducir (ON) con una muy pequeña
variación de voltaje. Lo que podemos hacer con PWM es encenderlo y apagarlo muy rápidamente (a la
frecuencia del PWM). El tiempo ON del ciclo (duty) determinará la luminosidad aparente del LED (en este
caso el elemento integrador o paso bajo es nuestro ojo, que es incapaz de apreciar como el LED se
enciende y se apaga).
En el ejemplo siguiente usamos la salida de PWM1 y PWM2 para modular el color e intensidad de un Led
bicolor RG. Usaremos RC1 y RC2 conectados al positivo de los leds R y G y pondremos el negativo
común a tierra:
picfernalia.blogspot.mx/2012/06/modulacion-pwm-pulse-width-modulation.html 6/14
11/12/13 Tutoriales PIC: Modulación PWM (Pulse Width Modulation)
El diferente valor de las resistencias usadas (800K, 100K) es para compensar la mayor eficiencia del LED
rojo e intentar que la luminosidad de ambos LED estén equilibradas.
El código (pwm2.c) es muy similar al anterior, pero ahora los valores del ciclo de trabajo los sacamos de
un par de tablas (básicamente una oscilación sinusoidal dando más preferencia a los niveles cerca del 0).
El tamaño de ambas tablas corresponde a dos números primos y se ha elegido así para que se de una
mayor combinación de colores, antes de que empiecen a repetirse las combinaciones. También se han
definido un par de macros que incrementan los respectivos punteros p1 y p2 a las tablas, haciéndolos
voltear al llegar al final.
Como ambas tablas son de sólo lectura una posibilidad sería colocarlas en la memoria de programa
(usando el calificador const rom) para no gastar memoria de datos.
#define N1 61
#define N2 59
uint16 duty1[N1]={
121, 153, 192, 239, 294, 357, 428, 507, 590, 676, 761, 840, 909, 964,1001,1018,
1012, 985, 939, 876, 801, 719, 633, 548, 467, 392, 324, 265, 215, 172, 137, 108,
84, 65, 50, 38, 29, 22, 16, 11, 8, 5, 3, 2, 1, 0, 0, 0,
1, 2, 4, 6, 9, 13, 18, 25, 33, 44, 57, 74, 95};
uint16 duty2[N2]={
121, 155, 195, 244, 302, 369, 444, 526, 613, 702, 789, 867, 934, 983,1012,1018,
1000, 961, 902, 829, 746, 658, 569, 484, 405, 334, 272, 219, 174, 137, 107, 83,
64, 49, 37, 27, 20, 14, 10, 7, 4, 2, 1, 0, 0, 0, 1, 2,
3, 5, 8, 12, 17, 24, 32, 42, 56, 73, 95};
uint8 p1=0;
uint8 p2=0;
void main()
{
setup_PWM(20000,5,3);
while(1)
{
set_pwm1(duty1[p1]); inc_p1;
set_pwm2(duty2[p2]); inc_p2;
Delay10KTCYx(5);
}
}
En la siguiente película podemos ver el resultado. A la derecha, los LEDs de la placa EasyPic6
correspondientes a RC1 y RC2 se van encendiendo y apagando. A la izquierda el LED Red-Green
conectado a ambas salidas va cambiando de color.
picfernalia.blogspot.mx/2012/06/modulacion-pwm-pulse-width-modulation.html 7/14
11/12/13 Tutoriales PIC: Modulación PWM (Pulse Width Modulation)
El problema del video es que los sensores de las cámaras digitales son muy sensibles al rojo (de hecho
más al infrarrojo), saturandose el canal rojo y no apreciandose correctamente los detalles de las
transiciones de color.
28 comentarios:
Respuestas
Si es el caso b) es muy sencillo con un PIC con EPWM (enhanced PWM). Solo programas el PWM
normalmente y la señal complementaria sale por otro pin
(RD5 o asi, consulta el datasheet). Además puedes programar tiempos muertos.
Si es el caso a) no creo que sea posible usando PWM, aunque podrías hacerlo
a través de una interrupción con un timer. También supongo que con un poco de electrónica
detrás de la salida PWM podrías crear una señal retrasada.
Antonio
Es cierto que, a ojo, tu ciclo de trabajo es del orden de un 78%, pero si ese es el problema,
podrías modificarlo limitando el valor de los registros correspondientes.
Las formulas relevantes son (pag 155 del manual del 2550-4550):
Imagina que tienes un cristal de 8Mhz (Tosc = 1/8 usec) y programas el PWM con un
TMR2_pre=1 y PR2=255.
Si ahora programas un delay de 32 usec (con ECCP1DEL=64) y varías duty entre 0 y 768
tendrás dos señales complementarias (fuera del tiempo muerto) y ninguna de las dos ocupara
más de un 50%.
Antonio.
Agradecería tu respuesta
picfernalia.blogspot.mx/2012/06/modulacion-pwm-pulse-width-modulation.html 9/14
11/12/13 Tutoriales PIC: Modulación PWM (Pulse Width Modulation)
Estaba pensando escribir una entrada sobre el tema explicando los detalles. Con tu pregunta,
la subiré de prioridad en mi cola de cosas para hacer.
Antonio.
Responder
Respuestas
Lo que no es cierto es que solo puedas conseguir un duty máximo del 19% (200/1024).
Puedes alcanzar un duty del 100% si pones 200 en el resistro del duty cycle. No has perdido
rango del duty, ya que puedes ir desde 0% (duty=0) hasta 100% (duty=200).
Lo que has perdido es resolución al especificar el duty. Todo el rango posible (de 0 a 100%) lo
cubres en 200 pasos, en vez de en los 1024 pasitos posibles si hubieras optado por una
frecuencia PWM más baja.
Antonio.
Responder
Otra pregunta que tengo, por si alguien la sabe es si, El módulo CCP en modo PWM sólo produce
interrupción en modo captura con un sensor de ultrasonidos o no tiene nada que ver.
Respuestas
y por lo tanto depende del valor del registro PR2 (asociado al Timer 2) y del valor de pre-
escalado (1,4 o 16) del Timer 2.
Respecto a lo del sensor de ultrasonidos, una interrupción de captura saltará cuando la línea
correspondiente suba o baje. Lo que sea que cause ese cambio es indiferente.
Hay una entrada más reciente sobre el modo CAPTURE del módulo CCP que puede aclararte
picfernalia.blogspot.mx/2012/06/modulacion-pwm-pulse-width-modulation.html 10/14
11/12/13 Tutoriales PIC: Modulación PWM (Pulse Width Modulation)
algunas conceptos:
http://picfernalia.blogspot.com.es/2013/07/modo-de-captura-en-el-modulo-ccp.html
* En modo Capture la interrupción CCPxIF saltara cuando la linea suba, baje, o cada 4 o 16
subidas (se puede programar).
* En modo Compare CCPxIF se levanta cuando el valor del Timer asociado (TMR1/TMR3)
coincide con el valor del registro CCPRx.
* El modo PWM no provoca interrupciones CCP, pero como por debajo usar el timer TMR2,
disparará la interrupción asociada al Timer TMR2.
POr supuesto en todos los casos para que la interrupción salte los correspondiente bits IE
(interrupt enable) deben estar a 1, tanto de tipo general como específicos.
Un saludo, Antonio.
Responder
Respuestas
Sin embargo, en los que tu mencionas 18F45K22 he visto que es posible asociar cada módulo a
un timer distinto, por lo que podrás obtener las 2 frecuencias distintas que te han pedido.
Las fórmulas que doy para calcular la frecuencia PWM siguen siendo válidas, pero ahora, en vez
de usar exclusivamente el registro PR2 (asociado al TMR2) puedes usar un distinto PRx
para el otro módulo, asociándolo a un segundo timer TRMx.
UN saludo,
picfernalia.blogspot.mx/2012/06/modulacion-pwm-pulse-width-modulation.html 11/14
11/12/13 Tutoriales PIC: Modulación PWM (Pulse Width Modulation)
Antonio.
Responder
Como el foco lleva corriente alterna, hice un circuto analogico de un optocoplador (MOC3011) con un
triac (MAC15A6G).
Gracias!!
Responder
Respuestas
Antonio
Responder
Respuestas
* Selecciona el módulo PWM: poner los 4 bits menos significativos de CCP1CON a 11xx
picfernalia.blogspot.mx/2012/06/modulacion-pwm-pulse-width-modulation.html 12/14
11/12/13 Tutoriales PIC: Modulación PWM (Pulse Width Modulation)
* Configurar el módulo PWM en modo HalfBridge (poniendo los 2 bits más significativos de
CCP1CON a 10)
* Configurar periodo y duty del PWM (esto es igual que lo explicado en esta entrada).
* Configurar tiempos muertos usando los 7 bits menos significativos de PWM1CON: delay =
4*Tosc*PWM1CON
Los pines de salida para las señales complementarias serán RC2 y RD5. Ambos tienen que ser
declarados de salida con los correspondientes registros TRISC y TRISD.
Un saludo, Antonio
Responder
Saludos.
José Ángel.
Responder
Respuestas
No se si esto tiene mucho sentido o te aclara algo. Estoy de acuerdo contigo en que lo de
invertir polaridades es mucho menos intuitivo. De hecho, la primera vez que vi este enfoque (en
una app note de microchip) como no lo veía claro acudí a las ecuaciones diferenciales de un
motor DC:
L dI/dt = V - R I - K w
J dw/dt = K I - b w
Con este modelo puedes resolver las ecs. diferenciales para diferentes voltajes y comprobar por
ejemplo que la velocidad alcanzada por el motor al 60% en modo unipolar(opción A) es la
misma que si invertimos la polaridad (OPcion B) y usamos un duty del 80%. También puedes
comprobar como las oscilaciones dentro de un ciclo van desapareciendo al aumentar la
frecuencia del voltaje aplicado.
Un saludo, Antonio
picfernalia.blogspot.mx/2012/06/modulacion-pwm-pulse-width-modulation.html 13/14
11/12/13 Tutoriales PIC: Modulación PWM (Pulse Width Modulation)
Responder
Introduce tu comentario...
picfernalia.blogspot.mx/2012/06/modulacion-pwm-pulse-width-modulation.html 14/14