• No se han encontrado resultados

************************************************************************************************* * Instituto Tecnológico y de Estudios Superiores de Monterrey Campus Monterrey * * Departamento de Ingeniería Eléctrica * * Maestría en Ciencias con Especialidad en Ingeniería Electrónica (Sistemas Electrónicos)(MSE-E)* * Programa COCA.ASM (Cálculo para la Obtención de Componentes Armónicas, usando referencia [1]) * * Autor: Ing. José Luis Elizondo Carrales * ************************************************************************************************* INCLUDE 'EQUATES.F16' ; Tabla de etiquetas para registros

INCLUDE 'VECTORS.ASM' ; Inicialización de vectores ORG $80

DW IC1_ISR ; Si IC1 se activa salta a IC1_ISR

ORG $0200 ; El programa inicia después la tabla de vectores

************************************************************************************************* * Rutina de inicialización * ************************************************************************************************* INCLUDE 'INIT_F16.ASM' ; Inicializa EK=F, XK=1, YK=1, ZK=1

; Pone el reloj a 16.78 MHz, deshabilita COP ; Pone 1K de RAM interna en $10000

; Pone la pila en el banco 1 de IRAM (SK=1, SP=03FE)

************************************************************************************************* * Definición de constantes utilizadas en el programa * ************************************************************************************************* dir_base_var EQU $1200 ; Dirección base de variables

dir_vec_Ua EQU $1600 ; Dirección de inicio del vector de voltaje fase A dir_vec_Ia EQU $1800 ; Dirección de inicio del vector de corriente fase A dir_vec_Pa EQU $1A00 ; Dirección de inicio del vector de potencia fase A dir_vec_Ub EQU $1C00 ; Dirección de inicio del vector de voltaje fase B dir_vec_Ib EQU $1E00 ; Dirección de inicio del vector de corriente fase B dir_vec_Pb EQU $2000 ; Dirección de inicio del vector de potencia fase B dir_vec_Uc EQU $2200 ; Dirección de inicio del vector de voltaje fase C dir_vec_Ic EQU $2400 ; Dirección de inicio del vector de corriente fase C dir_vec_Pc EQU $2600 ; Dirección de inicio del vector de potencia fase C dir_inv_N1 EQU $120E ; Dirección de inicio de la variable inv_N1

dir_inv_N2 EQU $1210 ; Dirección de inicio de la variable inv_N2 Vec_copy_U EQU $6000 ; Dirección de inicio del vector copy_U Vec_copy_I EQU $6200 ; Dirección de inicio del vector copy_I dir_Va EQU $122E ; Dirección de la variable Va

dir_Vb EQU $1230 dir_Vc EQU $1232 dir_Ia EQU $1234 dir_Ib EQU $1236 dir_Ic EQU $1238 dir_Pa EQU $123A dir_Pb EQU $123C dir_Pc EQU $123E dir_THDva EQU $1240 dir_THDvb EQU $1242 dir_THDvc EQU $1244 dir_THDia EQU $1246 dir_THDib EQU $1248 dir_THDic EQU $124A

*--- *- Direcciones de variables para el COCA 3ra *--- dir_U3a EQU $124E ; Dirección de la variable que contiene la magnitud ; de la tercera armónica de voltaje de A dir_U3b EQU $1250 ; Dirección de la variable que contiene la magnitud ; de la tercera armónica de voltaje de B dir_U3c EQU $1252 ; Dirección de la variable que contiene la magnitud ; de la tercera armónica de voltaje de C dir_VPhU3a EQU $1254 ; Dirección de la variable que contiene la componente vertical

dir_VPhU3c EQU $1258 ; Dirección de la variable que contiene la componente vertical ; de la tercera armónica de voltaje de C dir_HPhU3a EQU $125A ; Dirección de la variable que contiene la componente horizontal ; de la tercera armónica de voltaje de A dir_HPhU3b EQU $125C ; Dirección de la variable que contiene la componente horizontal ; de la tercera armónica de voltaje de B dir_HPhU3c EQU $125E ; Dirección de la variable que contiene la componente horizontal ; de la tercera armónica de voltaje de C *--- *--- *- Direcciones de variables para el COCA 5ta *--- dir_U5a EQU $1260 ; Dirección de la variable que contiene la magnitud ; de la quinta armónica de voltaje de A dir_U5b EQU $1262 ; Dirección de la variable que contiene la magnitud ; de la quinta armónica de voltaje de B dir_U5c EQU $1264 ; Dirección de la variable que contiene la magnitud ; de la quinta armónica de voltaje de C dir_VPhU5a EQU $1266 ; Dirección de la variable que contiene la componente vertical ; de la quinta armónica de voltaje de A dir_VPhU5b EQU $1268 ; Dirección de la variable que contiene la componente vertical ; de la quinta armónica de voltaje de B dir_VPhU5c EQU $126A ; Dirección de la variable que contiene la componente vertical ; de la quinta armónica de voltaje de C dir_HPhU5a EQU $126C ; Dirección de la variable que contiene la componente vertical ; de la quinta armónica de voltaje de A dir_HPhU5b EQU $126E ; Dirección de la variable que contiene la componente horizontal ; de la quinta armónica de voltaje de B dir_HPhU5c EQU $1270 ; Dirección de la variable que contiene la componente horizontal ; de la quinta armónica de voltaje de C *--- *--- *- Direcciones de variables para el COCA 7ma *--- dir_U7a EQU $1272 ; Dirección de la variable que contiene la magnitud ; de la séptima armónica de voltaje de A dir_U7b EQU $1274 ; Dirección de la variable que contiene la magnitud ; de la séptima armónica de voltaje de B dir_U7c EQU $1276 ; Dirección de la variable que contiene la magnitud ; de la séptima armónica de voltaje de C dir_VPhU7a EQU $1278 ; Dirección de la variable que contiene la componente vertical ; de la séptima armónica de voltaje de A dir_VPhU7b EQU $127A ; Dirección de la variable que contiene la componente vertical ; de la séptima armónica de voltaje de B dir_VPhU7c EQU $127C ; Dirección de la variable que contiene la componente vertical ; de la séptima armónica de voltaje de C dir_HPhU7a EQU $127E ; Dirección de la variable que contiene la componente horizontal ; de la séptima armónica de voltaje de A dir_HPhU7b EQU $1280 ; Dirección de la variable que contiene la componente horizontal ; de la séptima armónica de voltaje de B dir_IPhU7c EQU $1282 ; Dirección de la variable que contiene la componente horizontal ; de la séptima armónica de voltaje de C *--- dir_PASEL EQU $1446 ; Dirección del parámetro selector de HIPWM

OFF_Va EQU $0000 ; Estos son los Offsets con respecto a la Dirección OFF_Ia EQU $0200 ; del vector base ($1600) para almacenar los vectores OFF_Vb EQU $0600 ; de voltaje y corriente de cada una de las fases OFF_Ib EQU $0800

OFF_Vc EQU $0C00 OFF_Ic EQU $0E00

TIC_NUM EQU $00 ; Offsets para localización de variables a partir de DATA_ACQ EQU $01 ; la dirección base de variables ($1200)

Time1 EQU $02 Time2 EQU $04 phase EQU $06 N EQU $08 conta_N EQU $0A cont EQU $0C inv_N1 EQU $0E inv_N2 EQU $10 factor_N1 EQU $12 factor_N2 EQU $14 num_ite EQU $16 j EQU $18 Yn_1 EQU $1A

vector_U EQU $2A vector_I EQU $2C Va EQU $2E Vb EQU $30 Vc EQU $32 Ia EQU $34 Ib EQU $36 Ic EQU $38 Pa EQU $3A Pb EQU $3C Pc EQU $3E THDva EQU $40 THDvb EQU $42 THDvc EQU $44 THDia EQU $46 THDib EQU $48 THDic EQU $4A period EQU $4C

*--- * Código para el COCA 3ra

*--- U3a EQU $4E U3b EQU $50 U3c EQU $52 VPhU3a EQU $54 VPhU3b EQU $56 VPhU3c EQU $58 HPhU3a EQU $5A HPhU3b EQU $5C HPhU3c EQU $5E *--- *--- * Código para el COCA 5ta

*--- U5a EQU $60 U5b EQU $62 U5c EQU $64 VPhU5a EQU $66 VPhU5b EQU $68 VPhU5c EQU $6A HPhU5a EQU $6C HPhU5b EQU $6E HPhU5c EQU $70 *--- *--- * Código para el COCA 7ma

*--- U7a EQU $72 U7b EQU $74 U7c EQU $76 VPhU7a EQU $78 VPhU7b EQU $7A VPhU7c EQU $7C HPhU7a EQU $7E HPhU7b EQU $80 IPhU7c EQU $82 *--- Reg_V EQU $84 Reg_I EQU $86 Reg_P EQU $88 vector_P EQU $8A CRU EQU $8C CIU EQU $8E CRI EQU $90 CII EQU $92 U1 EQU $94 I1 EQU $96 Reg_THDv EQU $98 Reg_THDi EQU $9A I2 EQU $9C vec_alfa_r EQU $9E vec_alfa_i EQU $A0 vec_temp1 EQU $A2 vec_temp2 EQU $A4

*--- * Código para el COCA 3ra

vec_temp3 EQU $AA vec_temp4 EQU $AC U3 EQU $AE VPhU3 EQU $B0 HPhU3 EQU $B2 CRU3 EQU $B4 CIU3 EQU $B6 Reg_U3 EQU $B8

Reg_VPhU3 EQU $BA Reg_HPhU3 EQU $BC

*--- *--- * Código para el COCA 5ta

*--- vec_alfa_5 EQU $BE vec_beta_5 EQU $C0 vec_temp5 EQU $C2 vec_temp6 EQU $C4 U5 EQU $C6 VPhU5 EQU $C8 HPhU5 EQU $CA CRU5 EQU $CC CIU5 EQU $CE Reg_U5 EQU $D0

Reg_VPhU5 EQU $D2 Reg_HPhU5 EQU $D4

*--- *--- * Código para el COCA 7ma

*--- vec_alfa_7 EQU $D6

vec_beta_7 EQU $D8 vec_temp7 EQU $DA vec_temp8 EQU $DC U7 EQU $DE VPhU7 EQU $E0 HPhU7 EQU $E2 CRU7 EQU $E4 CIU7 EQU $E6

Reg_U7 EQU $E8 Reg_VPhU7 EQU $EA Reg_HPhU7 EQU $EC

*--- ************************************************************************************************* * Se inicializan los acumuladores, el registro AM y se configuran los registros de extensión * * para trabajar en la página cero. Se inicializan los registros de los módulos: * * Analog-to-Digital Converter (ADC), General-Purpose Timer (GPT) y Queued Serial Module (QSM) * ************************************************************************************************* SETUP clrd ; Clear D $0000 -> D

; Accumulator D (A:B)

tbxk ; Transfer B to XK (B[3:0]) -> XK ; Index register X extension field (XK) tbyk ; Transfer B to YK (B[3:0]) -> YK ; Index register Y extension field (YK) tbzk ; Transfer B to ZK (B[3:0]) -> ZK ; Index register Z extension field (ZK) tdmsk ; Transfer D to XMSK : YMSK

; (D[15:8]) -> X MASK (D[7:0]) -> Y MASK ; Modulo addressing index register X mask (XMSK) ; Modulo addressing index register Y mask (YMSK) clrm ; Clear AM $000000000 -> AM[35:0]

; Accumulator M (AM)

SETUP_ADQ std ADCMCR ; Store D (D) -> M : M + 1

; ADC Module Configuration Register (ADCMCR) ; ADCMCR está en $YFF700

; (D) -> $YFF700 : $YFF700 + 1 ; Se activa módulo ADC (STOP=0)

ldd #$0083 ; Load D (M : M + 1) -> D ; (#$0083 : M + 1) -> D

std ADCTL0 ; Store D (D) -> M : M + 1 ; ADC Control Register 0 (ADCTL0) ; ADCTL0 están en $YFF70A

; (D) -> $YFF70A : $YFF70A + 1 ; ADCTL0 = $0083

; Se pone al GPT en modo supervisor ; y se le da prioridad de 3

ldd #$1740 ; Load D (M : M + 1) -> D ; (#$1740 : M + 1) -> D

std GPTICR ; Store D (D) -> M : M + 1

; GPT Interrupt Configuration Register(GPTICR) ; GPTICR está en $YFF904

; (D) -> $YFF904 : $YFF904 + 1 ; GPTICR = $1740

; Se le da IC1 la máxima prioridad en el GPT ; y se coloca el VBA=4

ldaa #$02 ; Load A (M) -> A ; (#$02) -> A

staa TCTL2 ; Store A (A) -> M

; Timer Control Register 2 (TCTL2) ; TCTL1/TCTL2 está en $YFF91E ; (A) -> $YFF91E

; Se configura para que trabaje ; con transiciones positivas SETUP_QSM ldd #55 ;

std SCCR0 ; SCI Control 0 Register (SCCR0) ; SCCR0 está en $YFFC08

; se configura el baud rate=9600 ldd #$0008 ; D = 8

std SCCR1 ; TE = 1 (habilita transmisión) primer ldd SCSR ; D = SCSR

tstd ; D = 0?

beq primer ; si TDRE == 0 entonces salta a loop5 ldab #$12 ; B = Byte inicial para HIPWM

std SCDR ; se envía Byte inicial para HIPWM

*************************************************************************** * Esta es la rutina principal MAIN * *************************************************************************** MAIN:

jsr ADC_CONV ; Realiza adquisición de los 6 canales jsr COPY_VEC ; Realiza una copia del vector U y vector I jsr SETUP_VAR ; Configura variables según valor de N jsr CALC_PAR ; Realiza el calculo de parámetros jsr CALC_PERIOD ; Calcula el periodo

jsr SEND_REG ; Envía los registros por el serial jmp MAIN ; inicia un nuevo ciclo de medición jmp FIN

*********************** S U B R U T I N A S ***************************** *************************************************************************** * Rutina de servicio de interrupción al modulo GPT cuando IC1 detecta * * transición válida (transiciones positivas) * *************************************************************************** IC1_ISR: ldd #$0070 ; Se inician las conversiones en el

std ADCTL1 ; modulo ADC

ldx #dir_base_var ; IX= Dirección base de variables inc TIC_NUM,X ; TIC_NUM=TIC_NUM+1

ldaa #$01 ; A=1 staa DATA_ACQ,X ; DATA_ACQ=1 cmpa TIC_NUM,X ; TIC_NUM=1 ?

bge GET_TIC ; Si TIC_NUM<=1 salta a MEASURE clr TIC_NUM,X ; TIC_NUM=0

clr DATA_ACQ,X ; DATA_ACQ=0 (False)

ldd #$0001 ; Se deshabilita la interrupción IC1 y se std TMSK1 ; coloca el divisor de frecuencia en 8 GET_TIC lde TIC1 ; E=TIC1

ldd Time1,X ; D=Time1 std Time2,X ; Time2=Time1 ste Time1,X ; Time1=TIC1

bclr TFLG1,#$01 ; Se limpia la bandera de IC1 rti

FIN:

BDM BGND

*************************************************************************** * Rutina que se encarga de realizar la conversión (ADC) y almacenar los * * valores en cada uno de los vectores correspondientes en memoria * *************************************************************************** ADC_CONV: bclr TFLG1,#$01 ; Se limpia la bandera de IC1

ldd #$0101 ; Se habilita la interrupción IC1 y se std TMSK1 ; coloca el divisor de frecuencia en 8 wai ; Se espera hasta recibir interrupción ldx #dir_base_var ; IX= Dirección base de las variables

andb #$80 ; CCF7=1 ?

beq SET_CCF ; Si CCF7=0 salta a END_CONV ldaa #$01 ; A=1

cmpa DATA_ACQ,X ; DATA_ACQ=1 ?

bne RETURN ; Si DATA_ACQ<>1 salta a SETUP_VAR ldd LJSRR2 ; Se guardan los registros del

std OFF_Va,Y ; convertidor (ADC) a las Direcciones de ldd LJSRR3 ; los vectores de voltaje y corriente std OFF_Ia,Y ; de cada una de las fases (A,B,C) ldd LJSRR4 std OFF_Vb,Y ldd LJSRR5 std OFF_Ib,Y ldd LJSRR6 std OFF_Vc,Y ldd LJSRR7 std OFF_Ic,Y

incw N,X ; N=N+1 (Contador de numero de muestras) ldab #$02 ; B=2

aby ; IY=IY+2

bra SET_CCF ; Si DATA_ACQ=1 salta a SET_CCF RETURN rts

*************************************************************************** * Rutina que realiza la copia del vector de voltaje y de corriente * * a la dirección vec_copy. El vector a copiar es el que se defina * * en la variable phase_sel * *************************************************************************** COPY_VEC: ldz #dir_base_var ; IZ= Dirección base de variables

clrw num_byte,Z ; num_byte=0 ldaa #$01 ; A=1 ldab #$02 ; B=2

cmpa phase_sel,Z ; phase_sel=1?

beq faseA ; Si phase_sel=1 salta a la etiqueta cmpb phase_sel,Z ; phase_sel=2?

beq faseB ; Si phase_sel=2 salta a la etiqueta bra faseC ; Salta a la etiqueta

faseA ldx #dir_vec_Ua ; IX= Dirección de inicio del vector Ua lde #dir_vec_Ua ; E = Dirección de inicio del vector Ua bra COPY ; Envía los vectores Ua,Ia

faseB ldx #dir_vec_Ub ; IX= Dirección de inicio del vector Ub lde #dir_vec_Ub ; E= Dirección de inicio del vector Ub bra COPY ; Envía los vectores Ub,Ib

faseC ldx #dir_vec_Uc ; IX= Dirección de inicio del vector Uc lde #dir_vec_Uc ; E = Dirección de inicio del vector Uc *** Se copia el vector de voltaje ***

COPY ldy #Vec_copy_U ; IY= Dirección de inicio del vector copy_U loop8 ldd 0,X ; D = [IX]

std 0,Y ; [IY] = D aix #2 ; IX = IX+2 aiy #2 ; IY = IY+2

incw num_byte,Z ; num_byte=num_byte+1 ldd num_byte,Z ; D=num_byte

cpd N,Z ; D=N?

bne loop8 ; Si A<>N salta a loop8 clrw num_byte,Z ; num_byte=0

adde #$200 ; E = E + $200 xgex ; IX<=>E *** Se copia el vector de corriente ***

ldy #Vec_copy_I ; IY = Dirección de inicio del vector copy loop9 ldd 0,X ; D = [IX]

std 0,Y ; [IY] = D aix #2 ; IX = IX+2 aiy #2 ; IY = IY+2

incw num_byte,Z ; num_byte=num_byte+1 ldd num_byte,Z ; D=num_byte

cpd N,Z ; D=N?

bne loop9 ; Si A<>N salta a loop9 clrw num_byte,Z

rts

*************************************************************************** * Rutina que se encarga de inicializar las variables inv_N1,inv_N2, * * factor_N1, factor_N2, asi como las Direcciones de los vectores alfa_r y * * alfa_i dependiendo del valor de N * ***************************************************************************

ldaa #255 ; A=255 sba ; A=255-N ldab #$0A ; B=10 mul ; D=A*B tde ; E=D ldd E,X ; D=[IX+E]

std inv_N1,X ; Se guardan en las variables adde #02 ; inv_N1,inv_N2,factor_N1,factor_N2 ldd E,X ; los valores correspondientes de la std inv_N2,X ; tabla de valores (LOT) dependiendo adde #02 ; del valor de N

ldd E,X std factor_N1,X adde #02 ldd E,X std factor_N2,X adde #02 ldd E,X std vec_alfa_r,X addd #$200 std vec_temp1,X addd #$200 std vec_alfa_i,X addd #$200 std vec_temp2,X *--- *- Código para el COCA 3ra

*--- adde #$34 ldd E,X std vec_alfa_3,X addd #$200 std vec_temp3,X addd #$200 std vec_beta_3,X addd #$200 std vec_temp4,X *--- *--- *- Código para el COCA 5ta

*--- adde #$3C ldd E,X std vec_alfa_5,X addd #$200 std vec_temp5,X addd #$200 std vec_beta_5,X addd #$200 std vec_temp6,X *--- *--- *- Código para el COCA 7ma

*--- adde #$3C ldd E,X std vec_alfa_7,X addd #$200 std vec_temp7,X addd #$200 std vec_beta_7,X addd #$200 std vec_temp8,X *--- rts *************************************************************************** * Rutina que realiza el cálculo de los parámetros V,I,P,THDv,THDi de * * las tres fases (A,B,C) * *************************************************************************** CALC_PAR:

LOOP_PH ldz #dir_base_var ; IZ= Dirección base de variables inc phase,Z ; phase=phase+1

ldaa #01 ; A=1 ldab #02 ; B=2 cmpa phase,Z ; phase=1 ?

PHASE_A ldd #dir_vec_Ua ; D= Dirección del vector Ua std vector_U,Z ; vector_U= D

ldd #dir_vec_Ia ; D= Dirección del vector Ia std vector_I,Z ; vector_I= D

ldd #dir_vec_Pa ; D= Dirección del vector Pa std vector_P,Z ; vector_P= D

*--- *- Código para el COCA 3ra

*--- ldd #dir_U3a std Reg_U3,Z ldd #dir_VPhU3a std Reg_VPhU3,Z ldd #dir_HPhU3a std Reg_HPhU3,Z *--- *--- *- Código para el COCA 5ta

*--- ldd #dir_U5a std Reg_U5,Z ldd #dir_VPhU5a std Reg_VPhU5,Z ldd #dir_HPhU5a std Reg_HPhU5,Z *--- *--- *- Código para el COCA 7ma

*--- ldd #dir_U7a std Reg_U7,Z ldd #dir_VPhU7a std Reg_VPhU7,Z ldd #dir_HPhU7a std Reg_HPhU7,Z *--- ldd #dir_Va ; D=dir_Va std Reg_V,Z ; Reg_V=D ldd #dir_Ia ; D=dir_Va std Reg_I,Z ; Reg_I=D ldd #dir_Pa ; D=dir_Pa std Reg_P,Z ; Reg_P=D ldd #dir_THDva ; D=dir_THDva std Reg_THDv,Z ; Reg_THDv=D ldd #dir_THDia ; D=dir_THDia std REG_THDi,Z ; Reg_THDi=D jmp GO_DP ; Salta a GO_DP

PHASE_B ldd #dir_vec_Ub ; D= Dirección del vector Ub std vector_U,Z ; vector_U= D

ldd #dir_vec_Ib ; D= Dirección del vector Ib std vector_I,Z ; vector_I= D

ldd #dir_vec_Pb ; D= Dirección del vector Pb std vector_P,Z ; vector_P= D

*--- *- Código para el COCA 3ra

*--- ldd #dir_U3b std Reg_U3,Z ldd #dir_VPhU3b std Reg_VPhU3,Z ldd #dir_HPhU3b std Reg_HPhU3,Z *--- *--- *- Código para el COCA 5ta

*--- ldd #dir_U5b std Reg_U5,Z ldd #dir_VPhU5b std Reg_VPhU5,Z ldd #dir_HPhU5b std Reg_HPhU5,Z *---

std Reg_U7,Z ldd #dir_VPhU7b std Reg_VPhU7,Z ldd #dir_HPhU7b std Reg_HPhU7,Z *--- ldd #dir_Vb ; D=dir_Vb std Reg_V,Z ; Reg_V=D ldd #dir_Ib ; D=dir_Vb std Reg_I,Z ; Reg_I=D ldd #dir_Pb ; D=dir_Pb std Reg_P,Z ; Reg_P=D ldd #dir_THDvb ; D=dir_THDvb std Reg_THDv,Z ; Reg_THDv=D ldd #dir_THDib ; D=dir_THDib std REG_THDi,Z ; Reg_THDi=D jmp GO_DP

PHASE_C ldd #dir_vec_Uc ; D= Dirección del vector Uc std vector_U,Z ; vector_U= D

ldd #dir_vec_Ic ; D= Dirección del vector Ic std vector_I,Z ; vector_I= D

ldd #dir_vec_Pc ; D= Dirección del vector Pc std vector_P,Z ; vector_P= D

*--- *- Código para el COCA 3ra

*--- ldd #dir_U3c std Reg_U3,Z ldd #dir_VPhU3c std Reg_VPhU3,Z ldd #dir_HPhU3c std Reg_HPhU3,Z *--- *--- *- Código para el COCA 5ta

*--- ldd #dir_U5c std Reg_U5,Z ldd #dir_VPhU5c std Reg_VPhU5,Z ldd #dir_HPhU5c std Reg_HPhU5,Z *--- *--- *- Código para el COCA 7ma

*--- ldd #dir_U7c std Reg_U7,Z ldd #dir_VPhU7c std Reg_VPhU7,Z ldd #dir_IPhU7c std Reg_HPhU7,Z *--- ldd #dir_Vc ; D=dir_Vc std Reg_V,Z ; Reg_V=D ldd #dir_Ic ; D=dir_Ic std Reg_I,Z ; Reg_I=D ldd #dir_Pc ; D=dir_Pc std Reg_P,Z ; Reg_P=D ldd #dir_THDvc ; D=dir_THDvc std Reg_THDv,Z ; Reg_THDv=D ldd #dir_THDic ; D=dir_THDic std REG_THDi,Z ; Reg_THDi=D

GO_DP jsr DP ; Calcula los parametros ldaa #03 ; A=3

cmpa phase,Z ; phase=3?

lbne LOOP_PH ; Si phase<>3 salta a LOOP_PH rts

*************************************************************************** * Rutina que realiza el procesamiento para el cálculo de los parámetros * * V,I,P,THDv,THDi * *************************************************************************** DP ldz #dir_base_var ; IZ=Dirección base de variables

ldx vector_U,Z ; IX= Dirección del vector de voltaje ldy vector_I,Z ; IY= Dirección del vector de corriente

*--- *- Código para el COCA 3ra

*--- jsr CALCU3Ph3 ; Calcula el coeficiente U3 y guarda las componentes vertical y ldz #dir_base_var ; horizontal de la Ph3 lde U3,Z ste sqrt_num,Z jsr SQRT ldz #dir_base_var ldx Reg_U3,Z ste 0,X lde VPhU3,Z ldx Reg_VPhU3,Z ste 0,X lde HPhU3,Z ldx Reg_HPhU3,Z ste 0,X *--- *--- *- Código para el COCA 5ta

*--- jsr CALCU5Ph5 ; Calcula el coeficiente U5 y guarda las componentes vertical y ldz #dir_base_var ; horizontal de la Ph5 lde U5,Z ste sqrt_num,Z jsr SQRT ldz #dir_base_var ldx Reg_U5,Z ste 0,X lde VPhU5,Z ldx Reg_VPhU5,Z ste 0,X lde HPhU5,Z ldx Reg_HPhU5,Z ste 0,X *--- *--- *- Código para el COCA 7ma

*--- jsr CALCU7Ph7 ; Calcula el coeficiente U7 y guarda las componentes vertical y ldz #dir_base_var ; horizontal de la Ph7 lde U7,Z ste sqrt_num,Z jsr SQRT ldz #dir_base_var ldx Reg_U7,Z ste 0,X lde VPhU7,Z ldx Reg_VPhU7,Z ste 0,X lde HPhU7,Z ldx Reg_HPhU7,Z ste 0,X *--- ldy vector_U,Z ; IY= Dirección del vector de voltaje

jsr SQR ; Genera el vector de voltaje al cuadrado ldy vector_U,Z ; IY= Dirección del vector de voltaje

jsr AVERAGE ; Calcula el promedio del vector de voltaje ya al cuadrado ldz #dir_base_var ; IZ=Dirección base de variables

ste V2,Z ; V2=E ste sqrt_num,Z ; sqrt_num=E

jsr SQRT ; Calcula la raiz cuadrada de sqrt_num ldz #dir_base_var ; IZ=Dirección base de variables

ldx Reg_V,Z ; Dirección del registro que apunta Reg_V ste 0,X ; Se almacena en el registro de voltaje ldy vector_I,Z ; IY= Dirección del vector de corriente jsr SQR ; Genera el vector de corriente al cuadrado ldy vector_I,Z ; IY= Dirección del vector de corriente

jsr AVERAGE ; Calcula el promedio del vector de corriente ya al cuadrado ldz #dir_base_var ; IZ=Dirección base de variables

ste I2,Z ; I2=E ste sqrt_num,Z ; sqrt_num=E

jsr SQRT ; Calcula la raiz cuadrada de sqrt_num ldz #dir_base_var ; IZ=Dirección base de variables

ldx Reg_I,Z ; Dirección del registro que apunta Reg_I ste 0,X ; Se almacena en el registro de corriente

Documento similar