control temperatura control digital

41
Diseño De Controladores Digitales Informe Proyecto Final 1 Diseño de Controladores Digitales Informe Proyecto Final Control de Temperatura Profesor: Juárez, José Alumno: LIO, Guillermo Gustavo Legajo: 7620

Upload: miguel-jerez

Post on 29-Sep-2015

269 views

Category:

Documents


4 download

DESCRIPTION

control

TRANSCRIPT

  • Diseo De Controladores Digitales Informe Proyecto Final

    1

    Diseo de Controladores Digitales

    Informe Proyecto Final

    Control de Temperatura Profesor: Jurez, Jos Alumno: LIO, Guillermo Gustavo Legajo: 7620

  • Diseo De Controladores Digitales Informe Proyecto Final

    2

    Introduccin El proyecto consiste en un control de temperatura con modulacin de fase. Se realiz una modulacin de fase con la salida PWM detectando el cruce por cero con el Input Capture. Con ello se movi un opto acoplador que actu sobre un triac que ser quien alimente finalmente a la resistencia calefactora. Se uso un sensor de temperatura y se acondicion la seal para poder usar el conversor A/D del micro en todo su rango para obtener un valor proporcional a la temperatura. Se implement un control del tipo ventanas. Segn en que ventana se encuentre, ser el porcentaje de potencia que se le entregar a la resistencia. Tiene pulsadores que me permiten cambiar de manual a automtico, otros para subir y bajar la potencia de salida cuando el equipo se encuentra en manual y si esta en automtico con estos pulsadores podr variar el Set Point. Los datos son enviados por el puerto serie y levantados por una interfas que me muestra el valor del Set Point, la variable de proceso y la potencia entregada a la resistencia calefactora.

    Descripcin General Integrados utilizados: *Se utiliz un micro de la familia HC08 (MC68HC908GP32CP). *Integrado de comunicacin MAX 232. *Sensor de temperatura LM35. *Amplificador para la seal de temperatura LM308. *Opto acoplador MOC 3041. *Triac de salida BTA16. *Regulador LM 7805 y LM78L09.

  • Diseo De Controladores Digitales Informe Proyecto Final

    3

    Entradas-Salidas: *1 entradas analgica conectada al conversor A/D del micro (sensor de temperatura). *4 entradas digitales (pulsadores). *1 salida PWM *1 entrada del Input Capture. *Salidas digitales para indicaciones de estado. *Salida y entrada de TX-RX para el manejo de la comunicacin serie RS-232.

    SENSOR DETEMPERATURA

    RESISTENCIA CALEFACTORA

    PLACA DE POTENCIA

    220V

    FUENTE MICROINTERFAZUSUARIO

    ACONDICIONAMIENTODE SEAL

    DIAGRAMA EN BLOQUES

  • Diseo De Controladores Digitales Informe Proyecto Final

    4

    Hard Cruce por cero: Para detectar el cruce por cero, se coloc un diodo 1N4007 con una resistencia en la entrada de 9VAC, obteniendo una rectificacin de media onda. Con un diodo zener de 5V se trunco este semi ciclo para obtener una onda casi cuadrada y poder entrar al Input Capture del micro. Realizando una deteccin por flanco de subida y bajada obtenemos los cruces por cero de nuestra seal de alterna. Amplificacin seal del sensor LM35: El sensor de temperatura LM35 nos entrega 10mV/C y como mximo soporta 150C. O sea que a lo sumo nos entregar 1.5V a fondo de escala. Para utilizar todo el rango el conversor A/D del micro, se tuvo que amplificar la seal 3.3 veces. Se utiliz un LM308 que es fuente nica y se lo aliment con 9V. Se tuvo problemas de inestabilidad con la amplificacin de la seal y se logr solucionarlo perfectamente con filtros en la realimentacin y en la salida. Salida de potencia: Se utiliz un triac BTA16 para manejar la resistencia calefactora y se aisl la parte de alta potencia con la de baja mediante un opto acoplador MOC3041. Este se lo conect a la salida PWM del micro para poder lograr la modulacin de fase. Comunicacin serie: Se utiliz un MAX 232 para la comunicacin serie a travs de la PC y se colocaron leds de indicacin de envi y recepcin de datos.

  • Diseo De Controladores Digitales Informe Proyecto Final

    5

    Fuente: Se utiliz un trafo de 220/9 VAC para bajar la tensin. Luego se coloc un LM 7805 para alimentar al micro y dems integrados y tambin se coloc un LM78L09 para alimentar el operacional. Placa programadora: Se utiliz una placa programadora casera que permite trabajar sobre la placa que esta en construccin. Esta permite mediante una llave cambiar a modo RUN o PROG agilizando mucho la tarea de pruebas del programa en mi placa.

  • Diseo De Controladores Digitales Informe Proyecto Final

    6

    Circuito placa programadora:

  • Diseo De Controladores Digitales Informe Proyecto Final

    7

    Circuito

  • Diseo De Controladores Digitales Informe Proyecto Final

    8

  • Diseo De Controladores Digitales Informe Proyecto Final

    9

  • Diseo De Controladores Digitales Informe Proyecto Final

    10

  • Diseo De Controladores Digitales Informe Proyecto Final

    11

    Flujo del Programa

    INICIALIZACION GENERAL

    MEDICIONTEMPERATURA

    BARRERTECLADO

    ESTA EN MANUALO AUTOMATICO?

    M

    A

    SUBIR O BAJAR % POTENCIATECLAS = $01 => SUBIR % POTTECLAS = $02 => BAJAR % POT

    (FIJARSE QUE ESTE ENTRE 00-FF)TECLAS = $03 => CAMBIAR A AUTO

    FLUJO DEL PROGRAMA

    CAMBIOTECLAS?

    SI

    NO

    SUBIR O BAJAR SPTECLAS = $01 => SUBIR SPTECLAS = $02 => BAJAR SP

    (FIJARSE QUE ESTE ENTRE 00-FF)TECLAS = $03 => CAMBIAR A MANUAL

  • Diseo De Controladores Digitales Informe Proyecto Final

    12

    % POTENCIA=> RESITENCIA

    MUESTRO% POTENCIA

    MUESTROTEMPERATURA

    MUESTROSET POINT

    A

    ESTA EN MANUALO AUTOMATICO?

    M

    DIF = SP - VAR

    NO

    C = 1? SI % POT = 0

    NO

    DIF > 20 CUENTAS?SI

    % POT = 100%

    % POT = DIF * 12

  • Diseo De Controladores Digitales Informe Proyecto Final

    13

    Detalles Del Programa: *Se realiz un programa estructurado. *Se implementaron subrutinas varias. *Interrupciones de PWM e Input Capture. *Se modulariz en secciones y en archivos separados para poder reutilizar el cdigo fcilmente. Subrutina de Barrer Teclado: Se llam a la subrutina desde el cuerpo principal del programa. Lo que hace esta subrutina es levantar el puerto y compararlo con el valor viejo del puerto que se tenia guardado en la pasada anterior. Si coinciden por un lapso de tiempo determindado se actualiza el valor en una variable llamada Teclas_Nuevo, con esto logramos hacer un pequeo filtro por soft de las teclas. Subrutina de vida: Se llam a la subrutina desde el cuerpo principal del programa. Esta subrutina lo que hace es decrementar unas variables y cuando llegan a cero cambian el valor de un bit del puerto, logrando una salida de vida que es muy til a la hora de realizar un programa para poder detectar si el programa se nos colg o no. Switch Case principal: Se encuentra en el lazo principal del programa y lo que hacemos es mirar constantemente si cambi el valor de la variable Teclas_Nuevo. Si ocurri esto es porque se toco una tecla, entonces analizamos que tecla se toco. Para ello realizamos un Switch Case que mira el valor de Teclas_Nuevo y salta a la subrutina adecuada segn este en manual o automtico. Para saber ello se declar una variable Fase que tiene la informacin de Manual o Auto. Por ejemplo, si se toc el pulsador de Subir y esta en automtico, entonces salta a la subrutina de incrementar SetPoint. Si estaba en Manual, entonces salta a la subrutina de

  • Diseo De Controladores Digitales Informe Proyecto Final

    14

    incrementar Potencia. Si se toca el pulsador de cambiar entre Manual o Auto lo que hacemos es cambiar el valor de la fase. Subrutinas de incrementar/decrementar SP o %Potencia: Son llamadas por el Switch Case principal y lo que hacen es cambiarle el valor a las variables Var_Pot, Var_SP. Subrutina de Control: Se llam a la subrutina desde el cuerpo principal del programa. Se fija la fase del programa, si esta en Manual deja el %Pot para que se modifique con los pulsadores. Si esta en Auto lo que hace es calcular la distancia de la variable de proceso con el Set Point y aplicar un %Pot proporcional a esa distancia. Por ejemplo, en Var_SP tengo el valor del SetPoint, en Var_Tmp tengo el valor de la variable de proceso entonces calculamos la diferencia haciendo

    Dif = Var_SP - Var_Tmp

    Si tuvimos Borrow quiere decir que la temperatura es mayor que el SetPoint, entonces:

    %Pot = 0

    Si no tenemos Borrow entonces nos fijamos si:

    Dif > 20 (cuentas)

    De ser as la temperatura esta a una distancia mayor de 10 C por debajo aproximadamente de mi Set Point, entonces aplicamos

    %Pot = 100%

    Si la diferencia se encuentra entre:

    0 < Dif < 20 (cuentas)

  • Diseo De Controladores Digitales Informe Proyecto Final

    15

    entonces hacemos la modulacin de fase calculando:

    %Pot = Dif *$12

    %Pot contiene un numero de cuentas proporcional al ancho del pulso del PWM que aplicamos para mover el Triac. Por ejemplo si %Pot = $80 estaremos aplicando un PWM con un ciclo de actividad del 50%. Nota: el $12 es un nmero que hay que ajustar cuando se cierre el lazo. Subrutina del conversor A/D: Esta subrutina es llamada por la subrutina de vida, porque no tiene mucho sentido tomar el valor de la temperatura muy seguido por tener una dinmica muy lenta. Solamente se configuro esta subrutina para que se guardara en Var_Tmp un valor proporcional a la temperatura. Como nuestro rango es de 50 a 150 C, Var_Tmp = 0 equivale a 50 C y Var_Tmp = $FF equivale a 150 C. Subrutina de envo de datos: Esta subrutina tambin es llamada por la subrutina de vida, porque tampoco tiene mucho sentido enviar datos rpidamente (para nuestro caso en particular). Los datos que se mandaron por el puerto serie fueron el valor de la temperatura, el Set Point y el %Pot. Estos datos fueron levantados por una pequea interfas hecha en Visual Basic y mostrados por pantalla. Interrupcin de Input Capture: Esta interrupcin es llamada por un mecanismo de Hard cada vez que se produce un flanco de subida o bajada en el pin que se encuentra configurada. Esto me esta indicando el cruce por cero de la seal de alterna. Lo que hacemos nosotros en esta interrupcin es deshabilitar el PWM para poder manejar el pin de salida y ponerlo a cero lgico.

  • Diseo De Controladores Digitales Informe Proyecto Final

    16

    Luego hacemos un escalamiento del %Pot para que se ajuste al ancho de nuestra seal de alterna y este ser el nmero de cuentas que le pondremos a la interrupcin del PWM para que cuando pase este tiempo se active la salida a uno lgico. Al final limpiamos los flags y habilitamos la interrupcin del PWM para que el mecanismo de hard tome de nuevo el control de nuestro pin de salida. Interrupcin de Output Compare: Esta interrupcin se configuro para que ponga en uno lgico mi salida cada vez que se activa. Cuando llegamos al valor de cuentas que le puso el Input Capture esta interrupcin se activa, pone mi salida en uno lgico. Nosotros solamente limpiamos los flags en esta interrupcin.

  • Diseo De Controladores Digitales Informe Proyecto Final

    17

    Caractersticas del Micro *Frecuencia interna del bus de 8MHz. *32 Kbytes de memoria flash. *512 bytes de memoria RAM. *Timer Interface Module (TIM) de 16bits, con entrada de captura, salida de comparacin y PWM. *8 canales de conversor A/D de 8bits. *Modulo generador de reloj compatible con cristal de 32KHz. *29 pines de propsito general de entrada/salida. *Entradas con Pullups configurables por pin. *10 mA de corriente de salida por pin. *Encapsulado de 40 pines. *Soporta lenguaje C.

  • Diseo De Controladores Digitales Informe Proyecto Final

    18

  • Diseo De Controladores Digitales Informe Proyecto Final

    19

    Conclusiones

    Este proyecto nos permiti utilizar casi todo lo que este micro nos brinda, como el conversor A/D, las interrupciones (captura y comparacin), PWM, perifrico SCI para comunicarnos, puertos de salida, entrada. Adems se trabajo con electrnica para poder amplificar la seal de la temperatura, mover la salida de potencia, comunicarse a travs del puerto serie, fuente, etc. Se lograron casi todas las metas que hacan a este proyecto un controlador de temperatura, menos obtener una buena seal de

  • Diseo De Controladores Digitales Informe Proyecto Final

    20

    modulacin de fase con el Triac, por lo cual no se pudo cerrar el lazo como se pensaba. Los logros fueron: *Adquirir un valor de temperatura con el sensor, amplificar la seal y capturarla con el conversor A/D. *Obtener una seal de PWM de salida en fase con la seal de alterna y que se modificara mediante unos pulsadores cuando este en Manual o automticamente si se encontraba en Automatico. *Funcionamiento correcto de la lgica de control creada. *Poder mandar los datos de temperatura, set point y % de potencia a travs del puerto serie. *Levantar los datos con una interfas realizada en Visual Basic que me muestra la temperatura, el set point y el % de potencia. Fracasos: *No se pudo cerrar el lazo debido al problema con el Triac de salida. Primeramente se prob con un BTA16 y no funcion. Luego se intento con un TIC206 pensando que era un problema de la corriente que se estaba manejando pero tampoco. Se cambiaron los valores de las resistencias pero no funcion. Por falta de tiempo no se pudo seguir investigando del porque de la falla. Se sugiere mirar con el osciloscopio la modulacin de fase en la parte de alta tensin a ver que es lo que esta ocurriendo. Mejoras: *Hacer manejo de un display para mostrar los datos adems de enviarlos a la PC. *Poner un conversor aparte de mas bits para poder tener una mejor resolucin de la temperatura. Ahora tenemos una resolucin de un grado aproximadamente. *Cambiar el triac por dos tiristores que no tienen problemas de apagado.

  • Diseo De Controladores Digitales Informe Proyecto Final

    21

    Anexo: Cdigo del programa: *************************************** *******CONTROL DE TEMPERATURA**** *******POR MODULACION DE FASE***** *************************************** *********REALIZADO: 01/12/07*********** *************************************** ;Definicion de ctes de pre-copilacion $SEtNOT EMULADOR $SETnot WATCH_DOG $SET CLOCK_8M $SETnot CLOCK_4M9 **************************************** **************************************** ;Definicion de ctes simbolicas RAM_Start EQU $0040 ROM_Start EQU $8100 Vector_Start EQU $FFDC **************************************** **************************************** ;Comienzo de la memoria RAM org RAM_Start **************************************** ;Archivos incluidos de variables y ctes

  • Diseo De Controladores Digitales Informe Proyecto Final

    22

    $include 'gpgtregs.inc' $include 'SCI_Var.asm' $include 'Variables.asm' $include 'TIM_var.asm' **************************************** **************************************** ;Definicion de variables y ctes **************************************** End_RAM: **************************************** ;Comienzo de la memoria ROM org ROM_Start **************************************** ;Archivos incluidos de funciones $include 'SCI_Fun.asm' $include 'Funciones.asm' $include 'ADC_Fun.asm' $include 'TIM.asm' **************************************** **************************************** ;Inicializacion del main Main_Init: mov #$FF,DDRD mov #$F8,DDRC mov #$FE,ALTO mov #$FE,BAJO

  • Diseo De Controladores Digitales Informe Proyecto Final

    23

    mov #$01,Var_Tmp mov #$C8,Var_SP mov #$80,Var_Pot mov #$01,Var_SCI mov #$01,Rot_SCI mov #$FF,Ret_Tec_Val mov #$40,Ret1_Val mov Ret1_Val,Ret1 mov #$40,Ret2_Val mov Ret2_Val,Ret2 mov ALTO,Bandera mov BAJO,Bandera+1 mov #$20,Dif_Valor mov #$08,Dif_Factor mov #$FF,Ret3 clr PORTD clr PORTC clr Fase clr Dif RTS ***************************************** ***************************************** ;Configuracion del Micro Main_Prog: RSP ; Reset the low byte of the stack pointer to ; the top of the stack page

  • Diseo De Controladores Digitales Informe Proyecto Final

    24

    $IF WATCH_DOG MOV #$00,config1 ; Enable COP $ELSEIF MOV #$01,config1 ; disable COP $ENDIF mov #$03,config2 ; For GP32 - SCI clock source is Bus $IF CLOCK_8M ;------------------------ Valores para el Clock Generator Module ; fBUS=8Mhz ; --------------------------------------- bclr 5,PCTL ; PLLON=0 mov #$02,PCTL ; P=0 ; E=2 mov #$D1,PMSL ; N=3D1 mov #$03,PMSH ; mov #$D0,PMRS ; L=D0 bset 7,PBWC ; Auto = 1 bset 5,PCTL ; PLLON=1 bset 4,PCTL ; BCS=1 $ENDIF $IF CLOCK_4M9 ;------------------------ Valores para el Clock Generator Module ; fBUS=4.9152Mhz --------------------------------------- bclr 5,PCTL ; PLLON=0 mov #$02,PCTL ; P=0 ; E=2 mov #$58,PMSL ; N=258 mov #$02,PMSH ; mov #$80,PMRS ; L=80 bset 7,PBWC ; Auto = 1

  • Diseo De Controladores Digitales Informe Proyecto Final

    25

    bset 5,PCTL ; PLLON=1 bset 4,PCTL ; BCS=1 $ENDIF jsr Main_Init jsr Init_SCI jsr ADC_Init jsr Init_TIM cli ******************************************* ******************************************* ;Lazo Principal del programa Main_loop: jsr Varrido jsr Vida Case_Principal: lda Teclas_Nuevo cmp #$01 beq Man_Auto cmp #$02 beq Incrementa cmp #$04 beq Decrementa bra Case_Principal_01 ;Cambia de Manual a Auto o viceversa Man_Auto: lda Fase cmp #Man bne Man_Auto_01 mov #Auto,Fase

  • Diseo De Controladores Digitales Informe Proyecto Final

    26

    bra Man_Auto_02 Man_Auto_01: mov #Man,Fase Man_Auto_02: bra Case_Principal_01 ;Incrementa el SP o %Pot Incrementa: lda Fase cmp #Man bne Incrementa_01 jsr Incre_Pot bra Incrementa_02 Incrementa_01: jsr Incre_SP Incrementa_02: bra Case_Principal_01 ;Decrementa el SP o %Pot Decrementa: lda PortD eor #$10 sta PortD lda Fase cmp #Man

  • Diseo De Controladores Digitales Informe Proyecto Final

    27

    bne Decrementa_01 jsr Decre_Pot bra Decrementa_02 Decrementa_01: jsr Decre_SP Decrementa_02: Case_Principal_01: ********************************************* jsr Control jsr Deshab jsr Pull_SCI ;Rota variables para SCI ********************************************* ;STA $FFFF ; Reset the COP BRA Main_loop dummy_isr: rti ; return ********************************************** ;Vector Interrupciones org Vector_Start dw dummy_isr ; Time Base Vector dw dummy_isr ; ADC Conversion Complete

  • Diseo De Controladores Digitales Informe Proyecto Final

    28

    dw dummy_isr ; Keyboard Vector dw dummy_isr ; SCI Transmit Vector dw dummy_isr ; SCI Receive Vector dw dummy_isr ; SCI Error Vector dw dummy_isr ; SPI Transmit Vector dw dummy_isr ; SPI Receive Vector dw dummy_isr ; TIM2 Overflow Vector dw dummy_isr ; TIM2 Channel 1 Vector dw dummy_isr ; TIM2 Channel 0 Vector dw dummy_isr ; TIM1 Overflow Vector dw ICap_T1C1 ; TIM1 Channel 1 Vector dw OComp_T1C0 ; TIM1 Channel 0 Vector dw dummy_isr ; ICG/CGM Vector dw dummy_isr ; ~IRQ1 Vector dw dummy_isr ; SWI Vector dw Main_Prog ; Reset Vector ************************************* *************FUNCIONES************* ************************************* ************************************* ;Led de Vida Vida: lda Bandera bne Vida_00 lda Bandera+1 bne Vida_01 mov Alto,Bandera mov Bajo,Bandera+1 dec Bandera+2 Vida_00: dec Bandera bne Vida_02

  • Diseo De Controladores Digitales Informe Proyecto Final

    29

    Vida_01: dec Bandera+1 Vida_02: lda Bandera+2 bne Vida_03 lda PortC eor #$10 sta PortC jsr ADC_PTB3 jsr SCI_Enviar Vida_03: rts ************************************* ;************************************ ;Varrido de teclas con filtro Varrido: Lda PortC coma and #Msk_PortC ldx #Msk_PortC cmpa PortC_Viejo bne Varrido_10 dec Ret_Tec Varrido_10: Sta PortC_Viejo Ldx Ret_Tec Bne Varrido_20

  • Diseo De Controladores Digitales Informe Proyecto Final

    30

    sta Teclas_Nuevo ldx Ret_Tec_Val stx Ret_Tec Varrido_20: lda Teclas_Viejo ;detecta flanco coma ; subida and Teclas_Nuevo Varrido_30: lda Teclas_Nuevo sta Teclas_Viejo rts ******************************************* ;Incrementa Pot Incre_Pot: dec Ret1 bne Incre_Pot_01 mov Ret1_Val,Ret1 dec Ret2 bne Incre_Pot_01 mov Ret2_Val,Ret2 inc Var_Pot bne Incre_Pot_01 dec Var_Pot Incre_Pot_01: rts ******************************************** ******************************************* ;Incrementa SP

  • Diseo De Controladores Digitales Informe Proyecto Final

    31

    Incre_SP: dec Ret1 bne Incre_SP_01 mov Ret1_Val,Ret1 dec Ret2 bne Incre_SP_01 mov Ret2_Val,Ret2 inc Var_SP bne Incre_SP_01 dec Var_SP Incre_SP_01: rts ******************************************** ******************************************* ;Decrementa Pot Decre_Pot: dec Ret1 bne Decre_Pot_01 mov Ret1_Val,Ret1 dec Ret2 bne Decre_Pot_01 mov Ret2_Val,Ret2 dec Var_Pot bne Decre_Pot_01 inc Var_Pot Decre_Pot_01: rts ******************************************** ******************************************* ;Decrementa SP

  • Diseo De Controladores Digitales Informe Proyecto Final

    32

    Decre_SP: dec Ret1 bne Decre_SP_01 mov Ret1_Val,Ret1 dec Ret2 bne Decre_SP_01 mov Ret2_Val,Ret2 dec Var_SP bne Decre_SP_01 inc Var_SP Decre_SP_01: rts ******************************************** ******************************************** ;Control Control: lda Fase cmp #Man beq Control_Fin lda Var_SP sub Var_Tmp sta Dif bcc Control_01 ;quito Pot si me pase del SP mov #$02,Var_Pot bra Control_Fin Control_01: lda Dif sub Dif_Valor bhi Control_02 lda Dif

  • Diseo De Controladores Digitales Informe Proyecto Final

    33

    ldx Dif_Factor mul sta Var_Pot bra Control_Fin Control_02: mov #$FE,Var_Pot Control_Fin: rts ************************************* *************VARIABLES************* ************************************* Bandera DB $00,00,00 Msk_Bandera EQU $10 Alto DB $00 Bajo DB $00 Var_Tmp DB $00 Var_SP DB $00 Var_Pot DB $00 Var_SCI DB $00 Rot_SCI DB $00 PortC_Viejo DB $00 Ret_Tec DB $00 Teclas_Nuevo DB $00 Ret_Tec_Val DB $00 Teclas_Viejo DB $00 Msk_PortC EQU $07 Fase DB $00 Auto EQU $01 Man EQU $00 Ret1 DB $00 Ret1_Val DB $00

  • Diseo De Controladores Digitales Informe Proyecto Final

    34

    Ret2 DB $00 Ret2_Val DB $00 Dif DB $00 Dif_Valor DB $00 Dif_Factor DB $00 Ret3 DB $00 CTE DB $00,00 ************************************* ************************************* ********FUNCIONES DEL SCI********** ************************************* ************************************* ;Inicializacion del SCI Init_SCI: $IF CLOCK_4M9 MOV #$21,SCBR ;COMO TENEMOS 4.9152 MHz PARA QUE NOS DE 9600 BAUDIOS SE TUBO QUE PONER $ENDIF $IF CLOCK_8M MOV #$30,SCBR ;COMO TENEMOS 8 MHz PARA QUE NOS DE 9600 BAUDIOS SE TUBO QUE PONER $ENDIF BSET $06,SCC1 ; Habilita el SCI MOV #$08,SCC2 LDA SCS1 ; Lee el registro de estado para ; poder transmitir el primer caracter clr SCDR

  • Diseo De Controladores Digitales Informe Proyecto Final

    35

    rts ***************************************** ***************************************** ;Enviar Datos por el SCI SCI_Enviar: brclr $06,SCS1,SCI_Enviar_02 lda Rot_SCI cmp #$03 bne SCI_Enviar_01 mov #$00,Rot_SCI SCI_Enviar_01: inc Rot_SCI lda SCS1 lda Var_SCI sta SCDR bset $03,SCC2 ;Habilita SCI SCI_Enviar_02: rts ****************************************** ******************************************** ;Deshabilita Envio de datos Deshab: brclr $07,SCS1,Deshab_01 clr SCDR bclr $03,SCC2 ;Deshabilita SCI Deshab_01:

  • Diseo De Controladores Digitales Informe Proyecto Final

    36

    rts ********************************************* ********************************************* ;Pulling de variables a enviar por el SCI Pull_SCI: lda Rot_SCI cmp #$01 beq Pull_SCI_01 cmp #$02 beq Pull_SCI_02 cmp #$03 beq Pull_SCI_03 bra Pull_SCI_04 Pull_SCI_01: mov Var_Tmp,Var_SCI bra Pull_SCI_04 Pull_SCI_02: mov Var_SP,Var_SCI bra Pull_SCI_04 Pull_SCI_03: mov Var_pot,Var_SCI Pull_SCI_04: rts ************************************* ************************************* ********FUNCIONES DEL ADC********

  • Diseo De Controladores Digitales Informe Proyecto Final

    37

    ************************************* ************************************* ;Inicio del ADC ADC_Init: mov #$00,ADCLK mov #$03,ADSCR rts ************************************* ;Convierte la entrada PTB3 a un valor digital ADC_PTB3: brclr $07,ADSCR,ADC_PTB3_01 mov ADR,Var_Tmp mov #$00,ADCLK mov #$03,ADSCR ADC_PTB3_01: Rts ************************************* ****************TIM***************** ************************************* ************************************* ; Inicio del TIM Init_TIM: mov #{TSTOP|TRST|PS1|PS0},T1SC ; write el prescaler, stop the counter an reset, asigna tiempo

  • Diseo De Controladores Digitales Informe Proyecto Final

    38

    lda #{CHxIE|ELSxA|ELSxB} ; Input capture in rising o falling edge sta T1SC1 ; Timer 1 canal 1 lda #{CHxIE|MSxA|ELSxA|ELSxB} ; Output Compare sta T1SC0 ; Timer 1 canal 0 lda T1SC and #$FF^TSTOP ; saca el STOP sta T1SC rts ;-----------------------------------------------------------------------Init_TIM ------- ; Interrupcin de input capture del timer 1 canal 1 ICap_T1C1: lda T1SC0 and #$F3 ; Output Compare sta T1SC0 ; Timer 1 canal 0 bclr $04,PortD lda T1SC0 eor #$0C sta T1SC0 lda Var_pot psha lda #$FF sub Var_pot sta Var_pot bne ICap_T1C1_01 inc Var_pot ICap_T1C1_01:

  • Diseo De Controladores Digitales Informe Proyecto Final

    39

    ldhx #$26FF ;Parte alta y divisor lda #$64 ;Parte Baja div ldx Var_pot mul sta CTE+1 stx CTE lda T1CH1L ; CUANDO SALTA EL INPUT ADD CTE+1 ; EL VALOR DEL CANAL 1 + UNA STA T1CH0L ; SE AGREGA EN EL CANAL 0 DEL LDA T1CH1H ; OUTPUT COMPARE ADC CTE STA T1CH0H lda T1SC0 and #$F3 ; Output Compare sta T1SC0 ; Timer 1 canal 0 bclr $04,PortD lda T1SC0 eor #$0C sta T1SC0 ICap_T1C1_02: lda T1CH0L sta T1CH0L lda T1CH1L ; habilita input capture LDA T1SC1 ;LIMPIA EL FLAG DEL Input Capture AND #$FF^CHxF ; STA T1SC1 ;

  • Diseo De Controladores Digitales Informe Proyecto Final

    40

    ICap_T1C1_04: pula sta Var_pot rti ;-------------------------------------------------------------------------- INT_IComp -------- ;------------------------------------------------------------------------------------ ; Interrupcin de output compare del timer 1 canal 0 OComp_T1C0: LDA T1CH0L STA T1CH0L OComp_T1C0_00: OComp_T1C0_02: LDA T1SC0 ;LIMPIA EL FLAG DEL Output AND #$FF^CHxF ; STA T1SC0 ; rti ************************************* ********VARIABLES DEL TIM********* ************************************* ************************************* TSTOP EQU $20 TRST EQU $10 MSxB EQU $20 MSxA EQU $10 TOV0 EQU $02

  • Diseo De Controladores Digitales Informe Proyecto Final

    41

    TOIE EQU $40 ELSxA EQU $04 ELSxB EQU $08 PS0 EQU $01 PS1 EQU $02 PS2 EQU $04 CHxF EQU $80 CHxIE EQU $40 T1MOD EQU $0023 T2MOD EQU $002E TCH0 EQU $0026 TCH1 EQU $0029 TCH1L EQU $0034 ****************************************