CONTROL DE SERVOS
Descripción: El servo es un pequeño pero potente dispositivo que dispone en su interior de un pequeño motor con un reductor de velocidad y multiplicador de fuerza, también dispone de un pequeño circuito que gobierna el sistema. El recorrido del eje de salida es de 180º en la mayoría de ellos, pero puede ser fácilmente modificado para tener un recorrido libre de 360º y actuar así como un motor.
Funcionamiento: El control de posición lo efectúa el servo internamente mediante un potenciómetro que va conectado mecánicamente al eje de salida y controla un pwm (modulador de anchura de pulsos) interno para así compararlo con la entrada pwm externa del servo, mediante un sistema diferencial, y asi modificar la posición del eje de salida hasta que los valores se igualen y el servo pare en la posición indicada, en esta posición el motor del servo deja de consumir corriente y tan solo circula una pequeña corriente hasta el circuito interno, si forzamos el servo (moviendo el eje de salida con la mano) en este momento el control diferencial interno lo detecta y envía la corriente necesaria al motor para corregir la posición.
Para controlar un servo tendremos que aplicar un pulso de duración y frecuencia específicos. todos los servos disponen de tres cables dos para alimentación Vcc y Gnd y otro cable para aplicar el tren de pulsos de control que harán que el circuito de control diferencial interno ponga el servo en la posición indicada por la anchura del pulso.
En la siguiente tabla están indicados los valores de control y disposición de cables de varias marcas que comercializan servos.
Duración pulso (ms) | disposición de cables | ||||||
Fabricante | min. | neutral. | máx.. | ||||
Futaba | 0.9 | 1.5 | 2.1 | 50 | rojo | negro | blanco |
Hitech | 0.9 | 1.5 | 2.1 | 50 | rojo | negro | amarillo |
Graupner/Jr | 0.8 | 1.5 | 2.2 | 50 | rojo | marrón | naranja |
Multiplex | 1.05 | 1.6 | 2.15 | 40 | rojo | negro | amarillo |
Robbe | 0.65 | 1.3 | 1.95 | 50 | rojo | negro | blanco |
Simprop | 1.2 | 1.7 | 2.2 | 50 | rojo | azul | negro |
Para hacer funcionar un servo por primera vez y ver su recorrido me tuve que idear una simple rutina con la que pude experimentar sin problemas con distintas duraciones de pulsos y así poder comprobar el recorrido del servo standard FutabaS3003 que compré por un precio de 3900 Pts.
Mediante un interruptor introduciremos dos ordenes básicas al pic que serán pon el servo en posición de 0º y pon el servo en posición de 180º con estas dos posiciones tendremos un circuito practico de comprobación del recorrido de cualquier servo.
El esquema de conexionado es el siguiente.:
La rutina se basa en un bucle continuo de comprobación de la línea RA0 a la que le he conectado un interruptor de palanca, si el interruptor esta abierto entonces llega un 0 lógico a RA0 y el servo gira hasta la posición 0º y si el interruptor esta cerrado por tanto llega un 1 a RA0 y el servo gira a la posición máxima de 180º. El tren de impulsos saldrá por la patita RB0 del PIC y conectará directamente con la entrada de pulsos del servo.
La anchura del pulso viene definida por el retardo creado por software y que mantendrá a nivel lógico 1 la salida durante la duración de este. Una vez pase a nivel lógico 0 entrará en funcionamiento otra rutina de retardo con el tiempo suficiente para completar los 20 ms para obtener la frecuencia de 50 Hz necesaria, y se repetirá el proceso indefinidamente.
Los retardos han sido calculados con el programa CalDelay
Descarga: http://www.x-robotics.com/downloads/rutinas/servocrt.zip |
Texto: servocrt.asm |
ASM:
;****************************************** http://www.x-robotics.com ******* ; PROGRAMA : ServoCrt.ASM Autor:ionitron Fecha: 25/10/2001 ; Funcion : Prueba de control de servo FUTABA S3003 conectado en RB0, el servo ; se movera a dos posiciones (0º-180º) dependiendo del estado del interruptor ; colocado en RA0. ; ; Revision : 1.0 Programa para : PIC16F84 ; Velocidad del reloj : 4 MHz Reloj instrucci¢n: 1 MHz = 1 us ; Perro Guardian : Deshabilitado Tipo de reloj : XT ; Proteccion del codigo : OFF ;****************************************** http://www.x-robotics.com ******* ; ;****************************** Igualdades ********************************** ; LIST P=PIC16F84 w EQU 0 ;Destino W f EQU 1 ;Destino registro RA EQU 05h ;Puerta A RB EQU 06h ;Puerta B PORTA EQU 05h ;Puerta A PORTB EQU 06h ;Puerta B TRISA EQU 5h ;Registro triestado de Puerta A TRISB EQU 6h ;Registro triestado de Puerta B STATUS EQU 03h ;Registro STATUS OPCION EQU 1h ;Registro OPCION RBPU EQU 7h ;Bit R de polarizaci¢n RP0 EQU 05h ;Bit 5 registro STATUS PDel0 EQU 0Ch PDel1 EQU 0Dh ; ;************************* Seccion Codigo de RESET ************************** ; ORG 00h ;Direccion del Vector de RESET GOTO Inicializa ;Comienza el programa ORG 05h ;Una posicion detras del Vector Interrupcion ; ;**************************** Seccion Inicializa **************************** ; Inicializa BSF STATUS,5 ;Seleccion Banco 1 MOVLW b'00000000' ;Carga W MOVWF TRISB ;Bit0 Puerta B salida MOVLW b'00000001' ;Carga W MOVWF TRISA ;Bit0 Puerta A entrada BCF STATUS,5 ;Seleccion Banco 1 CLRF RB LeerEntrada BTFSC RA,0 ;Comprueba estado interruptor en RA0 GOTO Servo_pos_1 ;Si ra0 = 0 salta y pone el servo en pos. 2 GOTO Servo_pos_2 ;Si ra0 = 1 no salta y pone el servo en pos. 1 GOTO LeerEntrada ; Bucle infinito ;************* Pulso de 0,2 ms para poner el servo en 0º ******************** Servo_pos_1 BSF RB,0 ;Pone a 1 la salida Rb0 ;------------------Bucle retardo duracion pulso a 1-------------- PDelay movlw .48 ; 1 set number of repetitions movwf PDel0 ; 1 | PLoop0 clrwdt ; 1 clear watchdog decfsz PDel0, 1 ; 1 + (1) is the time over? goto PLoop0 ; 2 no, loop PDelL1 goto PDelL2 ; 2 cycles delay PDelL2 clrwdt ; 1 cycle delay ;---------------------------------------------------------------- BCF RB,0 ;Pone a 0 la salida Rb0 ;-------------Bucle retardo duracion resto onda hasta 20 ms-------------- PDelayR movlw .86 ; 1 set number of repetitions (B) movwf PDel0 ; 1 | PLoop1R movlw .45 ; 1 set number of repetitions (A) movwf PDel1 ; 1 | PLoop2R clrwdt ; 1 clear watchdog PDelL1R goto PDelL2R ; 2 cycles delay PDelL2R clrwdt ; 1 cycle delay decfsz PDel1, 1 ; 1 + (1) is the time over? (A) goto PLoop2R ; 2 no, loop decfsz PDel0, 1 ; 1 + (1) is the time over? (B) goto PLoop1R ; 2 no, loop ;---------------------------------------------------------------- GOTO LeerEntrada ;************* Pulso de 2,2 ms para poner el servo en 180º ******************** Servo_pos_2 BSF RB,0 ;Pone a 1 la salida Rb0 ;------------------Bucle retardo duracion pulso a 1-------------- PDelay_2 movlw .4 ; 1 set number of repetitions (B) movwf PDel0 ; 1 | PLoop1_2 movlw .136 ; 1 set number of repetitions (A) movwf PDel1 ; 1 | PLoop2_2 clrwdt ; 1 clear watchdog decfsz PDel1, 1 ; 1 + (1) is the time over? (A) goto PLoop2_2 ; 2 no, loop decfsz PDel0, 1 ; 1 + (1) is the time over? (B) goto PLoop1_2 ; 2 no, loop PDelL1_2 goto PDelL2_2 ; 2 cycles delay PDelL2_2 clrwdt ; 1 cycle delay ;---------------------------------------------------------------- BCF RB,0 ;Pone a 0 la salida Rb0 ;-------------Bucle retardo duracion resto onda hasta 20 ms-------------- PDelayS movlw .17 ; 1 set number of repetitions (B) movwf PDel0 ; 1 | PLoop1S movlw .205 ; 1 set number of repetitions (A) movwf PDel1 ; 1 | PLoop2S clrwdt ; 1 clear watchdog clrwdt ; 1 cycle delay decfsz PDel1, 1 ; 1 + (1) is the time over? (A) goto PLoop2S ; 2 no, loop decfsz PDel0, 1 ; 1 + (1) is the time over? (B) goto PLoop1S ; 2 no, loop PDelL1S goto PDelL2S ; 2 cycles delay PDelL2S ;return ; 2+2 Done ;---------------------------------------------------------------- GOTO LeerEntrada END
Fuente: http://www.x-robotics.com/motorizacion.htm
Hz
Tuitear 6.637 Veces leído 0 comentarios |
12 octubre 2008 en Electronica | tags: Electronica |