s3302001

Mediante es circuito se puede comprobar el funcionamiento de un servomotor usando un microcontrolador PIC16F84A.

 

 

CIRCUITO

controlservo

Mediante S1  formado por 3 pulsadores, conectados al puerto B, se controla la posición del eje del servomotor. Es posible posicionarlo en 0º, 90º y 180º, estos valores son aproximados ya que dependen del fabricante del servomotor. El servo se conecta al conector JP1, el pin RA0 envía la señal de control al servo. IC1 es un microcontrolador PIC 16F84, Q1 es un cristal de 4Mhz. Las resistencias R2-R4 no son necesarias si se activan las resistencias internas del puerto B del microcontrolador.

El conector del servo tiene posición, normalmente el cable negro es negativo, el rojo positivo y el cable de control puede ser blanco o amarillo.

PROGRAMA

El programa de control está constituido por un bucle infinito que se ejecuta cada 20ms, para lo cual se usa el temporizador TMR0, al finalizar la cuenta provoca una interrupción que llama a la rutina encargada de generar el pulso de control del servo.

;*********************************************************************************  ; Programa: ControlServo.asm  ; Fecha: 23/03/2007  ; Autor: Jorge Fernández  ; Descripción: Programa para el control de un servo de radio control conectado al  ; pin RA0, la posición se puede controlar mediante 3 pulsadores conectados a RB0,  ; RB1 y RB2  ;*********************************************************************************  ;                    CONTROL SERVOMOTOR RC CON PIC 16F84A  ;*********************************************************************************          title  "Control Servomotor"          __CONFIG _CP_OFF & _XT_OSC & _PWRTE_ON  & _WDT_OFF            LIST P=16F84A, R=DEC          ;  16F84  a 4 MHz          errorlevel 0,-305          INCLUDE "p16f84a.inc"          LIST  ;  Registros usados          CBLOCK 0x00C                ; Bloque de registros comenzando en 0x00C                  PWM                 ; Variable para el control PWM                  POSICION            ; Variable para salvar la posición          ENDC  ; Variables          #DEFINE A_0        PORTB,0        ; Pulsador posición 0º          #DEFINE A_90       PORTB,1        ; Pulsador posición 90º          #DEFINE A_180      PORTB,2        ; Pulsador posición 180º          #DEFINE SERVO      PORTA,0        ; Pin de control del servo          #DEFINE POS_0      124            ; Duración del pulso para posición 0º (1ms)          #DEFINE POS_90     186            ; Duración del pulso para posición 90º (1,5ms)          #DEFINE POS_180    249            ; Duración del pulso para posición 180º (2ms)    ;*********************************************************************************  ;                       INICIALIZACIÓN DEL PIC  ;*********************************************************************************          org     0                       ; Posición de inicio                  goto    Inicio          ; Salto a la posición de inicialización PIC          org     4                       ; Vector interrupción                  goto    Servos          ; Tratamiento interrupcion TMR0  ;*********************************************************************************               ;  Inicialización de los puertos  ;*********************************************************************************  Inicio          clrf    PORTA                   ; Borrar PORTA                  clrf    PORTB                   ; Borrar PORTB                  bsf     STATUS,RP0              ; Selección banco 1                  movlw   b'11110'                ;                  movwf   TRISA                   ; Configurar puerto A                  movlw   b'01111111'             ;                  movwf   TRISB                   ; Configurar puerto B                  bcf     STATUS,RP0              ; Selección banco 0  ;*********************************************************************************  ;   Inicialización de las interrupciones y Configuración TMR0  ;*********************************************************************************                  movlw   b'10100000'             ; Habilitar interrupción TMR0                  movwf   INTCON                  ;                  bsf     STATUS,RP0                  movlw   b'000000110'            ; Configuración TMR0                  movwf   OPTION_REG                  bcf     STATUS,RP0  ;*********************************************************************************  ;               INICIALIZACION DE LOS PARAMETROS  ;*********************************************************************************                  movlw   POS_0                  movwf    POSICION  ;*********************************************************************************  ;                       PROGRAMA DE CONTROL PRINCIPAL  ;*********************************************************************************  main            goto main  ;*********************************************************************************  ;                       TRATAMIENTO DE LA INTERRUPCION  ;*********************************************************************************  ;*********************************************************************************  ;                       SERVOS  ;*********************************************************************************  Servos          bsf     SERVO           ; Activar pin servo                  bcf     INTCON,T0IF      ; Habilitar interrupción desbordamiento TMR0                  movlw   100                  movwf   TMR0                  movf    PORTB,0                  andlw    b'00000111'                  btfsc    STATUS,Z                  goto    seguir                  btfsc    A_0                  movlw    POS_0                  btfsc    A_90                  movlw    POS_90                  btfsc    A_180                  movlw    POS_180                                 movwf    POSICION  seguir          movf    POSICION,W                  movwf   PWM  pulso           decf    PWM                     ; Decrementar valor registro control servo                  btfsc   STATUS,Z                ; ¿Es igual a cero?                  bcf     SERVO                   ; Desactivar pin servo                  nop                  btfss   SERVO                  retfie                   goto    pulso  ;************************************************************************************************  ;                       FIN DEL PROGRAMA  ;************************************************************************************************                  end

SEÑAL DE CONTROL

La señal que se genera mediante el microcontrolador tiene un periodo de 20 ms y la duración (ancho) del pulso varía entre 1 ms y 2 ms, dependiendo del pulsador que se haya activado, esta señal se conoce como PWM (Pulse Width Modulation).

 

pwm 

El funcionamiento del tester se puede comprobar montando el circuito en una placa de prototipos.

Placa de pruebas