Desde 1994 en la Red. La pagina de los aficionados a la electronica, informatica y otras curiosidades de la vida. No dudes en visitarnos.
Ahora 0 visitas.| 3484480 Visitas (desde Dic. 2011), hoy: 327 Visitas 1000 Pag. Vistas , ultimos 36 dias: 11188 Visitas. 38212 Pag. Vistas. Tu IP: 3.144.92.165
Que ando curioseando:
AutosuficienciaCosas de casaElectronicaEn InternetInformáticaMundo MisticoSin categoríaSociedadTe lo recomiendo

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
<>

sheetservo

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.:

pruebaservo

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

Escribe un comentario

Tu comentario