TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: David Romero en 16 de Julio de 2016, 18:52:55

Título: Velocidad Servomotores
Publicado por: David Romero en 16 de Julio de 2016, 18:52:55
Hola , me podrían ayudar como variar la velocidad de un servo hitechs422 , le estaba moviendo dando los valores de PR2 Y CCPR1L le estaba intentando dar mas al PR2 pero al subir de 1280 ya no me funciona nada que es el periodo , estoy usando un pic 16f877a

    MOVLW b'00000110'
    MOVWF T2CON
    movlw b'00011100'
    movwf CCP1CON

    Centro
    BSF STATUS,5
    MOVLW D'1250'
    MOVWF PR2
    BCF STATUS,5
    MOVLW D'93'
    MOVWF CCPR1L
Título: Re:Velocidad Servomotores
Publicado por: KILLERJC en 17 de Julio de 2016, 04:27:33
normalmente el periodo es fijo, por lo cual no deberias variarlo, si no mal recuerdo es de 20ms el periodo. Lo que si varia es el duty, es decir lo de los registros CCPR
Y tienen ciertos valores como por ejemplo ahrbas leido de 1ms o 2ms, 1.5ms


(http://www.robotplatform.com/knowledge/motion_control/servo-control.png)

Entonces el PR2 lo congfiguras para 20ms, luego el duty lo calculas y no te pasas de los valores que queres. Ejemplo si quisiera solamente de 0º a 180º, calcularia cuanto es para 1ms, y cuanto es para 2ms, ahi tengo mis "limites" de los cuales no puedo pasarme.
Título: Re:Velocidad Servomotores
Publicado por: David Romero en 17 de Julio de 2016, 15:49:52
Pero como le cambias, si vi en el datasheet en los registros ccpr solo te indica el bit 4 y 5 y dice del duty cycle pero no dice osea que valores pongo de binario , eso no entiendo ?. Porque si te refieres a cambiar el CCPR1L y CCPR2L son los pulsos en alto si cambio eso no va al grado que quiero. Yo quiero que vaya a un ángulo pero hacerle mas lento.

bit 4 y 5
CCPxX:CCPxY: PWM Least Significant bits
Capture mode: Unused.
Compare mode: Unused.
  PWM mode:
These bits are the two LSbs of the PWM duty cycle. The eight MSbs are found in CCPRxL
Título: Re:Velocidad Servomotores
Publicado por: Pinolillo16 en 17 de Julio de 2016, 16:05:15
Que tal, yo te recomendaría hacerlo mediante interrupción por timer así podrías controlar más de dos servos con el pic.

Saludos
Título: Re:Velocidad Servomotores
Publicado por: David Romero en 17 de Julio de 2016, 16:07:04
Si ya los controlo y todo con timers ya me funcionan, solo nose como cambiarles la velocidad, les estoy configurando así .

    MOVLW b'00000110'
    MOVWF T2CON
    movlw b'00011100'
    movwf CCP1CON

    Centro
    BSF STATUS,5
    MOVLW D'1250'
    MOVWF PR2
    BCF STATUS,5
    MOVLW D'93'
    MOVWF CCPR1L
Título: Re:Velocidad Servomotores
Publicado por: Pinolillo16 en 17 de Julio de 2016, 16:38:10
Si, pero lo asignas a un PWM. Lo que te comento es que hagas interrupciones por timer cada 1 micro segundo, con eso puedes cargar el valor de posición a un registro para poder controlarlo más fácil.


Saludos
Título: Re:Velocidad Servomotores
Publicado por: Pinolillo16 en 17 de Julio de 2016, 16:44:34
Hechale un ojo a este post para que te des una idea.

http://www.todopic.com.ar/foros/index.php?topic=43270.0

Saludos
Título: Re:Velocidad Servomotores
Publicado por: David Romero en 17 de Julio de 2016, 21:52:10
Esque se trata de un proyecto y es una gran cantidad de código no quiero cambiarlo ahora jajaja solo ayudenme a cambiar la velocidad.
Título: Re:Velocidad Servomotores
Publicado por: Pinolillo16 en 18 de Julio de 2016, 02:26:28
Bueno, la ayuda que necesitas la explico anteriormente KillerJC. Creo que si buscas hagamos el código esta dificil. Aun asi si tienes dudas con gusto resolveremos ellas pero no código.

Saludos y suerte con tu proyecto,
Título: Re:Velocidad Servomotores
Publicado por: KILLERJC en 18 de Julio de 2016, 03:12:56
Te quedan 2 opciones:

- Deberias leer y tratar de entender el modulo CCP en modo PWM como funciona
- O realizarlo con un timer.

Si tenes algunda duda especifica que no entiendas del datasheet con gusto la explico. No es muy dificil. Es un contador, cuando se igual al CCPR se pone a 0 la salida, y cuando llega a PR2 se pone a 0 el contador/timer y se pone a 1 la salida.