Autor Tema: Ascensor con motor pulsos  (Leído 3174 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado dimenzza007

  • PIC10
  • *
  • Mensajes: 2
Ascensor con motor pulsos
« en: 23 de Septiembre de 2014, 10:34:23 »
Hola gente de todopic soy de 1 de ingeniería electrónica quería solicitar su ayuda .
El profesor nos pidió hacer un practico de ascensor (PB + 2 pisos) en pic16f628A yo lo hice con un código en ASM el proyecto esta andando  pero no lo hice como el quería  :shock: yo 'ordenes' simples .
El quería que lo hiciéramos con pulsos , osea que el motor paso a paso se moviera con pulsos (650 pulsos x piso).

Este es mi código andando

    list      p=16F628A           ; list directive to define processor
    #include <p16F628A.inc>       ; processor specific variable definitions

piso    equ 0x20
cabina    equ 0x21
intmem    equ 0x70
portbmem equ 0x71



__config 3f10   ;Oscilador INTRA I/O

            ;Watchdog OFF

            ;Power Up TIM ON

            ;Master Clear DISABLE

            ;Brown Out DISABLE

            ;Data Read DISABLE Protege datos

            ;Code Protect OFF Protege datos


;***************************************************
;INICIO DEL RPOGARMA
;***************************************************
org 0x05
   
goto inicio



inicio    clrf PORTA    ;borra ragistros del por A

            ;RA4=Sensor de planta baja (0=planta baja,1=no llego)

            ;RA3 = Puerta de Cabina 1 Abierta 0 Cerrada

            ;RA2 = Posicion de Cabina 2°

            ;RA1 = Posicion de Cabina 1°

            ;RA0=Posicion de Cabina planta baja




      movfw PORTB    ;mueve el contenido del portb a W
               ;RB7= posible interrupcion por cambio de pulsadores de cabina(no lo usamos)
               ;RB6 = Pulsador 2º
               ;RB5 = Pulsador 1º
               ;RB4 = Pulsador PB
               ;RB3 = Motor paso a paso
               ;RB2 = Direccion de motor (1) baja (0) sube
               ;RB1 = Prende (0) / Apaga (1) Motor
               ;RB0 = Interrupcion posc de cabina / Puerta abierta

      clrw         ;se asegura que w este limpio
      movwf PORTB    ;mueve el contenido de w a portb
               ;RB7 (no se usa)
               ;RB6 = pulsador 2
               ;RB5 = pulsador 1
               ;RB4 = pulsador PB   
               ;RB3 = no se usa   
      clrw    piso   ;borra la direccion de memoria de piso
      clrw   cabina   ;borra direccion de memoria de cabina
      movlw   0x07   ;identifica todas las patitas como e/s mueve el valor 0 al bit 7 de w para segurarse

      movwf    CMCON      ;porta como i/o
      bsf    STATUS,RP0   ;banco de registro 1
      
      ;movwl 0xFF      ;carga en w el valor FF
      movlw    TRISA      ;mueve el contnido de w a trisA port de entradas
      movlw 0xf1      ; mueve al registro w f1
      movlw   TRISB      ;pone el portb 1,2,3 como salidas

      bcf    STATUS,RP0   ; vuelve al banco 0
      movwf   PORTB    ; el contenido de portb a w

;*****************************************************
; Se asegur que este en planta baja
;*****************************************************
   
planta   btfsc   PORTA,0      ;verifica que el primr bit de portA,0 sea 1 (si la cabina esta en planta baja)
                  ; si el bit es 1 va a SIGUE si es 0 salta a goto
                  ; el bit 0 del portA controla que la cabina este en PB

   

      goto    sigue      ; si es 1 sigue
                  ; si no es asi
      bsf      PORTB,2      ; no esta en PB pone el portb,2 en 1
                  ;este controla la direccion del motor
      bcf    PORTB,1      ; anad el motor
      goto    planta      ;hasta que llegue a Planta Baja

sigue   bsf   PORTB,1      ; apaga el motor

      movfw   PORTA   ;pone porta en 00000111
      andlw   0x07   ;pone en porta 00000111
   
      movwf   cabina   ;leo porta y cargo la posicion de cabina

nada    CALL   ptaabierta   ;LOGICA PRINCIPAL DEL PROGARMA   
      CALL   pulsadores   ;LOGICA PRINCIPAL DEL PROGARMA
      goto   nada      ;LOGICA PRINCIPAL DEL PROGARMA
;************************************************************
;Controla la puerta abierta se deberia parar todo cuando se cierra se reanuda
;************************************************************

ptaabierta   btfss   PORTA,3   ;la puerta esta abierta ?
         return         ;no, sale del proceso
         call   tiempo   ;antirrebote de contantos
         btfss   PORTA,3   ;¿sigue abierta ?
         return         ;no , falsa alarma
      
         movfw   PORTB   ;si esta abierta  
         movwf intmem   ;guardo el estado del motor

emergencia      bsf   PORTB,1      ;paro el motor
      btfsc   PORTA,3

      goto emergencia   ;espera a que cierre la puerta
      movfw   intmem

      movwf   PORTB   ;recuperar el estabo anterior
      return          ;volver a punto de llamada

;******************************************************************
;RUTINA DE PULSADORES   
;******************************************************************
pulsadores   btfsc   PORTB,4   ;pruebo el pulsador de PB
      call   tiempo   ;espero el tiempo de rebote pulsador
      btfsc   PORTB,4   ;confirmo el accionamiento del pulsador
      call   PB      ;pulsador PB confirmado , ir al proceso
      btfsc   PORTB,5   ;
      call   tiempo   ;espero el tiempo de rebote pulsador
      btfsc   PORTB,5   ;pulsador de piso 1 ir a proceso   
      call   primero   ;confirmado ir a proceso 1
      btfsc   PORTB,6   ;
      call   tiempo   ;espero el tiempo de rebote pulsador
      btfsc   PORTB,6   ;pulsador de piso 2 ir a proceso   
      call   segundo   ;confirmado ir a proceso 2
      
      return      ;vuelve al programa

;*****************************************************************
;* PROCESO DE PLANTA BAJA
;*****************************************************************
PB      swapf   PORTB,w   ;paso los bits de puertas a menor peso
      andlw   0x07   ;aseguro el valor
      movwf   piso   ;guardo el piso en memoria
      call   direccion   ;poceso que fijara la direccion

otrapuerta      call   ptaabierta   ;pregunta se abrio la puerta
      btfss   PORTA,0
      goto   otrapuerta   ;pruebo hasta q llegue a PB
      bsf      PORTB,1         ;paro el motor

      movlw   0x01
      movwf   cabina      ;cargo en memoria la posicion de la cabina
      clrf   piso      ;borro para la prox... llamada
      return           ;vuelve al programa
;*****************************************************************
; PRIMER PISO
;*****************************************************************

primero      swapf   PORTB,w    ;paso a portb
      andlw   0x07      ;aseguro el valor
      movwf   piso      ;guarso en memoria el piso
      call direccion      ;proceso que fija la direccion

otpuerta
      call   ptaabierta   ;pregunta, se abrio la puerta
      btfss   PORTB,1
      goto    otpuerta      ;pruebo hasta que llegue a PB
      bsf      PORTB,1      ;llego paro motor
      movlw   0x02
      movwf   cabina      ;cargo en memoria la  posicion de la cabina
      clrf   piso      ;borro para la prox...llamada
      return            ;vuelve al programa

;*****************************************************************
; SEGUNDO PISO
;*****************************************************************

segundo      
      swapf   PORTB,w       ;paso a portb
      andlw   0x07         ;aseguro el valor
      movwf   piso         ;guarso en memoria el piso
      call   direccion      ;proceso que fija la direccion
opuerta   
      call   ptaabierta      ;pregunta, se abrio la puerta
      btfss   PORTA,2
      goto   opuerta      ;pruebo hasta que llegue a PB
      bsf      PORTB,1         ;llego paro motor
      movlw   0x04
      movwf   cabina         ;cargo en memoria la  posicion de la cabina
      clrf   piso         ;borro para la prox...llamada
      return               ;vuelve al programa
;****************************************************************
; PROCESO PARA DETERMINAR DIRECCION
;****************************************************************

direccion   
      movfw   cabina
      subwf   piso,w      ;Se resta la posicio de la cabina - el sensor de piso

      btfsc   STATUS,Z   ;si la resta es 0 la cabina y el pulsador
      return            ; es el mismo piso

      btfss   STATUS,C   ;se berifica si el bit de carry
      goto    baja         ;si es negativo (Carry=0 hay que subir)
      goto    sube         ;si es positivo (Carry=1 hay que bajar)

sube
      bcf      PORTB,2         ;direccion
      bcf      PORTB,1         ;prende motor
      return

baja
      bsf      PORTB,2         ;direccion
      bsf      PORTB,1         ;prende motor
      return         ;

;*****************************************************************
;CONTROL DE TIEMPO PARA LOS PULSADORES
;*****************************************************************
tiempo   clrf   T1CON
      movlw   0xb1
      movwf   TRM1H
      movlw   0xde  
      movwf   tmr11      ;el timer1 a 20mseg aproxi...
      bsf      T1CON,0         ;arranca el temporizador

mas      btfss   PIR1,0      ;pregunta si termino
      goto   mas
      bcf      PIR1,0         ;borra bandera indica fin
      bcf      T1CON,0         ;para contador
      return
 
      END                       ; directive 'end of program'



Aclaro que el codigo anda bien es simple pero anda , pero cuando entramos en el tema de pulsos  :5] estoy en ceros no tengo ni la mas pálida idea .
aver si alguien me puede dar una mano de donde lo tengo que modificar..... la verdad tengo muchas preguntas
como   - como genero los pulsos ,que registros se modificar?
           cuales son los cálculos a usar , como envió los pulsos al motor? etc...
agradecería su ayuda

Acá el circuito
« Última modificación: 26 de Septiembre de 2014, 04:28:19 por un Moderador, Razón: Editado el título. »

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Ascesor con motor pulsos
« Respuesta #1 en: 23 de Septiembre de 2014, 13:05:43 »
Bienvenido al foro dimenzza007.

Supongo que es un motor paso a paso (PaP), necesitaras 2 pines mas, es decir 4 salidas en vez de 2 como ahora. Tendras que modificar toda la parte de activacion/desactivacion del motor.

Te encontre esto aqui en el foro:

http://www.todopic.com.ar/foros/index.php?topic=34715.0

Desconectado dimenzza007

  • PIC10
  • *
  • Mensajes: 2
Re: Ascesor con motor pulsos
« Respuesta #2 en: 25 de Septiembre de 2014, 20:08:22 »
Bienvenido al foro dimenzza007.

Supongo que es un motor paso a paso (PaP), necesitaras 2 pines mas, es decir 4 salidas en vez de 2 como ahora. Tendras que modificar toda la parte de activacion/desactivacion del motor.

Te encontre esto aqui en el foro:

http://www.todopic.com.ar/foros/index.php?topic=34715.0

ok el lenguaje lo entiendo el problema son los calculos
si yo necesito 650 pulsos y cada pulso tiene 7milseg
tengo 4550 mil/seg  por piso si o paso a microseg 4550000

intente sacar los calculos para el periodo y frecuencia y me salio cualquier cosa
¿como sigo?

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Ascensor con motor pulsos
« Respuesta #3 en: 26 de Septiembre de 2014, 05:54:08 »
¿Por que 7mS por paso? se les llama pasos no pulsos  :lol: :lol:

Los PaP pueden tener diferentes pasos, desde 4 pasos 90 grados por paso, hasta 200 pasos 1,8 grados por paso.

Ya te has creado el programa que hace andar el PaP?, has habilitado 4 salidas en vez de las dos que tenias antes?