Foros de Electrónica

Comunidad de discusión sobre Automatización, Electrónica industrial, Microcontroladores y electrónica digital, Robótica, Domótica, Telemática, Tecnologías móviles, y muchos temas más.




16f84A con servos


       



#1  16f84A con servos
proyectista
Registrado: 29 Oct 2007
Mensajes: 13
citar
Hola, disponemos de un PIC 16f84A, y lo utilizamos junto con un oscilador de 4MHz y un servo Futaba S3003.
El problema es que hemos probado con varios montajes que hemos visto en distintas webs, copiando literalmente el código en ensamblador del PIC y el montaje de la circuitería; pero el pic normalmente se sitúa en 180º y no somos capaces de hacerle girar hacia el lado contrario; sin embargo, con otros programas directamente el PIC no hace nada.
Hemos utilizado también algunos montajes que hemos encontrado en este foro, pero tampoco hemos obtenido el resultado esperado.
En el código hemos hecho varios cambios, como probar a cambiar la configuration word (hemos puesto 3ff9h), no esperar a que pasen 20ms para volver a enviar un pulso,etc., pero sigue sin darnos resultados.
Además, hemos probado a cambiar el PIC, el oscilador, e incluso el motor, por si alguno estuviese estropeado, pero sigue sin funcionar.
Pensamos que podría tratarse de un problema relacionado con las corrientes del servo.
¿Alguien nos podría echar una mano?¿Cuáles son las corrientes y tensiones adecuadas para las entradas de alimentación y de control del servo?
Muchas gracias

#2  
El nombre
Ubicación: Alicante
Registrado: 28 Jun 2006
Mensajes: 1445
citar
El amigo ionitron tiene uno que funciona

www.x-robotics.com

pinchas en mecanica y despues en motorizacion. descargate servocrt.asm
Funciona correctamente. Lo que tienes que hacer es variar el valor de la temporización para poder ir ajustando.

Tienes los tiempos aproximados que tienes que poner para que funcione dependiendo de los grados que quieras.
Puedes colocar pulsadores y segun los actives (binario) varias la posición
Tienes miles de formas de hacerlo. Que pena que no tenga conversor ad

#3  
proyectista
Registrado: 29 Oct 2007
Mensajes: 13
citar
Ya, si el de x-robotics fue uno de los esquemas que probé, pero nada. No hay manera de echarlo a andar. Además, el motor es un Futaba S3003 como el de x-robotics, por lo que en teoría las rutinas de tiempos no deberían cambiar, ¿no? Y el circuito lo he montado igual y todo, pero ni por esas.
También me dijeron que podría funcionar si no dejamos que espere los 20 ms, pero así tampoco funciona.
¿Sabéis qué puede ser? A mi me da que puede ser un tema de corrientes o de tensiones, porque ya no se me ocurre nada más. ¿Qué pensais?
Gracias

#4  
proyectista
Registrado: 29 Oct 2007
Mensajes: 13
citar
Hola de nuevo. He visto en una web en la que montan el proyecto que hay en x-robotics, pero en la foto real del montaje se ve que ha conectado las patas del pic que no utiliza, llevandolas a una resistencia que va a 5v.
¿Es necesario que se conecten todas las patas del 16f84, o pueden quedarse algunas sin conectar?

#5  
El nombre
Ubicación: Alicante
Registrado: 28 Jun 2006
Mensajes: 1445
citar
En la web de la asociación subí un programilla que manejaba de 0 a 8 servos con un pic y casualmente inicié el programa basandome en el que te indico.

¿Sabes como funciona el programa para poder ir variando los parámetros de giro?

#6  
El nombre
Ubicación: Alicante
Registrado: 28 Jun 2006
Mensajes: 1445
citar
www.webdearde.com
no recuerdo donde lo dejaron colocado busca y lo cazas seguro.

Saludos

PD recuerda que funciona correctamente. Es algo que no haces correctamente.

Suerte

#7  Solucionado
proyectista
Registrado: 29 Oct 2007
Mensajes: 13
citar
Nada, ya se solucionó el problema.
Al final, lo que pasaba es que utilizábamos dos fuentes de alimentación distintas, pero las tierras del PIC y del servo no las uníamos.

Muchas gracias por las respuestas.

#8  
proyectista
Registrado: 29 Oct 2007
Mensajes: 13
citar
Hola de nuevo.
Conseguimos que el servo se moviese el número de grados que le indicábamos con las rutinas de retardo. El problema es que ahora no consigo mover el servo por ejemplo a 0º y luego a 180º (un movimiento tras otro). Lo que hago es una rutina que lo situa en 0º, seguidamente se ejecuta una rutina de un segundo para que de tiempo a realizar el movimiento y posteriormente lo situo en 180º. El resultado es que el servo vibra como si quisiese girar a ambos lados a la vez (esta accion la realiza cada segundo). El proceso esta programado para que se haga una única vez, pero el resultado esque se realiza continuamente y encima sin sentido.
Sin embargo, con el montaje de x-robotics (con el interruptor) sí funciona bien.
Además, hemos probado a hacer un programita en un PIC12f683 que haga lo mismo que queremos hacer con el 16f84, pero el resultado es el mismo: con un interruptor, conseguimos que el servo funcione correctamente, pero si hacemos dos movimientos consecutivos el servo tiene un comportamiento anómalo.
¿alguien sabe a qué es debido? Gracias.

#9  
proyectista
Registrado: 29 Oct 2007
Mensajes: 13
citar
¿Nadie sabe a qué puede ser debido el hecho de que tanto con el pic 12f683 como el 16f84a dos movimientos seguidos con el servo futaba s3003 de un comportamiento incorrecto? , es decir, que produce vibraciones. A través de un interruptor podemos mover el servo correctamente. Gracias.

#10  
proyectista
Registrado: 29 Oct 2007
Mensajes: 13
citar
Hola de nuevo. Como dije en los posts anteriores, el programa de x-robotics sí funciona correctamente. El problema es al intentar girar primero en un sentido, y a continuación en el sentido contrario.
También he probado a hacerlo con un PIC 12f683, y sucede lo mismo.
Pongo los códigos del 12f683 a ver si alguien sabe dónde falla.
Gracias

Código: Seleccionar todo
   list      p=12F683        ; list directive to define processor
   #include <p12F683.inc>    ; processor specific variable definitions
   errorlevel  -302          ; suppress message 302 from list file
   
     __CONFIG   _FCMEN_ON & _IESO_OFF & _CP_OFF & _CPD_OFF & _BOD_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT
   
   
   ORG   0X00
   BANCO1
   MOVLW b'01100001' ; Carga el acumulador, Ponemos el oscilador a 4Mhz
   MOVWF OSCCON ; Copia de acumulador a OSCCON
   GOTO   INICIO
   
   
;-------------------------------- programa principal------------------------------------------   
   
INICIO:


START   BANCO0
      MOVLW 07H
      
      MOVWF CMCON0   
      CLRF GPIO          ; Inicializamos GPIO (el registro gp3 es solo de entrada)   
      BANCO1
      BCF TRISIO,5       ;Ponemos GP5 como salida         
      BANCO0
      BCF GPIO,5
      BANCO0
         
   
      BANCO1
      MOVLW B'01110000'    ;Ponemos AN3, AN2, AN1 Y AN0 como salida digital
      MOVWF ANSEL
      
      BANCO0

LeerEntrada   CALL   Servo_pos_1   
      CALL   Servo_pos_2   
      GOTO    Fin                  
   
;--------------------------------------------------------------------
Servo_pos_1 BSF GPIO,5
        movlw     .248      ; 1 set number of repetitions
        movwf     PDel0     ; 1 |
PLoop01  clrwdt              ; 1 clear watchdog
        decfsz    PDel0, 1  ; 1 + (1) is the time over?
        goto      PLoop01    ; 2 no, loop
PDelL11  goto PDelL21         ; 2 cycles delay
PDelL21  clrwdt              ; 1 cycle delay

        BCF GPIO,5

PDelay19  movlw     .29       ; 1 set number of repetitions (B)
        movwf     PDel0     ; 1 |
PLoop119  movlw     .93       ; 1 set number of repetitions (A)
        movwf     PDel1     ; 1 |
PLoop219  clrwdt              ; 1 clear watchdog
PDelL119  goto PDelL219         ; 2 cycles delay
PDelL219  clrwdt              ; 1 cycle delay
        decfsz    PDel1, 1  ; 1 + (1) is the time over? (A)
        goto      PLoop219    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) is the time over? (B)
        goto      PLoop119    ; 2 no, loop
      return
;------------------------------------------------------------------

;------------------------------------------------------------------
Servo_pos_2 BSF GPIO,5
        movlw     .249      ; 1 set number of repetitions
        movwf     PDel0     ; 1 |
PLoop02  clrwdt              ; 1 clear watchdog
PDelL12  goto PDelL22         ; 2 cycles delay
PDelL22  goto PDelL32         ; 2 cycles delay
PDelL32 
        decfsz    PDel0, 1  ; 1 + (1) is the time over?
        goto      PLoop02    ; 2 no, loop
PDelL42  goto PDelL52         ; 2 cycles delay
PDelL52  clrwdt              ; 1 cycle delay

        BCF GPIO,5

PDelay18  movlw     .26       ; 1 set number of repetitions (B)
        movwf     PDel0     ; 1 |
PLoop118  movlw     .172      ; 1 set number of repetitions (A)
        movwf     PDel1     ; 1 |
PLoop218  clrwdt              ; 1 clear watchdog
        decfsz    PDel1, 1  ; 1 + (1) is the time over? (A);
        goto      PLoop218    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) is the time over? (B)
        goto      PLoop118    ; 2 no, loop
PDelL118  goto PDelL218         ; 2 cycles delay
PDelL218  clrwdt              ; 1 cycle delay
      return
;------------------------------------------------------------------
         
Fin         END
   
;------------------------------------------ fin programa principal------------------------------------   
   

 Responder



 Otros temas de interés 
No hay mensajes nuevos enviar mensajes de texto sin usar el teclado del celular.
No hay mensajes nuevos Enviar video en vivo por internet
No hay mensajes nuevos Enviar comandos por RS232 en visual basic
No hay mensajes nuevos Enviar comunicacion via RS232 a servidor
No hay mensajes nuevos Contador de pulsos unido al microcontrolador DLP-245PB

Foros de Electronica
|| Cuestiones Elementales de Electrónica || Fuentes de alimentacion || Circuitos de radio || Diseño de circuitos en general ||
|| Sistemas de Audio: Preamplificadores, Ecualizadores || Amplificadores || Reparación || Discusión ||
|| Microcontroladores y sistemas embebidos || Circuitos logicos combinacionales y secuenciales || Interfaces y Programacion || Dudas en general || Sistemas de Video || PC Hardware || Telematica y comunicaciones || Tecnologias moviles || Software Electronico || Robotica, Domotica y Mecatronica || Autotrónica || Automatizacion, Electronica industrial y de Potencia || Documentacion, circuitos y esquemas || Donde Las Ideas Convergen... || Tutoriales y Manuales || Proyectos Prácticos ||
Contacto | Acerca de | Ayuda | Normas de la Comunidad | Privacidad | Mapa de los foros
© Foros de Electrónica - Comunidad Internacional de Electrónicos