Control de servo motor con PIC 16F84 y LabView
Descripción
Este Proyecto es un primer paso hacia la Robótica , el diseño busca controlar un servomotor por medio de un PC.
El control se a logrado por medio de un microcontrolador PIC16F84 , el cual proporciona las señales necesarias para producir una deflección en el servo de 0 a 120 grados aprox , con una resolución de 255 pasos .
El microcontrolador se comunica con el PC por medio del bus de control del puerto paralelo , el software encargado de la comunicación es nuestro viejo programa send to pic16f84 elaborado en LabView hace un par de meses.
Circuito
Programa para el PIC
;Recepción serial de datos
;Por Carlos Fernando Jiménez
;Bucaramanga Jueves 19 de Julio del 2000
PUERTAB EQU 0×06
PUERTAA EQU 0×05
ESTADO EQU 0×03
OPT EQU 0×01
INTCO EQU 0x0B
org 0
goto INICIO
org 4
goto interr
;****** inicio configuración de la interrupción*****
INICIO bcf ESTADO,5 ;BANCO0
sbuff EQU 0x0C ;REGISTRO QUE RECIBE LOS DATOS SERIALES
contador EQU 0x0E
W1 EQU 0X1B
w2 equ 0x1c
movlw b’10110000′�
iorwf INTCO ;interrupción RB0/INT activa
movlw b’11110101′ ;configuración del puerto
andwf PUERTAB,1 ;RB1 salida (‘ya puedes enviar los datos’ en alto)
movlw b’00000101′
iorwf PUERTAB,1 ;RB0 y RB2 entrada(‘voy a enviarte datos!’ en bajo interrupción) y dato listo en alto
bcf ESTADO,5 ;BANCO0
bcf PUERTAB,1
bcf PUERTAB,3 ;*****fin de la configuración******
bsf ESTADO,5 ;BANCO1
movlw 0×00
movwf PUERTAA
BSF ESTADO,5 ;BANCO1
movlw b’10010010′ ;DIVISION 1-8
movwf OPT
movlw 0X7F
movwf sbuff
bcf ESTADO,5 ;BANCO0
MAIN
;temporizacion para el servo
;Tiempo para la reflexión min 1 max 2 ms
movfw sbuff ;127-255
movwf OPT ;cargamos el timer
movlw 0x1f
movwf PUERTAA ;Señal arriba
movlw 1
movwf W1
espera10 btfsc W1,0
goto espera10
;Mínimo tiempo 10 ms de descanso
movlw 0×06
movwf w2
buc
movlw 0×00
movwf OPT ;cargamos el timer
movlw 0×00
movwf PUERTAA ;CAE LA SEÑAL DE CONTROL
movlw 1
movwf W1
espera11 btfsc W1,0
goto espera11
decfsz w2
goto buc
goto MAIN
interr btfss INTCO,1 ;Identificación de la interrupción
goto timer
goto serial
serial movlw 0×00 ;***** Rutina de recepción de datos*****
movlw 0×00
movwf PUERTAA
movwf INTCO ;incapacita TODAS las interrupciones
movlw 8 ;los 8 bits a recibir
movwf contador ;registro que lleva la cuenta de los bits llegados
movlw 0×00
movwf sbuff ;pone sbuff en cero
espera1 bsf PUERTAB,3
btfss PUERTAB,2 ;espera que el bit de sincronía se ponga en 1
goto espera1�
movlw b’1′
andwf PUERTAB,0 ;mascara del datos dato queda en w
iorwf sbuff,1
rlf sbuff
bcf PUERTAB,3 ;bit adentro
bucle btfsc PUERTAB,2 ;espera que el bit de sincronía vuelva a 0
goto bucle
decfsz contador,1
goto salto
goto fin
salto goto espera1
movlw 0
MOVWF W1
fin movlw b’10110000′ ;rehabilitación de TODAS LAS interrupciones
movwf INTCO
RETFIE
timer
movlw 0×00
movfw INTCO
movlw b’10110000′
movwf INTCO
movlw 0
MOVWF W1
RETFIE
END
Fuente: http://usuarios.lycos.es/charlytospage/servomotor.htm
Tuitear 6.345 Veces leído 0 comentarios |
1 agosto 2010 en Electronica | tags: Electronica |