Autor Tema: Motores CC con PWM  (Leído 1622 veces)

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

Desconectado piriots

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
Motores CC con PWM
« en: 21 de Septiembre de 2004, 15:47:00 »
Hola gente de todopic, he de acudir otra vez a la sabiduria del foro por culpa de un programa en ensamblador que no me funciona, lo he comentado con los profesor de sistemas digitales microprogramables y no me ha sabido decir el error. Los comentarios del programa estan en catalan, espero que esto no resulte ningun problema.

Os comento rapidamente como es el circuito

De RA0 a RA3 van conectados a un BCD a 7 segmentos.
RA4, el pulsador, con un condensador en paralelo con la resistencia para eliminar los rebotes.

RB1 esta conectado al EN1 del LM293B y RB2 es la salida de pwm que va conectara a la patilla IN1 del 293.

El programa tiene que hacer lo siguiente:

Cada vez que se pulsa el pulsador el motor aumenta un 20% su rendimento,y en el display marca el estado actual del motor, si es 20% sale un, si es 40%sale un 4 y asi succesivamente, si pulsas despues del 100% se apaga el motor.

El problema es el siguiente, cuando simulo en proteus el programa lo hace del tiron, sin tener en cuenta si se pulsa o no el pulsador y el display no enciende, las patillas del 4511 cambian de estado, con lo que no entiendo porque no se enciende. Ahi va el codigo:

Codigo:

;***************CONTROL DE MOTORS DE CORRENT CONTINUA AMB PWM******************
;
;El programa s"encarrega de controlar el dendiment de 2 motors de
;corrent continua de la següent manera: Cada vegada que s"apreta un
;pulsador el motor augmenta un 20% el seu rendiment, quan aquest
;arriba al 100%, si es torna a pulsar, el motor es para. Per
;saber el rendiment del motor en tot moment, el sistema incorpora 2
;diaplays de 7 segments, un per cada motor. Si el motor esta al 20%  
;el display marcara 2, si esta a 40% marcara 4 i aixi successivament,
;en el moment que arribi al 100% marcara un 1.
;
;   RENDIMENT      SEMIPERIODE ALT      SEMIPERIODE   BAIX
;   ---------      ---------------      ----------------
;      0%             0 ms               10 ms
;      20%             2 ms                8 ms
;      40%             4 ms                6 ms
;      60%             6 ms                4 ms
;      80%             8 ms                2 ms
;       100%         10 ms                0 ms
;
;ZONA DE DADES*****************************************************************

   LIST    P=16F84         ;el ucontrolador usat
   INCLUDE   <P16F84.INC>    ;arxiu de definició de registres

;ZONA DE CODIS*****************************************************************

   ORG   0               ;el programa comença a la direcció 0
Inici
   bsf      STATUS,RP0      ;accès al banc 1
   movlw   b"10000"      ;RA0:RA3 = sortides   RA4 = entrada
   movwf   TRISA
   movlw   b"00000001"      ;RB0 = entrada, els altres son sortides
   movwf   TRISB
   bcf      STATUS,RP0      ;accès al banc 0
Test
   btfss   PORTA,4         ;testeja RA4         
   goto   PWM20_1D      ;si =0 va a PWM20_1
   ;btfss   PORTB,0         ;testeja RB0
   ;goto    PWM20_2D      ;si =0 va a PWM20_2
   goto   Test         ;va a Test

PWM20_1D
   bcf      PORTA,0
   bcf      PORTA,1         ;posa a 0 el 1 dsplay
   bcf      PORTA,2
   bcf      PORTA,3
   movlw   b"00010"         
   movwf   PORTA         ;mostra un 2 al display
   bsf      PORTB,1         ;activa EN1
PWM20_1   
   bsf      PORTB,2       ;envia un nibell alt a RB2
   call   Retardo_2ms      ;durant 2ms
   bcf      PORTB,2         ;envia un nivell baix a RB2
   call   Retardo_5ms
   call   Retardo_2ms      ;durant 8ms
   call   Retardo_1ms
   btfss   PORTA,4         ;testeja RA4
   goto   PWM40_1D      ;si=0 va a PWM40_1D
   goto   PWM20_1         ;si=1 va a PWM20_1
PWM40_1D
   bcf      PORTA,0
   bcf      PORTA,1         ;posa a 0 el primer display
   bcf      PORTA,2
   bcf      PORTA,3
   bcf      PORTB,2         ;deixa d"emetre pulsos
   movlw   b"00100"      ;posa a 1 RA2
   movwf   PORTA          ;mostra el resulat al display
PWM40_1
   bsf      PORTB,2         ;posa a nivell alt RB2            
   call   Retardo_2ms
   call   Retardo_2ms      ;durant 4ms
   bcf      PORTB,2         ;posa RB2 a nivell baix
   call   Retardo_5ms
   call   Retardo_1ms      ;durant 6ms
   btfss   PORTA,4         ;testeja RA4
   goto   PWM60_1D      ;va a PWM60_1D
   goto   PWM40_1         ;va a PWM40_1
PWM60_1D
   bcf      PORTA,0         
   bcf      PORTA,1         ;posa a 0 el primer display
   bcf      PORTA,2
   bcf      PORTA,3
   bcf      PORTB,2         ;deixa d"emetre pulsos
   movlw   b"00101"      ;posa a nivell alt RA0 i RA3
   movwf   PORTA          ;mostra un 6 en el display.
PWM60_1
   bsf      PORTB,2         ;posa a nivell alt RB2
   call   Retardo_5ms         
   call   Retardo_1ms      ;durant 6ms
   bcf      PORTB,2         ;posa a nivell baix RB2
   call   Retardo_2ms
   call   Retardo_2ms      ;durant 4ms
   btfss   PORTA,4         ;testeja RA4
   goto   PWM80_1D      ;va a PWM80_1D
   goto     PWM60_1         ;va a PWM60_1
PWM80_1D
   bcf      PORTA,0         
   bcf      PORTA,1         ;posa a 0 el primer display
   bcf      PORTA,2
   bcf      PORTA,3
   bcf      PORTB,2         ;deixa d"emetre pulsos
   movlw   b"01000"      ;posa a nivell alt RA3
   movwf   PORTA         ;mostra un 8 al display
PWM80_1
   bsf      PORTB,2         ;posa a nivell alt RB2
   call   Retardo_5ms
   call   Retardo_2ms      ;durant 8ms
   call   Retardo_1ms   
   bcf      PORTB,2         ;posa a nivell baix RB2
   call   Retardo_2ms      ;durant 2ms
   btfss   PORTA,4         ;testeja RA4
   goto   PWM100_1D      ;va a PWM100_1D
   goto   PWM80_1         ;va a PWM80_1
PWM100_1D
   bcf      PORTA,0         
   bcf      PORTA,1         ;posa a 0 el primer display
   bcf      PORTA,2
   bcf      PORTA,3
   bcf      PORTB,2         ;deixa d"emetre pulsos
   movlw   b"00001"      ;posa a 1 RA0
   movwf   PORTA         ;mostra un 1 al display
PWM100_1
   bsf      PORTB,2         ;envia un puls de durada indefinida per RB2
   btfss   PORTA,4         ;testeja RA4
   goto   Motor1_off      ;va a Motor1_off
   goto   PWM100_1      ;va a PWM100_1
Motor1_off
   bcf      PORTA,0         ;posa a 0 el display
   bcf      PORTA,1
   bcf      PORTA,2
   bcf      PORTA,3
   bcf      PORTB,2         ;deixa d"emetre pulsos
   goto   Test         ;va a test
   
   
   INCLUDE <RETARDOS.INC>
   
   END



Aprobecho para decir que este seguramente sera mi ultimo programa en asm ya que me paso a C porque en el insti nos den programacion en C.

Saludos y gracias de antemano.

Desconectado piriots

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
RE: Motores CC con PWM
« Respuesta #1 en: 03 de Octubre de 2004, 06:59:00 »
Nadie me echa un cable?? es que por mas que lo intento no soy capaz de encontrar el error.