viernes, 30 de mayo de 2014

MODULACIÓN POR ANCHO DE PULSO PWM

MODULACIÓN POR ANCHO DE PULSO PWM

INFORME DE LABORATORIO 5
MODULACIÓN POR ANCHO DE PULSO PWM


INTEGRANTES :   - ANDRES FELIPE LEON SALDAÑA        19266
                               - EDWIN RICARDO QUINTERO LEON      19251  
 


FOTOS AVALADAS POR EL DOCENTE 





DESCRIPCIÓN DEL CASO  

Se requiere usar la modulación por ancho de pulso y variar la velocidad de un motor desde un punto 0 o reposo, y que dependiendo del sentido en el que se gire un potenciometro o resistencia variable, el motor gire en sentido horario o anti horario, siempre teniendo en cuenta que a medida que se aproxime el punto 0, debe bajar su velocidad. Es recomendable usar una resistencia lineal, ya que una logarítmica con un mal movimiento puede cambiar el sentido de giro del motor sin detallar el cambio de velocidad.

ANÁLISIS DE DISEÑO CON DEFINICIÓN DE MATERIALES Y RECURSOS PARA DARLE SOLUCIÓN AL CASO

Como primera medida en necesario saber y aplicar los pasos a seguir para poder construir y quemar el programa en nuestro micro controlador, estos se resumen en 4 importantes pasos:

1) Idea o caso problema: 

Se requiere variar un potenciometro desde su punto medio, en cual a la vez un motor se encontrara en reposo, según el diseño a medida que se varié el potenciometro y se salga del punto medio, el motor deberá girar en cierto sentido de giro y acelerar su velocidad hasta que se llegue al tope del potenciometro.

2) Algoritmo: 

* Variar un potenciometro hacia un extremo y a su vez acelerara un motor
* Variar el potenciometro hacia el otro extremo y a su vez desacelerara el motor


3) Diagrama de flujo: 



4) Programa o código Assembler

Hay que tener en cuenta que a la hora de construir el código es necesario tener en cuenta que su estructura se basa a partir de 4 importantes partes:

* LIBRERÍAS O HERRAMIENTAS
   (Se escoge el micro controlador que se utilizara)
* CONFIGURACIÓN DEL MICRO CONTROLADOR
* CONFIGURACIÓN DEL LOS PERIFÉRICOS 
    (Se declaran variables)
* PROGRAMA FINAL

Con estos importantes pasos y conociendo el datasheet o comandos del micro controlador es suficiente para construir el código.

#include     <p16f877a.inc>       ; definiciones de variables especificas del procesador

__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF


CONT1                 EQU       0X20
CONT2                 EQU       0X21
CONT3                 EQU       0X22
DATO1                 EQU 0X23
DATO2       EQU 0X24
DATO3       EQU 0X25

PRINCIPAL

;;;Configuracion PWM

         MOVLW 0XE0;       Cargo 224,lo que implica un periodo de 225us (4444 Hz)
                               MOVWF PR2                                    ; Asigno el valor a PR2
                               MOVLW B'00001101'
                               MOVWF CCP1CON ; Modo PWM <3,2,1,0>, bit <5,4> en ceros
                               MOVLW B'00000100' ; <1x> Un prescaler de 16 da un periodo apox de 4ms y una frec de 244Hz
                                  ; <01> Un prescaler de 4 da un periodo apox de 1ms y una frec de 1KHz
                                  ; <00> Un prescaler de 1 da un periodo apox de 250us y una frec de 4KHz
                               MOVWF T2CON ; Prescaler 16 <1,0> y activa el TMR2 <2>
         MOVLW   B'00001111'  ; duty ciclo
         MOVWF     CCPR1L      ;Asignacion de modulo como pwm1
                               ; CLRF CCPR1L ; Duty en cero (0)


INICIO
                               BSF                        STATUS,5                                           ; BANCO 1.
                              
                               BCF                        ADCON1,0                                         ; SE TOMAN 7 CANALES DEL A/D.
                               BCF                        ADCON1,1                                         ; VDD COMO ENTRADA VOLTAJE DE REFERENCIA POSITIVO.
                               BCF                        ADCON1,2                                         ; VSS COMO ENTRADA VOLTAJE DE REFERENCIA NEGATIVO.
                               BCF                        ADCON1,3                                         ;
                               BCF                        ADCON1,6                                         ; TOMAMOS RC INTERNO COMO RELOJ PARA EL CONVERSOR.
                               BCF                        ADCON1,7                                         ; LOS 8 BIT DE MAYOR PESO ESTAN EN ADRESH,
                                                           ; LOS 2 BIT DE MENOR PESO ESTAN EN ADRESL, LOS CUALES LOS DESPRECIAMOS.
                   
                               BCF                        TRISE,0
                               ;BCF                      TRISC,0
                               BCF                        TRISC,2
                               ;CLRF     TRISB
                              
                               CLRF      TRISD   
                               BCF                        STATUS,5                                           ; BANCO 0.
                               CALL      LED
                               CALL      TIEMPO_1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CONVER_0
                               BSF                        ADCON0,0                                         ; PRENDEMOS EL CONVERSOR.

                               BCF                        ADCON0,3                                         ; HABILITAMOS CANAL 0.
                               BCF                        ADCON0,4
                               BCF                        ADCON0,5
                              
                               BCF                        ADCON0,6                                         ; TOMAMOS RC INTERNO COMO RELOJ PARA EL CONVERSOR.
                               BCF                        ADCON0,7

                               BSF                        ADCON0,2                                         ; INICIAMOS LA CONVERSION DEL CANAL 0.
LISTO_0
                               BTFSC                   ADCON0,2                                         ; PROBAMOS QUE LA CONVERSIÓN DEL CANAL 0 YA ESTA.
                               GOTO                   LISTO_0                                                              ; NO ESTA LISTA.
                               CALL                      TIEMPO_1
                               MOVF                  ADRESH,W                                         ; RECUPERO LOS 8 BITS DE MAYOR PESO DE LA CONVERSIÓN.
                MOVWF                              PORTD                                                 ;los visualiza por el PORTB
        MOVWF       DATO1                                                ;Guarda el valor de netrada del conversor



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

                               MOVF DATO1
                               MOVWF CCPR1L ; Mostrar en CCP1
        CALL LED
                               GOTO INICIO
       


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LED
                               BSF                                        PORTE,0
                               CALL                      TIEMPO
                               BCF                                       PORTE,0
                               CALL                      TIEMPO
                               RETURN
;
TIEMPO_1
                               MOVLW                              0X14
                               MOVWF                              CONT3
NADA_1
                               NOP
                               DECFSZ CONT3,1
                               GOTO                   NADA_1
                               RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TIEMPO
                               MOVLW              0XC9                                     ; C9 Valor con que se carga el contador 1.
                               MOVWF              CONT1
NIVEL1
                               MOVLW              0XEA                                     ; EA Valor con que se carga el contador 2.
                               MOVWF              CONT2
NIVEL2
                               DECFSZ CONT2,1                             ; Se resta en 1 el contador 2 y se pregunta si es cero.
                               GOTO   NIVEL2                                 ; Aun el contador 2 no es cero.

                               DECFSZ CONT1,1                             ; Se resta en 1 el contador 1 y se pregunta si es cero.
                               GOTO   NIVEL1                                 ; Aun el contador 1 no es cero.
               
                               RETURN                                                                             ; Retorna de la subrutina.

                               END                                                                                     ; Final del programa.


Finalmente se genera el archivo .asm com MPLAB y nos disponemos a quemarlo en el micro controlador con un PICK IT 3 

ESO ES TODO AMIGOS MUCHAS GRACIAS !!!