Que onda Tornar,
En la web del pana Modulay hay muy buenos ejemplos.. en especifico a tu problema estan dos excelentes ejemplos de como usar el PWM subidos por el pana pocher hechales una mirada para ver como usarlo...
http://personal.auna.com/asencio5/Ejemplos%20C/PWM/Cuando te refieres a mover un motor, te refieres a un servo motor no?...si es asi entonces basicamente es aplicar un "tren de pulsos con determinada frecuencia", en base a esta se define su desplazamiento... normalmente(dependiendo del modelo de servo leyendo su DS) con un tren de pulsos de 1.5 ms se mueve a la posicion intermedia (90°
y de 1 a 2 ms para su movimiento completo de 180°.....
Es importante que sean TREN de pulsos, ya que de lo contrario, el servo continuara despues de haber llegado al punto de desplazamiento y pudes dañarlo ya que se va al tope. Para mantenerlo en un punto solo debes de seguir aplicando el tren de pulsos a la frecuencia(que determina posicion de desplazamiento) deseada.
Aqui un ejemplo(este tambien se lo di al pana modulay para que lo subiera a el link de ejemplos de c) usando SOLO comandos ccs.... no te fijes mucho en la precision ya que es muy impreciso... pero te sirve perfectamente para entender el funcionamiento y poderle aplicar el PWM(leete los ejemplos del link que te di, son excelentes para entender el calculo y uso del PWM)
#include <16F88.h>
#use delay(clock=8000000)
#fuses NOWDT,NOPUT,NOMCLR,NOBROWNOUT,NOLVP,INTRC_IO /*reloj interno a 8MHZ*/
#USE FAST_IO(B)
#byte portb=6
int tiempo;
retardo(int x){for(;x!=0;--x){delay_us(9);}}/*Retraso incrementa el pulso en 10us(9us+1us del for)*/
servo(){output_bit(pin_b7,1);delay_us(995); //1ms es el estandar a 90°, fue ajustado el valor
retardo(tiempo); //para simulacion, menos 8 ciclos de reloj de entrada
output_bit(pin_b7,0); //al for=4us(8*.5us)
delay_ms(20);
}
main(){port_b_pullups (true);
portb=0;
SET_TRIS_B(27); /*SETEAMOS TODO EL PUERTO B COMO SALIDA y el RB1 como entrada para boton*/
tiempo=42;
while(1){
if (!input(pin_b0)){if (tiempo<=83)tiempo++;}/*Variar valor limitante segun el modelo*/
if (!input(pin_b1)){if (tiempo>=1) tiempo--;}
if (!input(pin_b3)){tiempo=42;}
servo();
}
}
Si necesitas el Diseño en proteus me avisas y te lo envio.
Salu2 pana!