jueves, 29 de noviembre de 2012

La velocidad de un motor de corriente continua depende del valor medio de la tensión aplicada en sus extremos.
el sistema mas utilizado para controlar la velocidad de un motor DC es mediante la modulación por ancho de pulso PWM de una señal cuadrada TTL, bajo el control PWM el motor gira a una velocidad determinada por la media del nivel de la señal cuadrada.

La tensión continua media presentada al motor se controla manteniendo la frecuencia constante y variando el tiempo que la señal permanece en alto, es decir variando el ciclo de trabajo.
La regulación por PWM proporciona una eficaz método mediante la utilizacion de una simple señal digital de control.


    Circuito.

    MATERIAL:

    1- 555.
    1- Capacitor cerámico 100n.
    1- Resistor 470.
    1- Resistor 10k.
    1- Potenciometro de 1.
    1- TIP 31.
    1- 2N3055.
    1- Motor.
    1- Diodo 1N1346BR.

    Sugerencias: en pruebas físicas varía mejor el pot de 1k que el de 100k pero prueben como quiere que varié su velocidad asiendo pruebas con distintos pot, se puede comprar el darlington ya en un encapsulado, y se probo circuito con un motor de 24v a 3A,  se puede usar un diodo 1N4001 pero dependera de la corriente suministrada.

    SIMULACION:

    PWM con 555
      

    VIDEO DE LA SIMULACION:



      

    Diseño PCB:



    control de velocidad con 555

    Sugerencia: poner disipador al tip 41 y al 2n3055 en lugar de soldarlo directamente.

    DESCARGAR SIMULACION Y PCB:





    REFERENCIA:

    • Microcontrolador  16f84a desarrollo de proyectos, p.p.475.   
                                                                            
    sábado, 27 de octubre de 2012

    MATERIAL:

     2- Resistores de 10k.
    1- Resistor de 1k.
    2- Pushbutton.
    1- Led.
    1- 7400.


     La compuerta NAND se construye para dos entradas A y B , la operación NAND se denota por A'*B'. en términos de la lógica, la compuerta NAND equivale a una compuerta AND seguida por una NOT.

    Para construir un retenedor SR  las compuertas se acoplan de manera cruzada para obtener la retroalimentación necesaria para formar una red biestable. el retenedor se activa haciendo Q=1 cuando S va de 1 a 0. la función de mantenimiento inicia cuando S regresa a 1. A la inversa, si R va de 1 a 0, el retenedor se desactiva y Q=0.

    Simulacion en proteus:



    DESCARGAR LA SIMULACION:



    http://rapidshare.com/files/3106460427/flip-flop%20sr%20compuertas(nand)%20ROBOTRH.rar


    viernes, 24 de agosto de 2012

    MATERIAL:

    1-LCD 16x2.

    LCD (pantalla de cristal líquido) es un módulo de visualización electrónica para una amplia gama de aplicaciones.Una pantalla LCD de 16x2 significa que puede mostrar 16 caracteres por línea y hay 2 líneas de este tipo. En esta pantalla cada carácter se muestra en la matriz de píxeles 5x7. Esta pantalla LCD tiene dos registros, a saber, el mando y datos.
    El registro de comando almacena las instrucciones dadas al mando LCD. Un comando es una instrucción dada a LCD para realizar una tarea predefinida como inicializarla, despejando su pantalla, ajuste la posición del cursor, el control de la pantalla, etc El registro de datos almacena los datos que se muestran en la pantalla LCD. Los datos son el valor ASCII del carácter a visualizar en la pantalla LCD.

    lcd 16x2

     Pin No
     Function
     Name
    1
    Ground (0V)
    Ground
    2
    Supply voltage; 5V (4.7V – 5.3V)
     Vcc
    3
    Contrast adjustment; through a variable resistor
     VEE
    4
    Selects command register when low; and data register when high
    Register Select
    5
    Low to write to the register; High to read from the register
    Read/write
    6
    Sends data to data pins when a high to low pulse is given
    Enable
    7
    8-bit data pins
    DB0
    8
    DB1
    9
    DB2
    10
    DB3
    11
    DB4
    12
    DB5
    13
    DB6
    14
    DB7
    15
    Backlight VCC (5V)
    Led+
    16
    Backlight Ground (0V)
    Led-

    1-PIC 16f84A.
    1-Cristal 4MHz.
    2-Capacitores cerámicos 22pF.

    Circuito en proteus:


    Se programo el PIC en .asm con MPLAB IDE.

    PROGRAMA ASM:

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
     LIST        p=16F84A
            __CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC
            INCLUDE    <P16F84A.INC>
            STATUS           EQU    0X03
            PORTA            EQU    0X05
            PORTB            EQU    0X06
            TRISA            EQU    0X85
            TRISB            EQU    0X86
            LCD_LINEA1     EQU    80  
            LCD_LINEA2     EQU    0C0  
            LCD_CLR         EQU    01   
            LCD_CASA     EQU    02   
            LCD_INC         EQU    06   
            LCD_DEC         EQU    04   
            LCD_ON         EQU    0C   
            LCD_OFF         EQU    08   
            CURSOR_ON     EQU    0E   
            CURSOR_OFF     EQU    0C   
            CURSOR_PARP     EQU    0F
            LCD_IZDA     EQU    18   
            LCD_DECHA     EQU    1C   
            CURSOR_IZDA     EQU    10   
            CURSOR_DECHA     EQU    14   
            LCD_FUNCIÓN     EQU    38   
            LCD_CGRAM     EQU    40   
            CBLOCK 0x0D
            ENDC
            ORG    00                       
    INICIO   
                    bsf         STATUS,RP0
                       movlw        b'00011000'   
            movwf        TRISA       
            clrf        TRISB       
            bcf             STATUS,RP0               
            clrf        PORTA       
            clrf        PORTB
            movlw        LCD_FUNCIÓN   
            call        LCD_COMANDO   
            call        PAUSA_5ms   
            movlw        LCD_FUNCIÓN   
            call        LCD_COMANDO   
            call        PAUSA_5ms   
            movlw        LCD_FUNCIÓN   
            call        LCD_COMANDO   
            call        PAUSA_5ms   
            movlw        LCD_CLR       
            call        LCD_COMANDO   
            movlw        LCD_INC       
            call        LCD_COMANDO   
            movlw        LCD_ON       
            call        LCD_COMANDO   
            movlw        80       
            call        LCD_COMANDO   
    ver
                                   
            movlw    80
            call    LCD_COMANDO
                movlw    'B'
            call    LCD_CARACTER       
            movlw    'L'           
            call    LCD_CARACTER       
            movlw    'O'                        
            call    LCD_CARACTER       
            movlw    'G'                    
            calL    LCD_CARACTER
            movlw    ' '                    
            calL    LCD_CARACTER               
            movlw    'R'
            call    LCD_CARACTER       
            movlw    'O'           
            call    LCD_CARACTER       
            movlw    'B'                        
            call    LCD_CARACTER       
            movlw    'O'                    
            calL    LCD_CARACTER       
            movlw    'T'           
            call    LCD_CARACTER
            movlw    ' '           
            call    LCD_CARACTER
            movlw    'R'           
            call    LCD_CARACTER       
            movlw    'H'           
            call    LCD_CARACTER               
            movlw    0C0
            call    LCD_COMANDO
                 movlw    'E'
            call    LCD_CARACTER       
            movlw    'L'           
            call    LCD_CARACTER       
            movlw    'E'                        
            call    LCD_CARACTER       
            movlw    'C'                    
            calL    LCD_CARACTER
            movlw    'T'                    
            calL    LCD_CARACTER               
            movlw    'R'
            call    LCD_CARACTER
            movlw    'O'                        
            call    LCD_CARACTER       
            movlw    'N'                    
            calL    LCD_CARACTER
            movlw    'I'                    
            calL    LCD_CARACTER               
            movlw    'C'
            call    LCD_CARACTER
                    movlw    'A'
            call    LCD_CARACTER
            sleep   
    subrutinas      
              CBLOCK
            CONTA1
            CONTA2
            GUARDA_CARÁCTER
            ENDC
    PAUSA_5ms   
                    movlw        7
            movwf        CONTA2       
            clrf        CONTA1       
    RETRASO1   
                    decfsz        CONTA1,1   
            goto        RETRASO1   
            decfsz        CONTA2,1   
            goto        RETRASO1   
            return               
    LCD_COMANDO   
                    clrf        PORTA       
            movwf        PORTB       
            call        LCD_CHEQUEA
            goto        LCD_HABILITA
    LCD_CARACTER
            clrf    PORTA           
            call    LCD_CARÁCTER_ESPECIAL
            movwf    PORTB           
            call    LCD_CHEQUEA       
            bsf     PORTA,0               
            goto    LCD_HABILITA       
    LCD_CARÁCTER_ESPECIAL
            movwf    GUARDA_CARÁCTER       
            sublw    'ñ'            
            btfss    STATUS,Z       
            goto    LCD_EÑE_MAYÚSCULA   
            movlw    b'11101110'       
            movwf    GUARDA_CARÁCTER   
            goto    LCD_FIN_CARACTER_ESP   

    LCD_EÑE_MAYÚSCULA
            movfw    GUARDA_CARÁCTER       
            sublw     'Ñ'            
            btfss       STATUS,Z       
            goto       LCD_GRADO       
            movlw    b'11101110'       
            movwf    GUARDA_CARÁCTER       
            goto       LCD_FIN_CARACTER_ESP   
    LCD_GRADO
            movfw    GUARDA_CARÁCTER       
            sublw      'º'           
            btfss      STATUS,Z           
            goto       LCD_FIN_CARACTER_ESP   
            movlw    b'11011111'       
            movwf    GUARDA_CARÁCTER       

    LCD_FIN_CARACTER_ESP
            movfw    GUARDA_CARÁCTER   
            return           
    LCD_CHEQUEA           
            bsf         STATUS,RP0               
            movlw        0FF       
            movwf        TRISB       
            bcf         STATUS,RP0           
            bcf         PORTA,0           
            bsf         PORTA,1           
    BUCLE       
            bsf         PORTA,2               
            movf        PORTB,0       
            bcf         PORTA,2               
            addlw        84   
            btfsc        STATUS,C        
            goto        BUCLE       
            bsf         STATUS,RP0               
            clrf        TRISB       
            bcf         STATUS,RP0               
            bcf         PORTA,1       
            return       
    LCD_HABILITA   
            bsf         PORTA,2               
            nop               
            bcf         PORTA,2               
            return
            END   
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    SIMULACION EN PROTEUS:



    PCB:

    Vista real del PCB.

    DESCARGA SIMULACION, PCB, HEX:






    jueves, 23 de agosto de 2012
    domingo, 15 de julio de 2012

    MATERIAL:

    1-L293D. 
    driver para cambio de giro

    1- Motor Bipolar 24v.

    Motor bipolar 24v
    1- PIC 16f84a.
    1- Crystal 4Mhz.
    2- Capacitores cerámicos de 22pf.
    2- Resistores de 10k.
    2- Push button.

    Un motor paso a paso gira en función de una  secuencia de pulsos aplicados a sus devanados. El eje del motor gira un determinado ángulo por cada impulso de entrada. Los incrementos de rotación o pasos se miden en grados.

    Motor Bipolar
    De este motor salen cuatro hilos conectados al circuito del control, que realiza la función de cuatro interruptores electrónicos dobles, se pueden obtener las secuencias para que el motor gire de un lado o del otro.

    L293D 
    Vccs2 es el voltaje del motor, EN 1,2,3,4 poner a 1.

    Circuito simulado en proteus:


    Giro a la derecha 
    Half step
    Modo medio paso, el rotor avanza medio paso por cada pulso de exitacion. presenta como principal ventaja una mayor resolucion de paso.

    control de un motor bipolar

    Al presionar los dos pushbutton se activa este modo.

    Giro a la izquierda 
    Modo paso completo, avanza un paso por cada pulso de exitacion.


    Al presionar el primer pushbutton se activa este modo.

    Video de la simulación Proteus:


     


    Programa en asm.

    __CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC

            LIST P=16F84A

            INCLUDE<P16F84A.INC>

    cblock

    endc

    status  equ  0x03

    porta   equ  0x05

    portb   equ  0x06

    trisa   equ  0x85

    trisb   equ  0x86

    org 0

    inicio

         bsf   status,5

         bsf   porta,0

         bsf   porta,1

         clrf  portb

         bcf   status,5

      

    activar

         btfss porta,0

         goto  giro

         clrf  portb

         goto  fin

    giro

         btfsc porta,1   

         goto  izq_z

         call  der

         goto  fin

    izq_z

         call  izq

    fin

         goto  activar

    izq

         movlw b'00000101'

         movwf portb

         call  Retardo_20ms

         movlw b'00000110'

         movwf portb

         call  Retardo_20ms

         movlw b'00001010'

         movwf portb

         call  Retardo_20ms


         movlw b'00001001'

         movwf portb

         call  Retardo_20ms

         return

       

    der

         movlw b'00001001'

         movwf portb

         call  Retardo_20ms

         movlw b'00001000'

         movwf portb

         call  Retardo_20ms

         movlw b'00001010'

         movwf portb

         call  Retardo_20ms

         movlw b'00000010'

         movwf portb

         call  Retardo_20ms

         movlw b'00000110'

         movwf portb

         call  Retardo_20ms

         movlw b'00000100'

         movwf portb

         call  Retardo_20ms

         movlw b'00000101'

         movwf portb

         call  Retardo_20ms

         movlw b'00000001'

         movwf portb

         call  Retardo_20ms

         return

         INCLUDE <retardos.inc>

        end

    Para aumentar o disminuir el tiempo del disparo utilizar los tiempos de la librería de retardos.

    DESCARGAR SIMULACION,  ASM Y HEX:



    REFERENCIAS:  

    • Microcontrolador 16f84 desarrollo de proyectos, pag.  481-504
     
    sábado, 16 de junio de 2012

    SUBRUTINA

    Es un conjunto de instrucciones al que se tiene acceso desde cualquier tipo del programa principal. es decir una subrutina es un subprograma que se ejecuta cada vez que el programa principal lo necesite.

    call    xxxx  // llamado de la subrutina xxxx.

    xxxxx
    .......
    ........
    ........
    return       // se sale de la subrutina y retorna al programa principal.

    LIBRERÍAS CON SUBRUTINA DE RETARDO

    En la mayoría de los proyectos es necesario controlar el tiempo es por  eso que los retardos son probablemente las subrutinas mas utilizadas dentro los programas.

    Para calcular el tiempo checar pag. 170 del libro microcontrolador 16f84a.

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    realice la librería del mismo libro:
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    CBLOCK
         R_ContA
         R_ContB
         R_ContC
         ENDC
    Retardo_10micros
              nop
              nop
              nop
              nop
              nop
    Retardo_5micros
              nop
    Retardo_4micros
              return
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ;RETARDOS de 20 hasta 500 microsegundos
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;,;;;
    Retardo_500micros
              nop
              movlw  d'164'
              goto   RetardoMicros
    Retardo_200micros
              nop
              movlw  d'64'
              goto   RetardoMicros
    Retardo_100micros
              movlw  d'31'
              goto   RetardoMicros
    Retardo_50micros
              nop
              movlw  d'14'
              goto   RetardoMicros
    Retardo_20micros
              movlw  d'5'
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    RetardoMicros
              movwf  R_ContA
    Rmicros_Bucle
              decfsz R_ContA,F
              goto   Rmicros_Bucle
              return
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ;RETARDOS de 1ms hasta 200ms
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    Retardo_200ms
              movlw  d'200'
              goto   Retardos_ms
    Retardo_100ms
              movlw  d'100'
              goto   Retardos_ms
    Retardo_50ms
              movlw  d'50'
              goto   Retardos_ms
    Retardo_20ms
              movlw  d'20'
              goto   Retardos_ms
    Retardo_10ms
              movlw  d'10'
              goto   Retardos_ms
    Retardo_5ms
              movlw  d'5'
              goto   Retardos_ms
    Retardo_2ms
              movlw  d'2'
              goto   Retardos_ms
    Retardo_1ms
              movlw  d'1'
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    Retardos_ms
              movwf  R_ContB
    R1ms_BucleExterno
              movlw  d'249'
              movwf  R_ContA
    R1ms_BucleInterno
              nop
              decfsz R_ContA,F
              goto   R1ms_BucleInterno
              decfsz R_ContB,F
              goto   R1ms_BucleExterno
              return
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ;RETARDOS de 0.5 hasta 20 segundos
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    Retardo_20s
              movlw  d'200'
              goto   Retardo_1Decima
    Retardo_10s
              movlw  d'100'
              goto   Retardo_1Decima
    Retardo_5s
              movlw  d'50'
              goto   Retardo_1Decima
    Retardo_2s
              movlw  d'20'
              goto   Retardo_1Decima
    Retardo_1s
              movlw  d'10'
              goto   Retardo_1Decima
    Retardo_500ms
              movlw  d'5'
    Retardo_1Decima
              movwf  R_ContC
    R1Decima_BucleExterno2
              movlw  d'100'
              movwf  R_ContB
    R1Decima_BucleExterno
              movlw  d'249'
              movwf  R_ContA
    R1Decima_BucleInterno
              nop
              decfsz R_ContA,F
              goto   R1Decima_BucleInterno
              decfsz R_ContB,F
              goto   R1Decima_BucleExterno
              decfsz R_ContC,F
              goto   R1Decima_BucleExterno2
              return

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    Lo guarde con la terminación .INC lo cual indica que es una librería.

    TEMPORIZADOR 0-9 SEGUNDOS

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

     __CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC
            LIST P=16F84A
            INCLUDE<P16F84A.INC>
            CBLOCK  0x0E
            ENDC
    status  equ  0x03
    porta   equ  0x05
    portb   equ  0x06
    trisa   equ  0x85
    trisb   equ  0x86
            org  0
    inicio
          bsf   status,5
          clrf  trisb
          movlw b'11111'
          movwf trisa
          bcf   status,5
          clrf  portb
    ini
          movlw b'00111111'
          movwf portb
              
    principal
          btfsc porta,0
          goto  principal
          call  Retardo_10micros
          btfsc porta,0
          goto  principal
          goto  activar
    deje
          btfss porta,0
          goto  deje
          goto  principal
    activar
          call  Retardo_1s           ; llamado de la subrutina del retardo 1 segundo la cual se encuentra en la librería.
          movlw    b'0000110'    ; 1  
          movwf portb
          call  Retardo_1s
          movlw    b'1011011'    ; 2  
          movwf portb
          call  Retardo_1s         
             movlw    b'1001111'    ; 3
          movwf portb
          call  Retardo_1s  
          movlw    b'1100110'    ; 4
          movwf portb
          call     Retardo_1s
          movlw    b'1101101'    ; 5  
          movwf portb
          call  Retardo_1s
          movlw    b'1111101'    ; 6  
          movwf portb
          call  Retardo_1s
          movlw    b'0000111'    ; 7
          movwf portb
          call  Retardo_1s  
          movlw    b'1111111'    ; 8  
          movwf portb
          call  Retardo_1s
          movlw    b'1101111'    ; 9
          movwf portb
          call  Retardo_1s
          goto  ini
          INCLUDE <retardos.inc>  ;  se incluye la librería de retardos en el programa principal.
          END

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 

    MATERIAL: 

    1- Pushbutton.
    1- Resistor de 10k.
    1- Display 7 segmentos ánodo común.
    1- Pic 16f84a.
    1- Cristal de 4Mhz.
    2- Capacitores cerámicos de 22pf.
    7- Resistores de 220.

    SIMULACIÓN:



      Se necesita apretar el push para que empiece el conteo.


    VIDEO DE LA SIMULACION:


    En el ejemplo nadamas se utilizo la subrutina de un segundo pero de la misma forma se pueden mandar a llamar cualquier subrutina de la librería o se pueden ir anidando.
    Se puede incluir la librería al realizar un proyecto en mplab o copiar la librería en la misma carpeta en que vas a guardar tu programa principal(.asm).

    DESCARGAR LIBRERÍA Y PROGRAMA SIMULADO EN PROTEUS:









    SIGUEME EN FECEBOOK

    MI TWITTER

    Translate