Está en la página 1de 105

UNIVERSIDAD DE CHILE

FACULTAD DE CIENCIAS FSICAS Y MATEMTICAS


DEPARTAMENTO DE INGENIERA ELCTRICA

DISEO Y CONSTRUCCIN DE UN COMPENSADOR ESTTICO DE REACTIVOS PARA


LABORATORIO

MEMORIA PARA OPTAR AL TTULO DE


INGENIERO CIVIL ELECTRICISTA

MARTN CORNEJO SAAVEDRA

PROFESOR GUA:
PABLO MEDINA COFRE

MIEMBROS DE LA COMISIN:
ARIEL VALDENEGRO ESPINOZA
NELSON MORALES OSORIO

SANTIAGO DE CHILE
AGOSTO 2014
RESUMEN DE LA MEMORIA
PARA OPTAR AL TTULO DE
INGENIERO CIVIL ELECTRICISTA
POR: MARTN CORNEJO SAAVEDRA
FECHA: AGOSTO 2014
PROF. GUA: PABLO MEDINA COFRE

DISEO Y CONSTRUCCIN DE UN COMPENSADOR ESTTICO DE REACTIVOS PARA


LABORATORIO

Los equipos FACTS cada da son ms comunes en el mundo gracias al avance de la tecnologa en
electrnica y semiconductores, permitiendo as operar de manera ms holgada los crecientes sistemas
elctricos. En especial, el Compensador Esttico de Reactivos (CER), ha tenido gran utilidad en Chile
debido a su eficaz control de voltaje en sistemas radiales. Ya se han instalado 5 de estos equipos, los 3
ms recietes a partir del ao 2000 cuyos nombres son SVC Puerto Montt, SVC Polpaico y SVC Cerro
Navia, propiedades de Transelec.

Bajo este contexto, el objetivo de este trabajo de ttulo es instruir al lector sobre esta tecnologa de
compensacin que se usa en el pas explicando su funcionamiento terico y prctico. Para eso se
disea y construye un CER a escala para laboratorio basndose en prototipos existentes en la literatura
y utilizando un microprocesador vigente. Adems el modelo a escala es capaz de operar en una red de
comunicaciones bajo el protocolo Modbus.

Previo al diseo se revisa el estado de arte de los compensadores estticos de reactivos tanto a escala
como para aplicaciones de potencia, estudiando tambin su funcionamiento y principales componentes.
Se revisa especficamente el modelo del microprocesador a utilizar en el modelo a escala junto con su
programacin y manejo.

El diseo empleado consiste en un banco trifsico de inductancias junto a dos bancos de


condensadores, operados por tiristores y rels respectivamente, conectados a la red de baja tensin
mediante un transformador trifsico y coordinados por un sistema de control electrnico.

Se realiza un algoritmo de adquisicin de variables para la medicin de la tensin en las lneas mediante
conversin anloga digital, adems de implementar un algoritmo de disparo en las inductancias para
control de potencia.

De la construccin final se obtiene un banco de inductancias junto a las placas electrnicas de disparo,
adquisicin y alimentacin que componen el CER a escala.

Como desarrollo futuro se propone programar un control PI en el microprocesador y mejorar la interfaz


de adquisicin de datos realizada en Matlab-Simulink.

ii
Dedicado a mi familia.

iii
Agradecimientos
Agradezco a Dios por darme todo lo que tengo y he tenido en mi vida, gracias a lo cual ha nacido
este trabajo de ttulo como fruto de la trayectora hasta hoy, como uno de muchos frutos que se vendrn
a futuro.

Agradezco a mis padres por darme todo su apoyo incondicional en mi vida, escuchar mis vivencias
y guiarme. Tambin a la manu por hacerme rer con sus tonteras.

A los compaeros de universidad, por hacer esta estada entretenida.

A don Villa por sus consejos y ayuda en la construccin y prueba de los inductores. A los ingenieros
J. Muoz y A. Vargas, cuyos trabajos de ttulo fueron pilares fundamentales para el actual. A los
memoristas C. Aedo, R. Rosati y al tesista I. Polanco por su ayuda, material y correcciones entregadas
sobre microcontroladores y diseo de circtuitos electrnicos.

Adems quiero mencionar que Steve Jobs tena razn sobre conectar los puntos. Distintos
conocimientos puntuales aprendidos a lo largo de la estada en la universidad permitieron que realizara
esta memoria.

iv
Tabla de contenido

1. Introduccin 9

1.1. Motivacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

1.2. Alcances y Objetivo General . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

1.3. Objetivos Especficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

1.4. Estructura de la memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

2. Antecedentes 12

2.1. Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

2.2. Los tiristores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

2.3. Transferencia de potencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

2.4. Introducin a los FACTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

2.4.1. Compensadores en paralelo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

2.5. Topologa y operacin de un SVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

2.5.1. Estructura bsica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

2.5.2. Curvas de operacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

2.5.3. Variables de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

2.5.4. Corriente en el TCR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

2.6. Filtros armnicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

2.7. Simulaciones de un SVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

2.8. Estado de arte de equipos FACTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

2.8.1. FACTS a nivel internacional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

1
2.8.2. FACTS a nivel nacional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

2.8.3. FACTS a escala . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

3. Introduccin a Modbus y DSP 35

3.1. Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

3.2. Protocolo de comunicaciones Modbus . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

3.2.1. Origen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

3.2.2. Descripcin del protocolo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

3.3. Especificaciones generales del microcontrolador . . . . . . . . . . . . . . . . . . . . . . 39

3.4. Perifricos del microcontrolador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

3.4.1. Puertos digitales Entrada/Salida (GPIO) . . . . . . . . . . . . . . . . . . . . . . . 39

3.4.2. Interfaz de Interrupcin Externa (XINTF) . . . . . . . . . . . . . . . . . . . . . . . 40

3.4.3. Conversor anlogo digital (ADC) . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

3.4.4. Puerto de comunicacion serial (SCI o UART) . . . . . . . . . . . . . . . . . . . . 40

3.5. Estructura y funcionamiento de un programa . . . . . . . . . . . . . . . . . . . . . . . . 40

3.6. Ejemplos de aplicacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

3.6.1. Parpadear un Led . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

3.6.2. Enviar mensaje por puerto serial UART . . . . . . . . . . . . . . . . . . . . . . . 44

3.6.3. Implementacin de Modbus en el DSP . . . . . . . . . . . . . . . . . . . . . . . . 46

4. Diseo de un CER para laboratorio 49

4.1. Topologa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

4.2. Dimensionamiento del CER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

4.3. Diseo de los inductores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

4.4. Transformador de bajada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

4.5. Controlador principal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

4.6. Dispositivos de medicin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

4.6.1. Transductores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

2
4.6.2. Amplificador operacional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

4.6.3. Optoacoplador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

4.7. Dispositivos de accionamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

4.7.1. Tiristores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

4.7.2. Optoacoplador de salida triac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

4.7.3. Buffer XOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

4.7.4. Rels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

4.7.5. Transistores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

4.8. Dispositivos de comunicacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

4.8.1. RS-232 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

4.8.2. RS-485 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

4.9. Diseo de placas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

4.9.1. Placa de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

4.9.2. Placa de adquisicin y disparo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

4.9.3. Placa de alimentacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

4.10.Algoritmo del CER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

4.10.1. Adquisicin de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

4.10.2. Sincronizador de disparos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

5. Construccin de un CER para laboratorio 62

5.1. Construccin de los inductores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

5.2. Construccin de placas circuitales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

5.2.1. Placa de adquisicin y disparo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

5.2.2. Placa de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

5.2.3. Placa de alimentacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

5.2.4. Placa de ajuste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

6. Conclusion 67

3
6.1. Trabajo futuro y recomendaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

Bibliografa 69

A. Esquemticos de las placas I

B. Cdigo del programa VI

C. Interfaz en Matlab-Simulink XXX

4
ndice de tablas

2.1. SVCs instalados en el SIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

3.1. Estructura de mensajes en Modbus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

3.2. Cdigo de las funciones en Modbus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

3.3. Caractersticas tcnicas de Modbus RTU . . . . . . . . . . . . . . . . . . . . . . . . . . 37

3.4. Ejemplo de peticin de Maestro en Modbus . . . . . . . . . . . . . . . . . . . . . . . . . 38

3.5. Ejemplo de respuesta de un esclavo en Modbus . . . . . . . . . . . . . . . . . . . . . . 38

4.1. Parmetros del filtro de 5a armnica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

4.2. Resultado del diseo del inductor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

5.1. Valores nominales del inductor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

5.2. Pruebas de energizacin del inductor . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

5
ndice de figuras

2.1. Estructura de un tiristor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

2.2. Tiristores conectados a una carga resistiva . . . . . . . . . . . . . . . . . . . . . . . . . 14

2.3. Voltaje controlado en una carga resistiva mediante tiristores . . . . . . . . . . . . . . . . 14

2.4. Sistema de potencia simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

2.5. Relacin V-P o Curvas Nariz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

2.6. 1) TCR 2) TSC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

2.7. Topologa bsica del STATCOM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

2.8. Estructura bsica de un SVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

2.9. Curva de operacin de un SVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

2.10.Controlador proporcional integral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

2.11.Reglas lgicas en un controlador difuso para SVC [23] . . . . . . . . . . . . . . . . . . . 22

2.12.Forma de onda del voltaje en el TCR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

2.13.Porcentaje de armnicos respecto de la corriente fundamental en un TCR segn el


ngulo de disparo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

2.14.Topologas para filtros de armnicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

2.15.Ejemplo de simulacin en Simulink [16] . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

2.16.Ejemplo del TCR en Simulink [16] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

2.17.Potencia reactiva del ejemplo en Simulink [16] . . . . . . . . . . . . . . . . . . . . . . . 28

2.18.Voltaje y corriente del ejemplo en Simulink [16] . . . . . . . . . . . . . . . . . . . . . . . 28

2.19.Imagen area del SVC de Black Oak [1] . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

2.20.Unilineal del SVC de Black Oak [1] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

6
2.21.Imagen del SVC de Impala [18] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

2.22.Unilineal del SVC de Impala [18] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

2.23.Conexin de los SVCs Polpaico y Cerro Navia [3] . . . . . . . . . . . . . . . . . . . . . 32

2.24.Diagrama unilineal SVC Polpaico [3] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

2.25.Esquema lgico del funcionamiento del SVC de Tsinghua [22] . . . . . . . . . . . . . . . 33

2.26.Esquema del SVC del DIE [5] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

2.27.Interfaz del CER del DIE [5] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

3.1. Estructura del cdigo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

3.2. Ciclo de Trabajo del DSP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

4.1. Diagrama unilineal del CER a construir . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

4.2. Parmetros de diseo del inductor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

4.3. Diagrama de conexin del transformador . . . . . . . . . . . . . . . . . . . . . . . . . . 52

4.4. Circuito de ajuste para la salida de los transductores LEM . . . . . . . . . . . . . . . . . 55

4.5. Capa inferior de la placa de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

4.6. Esquematico de los rels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

4.7. PCB de lems de tensiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

4.8. Circuito detector de cruces por cero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

4.9. PCB del circuito de deteccin de ceros . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

4.10.Circuito de disparo de los tiristores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

4.11.PCB de la placa de disparo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

4.12.PCB de la placa de alimentacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

4.13.Diagrama de flujo del conversor ADC . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

4.14.Seal de interrupcin para sincronizador de disparos en la fase R . . . . . . . . . . . . . 61

4.15.Diagrama de flujo del sincronizador de disparos . . . . . . . . . . . . . . . . . . . . . . . 61

5.1. Inductor final . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

5.2. Placa de adquisicin y disparo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

7
5.3. Placa de Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

5.4. Placa de alimentacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

5.5. Nueva placa de ajuste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

A.1. Esquemtico de la placa de adquisicin . . . . . . . . . . . . . . . . . . . . . . . . . . . II

A.2. Esquemtico de la placa de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . III

A.3. Esquemtico de la placa de alimentacin . . . . . . . . . . . . . . . . . . . . . . . . . . IV

A.4. Esquemtico de la placa de ajuste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . V

C.1. Interfaz para visualizar las variables del CER . . . . . . . . . . . . . . . . . . . . . . . . XXXI

8
Captulo 1

Introduccin

Debido a la geografa de Chile, su principal sistema elctrico: Sistema Interconectado Central


(SIC) presenta una topologa radial. En este tpo de topologa priman los problemas de estabilidad de
voltaje, debido a las largas lneas de transmisin que presentan grandes impedancias oponiendose
principalmente al paso de la energa reactiva, la cual est directamente relacionada con la estabilidad
de voltaje. Esto ha llevado a instalar en ciertos nodos de conexin crticos del sistema compensacion
de energa reactiva local, supliendo la necesidad de este tipo de energa en los momentos de mayor
congestin o en contingencias.

Gracias al desarrollo de los semiconductores y la electrnica, se han creado aplicaciones electrnicas


para el control de potencia en alta tensin, rama de estudio conocida como electrnica de potencia.
De esta rama han surgido diversas tecnologas para compensacin de reactivos automatizadas, tales
como el Compensador Esttico de Reactivos (CER), cuya principal herramienta de accionamiento es
el tiristor (dispositivo a base de semiconductores creado en los 50).

En en SIC existen 5 equipos CER operando conectados al sistema troncal de 220 kV a lo largo del
pas, propiedades de Transelec e instalados por ABB. El ms grande hasta la fecha es el CER de Cerro
Navia con una capacidad de Absorcin de 65 MVAr y una capacidad de entrega de 140 MVAr.

1.1. Motivacin

As como la electrnica ha dado grandes avances para crear nuevos dispositivos de accionamiento
basados en semiconductores (tiristores, IGBT, TRIACS) tambin ha nacido otro tipo de dispositivos
electrnicos de pequeo tamao y fcil programacin, capaces de automatizar tareas, realizar
clculos y controlar perifricos, comnmente llamados microcontroladores. En la actualidad los
microcontroladores estn al alcance de todos y su documentacin abunda en la web, por lo que es
posible realizar aplicaciones de este tipo en casi cualquier laboratorio con implementos electrnicos
bsicos. Uniendo esto a lo planteado en la introduccin, se puede crear un dispositivo que controle

9
de manera automtica la compensacin de reactivos en un nodo de coneccin a la red elctrica de
distribucin (380 V), es decir, un CER a escala. El resultado de esta motivacin es el presente trabajo
de ttulo.

1.2. Alcances y Objetivo General

El objetivo general del trabajo de ttulo es disear y construir un compensador esttico de reactivos
a escala para laboratorio. El uso de este equipo permitir mostrar de forma prctica conceptos sobre
regulacin de voltaje y compensacin de reactivos en los laboratorios docentes del Departamento de
Ingeniera Elctrica de la Universidad de Chile.

1.3. Objetivos Especficos

Dentro de los objetivos especficos se encuentran:

Revisar el estado de arte de los compensadores estticos de reactivos, tanto a escala como para
aplicaciones de potencia, entendiendo tambin su funcionamiento y principales componentes.

Disear y construir un SVC para laboratorio, basndose en los prototipos existentes en la literatura
y para aplicaciones de potencia, utilizando la capacidad de procesamiento de los DSP actuales.

Mostrar en forma prctica la teora del control de voltaje y la compensacin de reactivos, adems
de estudiar los armnicos generados por la electronica de potencia del CER y disear filtros para
el modelo a escala.

Integrar el modelo a escala a una red de comunicaciones utilizando el protocolo Modbus, con
el fin de monitorear las variables de operacin del CER en una interfaz remota y coordinar su
operacin junto a otros equipos existentes en la red.

1.4. Estructura de la memoria

La estructura utilizada en este documento para exponer el trabajo realizado es la siguiente:

Captulo 1. Introduccin: Corresponde a la descripcin del tema, la motivacin de ste y los


alcances y objetivos del trabajo realizado.

Captulo 2. Antecedentes: Corresponde a la revisin bibliogrfica o antecedentes. En este


captulo se explican los conceptos necesarios para la comprensin y contextualizacin del trabajo.

10
Captulo 3. Introduccin a Modbus y DSP: Se explican los conceptos bsicos para entender
el protocolo Modbus. Se describen las caractersticas y funcionalidades del microcontrolador a
utilizar.

Captulo 4. Diseo de un CER para laboratorio: En este captulo se muestran detalladamente


las distintas partes del CER, tanto fsicas como electrnicas y la manera en que se construirn.

Captulo 5. Construccin de un CER para laboratorio: Se muestran los resultados del diseo
obtenido en el captulo 4.

Captulo 6. Conclusion: Se enumeran las conclusiones del trabajo realizado y se proponen


trabajos a realizar en el futuro.

11
Captulo 2

Antecedentes

2.1. Introduccin

Los Sistemas Elctricos de Potencia tienen como objetivo suplir la demanda de energa de los
consumos a partir de la energa generada en las centrales elctricas. Para el transporte de la energa
se construyen sistemas de transmisin en Alta Tensin que permiten el flujo de grandes bloques de
energa desde las centrales hasta los centros industriales o urbanos.

Los sistemas de transmisin deben estar siempre dentro de un rango de operacin que permita circular
el flujo de energa sin saturar las lneas y manteniendo niveles de voltaje permitidos segn la norma.
Los parmetros limitantes del flujo por una lnea de transmisin cualquiera son: el voltaje en las barras
de la lnea, la reactancia serie de la lnea y el ngulo de desfase entre las barras de la lnea (seccin
2.3). El consumo elctrico, ya sea industrial o urbano, vara segn transcurre el da. Debido a esto
las lneas de transmisin presentan distintos niveles de carga. Sin embargo, en momentos donde se
concentra la mayor demanda las lneas pueden presentar saturacin y cadas de voltaje, siendo ms o
menos crtica la situacin dependiendo de la capacidad de cada lnea. Por esto es preciso contemplar
algn tipo de compensacin en la lnea para poder permitir el flujo de energa en los momentos de
mayor estrs del sistema.

Debido a lo anterior nacieron los Equipos de Compensacin Flexibles (FACTS) (seccin 2.4). La
funcin de estos equipos es entregar de manera rpida y controlada a la lnea la compensacin
necesaria tal que sta pueda operar de manera ptima en los momentos de mayor demanda. Gracias
a la electrnica de potencia actual estos equipos actan en tiempos del orden de los milisegundos.
Dentro de los equipos FACTS se encuentra el Compensador Esttico de Reactivos (CER o SVC).
Este equipo puede entregar o absorber potencia reactiva a la lnea, controlando as los niveles de
voltaje dentro del rango seguro en la lnea (seccin 2.5). Existen SVCs de diversos tamaos, ya sea a
nivel de transmisin en alta potencia o a escala de laboratorio (seccin 2.8).

12
2.2. Los tiristores

Los tiristores son dispositivos compuestos por tres junturas p-n (cuatro capas intercaladas de
material tipo p y tipo n). Poseen tres terminales: la compuerta G, el nodo A y el ctodo K. Desde la
compuerta se controla el estado de conduccin del tiristor, mientras el nodo y el ctodo se conectan
en serie con la carga cuya potencia se desea controlar. En pocas palabras, el tiristor se comporta como
un interruptor de potencia de dos estados, idealmente cerrado e idealmente abierto, cuya velocidad de
conmutacin es del orden de los milisegundos. Tpicamente son usados en la alta potencia debido a
que son capaces de funcionar con voltajes superiores a 1 kV y corrientes mayores a 100 A [15].

La caracterstica principal de los tiristores es su propiedad llamada latching. Cuando el tiristor pasa
del estado abierto al estado cerrado o de conduccin, el tiristor seguir en el estado de conduccin
hasta que la corriente en el mismo vuelva a cero, aunque desaparezca la seal de activacin en la
compuerta.

Existen 4 tipos importantes de tiristores: Rectificador controlado de silicio (SCR), Tiristor apagado
por compuerta (GTO), Tiristor controlado por MOS (MCT) y Tiristor esttico de induccin (SITh). Los
tiristores ms comunes son el SCR y el GTO. El SCR es el tiristor comn recin explicado. El GTO,
adems de poseer el latching, puede ser apagado en cualquier momento mediante un pulso de corriente
negativa en la compuerta. En adelante cuando se hable de tiristores se estar refiriendo al tipo SCR.

nodo (A)

A






+ G
K
Ctodo Compuerta
(K) (G)

Figura 2.1: Estructura de un tiristor

En particular, los tiristores usados en corriente alterna (50 o 60 Hz), son llamados dispositivos de
control de fase ya que son encendidos por la compuerta despus de cierto ngulo de desfase con
respecto a la forma sinusoidal del voltaje de la red, tpicamente se usa el cruce por cero como referencia
del ngulo de disparo. De esta manera, con un tiristor conectado en serie, se puede cambiar la potencia
consumida por una carga resistiva o inductiva variando la corriente entre su valor nominal y cero.

En la figura 2.2 se muestra un esquema bsico de control de potencia en una carga resistiva. En
la figura 2.3 se muestra como vara el voltaje en la carga resistiva mediante dos tiristores conectados
en configuracin antiparalela.

13
T1
G

T2

Figura 2.2: Tiristores conectados a una carga resistiva

Voltaje en la fuente
100
Voltaje [Volt]

100
0 2 4 6 8 10 12
Voltaje en la carga resistiva
100
Voltaje [Volt]

0
alfa pi+alfa 2pi+alfa 3pi+alfa
100
0 2 4 6 8 10 12
Voltaje en la compuerta del tiristor
5
Voltaje [Volt]

0
0 2 4 6 8 10 12
ngulo [rad]

Figura 2.3: Voltaje controlado en una carga resistiva mediante tiristores

El ejemplo de la figura 2.3 muestra una fuente de voltaje sinusoidal de 100 V de amplitud, y los tiristores
tienen un voltaje de activacin por compuerta de 5 V. Para cargas resistivas el ngulo de disparo
puede variar entre 0 y 180 . El ngulo de extincin corresponde al momento en que la corriente
pasa por cero y el tiristor se desactiva. Para cargas resistivas = 180 . Se observa tambin que solo
basta un pulso de voltaje en la compuerta del tiristor para activar el estado de conduccin. En este caso
se tienen dos tiristores en configuracin antiparalela, por lo tanto se debe dar un pulso de voltaje a cada
tiristor por separado, segn sea el ciclo positivo o negativo de la onda de voltaje.

2.3. Transferencia de potencia

Para entender los flujos de potencia se suele estudiar su caso ms reducido, que consiste en
un sistema de dos barras, una transmisora y una receptora, conectadas por una lnea de transmisin
formando as una topologa radial (figura 2.4).

14

Figura 2.4: Sistema de potencia simple

La barra transmisora est conectada a un generador sincrnico y la receptora a una carga. Las
ecuaciones para las potencias activa y reactiva se muestran a continuacin:

VT VR sin()
PT = = PR
X
VT VR cos() VT2
QT = + (2.1)
X X
VT VR cos() VR2
QR =
X X
Segn las ecuaciones 2.1, considerando Q = QR y P = PT = PR , al eliminar la viariable del ngulo
se obtiene:
(V 2 )2 + (2QX E 2 )V 2 + X 2 (P 2 + Q2 ) = 0 (2.2)

Segn la relacin 2.2, al aumentar la carga en el extremo receptor el voltaje cae dependiendo del factor
de potencia del sistema (o nivel de compensacin reactiva).

15
En la figura 2.5 se observa la relacin entre el voltaje y la potencia transferidas para factores
V PX
de potencia inductivos y capacitivos, considerando el voltaje unitario E y la potencia unitaria E2
.
Para factores de potencia cercanos a 1 (tan() 0) el voltaje cae gradualmente a medida que
aumenta la potencia transferida. Sin embargo, a medida que tan() es inductivo y aumenta, el
voltaje cae bruscamente a medida que aumenta la transferencia de potencia. En estos casos es
necesario aumentar la potencia transferida mediante algn mtodo de compensacin, mencionados
a continuacin.

1.2

1
tan(phi)=0.4
0.8 tan(phi)=0.2
0
0.2
V/E

0.6 0.7 0.4


1.5 1
2.4
0.4

0.2

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8
PX/E2

Figura 2.5: Relacin V-P o Curvas Nariz

La ecuacin de transferencia de potencia mostrada en la ecuacin 2.1 puede ser generalizada


para una transferencia de potencia activa Pij que va desde una barra i a una barra j a travs de una
reactancia Xij y una diferencia angular ij = i j (ecuacin 2.3).

Vi Vj sin(ij )
Pij = (2.3)
Xij

Segn la ecuacin 2.3 existen tres maneras de aumentar la potencia activa transferida. Una manera
es elevar = ij , sin embargo existe un lmite para = /2. Otra forma es elevar las tensiones, sin
embargo stas tambin tienen lmite de operacin para el buen funcionamiento del sistema. Al reducir
la reactancia X = Xij tambin se aumenta la potencia activa transferida, pero solo es posible mediante
condensadores en serie. Esto tambin tiene un lmite cuando xC xL , ya que en ese punto el sistema
es sensible a los cambios en las condiciones de transmisin [20]. Estas 3 variables (V ,X , ) pueden ser
controladas por los equipos mencionados en la seccin 2.4.

16
2.4. Introducin a los FACTS

Por lo mencionado en 2.3 y en la figura 2.5, con tal de aumentar la potencia transferida en
las redes alternas de alta tensin y evitar cadas importantes de voltaje, han surgido los Equipos
de Compensacin Flexibles (FACTS), los cuales se dividen en 3 categoras: Compensadores en
paralelo (V ), Compensadores en serie (X ) y Compensadores por ngulo de fase ( ). El uso de estos
equipos FACTS tiene los siguientes beneficios: disminucin de las prdidas de potencia activa, mejoras
en la estabilidad de la red en cuanto a voltaje y menores costos de produccin de energa [20]. Se
profundizar solo sobre los compensadores en paralelo ya que son el tema de inters del presente
trabajo de ttulo.

2.4.1. Compensadores en paralelo

La compensacin en paralelo consiste en entregar potencia reactiva capacitiva o inductiva a la


lnea para mantener el voltaje dentro de un rango definido, o para mantener un factor de potencia fijo
en el punto de conexin. Es sabido que existe un fuerte acoplamiento entre las inyecciones de potencia
reactiva y las tensiones en las barras de inyeccin [20]. Dado esto, segn la ecuacin 2.3, al aumentar
el voltaje en una de las barras es posible aumentar la transferencia de potencia. Es por esto que los
principales beneficios de usar compensacin en paralelo son mantener el voltaje de barra en un rango
de operacin seguro y mantener las transmisiones de potencia. A continuacin se muestran los equipos
FACTS de compensacin en paralelo:

Reactor Controlado por Tiristores (TCR): Este equipo consiste en un reactor en derivacin,
conectado en serie con tiristores que actan como interruptor bidireccional. La corriente que
circula por el reactor se puede modificar variando el ngulo de disparo de los tiristores, obteniendo
as una reactancia de compensacin variable.

Condensador Conmutado por Tiristores (TSC): Es un condensador en derivacin conectado


en serie con tiristores y a menudo se conecta en serie con una inductancia pequea
para limitar sobrecorrientes. Los tiristores tienen la funcin de conectar o desconectar el
condensador, funcionando como un interruptor de dos estados. De esta manera el tiempo de
conexin/desconexin es menor que si se usaran rels convencionales. Una alternativa a este
mdulo es el MSC (Mechanically Switched Capacitor), el cual utiliza rels mecnicos en vez
de tiristores, por lo que su respuesta dinmica es bastante ms lenta.

17
1 2

Figura 2.6: 1) TCR 2) TSC

Compensador Esttico de Reactivos (SVC o CER): Es la combinacin de un TCR y un TSC.


Estos mdulos se deben coordinar mediante un sistema de control. La estrategia de control
ms comn es la de mantener una consigna de voltaje. De esta manera se puede realizar
compensacin capacitiva o inductiva ya sea por sobrecarga o por baja demanda (sobrevoltaje).
Otra estrategia de control menos comn es la de mantener una consigna de factor de potencia
en la barra de conexin.

Compensador Esttico Sncrono (STATCOM): Este equipo es distinto a los anteriores, ya


que su compensacin es un condensador en corriente continua conectado a la red principal
mediante un inversor controlado. Los inversores actuales estn compuestos por vlvulas IGBT,
las cuales mediante modulacin por ancho de pulso (PWM) convierten corriente continua en
corriente alterna. As, controlando la magnitud relativa entre la tensin de la red y la salida del
inversor, el STATCOM puede proporcionar compensacin capacitiva o inductiva. La ventaja de
este equipo con respecto al SVC es que su calidad de compensacin no depende del voltaje en
la red, ya que la magnitud de la corriente inyectada depende netamente del inversor. En cambio,
en el SVC la corriente de compensacin depende del voltaje en la barra, ya que los equipos
de compensacin estn conectados directamente a la red, y es un hecho que la compensacin
en paralelo es proporcional al voltaje de conexin. Debido a esto el STATCOM tiene un mejor
comportamiento que el SVC frente a contingencias de cadas de tensin.

18
+

-
Figura 2.7: Topologa bsica del STATCOM

2.5. Topologa y operacin de un SVC

2.5.1. Estructura bsica

Como se mencion en 2.4.1, el SVC es una combinacin de un TCR y un TSC, los cuales trabajan
de manera coordinada obteniendo as compensacin de reactivos inductiva o capacitiva segn sea la
necesidad en la barra de conexin. Adems de los TCR y TSC estn los sistemas de medicin, el
controlador principal, el transformador de bajada (no es indispensable) y el sincronizador de disparos
(PLL). Un esquema tpico de un SVC se muestra en la figura 2.8

Red 3 AC


Trafo SVC
1 1
L R

Figura 2.8: Estructura bsica de un SVC

A continuacin se explica la funcin de cada componente del diagrama.

TCR: Los mdulos TCR (Thyristor Controlled Reactor) consisten en reactores conectados en
serie con tiristores. Los tiristores conducen o interrumpen la corriente circulante, obteniendo as
una inductancia variable. Los tiempos de conduccin de los tiristores vienen dados por el ngulo
de disparo calculado por el Controlador Principial, y la orden de disparo es sincronizada por el

19
PLL. La cantidad de mdulos conectados depende del diseo del SVC, siendo generalmente 1 o
2 la cantidad de TCRs utilizados.

TSC: Los mdulos TSC (Thyristor Switched Capacitor) consisten en condensadores conectados
en serie con tiristores. Los tiristores slo tienen dos estados, abierto o cerrado. La orden de
apertura o cierre de los rels es ejecutada por el Controlador Principal y sincronizada por el
PLL. El nmero de TSCs conectados es generalmente 1 unidad ms que la cantidad de TCRs
conectados.

TTPP: Los transformadores de potencial ttpp se encargan de reducir el voltaje en AT y BT


con el fin de obtener seales aptas para ser procesadas por los componentes electrnicos del
controlador principal.

TTCC: El transformador de corriente ttcc reduce la corriente obtenida en AT para tener una seal
de corriente apta para los medidores del controlador.

Transductores: Entre los transformadores de medida ttpp-ttcc y el controlador principal se


utilizan transductores que filtran y transforman las seales alternas en ondas digitales aptas para
ser procesadas. Generalmente los transductores consisten en filtros pasa bajas para eliminar
el ruido y rectificadores de onda completa para que los procesadores no tengan que lidiar con
seales de voltaje negativas.

Controlador Principal: Es el procesador principal del SVC. Este controlador lee la seal de
voltaje proveniente de la barra AT o BT, luego la compara con el voltaje de referencia y realiza
la rutina de control programada. La orden de salida del controlador es el ngulo de disparo de
los tiristores y el nmero de bancos de condensadores conectados, de esta manera controla los
reactivos inyectados a la red.

PLL: El bloque PLL (Phase Locked Loop) o bloque sincornizador de disparos realiza el
encendido de los tiristores segn el ngulo calculado por el controlador principal. Para esto se
sincroniza con los cruces por cero del voltaje de la red mediante la medida obtenida por los ttpp.

Tranformador SVC: La funcin de este transformador es reducir el voltaje de la red de alta tensin
a una tensin apta para el buen funcionamiento de los tiristores, reactores y condensadores. La
configuracin de la conexin del enrollado de baja tensin generalmente es tipo delta, ya que as
se elimina la tercera armnica de las lneas (seccin 2.5.4).

Filtros: Debido a la rpida conmutacin de los tiristores y a las resonancias entre los mdulos
TCR y TSC es comn la generacin de armnicas en los equipos SVC. Dejando de lado la 3a
armnica, las armnicas ms influyentes en este caso son la 5a y la 7a armnica, por lo tanto es
necesario sintonizar filtros que eliminen ambas armnicas (captulo 2.6).

20
2.5.2. Curvas de operacin

La susceptancia BSV C del SVC es:

BSV C = BT CR1 + ... + BT CRn + BT SC1 + ... + BT SCn (2.4)

Se debe tener en cuenta que las susceptancias BT CRi varan segn el ngulo de disparo y que las
suceptancias BT SCi pueden estar o no estar conectadas. De esto se desprende que el SVC presenta
una susceptancia variable que cambia segn la demanda de reactivos en la barra de conexin. En la
figura 2.9 se muestra como cambia el voltaje segn la corriente que circula en el SVC.

Voltaje en
barra SVC
Lmite
Lmite
sobrecorriente
Inyeccin
reactivos
V referencia V referencia
Lmite
absorcin
reactivos

Corriente en
barra SVC

Capacitivo Inductivo

Figura 2.9: Curva de operacin de un SVC

Dentro de los lmites de inyeccin y absorcin de reactivos el SVC es capaz de mantener el voltaje
de la barra segn el voltaje de referencia. Si se alcanza el lmite de inyeccin de reactivos, a medida
que aumenta la demanda de reactivos, el voltaje cae gradualmente junto con la compensacin de
reactivos ya que los reactivos entregados por los condensadores del TSC son proporcionales al voltaje
de conexin.

Al contrario, si se alcanza el lmite de absorcin de reactivos, al aumentar los reactivos circulantes


el voltaje de conexin sube gradualmente aumentando tambin la corriente reactiva entregada por los
mdulos TCR. Estos mdulos poseen un lmite de sobrecorriente, al alcanzar este lmite el control del
CER reacciona controlando el ngulo de disparo para disminuir la corriente por el TCR [5].

2.5.3. Variables de control

La lgica de control del SVC depender del objetivo a controlar en la red. La estrategia de control
ms comn es tener una referencia de voltaje, y mediante algoritmos de control obtener en la red un
voltaje cercano o igual al de la referencia. El control retroalimentado o lazo cerrado es el ms comn en
estos equipos ya que permite actuar al SVC frente a contingencias en la red. El controlador ms comn
es el proporcional integral (PI) [5] [16] como el de la Figura 2.10.

21
La variable manipulada es el ngulo de disparo de los tiristores del mdulo TCR, mientras que la
variable controlada es el voltaje en la barra del SVC. Es primordial poseer una medicin de calidad sin
ruido, para esto los transformadores de potencial deben ser robustos ante subidas de potencial y evitar
saturaciones.

-K-

Kp

1
-C- -K- u
s
Vref Ki Integrador

Vmedido

Figura 2.10: Controlador proporcional integral

Otra forma de control, menos comn pero no menos interesante, es el control difuso (fuzzy control).
En vez de seguir una funcin de transferencia PI, el control difuso toma decisiones en base a reglas
lgicas para actuar en la variable manipulada. En la Figura 2.11 se ve un ejemplo de las reglas
lgicas implementadas para un controlador de SVC. La ventaja de este controlador es que se puede
implementar sin necesariamente saber la funcin de transferencia del fenmeno fsico que ocurre en el
TCR.

Figura 2.11: Reglas lgicas en un controlador difuso para SVC [23]

22
2.5.4. Corriente en el TCR

Ya se vi en la seccin 2.2 el comportamiento del voltaje en una carga resistiva controlada por
tiristores. Sin embargo el TCR presenta una carga resistiva-inductiva, prcticamente inductiva pura
(reactores reales), por lo tanto la forma de onda de la corriente en los reactores del TCR presentarn un
desfase practicamente de 90 respecto al voltaje. Adems se debe estudiar el espectro de armnicas
generado segn el ngulo de disparo en los tiristores.

Se puede usar un anlisis de las series de Fourier para obtener el voltaje y la corriente en una carga
resistiva-inductiva en funcin del ngulo de disparo y un ngulo de extincin [14]. Luego, para una
carga inductivo-resistiva se tiene el siguiente desarrollo:


X
X
v0 (t) = Vcd + an cos(nt) + bn sen(nt) (2.5)
n=1,2,... n=1,2,..

+
0

Figura 2.12: Forma de onda del voltaje en el TCR

donde
Z 2
1
Vcd = Vm sen(t)d(t) = 0
2 0
1
Z Z +
an = [ 2Vs sen(t)cos(nt)d(t) + 2Vs sen(t)cos(nt)d(t)]
+ (2.6)

2Vs cos(1 n) cos(1 n) + cos(1 n)( + ) cos(1 + n)( + )
= [
2 1n
cos(1 + n) cos(1 + n) + cos(1 + n)( + ) cos(1 + n)( + )
+ ]
1+n

para n = 3, 5, ... y an = 0 para n = 2, 4, ...

23
1
Z Z +
bn = [ 2Vs sen(t)sin(nt)d(t) + 2Vs sen(t)sen(nt)d(t)]
+

2Vs sen(1 n) sen(1 n) + sen(1 n)( + ) sen(1 n)( + ) (2.7)
= [
2 1n
sen(1 + n) sen(1 + n) + sen(1 + n)( + ) sen(1 + n)( + )
]
1+n

para n = 3, 5, ... y bn = 0 para n = 2, 4, ...

1
Z Z +
a1 = [ 2Vs sen(t)cos(t)d(t) + 2Vs sen(t)cos(t)d(t)]
+
(2.8)
2Vs
= [sen2 sen2 + sen2 ( + ) sen2 ( + )]
2

1
Z Z +
b1 = [ 2Vs sen2 (t)d(t) + 2Vs sen2 (t)d(t)]
+
(2.9)
2Vs sen(2) sen(2) + sen2( + ) sen2( + )
= [2( ) ]
2 2

La impedancia de la carga es

1
Z = R + j(nL) = [R2 + (nL)2 ] 2 n

Dividiendo la ecuacin 2.5 por la expresin de impedancia de la carga se obtiene:


X
i0 (t) = 2In sen(nt n + n ) (2.10)
n=1,3,5,..

donde n = tan1 (n R
L
), n = tan1 ( abnn ) y el valor RMS de la corriente es

1
1 (a2n + b2n ) 2
In = 1 (2.11)
2 [R2 + (nL)2 ] 2

De la ecuacin 2.11 se desprende que los armnicos en la corriente dependern no solo de los
componentes R y L de la carga, sino tambin de los ngulos de disparo y extincin: y . Como
se vio en la figura 2.2 que el ngulo de extincin para una carga resistiva es = 180 . Sin embargo,
para una carga inductiva pura, debido al desfase entre corriente y voltaje, el ngulo de extincin puede
alcanzar ngulos de = 270 . Por lo tanto el ngulo de disparo queda acotado ente 90 y 180 .

A continuacin se muestra cmo varan las distintas armnicas segn el ngulo de disparo en los
tiristores en un TCR (Figura 2.13).

24
6
5a
5
7a

Porcentaje [%]
4 11a

0
90 100 110 120 130 140 150 160 170 180
ngulo de disparo []

Figura 2.13: Porcentaje de armnicos respecto de la corriente fundamental en un TCR segn el ngulo
de disparo

En la figura 2.13 no se muestra la 3a armnica ya que debido a la cofiguracin delta del lado de
baja tensin del transformador del SVC (figura 2.8) las componentes armnicas mltiplos de 3 (3a , 9a ,
etc..) permanecen circulando alrededor de la delta y no aparecen en la lnea [14]. Despus de la 3a las
armnicas ms relevantes son la 5a y la 7a , alcanzando alrededor de un 5 % y un 2,5 % de la amplitud
de la corriente fundamental respectivamente. Es necesario eliminar o reducir en lo posible el efecto
de las armnicas debido a las normativas vigentes, por eso se debe estudiar el diseo de filtros de
armnicas para casos como este, lo cual es abarcado con detalle en la seccin 2.6.

2.6. Filtros armnicos

Es comn ver en la electrnica de potencia la generacin de armnicos no deseados en la red.


Esto se debe a la alta frecuencia de conmutacin de los tiristores o debido a la resonancia de los
elementos de la red. Para ello es necesario filtrar los armnicos en el momento en que son generados
para impedir su ingreso a la red y evitar daar la calidad del suministro. Los filtros ms comunes
son los de 5a y 7a armnica. El trabajo del filtro es presentar una impedancia baja a una corriente
de una frecuencia determinada, con el fin de que sta quede circulando en el filtro cuando entra en
resonancia [11]. La 3a armnica puede ser eliminada del equipo de compensacin si sus elementos se
conectan en delta. Las configuraciones para filtros ms usadas se muestran en la Figura 2.14.

25
R

L R

C C

1 2
Figura 2.14: Topologas para filtros de armnicas

Para la configuracin 1 se tiene la siguiente relacin:

1
Xcap =
C
Xcap
Xreac = 2
h (2.12)
Xreac (fres )
R=
K
20 < K < 30

h es la armnica a la cul se sintoniza el filtro. La impedancia del filtro serie se calcula con la siguiente
expresin:

1
Z = R + j(L )
C (2.13)
Z = R + jX

Si X > 0 entonces el filtro es inductivo, en cambio si X < 0 el filtro es capacitivo.

2.7. Simulaciones de un SVC

La simulacin es una herramienta poderosa para abordar un problema de diseo sin tener que
construir fsicamente. Es til para darse una idea de las dimensiones del producto, y para estudiar el
comportamiento de un modelo frente a distintos escenarios. Existen diversos softwares de simulacin
de sistemas elctricos, entre los cuales destacan PSCAD, MATLAB Simulink y DIgSILENT.

26
the PI regulator produces a given value of admittance to assure
ue of phase voltage. the voltage constant.II. The power factor
PRINCIPLE OF of system changes due
SVC
he principle
to the variation of the given value[5], and the power factor
equency, theof value
Static Varof LCompensator
could be Figure
ranges 1 is
0.95 to power
1 in circuit of the system. abc is three
the system.
detail, and a kind of SVC system which phase power grid, and FC is reactive power compensators and
ntrolled Reactors TCRand Fixed Thebanks.
filter control It part
can also
smoothincludes harmonics,
5,7,1non-linear segment and six
meanwhile
ned. 1Bridge rectifier and L-R En lacircuit is pulse
literatura son variados
providegenerator.los ejemplos
According
reactive power. de simulaciones
to ab
Taking (1), phases de SVCs
the relationship [6]
for example,between[16] [12]. Un ejemplo de
anti-
(13)on
mmetrical2
1theory,
nwer
three-phase load. Based
) C the SVCsimulacin es el fundamental
de la parallel
Universidad component
thyristors
de AnHui of the [16].
are triggered
(China) current
in form within
En of phase
este reactor
caso control, andand
el software utilizado
is es MATLAB
system signals are
non-linear,
there is so
180ephaselinearlization segment
defference between was
the brought
two in
devices to
at make
the
cisely. In order to maintainSimulink thepara estudiar el comportamiento de un SVC con una capacidad de reactivos de 300 KVAr.
stability
decided by formula
and satisfy (14).
the requirements of system the output
same of PISupposed
branch. regulatortrigger
consistent
delayedwith i1. of
angle Thethyristor
lookupistable
En la Figura 2.15 se muestra
model of
,according la red simulada.
simulink
to the in
principle La carga
Matlab
of TCR, es
is
resistiva-inductiva
adopted
when to
changes fulfill
between(R-L)
they est conectada a
1e and admittance double loop control (14)
1L
the nwell-behaved la red mediante
steady-state 90 e
linearlization
and in
18 e this
, design.
the Simulation
relationship model
between of control
fundamental
un rectificador trifsico. De esta manera se logra crear una carga trifsica equilibrada
effects is
m voltage caused by load disturbance section
ode
en el software. is shown
component in figure
of current 4. reactor and can be indicated as
within
strained, and system power factor is well (1) :
n, m ranges
e SVC model 0.5is toestablished
1 normally. under the
AB
formulae and considering results
simulation.The simulation the
nsystem
volume can stabillize the fluctuation of
in design, taking a phase
aise power factor, and the merits of fast
meters could
precision be used as follows:
are verified.
0.0031H Reactive Power, Power Factor,
ntaneous
0.00012924H
0.0001255H
INTRODUCTION
0.00012528H
t of power electronic technology, more
non-linear Hdevices, such as electro-
0.00012455
rnaces etc,HareR19applied
0.00012442 a = 0.8
in industry.
have been improved greatly, serious
ower grid system, such as low power Figure 1.The
Figura 2.15: Ejemplo
Figure depower
4. Control
circuit of SVC
simulacin
section of SVC en Simulink [16]
in Matlab
form distortion.
L taken
STRATEGYby power 
OF TCRsector is fixed Six pulse generators are used to trigger TCR and its model
which in Matlab is shown as en
figure5.The
la Figura trigger order is en
as following:
stem ishas such advantages
as following: as simple
El mdulo TCR del SVC se muestra 2.16. Consiste reactancias conectadas a los
osts etc. However, due to the constant
tiristores y un bloque disparador
nvoltage of constant
only offer power grid could
reactive be
power,it Uab Udeacpulsos.
Ubc Uba Uca Ucb Uab !
1
ble value. of load and fulfil dynamic
changes Here,Umab is voltage peak value between phase a and b ;
ion, harmonics of system are easily XL is react- ance of reactor in series with thyristor.
or of the system 0.95.
so phenomena as overload, superheat When =90 e , thyristor is on fully, and i1 reaches the
n appear.
VC Theascapacitor
is shown figure[3]3.is easy to be highest value. When =180 e , thyristor is off entirely, i1
d for a long running . According to
reaches the lowest value. So, changing can control the
nt SVC unit is designed applying TCR
reactive current within reactor, namely, TCR could absorb
Three-phase non-conctrolled rectifier varying reactive power from power grid [1].
is adopted to simulate the three-phase
thyristor switched load is used to As the load of power grid is time-variant, the reactive
disturbance. The volume of this SVC powers variable quantity is supposed Q lo a d ,changing
to +300kvar timely could keep reactive power steady in system. So, to

Figure 5. The block of TCR and six pluse generator.


Figura 2.16: Ejemplo del TCR en Simulink [16]
c
/$26.00 2010 IEEE 2110 In this paper, the total volume of TCR is 600kvar, so, each
 phase consume 200kvar reactive power. Taking ab phase for
example, the value of L can be obtained from (15).
ontrol strategy of SVC
2
U ab
Q = = 200000
requirements, voltage-closed loop 1L (15)
make voltage constant, and inner-
ensation loop, it aims to increase So, Lab=0.00231094H.

27
2010 5th IEEE Conference on Industrial Electronics and Applicationsis
120

Los resultados se muestran en la Figura 2.17. El SVC es conectado a la red en el segundo 0.1 y la 100

carga es conectada en el segundo 0.2. Se aprecia que el voltaje (2.18, en rojo) permanece constante.
80

a/ deg
200
AND DYNAMIC 60

100

40
0

anaylsis with FFT is -100 20

is the result without Q / Var

-200

is switched into the -300


0
0 0.05

Figure 6. Phase current waveform and the anaylsis with FFT after FC is
-400
switched into system
-500

TCR is switched into the system at the time of 0.1s. At 0.2s,


-600
0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45
600

t / s
the load disturbance appears when Resistance-Inductance Load 400

is switched on2.17:
Figura by Potencia
thyristor
(c) at the
reactiva
The reactive side
del ejemplo
current ofenDC. The[16]dynamic
Simulink
of system
response of system is shown as the following figure7. 200
120
800

600

I/A
100 0

400

80
200 -200
black:I/A

a/ deg

0 60
red:U/V

-400
-200

40
-400

-600
0 0.05
-600 20

0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45


0 t/s
0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45
t / s
is with FFT after FC is Figura 2.18: Voltaje y corriente del ejemplo en Simulink [16]
(a) The waveform of system phase voltage and line current
The changes of in the system
(d)Red:voltage,black:current Figu
time of 0.1s. At 0.2s, 600

The variatio
nce-Inductance Load 450
400 as figure 7(a), a
of DC. The dynamic 400 of 0.1s. The r
ng figure7. 200
350 capacitor firstly
300 during 1 to 2 pe
I/A

250 phase to laggin


U/ V

200
-200
desired power f
150

100
-400
At the tim
50
connected to s
-600
00 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5
scarcely chang
0 0.05 0.1 0.15 0.2
t/s
t/s 0.25 0.3 0.35 0.4 0.45
power nearly re
0.35 0.4 0.45

(e) The phase current of TCR 1. Meanwhile,


(b) The effective value of system line voltage inductive react
and line current some conclusio
Figure 7.The simulation waveform of the system
(1) When lo
The variation of bus voltage
28
waveform of system is shown be kept constan
as figure 7(a), and TCR is switched into the system at the time better.
2.8. Estado de arte de equipos FACTS

ability and
2.8.1. Reduce Congestion over
FACTS a nivel internacional

Los SVC en alta tensin estn presentes en gran parte del mundo, siendo sus mayores exponentes
las empresas ABB y SIEMENS [2] [18].
En la subestacin Allegheny Powers Black Oak, cerca de Rawlings, Maryland en EE.UU, existe un
SVC instalado por ABB el 2007 [1]. El equipo est conectado a la red de 500 kV del sistema PJM
(Pennsylvania, Jersey, Maryland) en uno de los puntos ms cargados de la red. La capacidad del SVC
es de -145/+575 MVAr. La instalacin tard 14 meses, un gran logro considerando el tamao de la
unidad y la complejidad de la conexin.

upplied by ABB
gheny Powers
d. The instal-
owers 500kV
ne one of the
lvania, Jersey,
hanging reac-
In addition to
ased transmissi-
more power to
ources and an
ns increased

o stabilize the
work operation

gional Transmis-
es and additions
ssion system Furthermore,Figura 2.19: Imagen area del SVC de Black Oak [1]
the SVC control system incorporates automa-
tic connection and disconnection of two 500 kV MSC in the
same substation.
ctive to 575 Mvar
ject was com- Main circuit design
cope, size and The main SVC design is a 6-pulse configuration with two TCR
with an advanced branches (Thyristor Controlled Reactor), three TSC branches
y the operation (Thyristor Switched Capacitor),29
and two harmonic filter pairs,
o 500kV Mecha- one redundant, each tuned to the 5th and 7 th harmonics. Red-
Impala, Illovo & Athene
Voltage stability to ensure
En lasecurity
figuraof2.20
power
sesupply
muestra el diagrama unilineal del SVC de Black Oak. Est compuesto por dos
mdulos TCR de 144 MVAr cada uno y de tres mdulos TSC tambin de 144 MVAr. Adems posee
a y 7a . En el lado de alta tensin se tienen dos mdulos MSC que se
Richards Bay is dos
a majorfiltros para
industrial the Republic 5
lasofarmnicas
centre
of South Africa with aluminium smelter plants, paper mills
utilizan cuando la respuesta del Technical
SVC Data (debido a que son dinmicamente ms lentos que
no es urgente
and open-cast Mining, among others located in the region.
Customer ESKOM, South Africa
With the main generation
los TSC). centres of the Transvaal over
200 km away, maintaining a stable and secure supply to System voltage 275 kV/50 Hz; 400 kV/50 Hz
this region is critical. In 1994 and 1995 Siemens success-
fully installed three Static Var Compensators for the South Transformer 4 x 66.7 MVA
African Utility ESKOM (Electricity Supply Commission) at 500 kV
Operating range + 100 MVAr (capacitive) to
their 275 kV substations (Impala and Illovo) and at their 300 MVAr (inductive)
newly built 400 kV substation Athene. 575 MVA
Definition of SVC 2 x TCR
branch circuits MSC
3 x Filters
The NATAL Static Var Compensators are designed for:
Q Fast dynamic network stabilization 216 Mvar 288 Mvar
(voltage stabilisation)
Q Reduction of voltage unbalance
275 kV/400 kV, 50 Hz
Q Reduction of network disturbances
Q Increasing of transmission capability
Q Control of external reactive-power devices

L TCR 1 L TCR 2 LF1 LF2 LF3


2 2
CF1 CF2 CF3

Filter 1 Filter 2 Filter 3


TCR TCR TSC LTSC
TCR 1 L TCR 2
TSC 5th 7th 5th 7th
144 Mvar 144 Mvar 144 Mvar 1442Mvar 144 Mvar
2 103 Mvar 40 Mvar 103 Mvar 40 Mvar
(spare) (spare)
TCR 1 TCR 2

Single line diagram.


Figura 2.20: Unilineal del SVC de Black Oak [1]
Control and protection system Main technical data
The SVC is controlled by a micro-processor based control
En las subestaciones Impala (275 kV), Illovo (275 kV) y Athene (400 kV), en Richards Bay,
system, based on the ABB MACH 2 concept, built around an Controlled voltage 500 kV
Sudfrica, existenindustrial
SVC instalado
PC withpor SIEMENS
add-in desde and
circuit boards el ao
I/O1995.
racks La capacidad
con- SVCderating
cada unidad145es de
Mvar inductive t
-300/+100 MVar. nected through standard type field busses. Dedicated voltage Control system Voltage control by m
and current transformers provide the control system with system with control
Harare
network variables employed in the SVC control. sequence voltage ar
Zimbabwe
Namibia Mozambique
and switching contro
Botswana The control system provides facilities for SVC control either Thyristor valves PCT type thyristors,
from an Operator Work Station (OWS) in the SVC control light firing
Swaziland
room or remotely via a Gate Way Station to a conventional
Johannesburg
Athene RTU/SCADA system.
Oran Transvaal
Impala
ge Generation

Durban The SVC control system is structured in the following modes:


Illovo
South Africa Automatic Voltage Control, including a Power Oscillation
Cape Town Damper (POD) regulator and switching control of two
500 kV MSC.
19
Figura 2.21: Imagen del SVC de Impala [18]
Manual Control.
The normal mode of operation is Automatic Voltage Control,
operated in a closed loop.
Este diagrama unilineal (figura 2.22) es diferente al de Black Oak. Consiste en dos mdulos TCR
de 150 MVAr y posee
A POD tres filtros
control de armnicas,
is implemented que a future
to enhance su vez realizan
power trans-compensacin de reactivos
permanente (no son conmutables).
fer capabilities.
For more information please contact:
Thyristor valves
ABB AB
Each three-phase thyristor valve consists of three single-pha-
FACTS
se units with PCTs (Phase Control Thyristor) stacked vertically
SE-721 64 Vsters, SWEDEN
in two anti-parallel stacks per phase. In parallel with each
Phone: +46 (0)21 32 50 00
thyristor, a snubber circuit (series connected resistors and
Fax: +46 (0)21 32 48 10
capacitors) is mounted. The thyristors are liquid cooled using
de-ionized water with low conductivity30 as coolant. www.abb.com
ala and Illovo) and at their 300 MVAr (inductive)
Athene.
Definition of SVC 2 x TCR
sators are designed for: branch circuits 3 x Filters
lization

ance 275 kV/400 kV, 50 Hz


rbances
capability
-power devices
L TCR 1 L TCR 2 LF1 LF2 LF3
2 2
CF1 CF2 CF3

Filter 1 Filter 2 Filter 3


L TCR 1 L TCR 2
2 2

TCR 1 TCR 2

Figura 2.22: Unilineal del SVC de Impala [18]

2.8.2. FACTS a nivel nacional

Debido a la geografa en Chile la topologa en el SIC es principalmente radial. Es sabido que en


las topologas radiales priman los problemas de voltaje, debido a las largas lneas que se traducen en
mayores cadas de voltaje. Es por eso que el SIC posee 5 equipos SVCs funcionando a lo largo del pas
(propiedad de Transelec y fabricados por ABB [3]) conectados al sistema troncal de transmisin (Tabla
2.1). Los ms nuevos (ao 2000 en adelante) son los SVCs Puerto Montt, Polpaico y Cerro Navia.

Mozambique Unidad Tensin de conexin Absorcin reactivos Entrega reactivos


SVC Pan de Azcar 220 kV 80 MVAr 48 MVAr
SVC Maitencillo 220 kV 40 MVAr 24 MVAr
SVC Puerto Montt 220 kV 40 MVAr 70 MVAr
SVC Polpaico 220 kV 65 MVAr 100 MVAr
waziland
SVC light Cerro Navia 220 kV 65 MVAr 140 MVAr

la Tabla 2.1: SVCs instalados en el SIC

Ambas subestaciones Polpaico y Cerro Navia estn cercanas a la capital Santiago de Chile, donde
se concentra la mayor parte de la carga del SIC. Gracias a ambos equipos FACTS la capacidad de
transmisin aumento desde 1.400 MW hasta 1.600 MW en la lnea de 500 kV entre Ancoa y Alto
Jahuel [3]. En la Figura 2.24 se observa que el SVC de Polpaico contiene un19
mdulo TCR y un mdulo
FC, que adems contiene filtros de armnicas.

31
Enable an increase of the power transfer capability of the
equence, Transelec S.A. has been investigating paico, a transmission corridor exceeding 300 km of length
Background grid.
ays to exploit
The existing facilities to System
Central Interconnected a higher degree.
serves (Fig.
the central part of 1).
d, after completion of feasibility
Chile and supplies power to studies,
about 90%it was
of the Chilean popula-
tion. Transelec
o install FACTS devicesS.A. is the main
at critical transmission
points in the operator
grid and Both Cerro Navia and Polpaico substations are located in the
owns and operates transmission facilities at voltages from 500 kV capital of Santiago de Chile, where the greatest part of the
m of increasing the dynamic stability of the system
down to 66 kV. load of
Fig.1: FACTS the Central
locations in Interconnected System is concentrated.
the Central Interconnected System.
y allow more power to be transmitted through the grid. Together, the devices increase the power transmission capac-
In Chile, as in other parts of the world, there is growing oppo- ity from previously 1.400 MW to 1.600 MW over the 500 kV
sition to the
taking comprises theconstruction
following ofitems:
new transmission infrastructure. corridor between Ancoa and Alto Jahuel, and Ancoa and Pol-
As a consequence, Transelec S.A. has been investigating Polpaico paico, a transmission corridor exceeding 300 km of length
optimal ways to exploit existing facilities to a higher degree. (Fig. 1).
SVC
COM located at end,
To this the after
Cerro Navia 220
completion kV substa-
of feasibility studies, it was
Cerro Navia
ted at 65 Mvar inductive
decided to 140devices
to install FACTS Mvar atcapacitive
critical points in the grid
STATCOM
with the aim of increasing the dynamic stability of the system
40 Mvar); Polpaico 500
Fig.1: kV locations in the Central Interconnected System.
FACTS
and thereby allow more power to be transmitted through the grid.
C located at the Polpaico 220 kV substation, rated at Alto Jahuel

00 Mvar. The undertaking comprises the following items:


Polpaico
of an MSC (Mechanically Switched Capacitor) located SVC
Alto Jahuel 500 kV
olpaico 220 kV
A STATCOM located at the Cerro Navia 220 kV substa-
substation, and rated at 100 Mvar. Cerro
Ancoa 500Navia
kV
tion, rated at 65 Mvar inductive to 140 Mvar capacitive
STATCOM
(-65/+140 Mvar); Polpaico
220 kV 500 kV
An SVC located at the Polpaico 220 kV substation, rated at Alto Jahuel
500 kV
-65/+100 Mvar.
Control of an MSC (Mechanically Switched Capacitor) located Alto Jahuel 500 kV
at the Polpaico 220 kV substation, and rated at 100 Mvar. Ancoa 500 kV
220 kV 220 kV
220 kV Figura 2.23: Conexin
500 kV de los SVCs Polpaico y Cerro Navia [3]

220 kV
220 kV
100 MVA
140 MVA

100 MVA
140 MVA

VSC 5th 12th 33th TCR 5th 7th


SC 5thMvar
102.5 12thMvar
12.5 1033 th
Mvar 15 Mvar
TCR192 Mvar th
835Mvar 7th
46 Mvar
5 Mvar 12.5 Mvar 10 Mvar 15 Mvar 192 Mvar 83 Mvar 46 Mvar
Fig. 2: Single-line diagram, Cerro Navia SVC Light. Fig. 3: Single-line diagram, Polpaico SVC.

le-line diagram, Cerro Navia SVC Light. Figura


Fig. 2.24:diagram,
3: Single-line
2 FACTS for grid voltage stabilization and increased power transmission capability in Chile
Diagrama unilineal
Polpaico SVC. SVC Polpaico [3]

grid voltage stabilization and increased power transmission capability in Chile


En el diagrama unilineal de la figura 2.24 se muestra el mdulo TCR de 192 MVAr y los filtros de
armnicas (5a y 7a ) que a su vez realizan la compensacin reactiva. Es importante notar que los filtros
no son conmutables, por lo tanto la compensacin reactiva capacitiva es fija y debe ser coordinada
con el TCR para evitar sobrevoltajes en la barra. Si bien el equipo FACTS de Cerro Navia recibe el
nombre de SVC Light, este equipo tcnicamente corresponde a un STATCOM debido a su tecnologa
empleada [4]. Los reactores son controlados por un VSC (Voltage Source Converter), el cual est
compuesto por IGBTs controlados por pulsos PWM. Esto permite crear una onda de voltaje, similar
a un generador, y generar reactivos independientemente del voltaje de la red, obteniendo as mayor
confiabilidad en el sistema.

32
2.8.3. FACTS a escala

En diversos laboratorios de universidades en el mundo se han desarrollado equipos FACTS a


escala con fines pedaggicos o de investigacin [5] [8] [10] [19] [22] .
En la universidad de Tsinghua (China) se implement un SVC a escala que consiste en un mdulo TCR
y un mdulo TSC [22]. stos son controlados por un microcontrolador TMS320C32 (DSP) el cual se
comunica con un computador para mostrar los datos en una interfaz de usuario.

Figura 2.25: Esquema lgico del funcionamiento del SVC de Tsinghua [22]

El computador se comunica mediante RS485 con el microcontrolador, esto permite visualizar


las variables de monitoreo y cambiar si se desea los algoritmos de control del DSP. Tambin en
la Universidad de Chile se implement un SVC en el laboratorio de energa del Departamento de
Ingeniera Elctrica [10] [5]. Este equipo est compuesto por un mdulo TCR y dos mdulos FC, los
cuales tienen una capacidad de abosrcin de 660 VAr y una entrega de 740 VAr, conectado a la red de
distribucin de 380 Vf f . El esquema de control de este SVC se muestra en la figura 2.26.

33
BARRA DE ALTA MEDICIN DE Vm REGULADOR DE B

TENSIN TENSIN
RED BARRA DE BAJA
LABORATORIO
Vref

LNEA DE
PRUEBA n_TSC UNIDAD DE
PULSOS SINCRONIZADOR DE
DISPARO DISTRIBUCIN

CONTROL

Figura
Figura 4.7 Diagrama
2.26: Esquema bsico, configuracin
del SVC del DIESVC.
[5]

El control principal es realizado por un PIC 16F877A y el disparo de los tiristores es sincronizado
A continuacin, se explica cada uno de los bloques que componen el prototipo de SVC
por el PIC 18F242. El monitoreo se puede realizar mediante un LCD instalado en el SVc o por
implementado.
un computador conectado mediante RS232 al PIC principal, usando el software MATLAB Simulink
(Figura 2.27).

4.4.1. Transformador de bajada

El transformador de poder utilizado, es del tipo ncleo core, conexin Yd1 (ver Figura 4.8). Se
determina este tipo de conexin para absorber en la delta las corrientes de tercera armnica,
generadas en el lado de baja tensin del SVC, como se explica en el captulo tres. La tensin
mxima de operacin se especifica en 1.1 [p.u.], ya que al igual que en SVC de altos niveles de
potencia, el prototipo a escala debe operar en forma continua en sobre-tensin si es necesario, sin
saturar el transformador.

Figura 2.27: Interfaz del CER del DIE [5]

73

34
Captulo 3

Introduccin a Modbus y DSP

3.1. Introduccin

Con el auge de los semiconductores y los microprocesadores se han automatizado o controlado


diversos procesos que antes eran difciles o imposibles de controlar manualmente. En particular, para
el monitoreo de la red elctrica, la frecuencia de la red es de 50 Hz por lo que se requiere de una
tecnologa veloz que alcance a reaccionar frente a contingencias en la red en el lapsus de un par de
ciclos, del orden de los milisegundos. Actualmente en el mercado se tiene acceso a microprocesadores
capaces de realizar una accin en el orden de los nanosegundos. Gracias al fcil acceso a estos
controladores es posible emular prototipos a escala de tecnologias de equipos FACTS que se utilizan
actualmente en la industria.

La comunicacin de los microprocesadores es un tema no menor, debido a la gran cantidad de


equipos que puede haber en una misma micro-red. En este caso puede resultar complicado recolectar
informacin de cada equipo si no se dispone de un protocolo de comunicacin. En particular se tiene
el protocolo Modbus, un estndar comn a nivel industrial por su fcil implementacin y entendimiento.

35
3.2. Protocolo de comunicaciones Modbus

3.2.1. Origen

Modbus es un protocolo creado para comunicar diferentes dispositivos electrnicos. Se basa en


la comunicacin maestro-esclavo. Tiene su origen en 1978 desarrollado por la empresa Modicon con
el fin de comunicar distintos controladores lgicos programables (PLC). Con el paso del tiempo el
protocolo fue adoptado por distintas empresas dedicadas al control automtico, convirtindose en el
primer estndar de comunicacin de la industria de la automatizacin [17].

3.2.2. Descripcin del protocolo

El protocolo Modbus define una estructura de mensajes que es independiente de la interfaz fsica
de comunicacin. En la tabla 3.1 se muestran en orden los 4 componentes que definen un mensaje.

Campo Descripcin
Direccin Identificador del receptor
Funcin Cdigo que define el tipo de mensaje
Datos Bloque de datos o informacin
Chequeo de error Funcin que comprueba errores de comunicacin

Tabla 3.1: Estructura de mensajes en Modbus

Las conversaciones son iniciadas por el (los) maestro de la red Modbus. El esclavo responde
segn el contenido del mensaje. La direccin del mensaje define cual esclavo es el que debe responder.

Existen 4 tipos de datos en Modbus, descritos a continuacin:

Holding Registers: Registro de 16 bits. Se puede usar como escritura/lectura. Numerado como
registros 4xxxx. (40001, 40002, etc..).

Input Registers: Registro de 16 bits. Slo puede ser usado como lectura. Generalmente usado
para las entradas anlogas. Numerado como 3xxxx.

Inputs: Registro de lectura binario. Usado como lectura de encendido/apagado. Numerado como
1xxxx.

36
Coils: Registro binario de escritura/lectura. Usado para el encendido/apagado de rels, luces,
entre otros. Numerado como 0xxxx.

Las funciones en Modbus tambin tienen un estndar. En la tabla 3.2 se muestran las ms usadas
en la industria:

Funcin Descripcin
01 Leer estado Coil
02 Leer estado Input
03 Leer registro Holding
04 Leer registro Input
05 Escribir estado Coil
06 Escribir registro Holding
15 Escribir mltiples Coils
16 Escribir mltiples registros Holding

Tabla 3.2: Cdigo de las funciones en Modbus

El protocolo Modbus tiene 3 formatos de implementacin: Modbus RTU, Modbus ASCII y Modbus
TCP. En el presente trabajo se implement el primer formato, cuyas caractersticas tcnicas se muestran
en la tabla 3.3.

Modbus RTU
Caracteres Binario: 0...255
Chequeo Error CRC: Comprobacin redundante cclica
Inicio 3.5 caracteres de silencio
Trmino 3.5 caracteres de silencio
Bits 8
Paridad Par/Impar/Ninguna
Stop Bits 12

Tabla 3.3: Caractersticas tcnicas de Modbus RTU

Para aclarar los conceptos previos se ilustrar a continuacin un ejemplo de Modbus, que consiste
en la peticin de un maestro y la respuesta del dispositivo esclavo. En la tabla 3.4 se ve que el maestro
le pide al dispositivo nmero 5 la informacin contenida en los 2 primeros registros Inputs.

37
Cdigo Descripcin
05 Direccin esclavo
04 Funcin (leer registro Input)
00 Comienzo de los registros (alto)
00 Comienzo de los registros (bajo)
00 Nmero de registros (alto)
02 Nmero de registros (bajo)
B1 CRC (alto)
C8 CRC (bajo)

Tabla 3.4: Ejemplo de peticin de Maestro en Modbus

En este caso el comienzo de los registros es 0 (0x0000 en hexadecimal), esto quiere decir que
el esclavo comenzar la lectura desde el registro 30001. En este caso se requiere la informacin de
los dos primeros registros, los cuales son el 30001 y el 30002. En la tabla 3.5 se muestra la respuesta
del dispositivo nmero 5. Siempre que la peticin del maestro haya sido correctamente leda el esclavo
responde el eco de su direccin y la funcin pedida por el maestro. En este caso el esclavo devuelve
como eco 05 (su direccin) y 04 (la funcin pedida). Luego enva el nmero de bytes ledos. Cabe
recordar que los Input registers tienen un tamao de 16 bits, por lo tanto su informacin es guardada
en 2 bytes de 8 bits cada uno. En este caso se leyeron 2 registros lo que corresponde a 4 bytes (04).
Despus el esclavo muestra el contenido en cada registro, comenzando por el byte ms significativo.
En este ejemplo, en el registro 30001 est guardado el nmero 161 y en el registro 30002 el nmero
494. Finalmente enva la respuesta correspondiente al CRC.

Cdigo Descripcin
05 Direccin esclavo
04 Funcin (eco de la funcin pedida)
04 Nmero de bytes ledos (2*2 registros)
00 Contenido del primer registro (alto)
A1 Contenido del primer registro (bajo) (A1=161 en decimal)
01 Contenido del segundo registro (alto)
FF Contenido del segundo registro (bajo)(FF=255)
C2 CRC (alto)
E4 CRC (bajo)

Tabla 3.5: Ejemplo de respuesta de un esclavo en Modbus

El protocolo Modbus se puede implementar en distintos canales fsicos de comunicacin, entre los
cuales destacan: RS-232, RS-485 y Ethernet.

38
3.3. Especificaciones generales del microcontrolador

En el presente Trabajo de Ttulo se utiliz el microcontrolador TMS320F28335 fabricado por Texas


Instrument. Se eligi este microcontrolador por su gran velocidad de procesamiento necesaria para
poder medir, procesar y enviar informacin en el transcurso de un ciclo de la red elctrica (20 ms). Las
caractersticas ms importantes se muestran a continuacin:

150 MHz de velocidad de procesamiento (6.67-ns por ciclo de trabajo).

Operacin en punto flotante.

18 salidas con Modulacin por Ancho de Pulso (PWM).

3 relojes de 32 Bits.

Puertos de comunicacin: SCI (UART), SPI, CAN, I2C.

16 Canales de conversores anlogo/digital (ADC).

88 puertos entrada/salida (GPIO).

8 pines de Interrupcin Externa (XINTF)

256K x 16 en memoria Flash, 34K x 16 en memoria RAM.


La programacin del microcontrolador se realiza en lenguaje C/C++ en la interfaz Code Composer
Studio.

3.4. Perifricos del microcontrolador

De los perifricos mencionados anteriormente se describen a continuacin slo los utilizados en


la rutina de control del SVC.

3.4.1. Puertos digitales Entrada/Salida (GPIO)

Estos puertos son bsicamente pines digitales que se pueden implementar como entradas o
salidas, en donde el estado Alto es 3.3 V y el estado Bajo es 0 V. El modo salida es til para
encender/apagar leds de operacin y transistores, los cuales permiten energizar equipos de potencias
mayores. El modo entrada se utiliza generalmente para leer pulsadores o entradas paralelas.

39
3.4.2. Interfaz de Interrupcin Externa (XINTF)

El DSP permite hasta 8 pines configurados para interrupcin externa, los cuales deben estar entre
GPIO00 y GPIO63. El pin puede ser configurado para detectar flanco ascendente, flanco descendente
o ambos. Por ejemplo, si el pin se configura para flanco ascendente y luego se somete a un cambio de
0 a 3 V, gatillar enseguida a la rutina de interrupcin asociada.

3.4.3. Conversor anlogo digital (ADC)

Este puerto permite leer voltajes entre 0 y 3 V de manera digital, con una precisin de 12 bits. Es
til para leer distintos tipos de sensores (temperatura, humedad, fotoresistencias, entre otros) y para
leer corrientes y voltajes de una red elctrica. Es necesaria una etapa de reduccin de voltaje si se
desea medir dicha variable en la red elctrica de distribucin (220 V).

3.4.4. Puerto de comunicacion serial (SCI o UART)

El puerto de comunicacion serial est formado por 3 pines: Transmisin (Tx), Recepcin (Rx) y
Tierra (Gnd). Este puerto puede conectarse a la interfaz RS-232 para comunicarse con un computador
o tambin a la interfaz RS-485 para conectarse a una red Modbus. Para la conexin fsica es necesario
un transceptor debido a la diferencia de voltajes existente entre el DSP y las redes de comunicacin.

3.5. Estructura y funcionamiento de un programa

Las rutinas de programacin del DSP se pueden dividir en 6 partes, mostradas en orden en la
figura 3.1.

1 Incluir Headers
2 Declaracin de funciones y variables globales

3 Inicializacin de los perifricos

4 Inicializacin de las interrupciones (si las hay)

5 Ciclo principal (loop)

6 Implementacin de las funciones

Figura 3.1: Estructura del cdigo

40
La primera parte consiste en incluir los Headers, los cuales son archivos con las funciones bsicas
para configurar el microcontrolador (los headers varan segn el modelo). La segunda parte del cdigo
contiene las declaraciones de las funciones utilizadas en el programa y las variables globales que se
utilizarn en el ciclo principal o en las funciones. La tercera parte corresponde a la configuracin y
puesta en marcha de los perifricos que se utilizarn en la rutina del DSP. Luego viene la configuracin
de las interrupciones. Existen diversos tipos de interrupciones las cuales se dividen en dos categoras,
internas y externas. Las ms comunes son: por reloj (interna), por UART (externa), por XINTF (externa),
por ADC (interna). No siempre se utilizan las interrupciones, sin embargo su uso permite abordar
distintas tareas en paralelo de manera eficiente. La quinta parte consiste en el ciclo principal del cdigo,
que generalmente es un ciclo while true, en donde se realizar la tarea implementada de manera
peridica. La parte final del cdigo contiene la implementacin de las funciones declaradas al comienzo
de la rutina.

Una vez compilado el cdigo, el DSP realiza el ciclo de trabajo de acuerdo a la rutina programada.
El flujo del ciclo de trabajo se ve en la figura 3.2.

Inicializacin:
- Funciones
- Variables
- Perifricos
- Interrupciones

Interrupciones:
- Por reloj
Ciclo principal - Por comunicacin
- Por lectura digital
- Por lectura anloga

Figura 3.2: Ciclo de Trabajo del DSP

La inicializacin se realiza al comienzo de la rutina y este paso ocurre slo una vez. Por esto hay
que tener en cuenta la configuracin de los perifricos, ya que es difcil volver a configurarlos estando en
el ciclo principal. El ciclo principal ocurre peridicamente, la frecuencia del ciclo depende de la cantidad
de tareas que se hayan programado y de los retardos (delays) incorporados. Cada vez que ocurre una
interrupcin, el DSP deja de hacer lo que estaba haciendo en el ciclo principal y atiende a la rutina de
interrupcin.

41
Una vez finalizada la rutina de interrupcin, el microcontrolador retoma la tarea que estaba
realizando. De esta manera se pueden realizar tareas en paralelo, siempre y cuando la duracin del
ciclo de trabajo de la rutina de interrupcin sea pequea en comparacin a la duracin del ciclo de
trabajo del loop principal.

Las rutinas de interrupcin (ISR: Interrupt Service Routine) corresponden a una funcin como cualquier
otra que es llamada cada vez que se detecta la interrupcin especfica. Estas funciones son declaradas
al comienzo el cdigo, y luego son implementadas al final del cdigo, al igual que las otras funciones.
Es posible implementar una rutina slo con interrupciones sin ciclo principal, ya que dentro de las
funciones ISR pueden ir implementadas las tareas a realizar.

3.6. Ejemplos de aplicacin

A continuacin se muestran dos ejemplos de programacin en el DSP que permiten ver las
sentencias tpicas de inicializacin y configuracin. Para los usuarios de un DSP que quieran
implementar alguno de estos ejemplos se les recomienda primero leer SystemFrameworkOverview,
tutorial disponible en controlSUITE que explica como crear un proyecto en Code Composer Studio.

3.6.1. Parpadear un Led

Existen diversas maneras de hacer parpadear un Led con un microcontrolador. En este ejemplo
se utiliza el mtodo del retardo dentro del ciclo de trabajo principal. Para prender y apagar el Led
se utiliza el pin GPIO34 como salida. Es importante destacar que los pines del DSP entregan una
corriente mxima de 4 mA, en caso de exceder se puede daar el pin. Se explicar el cdigo siguiendo
el esquema de la figura 3.1.

La primera parte del cdigo es as:

#include "DSP28x_Project.h" // Header del microcontrolador

Esta sentencia incluye el header del microcontrolador a utilizar. En este caso el nmero 28x hace
referencia al TMS320F28335. Luego viene la declaracin de funciones y variables globales.

//----------------Declaracin de funciones y variables globales--------------


void retardo(void);
int contador = 0; //Contador de retardos

Se observa la declaracin de la funcin retardo, la implementacin de la funcin se deja para el


final del cdigo. Se cre un contador de retardos para ilustrar el manejo de variables. Una vez hechas
las declaraciones se procede al tercer paso, la inicializacin del DSP:

42
void main(void)
{

//-----------------------Inicializacin de los perifricos-------------------

InitSysCtrl(); // Inicia el PLL y los relojes internos


// Se encuentra en DSP2833x_SysCtrl.c

EALLOW; //Iniciar configuracin de los GPIO


GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0; // 0=GPIO, 1=ECAP1, 2=Resv, 3=Resv
GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1; // 1=OUTput, 0=INput
GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1;//Inicia en 0 [V]
EDIS; //Finalizar configuracin de los GPIO

La funcin InitSysCtrl() viene por defecto en el compilador CCS y es vital para el funcionamiento
del DSP en todas las rutinas. En palabras prcticas es la funcin que inicia los relojes internos del
microcontrolador, los cuales son imprecindibles para cualquier instruccin. Luego viene la configuracin
de los puertos digitales GPIO. Los registros de estos puertos estn protegidos, por eso es necesario el
comando EALLOW, el cual permite modificar registros protegidos. Para finalizar la escritura de registros
bloqueados se termina con el comando EDIS. Una vez finalizada la configuracin del DSP se procede
al ciclo principal.

for(;;) //anlogo a while (true)


{
GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1; //Pone en 0[V] el GPIO34
retardo();
GpioDataRegs.GPBSET.bit.GPIO34 = 1; //Pone en 3.3[V] el GPIO34
retardo();
}
} //Fin de void main(void)

El comando GPBCLEAR corresponde al apagado del pin, mientras que el GPBSET enciende el pin.
Cada vez que el pin cambia de estado se llama a la funcin retardo(), de lo contrario el cambio
de estado del pin sera tan veloz que no se apreciara por el ojo humano. Finalmente se procede a
implementar las funciones utilizadas en la rutina.

void retardo()
{
++contador;
volatile long i;
for (i = 0; i < 5000000; i++) {} //retardo de 500 [ms]
}
//-----------------------------FIN------------------------

43
3.6.2. Enviar mensaje por puerto serial UART

El uso del puerto UART es indispensable para enviar informacin desde el DSP a un computador
u otros microcontroladores. El DSP posee 3 puertos de comunicacin serial (SCI-A, SCI-B y SCI-C), en
este caso se utilizar el primero, compuesto por los pines GPIO28 y GPIO29. El ejemplo ms sencillo
para visualizar esta funcin es mandar el texto Hola Mundo desde el DSP y recibirlo en el computador.
Para eso se implement el siguiente cdigo:

#include "DSP28x_Project.h" // Header del microcontrolador

//----------------Declaracin de funciones y variables globales--------------

void scia_configurar(void);
void scia_fifo_iniciar(void);
void scia_emitir(int a);
void scia_msg(char *msg);
void retardo(void);

Uint16 LoopCount; //Contador de mensajes emitidos

Se observan 4 nuevas funciones, cuya implementacin se muestra al final del cdigo. Las dos
primeras funciones tienen como objetivo la configuracin de los parmetros tcnicos del SCI-A, como
la eleccin del baudrate, la paridad y la cantidad de bits a enviar. Las funciones scia_emitir y scia_msg
son tiles para el envo de strings y chars. A continuacin se muestra el main, que contiene la
inicializacin de los perifricos y el ciclo principal.

void main(void)
{
char *msg; //Variable auxiliar
//Arreglo de chars

InitSysCtrl(); //DSP2833x_SysCtrl.c
InitSciaGpio(); //Inicia el puerto serial SCI-A
//DSP2833x_Sci.c
scia_fifo_iniciar(); // Inicia el FIFO
scia_configurar(); // Configura el SCI-A

LoopCount = 0;
//-----------------------Ciclo principal-------------------
for(;;)
{
msg = "\r\nHola Mundo!\0";
scia_msg(msg);
++LoopCount;
retardo();

44
}
} //Fin del main

La funcin InitSciaGpio tambin viene por defecto, su funcin es inicializar los pines GPIO28 y GPIO29
como pines de recepcin (Rx) y transmisin (Tx) respectivamente. Luego se llama a las funciones
previamente declaradas para la configuracin del SCI-A y se procede con el ciclo principal. Se utiliza la
variable msg para almacenar el string que se desea enviar. Luego el string es enviado con la funcin
scia_msg(msg).

//------------Implementacin de las funciones declaradas---


void retardo()
{
volatile long i;
for (i = 0; i < 10000000; i++) {}
}
void scia_configurar()
{
SciaRegs.SCICCR.all =0x0007; // 1 stop bit, No loopback
// Sin paridad,8 char bits,
// async mode, idle-line protocol
SciaRegs.SCICTL1.all =0x0003; // Habilitar TX, RX, internal SCICLK,
// Disable RX ERR, SLEEP, TXWAKE
SciaRegs.SCICTL2.all =0x0003;
SciaRegs.SCICTL2.bit.TXINTENA =1;
SciaRegs.SCICTL2.bit.RXBKINTENA =1;
#if (CPU_FRQ_150MHZ)
SciaRegs.SCIHBAUD =0x0001; // 9600 baud @LSPCLK = 37.5MHz.
SciaRegs.SCILBAUD =0x00E7;
#endif
#if (CPU_FRQ_100MHZ)
SciaRegs.SCIHBAUD =0x0001; // 9600 baud @LSPCLK = 20MHz.
SciaRegs.SCILBAUD =0x0044;
#endif
SciaRegs.SCICTL1.all =0x0023; // Relinquish SCI from Reset
}
void scia_emitir(int a) //Transmite un caracter
{
while (SciaRegs.SCIFFTX.bit.TXFFST != 0) {}
SciaRegs.SCITXBUF=(int)a;
}
void scia_msg(char * msg) //Transmite un arreglo de caracteres
{
int i;
i = 0;
while(msg[i] != \0)
{

45
scia_emitir(msg[i]);
i++;
}
}
void scia_fifo_iniciar()
{
SciaRegs.SCIFFTX.all=0xE040;
SciaRegs.SCIFFRX.all=0x204f;
SciaRegs.SCIFFCT.all=0x0;
}
//-----------------------------FIN------------------------

Para la configuracin del UART se utiliz un baudrate de 9600, con transmisin de 8 bits sin paridad
como se observa en la configuracin de scia_configurar. Esta configuracin depende de la velocidad
del DSP, que puede ser 100 o 150 MHz en este caso. Para una correcta visualizacin del mensaje
se recomienda usar el software Hyperterminal, si no se puede utilizar el monitor serial que viene en el
software de Arduino. En ambos casos se debe seleccionar el puerto COM al cual est conectado el
puerto SCI-A del DSP.

3.6.3. Implementacin de Modbus en el DSP

Modbus es un protocolo que puede implemetarse en cualquier microcontrolador con puerto de


comunicacin UART. Este puerto puede conectarse a RS-232, RS-485 o Ethernet, dependiendo de
la necesidad. En este ejemplo se puede utilizar tanto RS-232 como RS-485. Cabe destacar que para
conectar el puerto UART del DSP al puerto RS-232 de un computador se debe usar el transceptor
max3232, el cual eleva la seal de 3.3 V a 12 V. En caso de no tener puerto RS-232 el computador se
debe utilizar adems un conversor RS-232 a puerto USB. Si se desea conectar el puerto UART a una
red Modbus con RS-485 se debe usar el transceptor max3485.

El cdigo para la implementacin de Modbus RTU en el TMS320F28335 es extenso en


comparacin a los ejemplos anteriores. La rutina completa se puede observar en la seccin Anexos. A
continuacin se explicarn solo los conceptos ms importantes del cdigo.

#include "DSP28x_Project.h"

//----------------Declaracin de funciones y variables globales--------------

void scia_configurar(void);
void EnviarDatosModbus();
void InicializarRegistros();
void LeerCoilStatus(); //Leer bits de cambio de estado
void LeerInputStatus(); //Leer bits de estado de operacin
void LeerHoldingRegisters(); //Leer registros Holding
void LeerInputRegisters(); //Leer registros Inputs

46
void Escribir_Coils(); //Escribir bits de cambio de estado
void Escribir_Holding(); //Escribir registro Holding
void ModbusExcep(Uint16);
interrupt void scia_recibir(void); //Interrupcin de recepcin de datos
interrupt void scia_enviar(void); //Interrupcin de envo de datos
Uint16 AddrCheck(Uint16,Uint16,Uint16); //chequeo de direccin
Uint16 CRC16(Uint16 *, Uint16); //chequeo cclico redundante

#define COIL_1 0
#define COIL_2 1
#define COIL_3 2

int* DiscreteInput[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int* HoldingRegister[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int* InputRegister[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

Uint16 address=5; //direccin del dispositivo


Uint16 Led=0;

Se ve la declaracin de las funciones Modbus vistas en la tabla 3.2. Cada una de estas funciones se
debe implementar de acuerdo al estndar del protocolo. Se declaran adems dos funciones de tipo
interrupcin, una para la recepcin de datos y otra para el envo. De esta forma el DSP puede realizar
la comunicacin en paralelo a sus tareas principales. Tambin es importante implementar la funcin
CRC encargada del chequeo de errores. Luego de las funciones se declaran los registros y los coils.
En este caso se declararon 3 coils, los cuales pueden corresponder a 3 leds, rels, entre otros. El largo
mximo de los registros y el valor inicial de stos depende de las necesidades del usuario, en este caso
los registros se inician en cero y tienen un largo de 20 espacios. En este ejemplo la direccin del equipo
es 5. A continuacin se muestra la inicializacin de los perifricos y las interrupciones.

void main(void)
{
InitSysCtrl();
InitSciaGpio();
DINT;
InitPieCtrl(); //Inicializa el control de interrupciones
//DSP2833x_PieCtrl.c
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable(); //Inicializa el abanico de interrupciones
//DSP2833x_PieVect.c
EALLOW;
PieVectTable.SCIRXINTA = &scia_recibir; //apunta a la funcin declarada
PieVectTable.SCITXINTA = &scia_enviar; //apunta a la funcin declarada
EDIS;

47
PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Habilita el bloque PIE
PieCtrlRegs.PIEIER9.bit.INTx1 = 1; // Habilita SCIRXINTA
PieCtrlRegs.PIEIER9.bit.INTx2 = 1; // Habilita SCITXINTA
IER |= M_INT9; // Enable CPU Interrupt 9
EINT; // Enable Global interrupt INTM

EALLOW; //Iniciar configuracin de los GPIO


GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0; // 0=GPIO, 1=ECAP1, 2=Resv, 3=Resv
GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1; // 1=OUTput, 0=INput
GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1;//Inicia en 0 [V]
EDIS; //Finalizar configuracin de los GPIO

scia_configurar();
InicializarRegistros();
//-----------------------Ciclo principal-------------------
for(;;){
if (Led==1) GpioDataRegs.GPBSET.bit.GPIO34 = 1;
else GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1;
}

Las funciones InitPieCtrl() e InitPieVectTable() vienen por defecto en el compilador y son


esenciales para el uso de interrupciones tanto internas como externas. En este caso se utilizaron
los comandos PieVectTable y PieCtrlRegs para la configuracin de las interrupciones de recepcin
(SCIRXINTA) y transmisin (SCITXINTA) de datos. Cabe destacar que cada interrupcin va ligada a
una funcin declarada al comienzo del cdigo. Luego estas funciones se ejecutarn cada vez que
la interrupcin sea gatillada. En este ejemplo se configur el GPIO34 como salida para controlar el
estado de un led. ste se puede encender o apagar mediante una peticin del maestro en la red
Modbus. Si la variable Led es 1 el led se enciende, de lo contrario se apaga. Esta variable es del tipo
Uint16 por lo tanto se debe inicializar como un holding register (registro de 16 bits). Mediante la funcin
Escribir_Holding() se puede modificar este registro.

Finalmente se deben implementar las funciones declaradas al comienzo, las cuales se observan en
el Anexo. Para verificar la rutina se puede usar algn software de simulacin para Modbus. La presente
rutina corresponde a un dispositivo esclavo por lo tanto el software debe emular un maestro. Esta rutina
fue verificada con xito mediante el software gratuito Modbus Tester.

48
Captulo 4

Diseo de un CER para laboratorio

4.1. Topologa

La topologa del CER a disear se basa en la estrucutra que posee el equipo de Polpaico (figura
2.24). El equipo posee un filtro para la 5a armnica que estar permanentemente conectado. Adems
posee dos bancos de condensadores para la compensacin reactiva cuando sea necesario. Los bancos
sern operados mediante rels mecnico. Tambin se tiene un mdulo TCR encargado de absorber los
reactivos que trabaja coordinadamente con los bancos de condensadores (MSC) teniendo en cuenta la
compensacin permanente que entrega el filtro. El transformador tiene conexin Y-D y se conecta a la
red elctrica de distribucin.

380 V

2 kVA

110 V

TCR 5 MSC MSC


Figura 4.1: Diagrama unilineal del CER a construir

49
4.2. Dimensionamiento del CER

Los componentes a dimensionar en el CER son los siguientes:

Banco de condensadores (MSC)

Banco de inductores (TCR)

Filtro de 5a armnica

Para definir el tamao del filtro y los inductores se definir primero el tamao del banco de
condensadores, ya que stos se venden en el comercio con capacidades fijas. El SVC que opera
actualmente en el laboratorio de energa del DIE (figura 2.27) posee una capacidad de +660/-740 VA.
Se desea ampliar la capacidad de entrega de reactivos, para ello se debe utilizar condensadores con
mayor capacitancia. Si se usan dos bancos con condensadores de 55 uF se obtendra una capacidad
de reactivos de 1260 VAr, el cual tendra un 70 % ms de capacidad respecto al actual.

Cabe recordar segn la figura 2.13 que la 5a armnica representa un 5 % de la corriente fundamental.
Considerando el banco de 1260 VAr, se tendra una corriente de lnea de 3.8 A, por lo tanto el filtro
debe tener al menos una capacidad de 65 VAr. Para el diseo del filtro se utiliz la ecuacin 2.12. De
esta manera el clculo terico arroja los siguientes parmetros para el filtro:

Parmetro Valor Unidad


Capacitancia 8 uF
Inductancia 50 mH
Resistencia 0,79
Q3 95 VAr capacitivo

Tabla 4.1: Parmetros del filtro de 5a armnica

Para el tamao del banco de inductores se debe tener en cuenta que el filtro entrega reactivos de
manera permanente, por lo tanto se debe tener en cuenta la siguiente restriccin:

QT CR Qf iltro + Qbanco (4.1)

Luego el mdulo TCR debe tener al menos 1245 VAr. Si se utilizan inductancias de 90 mH se tendra
un banco de inductancias de 1284 VAr, lo cual cumple con la restriccin 4.1. Finalmente se tendra un
SVC de capacidad +1284/-1355 VAr.

4.3. Diseo de los inductores

En la mayora de los equipos SVC de potencia se utilizan inductores con ncleo de aire [5], pero
para el presente prototipo se utiliz ncleo de hierro debido a que los primeros alcanzan dimensiones no

50
compatibles para laboratorio. Para el diseo de las inductancias se trabaj con las relaciones conocidas
de flujo magntico y reluctancias (sin saturacin).

=BA
R =N I
l (4.2)
R=
A
N2
L=
Req

El ncleo a disear se muestra en la figura 4.2. La profundidad del ncleo es 2a. Luego el diseo
depende del valor de la inductancia L que se haya obtenido en el dimensionamiento del componente.
Este proceso es iterativo, se debe comenzar con datos previamente definidos (d,d0 ,a,g ) para luego
observar las variables resultantes N y . El entrehierro g se debe ir variando hasta encontrar la distancia
en la cul el ncleo no se sature. Es recomendable disear un ncleo sobredimensionado para que no
se sature al sobrepasar ligeramente la tensin nominal. Es importante tener en cuenta que la bobina
debe caber dentro de la ventana del ncleo, de lo contrario se debe disminuir el nmero de vueltas o
agrandar la ventana.

2
0


Figura 4.2: Parmetros de diseo del inductor

Realizado el diseo se obtuvieron los resultados que se muestran en la tabla 4.2.

51
Parmetro Valor Unidad
V 110 V
L 115 mH
a 2.25 cm
d 13.5 cm
d0 9 cm
g 1.6 mm
N 300 vueltas
5000 Hm1

Tabla 4.2: Resultado del diseo del inductor

4.4. Transformador de bajada

El transformador de bajada debe ser capaz de no saturarse en el estado full capacitivo, es


decir, cuando el SVC est entregando su mxima cantidad de reactivos. Para esto se debe diear
un transformador que opere al menos con tensiones de 1.1 pu. La razn de transformacin del
transformador para el presente proyecto es de 380/110 V entre fases, con conexin Y-D y conformado
por 3 unidades monofsicas. En la figura 4.3 se aprecia el esquema de conexin. La capacidad del
transformador debe ser superior a la mxima capacidad de entrega del SVC, por lo tanto una capacidad
de 1.5 kVA es suficiente para operar de manera holgada. Cada unidad monofsica debe tener una razn
de transformacin de 220/63.5 V y una capacidad de 500 VA.

Figura 4.3: Diagrama de conexin del transformador

52
4.5. Controlador principal

Como se vi en la seccin 2.5.1, el SVC requiere un procesador capaz de trabajar las seales
medidas para luego efectuar el control en los mdulos TCR y MSC. En el presente proyecto se utiliz
el procesador TMS320F28335 (DSP) descrito en la seccin 3.3. Este microcontrolador fue programado
de manera que efectue un control PI con referencia de voltaje, como el descrito en la seccin 2.5.3.

4.6. Dispositivos de medicin

4.6.1. Transductores

Se utilizaron transductores de voltaje y de corriente, cuyos modelos son LV 20-P y LA 55-P


respectivamente, ambos fabricados por LEM. El objetivo de los transductores es obtener una seal
proporcional al voltaje y la corriente en la red de manera que pueda ser procesada por la electrnica.
El transductor de voltaje tolera hasta 500 V y el de corriente tolera 50 A. Ambos transductores emiten
una seal del orden de los miliamperes, la cual debe ser ajustada por un circuito de opamps para ser
leda por el DSP.

4.6.2. Amplificador operacional

Se utilizaron amplificadores operacionales para la adaptacin de la seal a la salida de los


transductores, de manera que la seal quedara entre 0 y 3 V, segn el requerimiento del DSP. En
especfico se utiliz el modelo TLC274 por su velocidad y precisin adems de contener 4 opamps en
un solo integrado.

4.6.3. Optoacoplador

Se utiliz optoacopladores para el circuito detector de cruce por cero. De esta manera se aisla
galvnicamente el circuito de control de posibles fallas en la red. Se utiliz el modelo 4N26 fabricado
por FAIRCHILD.

53
4.7. Dispositivos de accionamiento

4.7.1. Tiristores

El modelo utilizado para los tiristores SCR es el 2N6508 fabricado por ON SEMICONDUCTOR.
El mximo voltaje tolerable es de 600 V y la mxima corriente es de 25 A. Este tiristor no necesita
alimentacin externa, para conducir slo necesita un pulso de corriente en la compuerta.

4.7.2. Optoacoplador de salida triac

Se utilizaron optoacopladores como intermediarios entre el DSP y los tiristores, ya que su funcin
es aislar elctricamente el DSP de las corrientes elevadas presentes en el tiristor. De esta manera
el optoacoplador recibe la seal de disparo del DSP y luego enciende el tiristor. El modelo usado es
MOC3011 fabricado por FAIRCHILD.

4.7.3. Buffer XOR

Se usaron puertas lgicas XOR, especficamente el modelo 74HC86, para proporcionar la


corriente necesaria y poder gatillar los transistores y las optocuplas con los pines del DSP. Estos pines
proporcionan mximo una corriente de 4 ma, y los dispositivos recin mencionados requieren corrientes
de alrededor de 10ma para encender, por lo que se usaron buffers de lgica XOR tal que cuando un
pin del DSP est en alto, la salida del buffer se pone en alto tambin y puede proporcionar hasta 25ma.
El buffer tiene adems como propsito proteger los pines del DSP en caso de falla, ya que no drena
corriente del pin, solo lee el estado (HIGH/LOW).

4.7.4. Rels

El modelo de los rels utilizados es Zelio fabricado por Schneider. Estos rels son utilizados en
la operacin de los bancos de condensadores y del filtro. Su capacidad nominal es de 12 A y 250 V
alterno. El voltaje de accionamiento del rel es 12 V continuo.

4.7.5. Transistores

Se utilizaron transistores NPN como intermediarios entre el DSP y los rels, ya que los puertos
GPIO no entregan la suficiente corriente para activar los rels. El modelo de transistor utilizado es
BDX53 fabricado por DARLINGTON.

54
4.8. Dispositivos de comunicacin

4.8.1. RS-232

Para la comunicacin serial con un computador se utiliz el transceptor que viene incluido en el
DSP, el cual deja una salida que se comunica directamente con el computador.

4.8.2. RS-485

Para conectar el DSP a la red Modbus con la interfaz RS-485 se utiliz el transceptor MAX3485
que transforma las seales de 3.3 V al voltaje requerido para la red Modbus.

4.9. Diseo de placas

El diseo de las placas circuitales se realiz en el software Altium debido a su amigable interfaz y
su facilidad para crear bibliotecas de componentes. A continuacin se muestran los circuitos impresos
(PCB) de las placas realizadas. Las pistas azules corresponden a la capa inferior del circuito y las pistas
rojas a la capa superior (PCB de doble capa).

4.9.1. Placa de control

La placa de control es la placa principal del proyecto ya que contiene al DSP. Esta placa contiene
los opamps de ajuste para las seales de medida y tambin contiene los dispositivos de comunicacin.
La configuracin utilizada en los opamps es la que se muestra en la figura 4.4

Transductor - DSP

1.5 [V] +

LM318

Figura 4.4: Circuito de ajuste para la salida de los transductores LEM

Corresponde a la configuracin de amplificador diferencial y se encarga de ajustar la seal para


que vare entre los 0 y 3 V. Desde sta salen tambin todas las conexiones a las otras placas: voltajes,
corrientes, disparo y deteccin de cruces por cero.

55
COT2 COT1

COR63 PAT2025 PAT2024 PAT2023 PAT2022 PAT2021 PAT2020 PAT2019 PAT2018 PAT2017 PAT2016 PAT2015 PAT2014 PAT1025 PAT1024 PAT1023 PAT1022 PAT1021 PAT1020 PAT1019 PAT1018 PAT1017 PAT1016 PAT1015 PAT1014
PAR6302 PAR6301
PAT20B PAT2013 PAT2012 PAT2011 PAT2010 PAT209 PAT208 PAT207 PAT206 PAT205 PAT204 PAT203 PAT202 PAT201
PAT20A PAT10B PAT1013 PAT1012 PAT1011 PAT1010 PAT109 PAT108 PAT107 PAT106 PAT105 PAT104 PAT103 PAT102 PAT101
PAT10A
COR9 COR22 COR26 COR23COR32 COR68 COR20COR14 COR30COR15COR61
PAR902 PAR2201 PAR2602 PAR2302 PAR3201 PAR6801 PAR6802 PAR2002 PAR1401 PAR3001 PAR1502 PAR6102 PAR6101
COR8
COR41 COR45
COR42COR40 PAR802
COU10 PAR4102 PAR4502
COU9 PAR4201 PAR4001 COR36COR39COR37COR44COR67
PAU1003 COU8
PAU901 PAU9014 PAR3602 PAR3901 PAR3702 PAR4402 PAR6702
PAU1002 COU12 COC19COU4
PAR901 PAR2202 PAR2601 PAR2301 PAR3202
PAU902 PAU9013 PAR2001 PAR1402 PAR3002 PAU801 PAU8014
PAU1001 COC21 PAU1203 PAR1501
COR64 COR25 PAU903 PAU9012 COR16 PAU802 PAU8013 PAU40Vin PAU40Vout PAU40GND
COR33 PAR2501 PAC2102 PAU1202 PAR801 PAU803 PAU8012
PAC1902 PAC1901 COC24
PAR6402 PAR2502 PAC2101 PAU904 PAU9011 PAR1602 PAR1601 COC25
PAR3301
COR24 PAR3302 PAR4101 PAU1201
COR21 PAC2501
PAU804 PAU8011 COJ2 PAC2401 PAC2402
PAU905 PAU9010 PAC2502
PAR4501 PAR4202 PAR4002
COR65 PAR2101
COR17 PAR2102
PAR2402
COR27 PAR2401 PAU906 PAU909 PAU805 PAU8010 PAR3601 PAR3902 PAR3701 PAR4401 PAR6701 PAJ202 PAJ204 PAJ206 PAJ208 PAJ2010 PAJ2012 PAJ2014
PAR6501 PAR6502 PAR1702
COR31 PAR1701 PAU806 PAU809
PAR2701 PAR2702 PAU907 PAU908 COC8 COC15 PAJ201 PAJ203COC14
PAJ205 PAJ207 PAJ209 PAJ2011 PAJ2013
PAR3101 PAR3102 PAU807 PAU808 COC7 PAC1401 PAC1402
COC18 COC17 PAC802 PAC801 COC16 COC3
PAR6401 COC6 COJ3 COU2 PAC1802 PAC1801 PAC701 PAC702 PAC1701 PAC1702 PAC1502 PAC1501 PAC1601 PAC1602 PAC301 PAC302 COR1
COU1 COC1 COU6
COC4 PAJ301 PAU2051 PAU2053 PAU2055 PAU2057 PAU2059 PAU2061 PAU2063 PAU2065 PAU2067 PAU2069 PAU2071 PAU2073 PAU2075 PAU2077 PAU2079 PAU2081 PAU2083 PAU2085 PAU2087 PAU2089 PAU2091 PAU2093 PAU2095 PAU2097 PAU2099 PAR102
PAC401
PAU608 PAU607 PAU606 PAU605
PAU10Vin PAC101 PAC601 PAJ302 PAU2052 PAU2054 PAU2056 PAU2058 PAU2060 PAU2062 PAU2064 PAU2066 PAU2068 PAU2070 PAU2072 PAU2074 PAU2076 PAU2078 PAU2080 PAU2082 PAU2084 PAU2086 PAU2088 PAU2090 PAU2092 PAU2094 PAU2096 PAU2098 PAU20100
PAC402
COC5 PAU10Vout PAU201 PAU203 PAU205 PAU207 PAU209 PAU2011 PAU2013 PAU2015 PAU2017 PAU2019 PAU2021 PAU2023 PAU2025 PAU2027 PAU2029 PAU2031 PAU2033 PAU2035 PAU2037 PAU2039 PAU2041 PAU2043 PAU2045 PAU2047 PAU2049
PAC102 PAJ303 PAU202 PAU204 PAU206 PAU208 PAU2010 PAU2012 PAU2014 PAU2016 PAU2018 PAU2020 PAU2022 PAU2024 PAU2026 PAU2028 PAU2030 PAU2032 PAU2034 PAU2036 PAU2038 PAU2040 PAU2042 PAU2044 PAU2046 PAU2048 PAU2050
PAC501 PAC602
PAC502 PAU10GND PAU601 PAU602 PAU603 PAU604
compuesta principalmente por el DSP y los opamps.

56
COR60
PAR6001 PAR6002 COU5 COC12
COR56 COR58 COR55 COR57 COC9 COC2 COD1
PAR101
COU7 COR13 COR3 COR5 COU3
COR43
COR35COR38 PAR5601 PAR5802 PAR5502 PAR5701 COU13 COR52 PAU501 PAU5014 PAC1201 PAD101

PAU708 PAU707 PAR1301 PAR1302 COU14 PAR302 PAR501 PAC902 PAC201 PAD102
PAR4301 PAR3501 PAR3802 PAR3401 COR29 COU11 PAU1308 PAU1307 PAR5202
COR49 PAR5201 PAU502 PAU5013 PAC1202 COR4 COR6
PAU709 PAU706 COR46PAU1401
PAU503 PAU5012 PAC901
COC13PAU30Vout PAC202
COC22 PAR2902 COR12 PAR2901 COR7 PAU1101 PAU1309 PAU1306 PAR4901 PAR402 PAR602
COR34 PAU7010 PAR4902 PAR4601 PAU1402 PAC1302 PAU30GND
PAU705 PAC2202
PAR1201 PAR1202 PAR701 PAU1102 PAU13010 COC23 COR50
PAU1305 PAU504 PAU5011 PAC1301 COD2
PAU7011 PAU704 PAC2201 COR19 PAU1403 PAU30Vin
PAU13011 PAU1304 PAC2301 PAR5001 PAR5002 PAU505 PAU5010 COC20 PAD202
PAR1902 PAR1901 PAU1103 PAC2302 COR54
PAU7012 PAU703 COR10COR18 PAD201
PAR5602 PAR5801 PAR5501 PAR5702 PAU13012 PAU1303 PAU506 PAU509 COR2
PAU7013 PAU702 COR28COR11 PAR1002 PAR1801 PAR5402 PAR5401 PAR301 PAU507 PAU508 PAC2002 PAC2001
COR71 PAU13013 PAU1302 COR53COR48COR47COR51 PAR502 PAR201
PAR4302 PAR3502 PAR3801 PAR3402 PAU7014 PAU701 PAR2802 PAR1101
COR66 PAR7102 PAU13014 PAU1301 PAR5302 PAR4801 PAR4702 PAR5101 PAR401
PAR6602 PAR4602 COQ1 COQ3 COQ2 PAR601 COQ4
PAR702 COR69 COD7
COR70 PAQ101PAQ102PAQ103
PAQ101 PAQ102 PAQ103 PAQ301 PAQ302 PAQ303 PAQ201 PAQ202 PAQ203 PAQ401 PAQ402 PAQ403 PAD702
PAR6901 PAR6902
PAR7002 COD3
COD5 COD4 COD6
PAR1001 PAR1802
COR59 PAD301 PAD302 PAD501 PAR202
PAD502 PAD401 PAD402 PAD601 PAD602

Figura 4.5: Capa inferior de la placa de control


PAR2801 PAR1102 PAR5902 PAR5901 PAR7101 PAR5301 PAR4802 PAR4701 PAR5102
PAR6601 COT3 COT4 PAD701
COT5
PAT501 PAT502 PAT503 PAT504 PAT505 PAT506 PAT507 PAT508 PAT509 PAT5010 PAT5011 PAT5012 PAT5013 PAT301 PAT302 PAT303 PAT304 PAT305 PAT401 PAT402 PAT403 PAT404 PAT405
PAT50A PAT50B PAR7001 PAT30A PAT30B PAT40A PAT40B
PAT5014 PAT5015 PAT5016 PAT5017 PAT5018 PAT5019 PAT5020 PAT5021 PAT5022 PAT5023 PAT5024 PAT5025 PAT306 PAT307 PAT308 PAT309 PAT406 PAT407 PAT408 PAT409
En la figura 4.5 se observa los distintos componentes que conforman la placa de control,
Adems en esta placa se encuentran los terminales para conectar los rels de operacin, cuyo
esquemtico se muestra en la figura 4.6. Se utiliza un diodo conectado en antiparalelo a la bobina del
rel para proteger al transistor de las corrientes de rebote de la bobina.
12V

REL 1

DSP

1 NPN

Figura 4.6: Esquematico de los rels

4.9.2. Placa de adquisicin y disparo

En esta placa se realiza la adquisicin de voltaje, la deteccin de cruce por cero y el disparo de
los tiristores. En la figura 4.7 se muestran 3 transductores de voltaje, uno por fase, conectados a la red
por medio de una resistencia en serie. Esta resistencia tiene como objetivo ajustar la corriente primaria
del transductor a un valor cercano a los 10 mA rms nominal, segn las especificaciones del fabricante.
La razn de transformacin es de 25:10, por lo tanto la corriente de salida es de 25 mA rms nominal.
La seal de salida debe ser ajustada una seal que oscile entre los 0 y los 3 V de manera que pueda
ser leda por el DSP.
COT6

PAT600 PAT601 PAT602

COR3 COR2 COR1

PAR302 PAR301 PAR202 PAR201 PAR101 PAR102

COLV 3 COLV 2 COLV 1

PALV 301 PALV 302 PALV 201 PALV 202 PALV 101 PALV 102 COR6
PAR601

COC2
COC3
COC1 PAC202 PAC201
PAC302 PAC301
PAC101 PAC102
PAR602
COC12 COC13 COC14
PALV 303 PALV 304 PALV 305
COC6 COC11
PAC1201
PAC1202
PALV 203 PALV 204 PALV 205
COC5 COC10PAC1302
PAC1301
PALV 103 PALV 104 PALV 105 COC4
PAC1401
PAC1402
COD9
PAD901
PAD902
PAC602 PAC601 PAC1101 PAC1102 PAC502 PAC501 PAC1001 PAC1002
PAC401
COC9PAC402
PAC901 PAC902

COR4 COD7 COT5


PAR401
COR5 PAR402 COD8
PAD702 PAD701
PAT50B
COR15 COU3 COU6 PAR501 PAR502 PAD802 PAD801 COU12
COC18
COT4
Figura 4.7: PAU303PCBPAU302de lems
PAR1501
COR13 PAU605
de tensiones
PAC1801 PAT5025
PAR1502 PAU601
PAU602
PAU606 COR14
PAR1401 PAR1402 PAU120Vin PAT5013
COC19PAT5012
PAC1802 PAU120Vout
PAR1301 PAR1302 PAU304 PAU301 PAU603 PAU604 PAC1901 PAT5024
PAT402 PAU120GND PAC1902 PAT5011
PAT5023
COU5 PAT5010
COR12 COU2 PAT5022
PAT509
PAR1201 PAR1202 PAU501 PAU506 COR11 PAT5021
En la figura 4.8 se observa
PAT401
el circuito que
PAU203
detecta
PAU202
los
PAU504
cruces por cero en cada fase. Las resistencias
COR10 PAU502
PAU503
PAU505 PAR1101 PAR1102
PAT508
PAT507
PAT5020
PAT5019
PAR1001 PAR1002 PAU204 PAU201 PAT506
PAT5018
PAT400
sirven para atenuar la corriente alPAR901 orden de los
PAR902 PAU103 PAU102
miliamperes.
PAU406
El integrado
PAT505
COR9
PAT504
PAT5017
PAT5016
DB106S es un puente COU1 COU4

PAU401 COR8 COC8


COR7 PAT503
PAU402 PAU405 PAR801 PAR802 PAC801 PAC802 PAT5015
rectificador de onda completa, el cual est PAU104conectado
PAU101 PAU404
a la compuerta ptica del optoacoplador. Cada
PAR701 PAR702 PAU403
COC7
COU10
PAC702 PAC701
PAT502
PAT501
PAT5014

COR17 PAU10014 PAU10013 PAU10012 PAU10011 PAU10010 PAU1009 PAU1008

vez que el voltaje pasa por cero se produce


PAR1701 PAR1702
un pulso positivo en el pin
PAT50A 5 de la optocupla, el cual es COR21 PAU1001 PAU1002 PAU1003 PAU1004 PAU1005 PAU1006 PAU1007
PAR2101 PAR2102
ledo por el DSP. La figura 4.9 muestra la placa circuital paraPAR1901 la deteccin
PAR1902 de ceros en las 3 fases de la COR19

COU7 COU9 COU8


red. PAU703 PAU702 PAU701 PAU903 PAU902 PAU901 PAU803 PAU802 PAU801

PAU704 PAU705 PAU706 PAU904 PAU905 PAU906 PAU804 PAU805 PAU806


COR18 COD1
COD3
PAR1801 PAR1802 PAD101 PAD102 COR25 COR23 COD2
PAR2501 PAR2502 PAD301 PAD302 PAR2301 PAR2302 PAD201 PAD202
COD4
COD6 COQ6 COD5
PAD402 PAD401 COQ4
COQ2 PAD602 PAD601 PAD502 PAD501
PAQ601 PAQ602 PAQ603 PAQ401 PAQ402 PAQ403
COQ1 PAQ201 PAQ202 PAQ203 COQ5

PAQ103 PAQ102 PAQ101


COC15
PAC1501
PAQ503 PAQ502 PAQ501 57 COQ3

PAQ303 PAQ302 PAQ301


COR24 COR20 COC17
COC16 PAR2402 PAR2401 PAR2002 PAR2001 PAC1702 PAC1701
COR16
PAR1602 PAR1601 PAC1602 PAC1601
COT6

3V3
PAT600 PAT601 PAT602

R ~ + 1 6
COR3 COR2 COR1

S PAR302 ~ -PAR301 PAR202 2 5 PAR201 PAR101 DSP PAR102


DB106S
COLV 3 COLV 2 3 4 COLV 1

PALV 301 PALV 302 PALV 201 PALV 202 PALV 101 PALV 102 COR6
PAR601
4N26
COC2
COC3
COC1 PAC202 PAC201
PAC302 PAC301
PAC101 PAC102
PAR602
FiguraPALV 3034.8:
PALV 304Circuito
PALV 305 detector
COC12
PALV 203dePALV cruces
204 PALV 205 por ceroPALV 103
COC13
PAC1201 PAC1301
PALV 104 PALV 105
COC14 COD9
PAC1401
PAC1202 COC5 COC10PAC1302 PAC1402 PAD901
COC6 COC11 COC4 PAD902
PAC602 PAC601 PAC1101 PAC1102 PAC502 PAC501 PAC1001 PAC1002
PAC401
COC9PAC402
PAC901 PAC902

COR4 COD7 COT5


PAR401
COR5 PAR402 COD8
PAD702 PAD701
PAT50B
COR15 COU6 PAR501 PAR502 PAD802 PAD801 COU12
COU3 COC18
PAR1501 PAR1502 PAU601 PAU606 COR14
COT4
PAU303 PAU302 PAC1801 PAU120Vin PAT5013
COR13 PAU602 PAU605 PAR1401 PAR1402 COC19PAT5012 PAT5025
PAC1802 PAU120Vout
PAR1301 PAR1302 PAU304 PAU301 PAU603 PAU604 PAC1901 PAT5024
PAT402 PAU120GND PAC1902 PAT5011
PAT5023
COU5 PAT5010
COR12 PAT5022
COU2 PAT509
PAR1201 PAR1202 PAU501 PAU506 COR11 PAT5021
PAT401 PAU203 PAU202 PAU502 PAU505 PAR1101 PAR1102
PAT508
PAT5020
COR10 PAT507
PAR1001 PAR1002 PAU503 PAU504 PAT5019
PAU204 PAU201 PAT506
PAT5018
PAT400 COR9 COU1 COU4 PAT505
PAT5017
PAR901 PAR902 PAT504
PAU103 PAU102 PAU401 PAU406 COR8 COC8 PAT5016
COR7 PAT503
PAU402 PAU405 PAR801 PAR802 PAC801 PAC802 PAT5015
PAR701 PAR702 PAU104 PAU101 PAT502
PAU403 PAU404 COC7 PAT5014
COU10 PAT501
PAC702 PAC701

COR17 PAU10014 PAU10013 PAU10012 PAU10011 PAU10010 PAU1009 PAU1008


PAR1701 PAR1702 PAT50A
Figura 4.9: PCB del circuito de
COR21 deteccin de
PAU1001 PAU1002ceros
PAU1003 PAU1004 PAU1005 PAU1006 PAU1007
PAR2101 PAR2102
COR19
PAR1901 PAR1902
COU7 COU9 COU8
Para el disparo se utiliza un optotriac,PAU703que
PAU702 PAU701 es una optocupla
PAU903 PAU902 PAU901 especializada
PAU803 PAU802 PAU801 en el manejo de triacs

y tiristores. El esquemtico de disparo se PAU704muestra


PAU705 PAU706 en laPAU904 PAU905figura
PAU906 4.10, el cual
PAU804 PAU805 PAU806 es recomendado por el
COR18 COD1
COR25 COD3
fabricante del optotriac. En este ejemplo
PAR1801
COD4
se muestra
PAR1802 PAD101 PAD102
PAR2501 conectado
PAR2502 PAD301 entre
PAD302
COR23
las
PAR2301 fasesPAR2302 RCOD2
PAD201y S, sin
PAD202 embargo existe
COD6 COQ6 COD5
PAD402 PAD401 COQ4
uno por cada fase. La resistencia R2 y el condensador
COQ2
COQ5
C
PAD601
1 componen
PAQ601 PAQ602 PAQ603 PAD502 la rama
PAD501 snubber
PAQ401 PAQ402 PAQ403
del circuito, que PAD602
COQ1 PAQ201 PAQ202 PAQ203 COQ3
COC15
tiene como objetivo evitar falsos disparos
PAQ103 PAQ102 PAQ101 en PAC1501los tiristores.
PAQ503 PAQ502 PAQ501 El SCR 2 PAQ303conduce
PAQ302 PAQ301 en el semiciclo positivo
COR24 COR20 COC17
y el SCR 1 en el negativo. El DSPCOR16y los tiristoresCOC16se encuentran
PAR2402 PAR2401 aislados
PAR2002 PAR2001 elctricamente
PAC1702 PAC1701 ya que el
PAC1602 PAC1601
PAR1602 PAR1601
optotriac se exita mediante una seal
COT3
luminosa
PAC1502 proveniente de un led conectado entre los pines 1 y 2.
COT2 COT1

En la figura 4.11 se muestra el PCB de la placa de disparo, en donde se observan los terminales de
PAT300 PAT301 PAT302 PAT200 PAT201 PAT202 PAT100 PAT101 PAT102
conexin para las inductancias y el terminal de conexin para la red de 110 V.

R
DSP 1 6

2 5 110 VAC

3 4

MOC3011
INDUCTOR

Figura 4.10: Circuito de disparo de los tiristores

58
PAT5023
COU5 PAT5010
COR12 COU2 PAT5022
PAT509
PAR1201 PAR1202 PAU501 PAU506 COR11 PAT5021
PAT401 PAU203 PAU202 PAU502 PAU505 PAR1101 PAR1102
PAT508
PAT5020
COR10 PAT507
PAR1001 PAR1002 PAU503 PAU504 PAT5019
PAU204 PAU201 PAT506
PAT5018
PAT400 COR9 COU1 COU4 PAT505
PAT5017
PAR901 PAR902 PAT504
PAU103 PAU102 PAU401 PAU406 COR8 COC8 PAT5016
COR7 PAT503
PAU402 PAU405 PAR801 PAR802 PAC801 PAC802 PAT5015
PAR701 PAR702 PAU104 PAU101 PAT502
PAU403 PAU404 COC7 PAT5014
COU10 PAT501
PAC702 PAC701

COR17 PAU10014 PAU10013 PAU10012 PAU10011 PAU10010 PAU1009 PAU1008


PAR1701 PAR1702 PAT50A
COR21 PAU1001 PAU1002 PAU1003 PAU1004 PAU1005 PAU1006 PAU1007
PAR2101 PAR2102
COR19
PAR1901 PAR1902
COU7 COU9 COU8
PAU703 PAU702 PAU701 PAU903 PAU902 PAU901 PAU803 PAU802 PAU801

PAU704 PAU705 PAU706 PAU904 PAU905 PAU906 PAU804 PAU805 PAU806


COR18 COD1
COR25 COD3 COD2
PAR1801 PAR1802 PAD101 PAD102 COR23
PAR2501 PAR2502 PAD301 PAD302 PAR2301 PAR2302 PAD201 PAD202
COD4
COD6 COQ6 COD5
PAD402 PAD401 COQ4
COQ2 PAD602 PAD601 PAD502 PAD501
PAQ601 PAQ602 PAQ603 PAQ401 PAQ402 PAQ403
COQ1 PAQ201 PAQ202 PAQ203 COQ5
COC15 COQ3
PAQ103 PAQ102 PAQ101 PAC1501
PAQ503 PAQ502 PAQ501 PAQ303 PAQ302 PAQ301
COR24 COC17
COR20
COC16 PAR2402 PAR2401 PAR2002 PAR2001 PAC1702 PAC1701
COR16
PAR1602 PAR1601 PAC1602 PAC1601
PAC1502
COT3 COT2 COT1

PAT300 PAT301 PAT302 PAT200 PAT201 PAT202 PAT100 PAT101 PAT102

Figura 4.11: PCB de la placa de disparo

4.9.3. Placa de alimentacin

La funcin de esta placa es alimentar las placas de control y de adquisicin y disparo. sta entrega
4 niveles de voltaje continuo: +15,-15,+5 y +24 V. Los voltajes +15 y -15 V son para alimentar los Lems
de voltaje y corrientes. El voltaje 5 V es necesario para alimentar el microcontrolador y los 24 V son
necesarios para activar/desactivar los contactores de los bancos de condensadores. En la figura 4.12
se puede observar el diseo pcb.
COS1

COT1
PAS101 COC2 PAS103
PAT101 PAC201
PAC202
PAT102 COC3 PAS104
PAC301
PAC302
PAS102 PAS105
COS2
COh4 COh1 COh3
PAS20g2 PAS20P COC4 PAh401 PAh101 PAh301 COh2
PAS20g1 PAC402 PAC401
CO0
COT2
PAh201

COS3 PA00Vin PA00GND PA00Vout


COC5 PAT20A PAT205 PAT204 PAT203 PAT202 PAT201 PAT20B
PAS30g2 PAS30P PAC502 PAC501 COC1 COh5
PAh501
PAT209 PAT208 PAT207 PAT206

PAS30g1 PAC102 PAC101

Figura 4.12: PCB de la placa de alimentacin

Para generar +15/-15 V se us una fuente AC/DC modelo RAC06-15DC montable para pcb. Para
generar 5 V se utiliz un regulador LM7805 y para generar 24 V se usa un adaptador AC/DC con salida
jack dc.

59
4.10. Algoritmo del CER

4.10.1. Adquisicin de variables

Para la adquisicin de voltajes se us el circuito mostrado en la figura 4.7 y para ajustar la seal
segn las especificaciones del DSP (leer voltajes entre 0 y 3 V) se utiliz el circuito de la figura 4.4. La
salida de este ltimo circuito se conecta a los pines de conversin ADC del DSP.

El conversor ADC se configur con una frecuencia de muestreo de 4500 Hz, ms de 50 veces la
frecuencia de la red (50 Hz), de esta manera se evita el Aliasing. El algoritmo contiene 3 etapas
mostradas en la figura 4.13.

Calcular Offset

Medicin de Tensin o Corriente

f = 4500[Hz]

Calcular Tensin o Corriente RMS


(Mtodo Numrico)

Figura 4.13: Diagrama de flujo del conversor ADC

La primera etapa consiste en determinar el cero o referencia de la sinusoide, ya que la seal


oscila entre 0 y 3 V. Esta etapa ocurre solo una vez, al iniciar el DSP. Una vez determinado el nivel
de referencia, el conversor ADC toma muestras de la sinusoide respecto al cero recin calculado y
las procesa con un mtodo numrico para obtener la seal RMS. Es en esta etapa donde destaca el
nivel de procesamiento y clculo del DSP, ya que el clculo RMS requiere adquirir datos e integrar
simultneamente, tarea que no cualquier microcontrolador puede realizar.

4.10.2. Sincronizador de disparos

Para la deteccin de cruces por cero se utiliz el circuito mostrado en la figura 4.8 para las 3
fases. La salida de este circuito va a los pines de interrupcin externa del DSP (XINTF) configurados
para detectar flancos ascendentes. La seal de salida para la fase R se muestra en la figura 4.14. Su
comportamiento es igual para las otras 2 fases de voltaje, slo que desfasadas en 120 .

60
Voltaje en el lado BT del SVC

Voltaje [V]
155.55
0
155.55
0 2 4 6 8 10 12

Salida del puente rectificador

Voltaje [V]
5.65

0
0 2 4 6 8 10 12

Salida de la optocupla
Voltaje [V]

3.3
2
0
0 2 4 6 8 10 12
ngulo [rad]

Figura 4.14: Seal de interrupcin para sincronizador de disparos en la fase R

Ciclo XINTF Ciclo Timer0


No
No

Bandera de deteccin
Cruce por cero activa (R,S o T)?
(R, S o T)

S S
Incrementar
contador

Activar bandera
deteccin (R, S o T) ngulo actual > ngulo disparo?
No
S

-Disparo de fase (R, S o T)


-Desactivar bandera deteccin (R, S o T)
-Reiniciar contador

Figura 4.15: Diagrama de flujo del sincronizador de disparos

La interrupcin por cruce se produce cada 10 ms en una red ideal de 50 Hz, rango de tiempo
disponible para el disparo del tiristor segn el ngulo requerido. Por ejemplo, si el ngulo de disparo es
de 90 , el tiristor debe ser accionado en la mitad del semiciclo, es decir a los 5 ms.

Para llevar un conteo del tiempo que transcurre entre cada deteccin de cruce se utiliza el Timer0
del microcontrolador. Este reloj se configur a una resolucin de aproximadamente 1 de ngulo de
disparo. En otras palabras, el reloj cuenta con pasos de 55[us] dando un total de 182 pasos entre
10ms
= 181.82 . Para configurar un ngulo de disparo de 90 , el Timer0 debe contar

cruce y cruce 55us
5ms
55us = 90.9, aproximadamente 91 pasos para luego accionar el disparo. Al producirse un nuevo disparo
se reinicia el contador de pasos del Timer0.

61
Captulo 5

Construccin de un CER para laboratorio

5.1. Construccin de los inductores

Para la construccin de las inductancias se usaron lminas de acero silicoso en forma de E y de


I, adems de un carrete de plstico para el enrollado del alambre esmaltado. Se us papel prespn
para el entrehierro. Todos los materiales se pueden encontrar en transformadores Pailamilla. Segn los
parmetros de diseo de la tabla 4.2 se obtuvieron los siguientes resultados:

Voltaje V 110
Potencia VAr 340.6
Potencia W 16
Corriente A 3.1
R 1.7
L mH 113

Tabla 5.1: Valores nominales del inductor

Con estos valores se obtiene un banco de inductancias capaz de absorber 1020 VAr. Adems
se realizaron pruebas de voltaje al inductor para observar su comportamiento en voltajes cercanos al
nominal, obteniendo los siguientes resultados:

Voltaje V 80 90 100 110 120 130


Corriente A 2,30 2,56 2,75 3,10 3,30 3,61
Impedancia 34,78 35,16 36,36 35,48 36,36 36,01

Tabla 5.2: Pruebas de energizacin del inductor

De la tabla 5.2 se observa que la impedancia vara levemente (menos del 5 %), esto significa que
el inductor opera en la zona lineal de la curva de magnetizacin.

62
En la figura 5.1 se observa uno de los 3 inductores realizados.

Figura 5.1: Inductor final

5.2. Construccin de placas circuitales

5.2.1. Placa de adquisicin y disparo

El resultado final de la placa de adquisicin y disparo se muestra en la figura 5.2.

Figura 5.2: Placa de adquisicin y disparo

Al costado derecho de la placa se encuentran los Lems de tensin encargados de medir el voltaje
en la barra de conexin del CER. Al centro de la placa se encuentra el circuito detector de ceros y al
lado izquierdo se encuentra el circuito de disparo con los tiristores respectivos.

63
Para las conexiones entre la placa y el exterior (inductores y barra de voltaje) se usaron los
terminales verdes observados al borde de la placa, los cuales soportan un nivel de tensin de 300
V y corrientes de 9 A. Para las conexiones entre sta y la placa de control se us un conector DB25
que se observa en la parte centro-inferior de la figura 5.2.

5.2.2. Placa de control

En la figura 5.3 se muestra la placa de control. Al centro se encuentra el microcontrolador


TMS320F28335 conectado mediante un conector tipo DIMM-100 de orejas blancas. Al lado superior
izquierdo se encuentra un circuito de opamps con sus respectivas resistencias de ganancia, estos
son los encargados de adaptar las seales provenientes de los Lems de la placa de adquisicin. Al
lado inferior derecho se encuentran los transistores encargados de accionar los rels de operacin. Se
observa que la placa tiene espacio para soldar ms componentes, esto se debe a que el modelo de
opamp pensado para el ajuste (TLC274) result ser de baja calidad debido al gran ruido que introduce
a las mediciones, por lo que se opt por realizar una placa de ajuste aparte con otro modelo de
opamp. Para la salida de conexiones de la placa de control hacia la placa de adquisicin y disparo
y hacia la fuente se usaron los conectores DB25 y DB9. Adems se dejaron habilitados 3 puertos de
comunicacin, el puerto serial RS232 cuya salida de 3 pines (conector polarizado macho) se observa a
la izquierda del microcontrolador. El puerto JTAG, el cual permite la programacin y depuracin de los
programas del DSP, se observa al lado superior derecho del microcontrolador y consiste en 14 pines
ordenados en una hilera de 2x7. Por ltimo el puerto de comunicacin RS485 a la salida del conector
DB25 de la derecha (para ms detalle ver el esquemtico en anexos).

Figura 5.3: Placa de Control

64
5.2.3. Placa de alimentacin

La placa de alimentacin, como se mencion en el captulo 4.9.3, tiene una fuente AC/DC
montable para pcb que genera +15/-15 V. Para conectar la fuente a la red (220 o 110 V) se tiene
un terminal de tornillos. Para los voltajes 5 y 24 V se tienen dos conectores jack dc a los cuales se
conectan adaptadores AC/DC de pared. Para la salida de estas alimentaciones se utiliz un conector
DB9 como se ve en la figura 5.4.

Figura 5.4: Placa de alimentacin

5.2.4. Placa de ajuste

Figura 5.5: Nueva placa de ajuste

65
Pese a haber hecho pruebas previas con los opamps modelo TLC274 con un osciloscopio y no
haber tenido problemas, al trabajar junto al DSP se obtiene ruido considerable a la entrada del conversor
ADC que genera un margen de error del 40 %. Como esto se descubri despus de realizar la placa de
control, se opt por crear una placa circuital adicional con opamps modelo OP07 debido a su reconocida
precisin para asegurar una adquisicin de variables precisa. Luego de realizar mediciones se redujo
el ruido considerablemente (menos del 5 % de error).

66
Captulo 6

Conclusion

Para la realizacin del trabajo de ttulo se requiri de una gran investigacin previa sobre los
Compensadores Estticos de Reactivos (CER) tanto en potencia como a escala, sin embargo ms
tiempo se dedic al mbito electrnico del trabajo, dividido en tres partes importantes: Aprendizaje
y programacin del microprocesador TMS320F28335 , Aprendizaje y utilizacin del software Altium
para diseo de los circuitos electrnicos impresos, Finalizacin y verificacin de las placas circuitales.
En cada una de estas partes surgieron dificultades, al mencionar las ms importantes se tienen
respectivamente: Aprender a programar DSP desde cero, ya que la nica fuente de tutoriales y
aprendizaje eran los manuales oficiales. El diseo de placas circuitales, principalmente la placa de
control, fue un importante obstculo debido a la gran cantidad de salidas provenientes de la tarjeta de
control (100 posiciones) teniendo en cuenta las normas bsicas de distancia entre pistas y pines que
se deben considerar en un circuito impreso. Por ltimo la verificacin de las placas circuitales despus
del soldado de los componentes, ya que se debe revisar que no existan cortocircuitos en cada pista y
pin del circuito.

Como resultado se obtuvo un CER a escala con un banco de inductancias que opera en modo
manual, es decir, tanto el ngulo de disparo en los tiristores como la conexin y desconexin de bancos
de condensadores debe ser ingresado manualmente al DSP. Estas variables pueden ser ingresadas
directamente en el cdigo del programa o a travs de la comunicacin Modbus.

Al final de este trabajo se adquirieron importantes conocimientos tanto en Software relacionado con
microcontroladores y diversos protocolos de comunicacin entre ellos Modbus y UART, como tambin
en Hardware relacionado con el diseo y construccin de circuitos electrnicos para control de potencia.

67
6.1. Trabajo futuro y recomendaciones

Se propone terminar la etapa de potencia del CER, instalando el banco de condensadores y el


transformador para la conexin a la red. Adems es posible implementar un control PI para el control
de voltaje por referencia, ya que actualmente el CER opera en modo manual. Si bien en el presente
trabajo se mencion sobre los filtros de armnica e incluso se disearon los parmetros de un filtro de
5a armnica, ste no se lleg a implementar, por lo que queda propuesto su construccin.

Para la realizacin de este tipo de prototipos electrnicos se recomienda la especializacin en temas


relacionado con la programacin de software orientado a hardware y tambin en placas circuitales
previo a trabajar. Debido a la inexperiencia inicial del autor en estos temas se utiliz gran parte del
tiempo en ensayo y error tanto en diseo como en construccin.

68
Bibliografa

[1] ABB: SVC to Increase Reliability and Reduce Congestion over Multiple 500 kV Lines. Application
Note A02-0207 E.

[2] ABB: Static Var Compensator, An insurance for improved grid system stability and reliability. 2010.
A02-0100 E, 2010-11, Elanders Sverige AB.

[3] ABB: FACTS for grid voltage stabilization and increased power transmission capability in Chile.
2012. Application Note 1JNS012661.

[4] ABB: STATCOM and beyond. 2012. A02-0165 E, 2010-03, Elanders Sverige AB.

[5] Castro, Jaime Muoz: Prototipo de equipos FACTS de baja potencia. Memoria de Ttulo,
Departamento de Ingeniera Elctrica, Universidad de Chile, 2006.

[6] Chopade, P., M. Bikdash, I. Kateeb y A.D. Kelkar: Reactive power management and voltage control
of large Transmission System using SVC (Static VAR Compensator). En Southeastcon, 2011
Proceedings of IEEE, pginas 8590, 2011.

[7] Dixon, J., L. Moran, J. Rodriguez y R. Domke: Reactive Power Compensation Technologies: State-
of-the-Art Review. Proceedings of the IEEE, 93(12):21442164, 2005, ISSN 0018-9219.

[8] Dong, L., M.L. Crow, Z. Yang, C. Shen, L. Zhang y S. Atcitty: A reconfigurable FACTS
system for university laboratories. Power Systems, IEEE Transactions on, 19(1):120128, 2004,
ISSN 0885-8950.

[9] Haro, P.Z. y J.M. Ramirez Arredondo: Experimental results on a lab scale single-phase TCSC. En
Power Engineering Society Summer Meeting, 2002 IEEE, volumen 3, pginas 14331438 vol.3,
2002.

[10] Mendoza-Araya, P., J.M. Castro, J.C. Nolasco y R.E. Palma-Behnke: Lab-Scale TCR-Based SVC
System for Educational and DG Applications. Power Systems, IEEE Transactions on, 26(1):311,
2011, ISSN 0885-8950.

[11] Muoz, Alfredo: Filtros sintonizados y compensacin de reactivos en sistemas perturbados por
armnicas. Apuntes del autor, 1997.

69
[12] Muoz, J., P. Mendoza, J. Cotos y R. Palma: Lab-scale three-phase TCR-based SVC system for
educational purpose in dynamic and steady-state analysis. En Power Symposium, 2007. NAPS
07. 39th North American, pginas 636643, 2007.

[13] Noroozian, M., A.N. Petersson, B. Thorvaldson, B.A. Nilsson y C.W. Taylor: Benefits of SVC
and STATCOM for electric utility application. En Transmission and Distribution Conference and
Exposition, 2003 IEEE PES, volumen 3, pginas 11921199, 2003.

[14] Rashid, Muhammad H.: Electrnica de potencia: Circuitos, dispositivos y aplicaciones. PRETINCE
HALL HISPANOAMERICANA, segunda edicin, 1993.

[15] Rashid, Muhammad H.: Power Electronics Handbook. ACADEMIC PRESS, primera edicin, 2001.

[16] Shicheng, Zheng, Fang Sian y Zhang Gaoyu: Research on TCR type SVC system and MATLAB
simulation. En Industrial Electronics and Applications (ICIEA), 2010 the 5th IEEE Conference on,
pginas 21102114, 2010.

[17] Siemens: Modbus Information. Site Collection Documents.

[18] SIEMENS: FACTS - FLEXIBLE AC Transmission Systems: Static Var Compensators. 2011.
www.siemens.com/energy/facts.

[19] Venu Yarlagadda, K. R. M. Rao, B. V. Sankar Ram: Hardware Circuit Implementation of Automatic
Control of Static Var Compensator (SVC) using Micro Controller. International Journal of
Instrumentation, Control and Automation (IJICA), Volume 1, Issue 2, 2011, ISSN 2231-1890.

[20] W. Brokering, R. Palma, L. Vargas: om Lufke (El Rayo Domado) o Los Sistemas Elctricos de
Potencia. PEARSON Prentice Hall, primera edicin, 2008.

[21] Warner, J., J. Fenn, S. Hutchinson y R. Platt: Impact of system changes on the harmonic
performance and rating of an SVC. En Transmission and Distribution Conference and Exposition
(T D), 2012 IEEE PES, pginas 17, 2012.

[22] Yehui, Han, J.Y. Chen y Hu Cheng: SVC multi-control system design and implementation. En Power
System Technology, 2002. Proceedings. PowerCon 2002. International Conference on, volumen 4,
pginas 22942297 vol.4, 2002.

[23] Zemerick, S.A., P. Klinkhachorn y A. Feliachi: Prototype design of a personal static VAr
compensator. En System Theory, 2002. Proceedings of the Thirty-Fourth Southeastern Symposium
on, pginas 311315, 2002.

70
Apndice A

Esquemticos de las placas

I
1 2 3 4 5 6 7 8

V15+ V15-
A V15+ 3V3 V15- A
V15+ V15- D7 D8 3V3 3V3

+
+
+
D9 C7 C19 C8

+
+
+
+
+
+
+
+
+
C1 - C2 - C3 - - -
C4 C5 C6 - C9 C10 C11 C12 C13 C14 01 UF 01 UF 1 uF

+
+
+
- - - 1uf 1uf 1uf - - - - - - R4 R5 R6
1uf 1uf 1uf 01uf 01uf 01uf 01uf 01uf 01uf
GND GND
GND GND GND GND GND GND GNDGNDGND GNDGNDGND

GND GND GND


U12
T1 T2
V15+ Vin Vout 3V3
B L3 0 L2 0 DETECTOR CRUCER POR CERO B
R 1 T 1
T5

GND
R 2 T 2

+
C18 U4 U1
pin4 1 14 pin3 -
terminal_3pin_8mm
T3 terminal_3pin_8mm 1uf 6 1 1 4
2 15 R'

Zero1
5 2 2 3 R7
L1 0 3 16 pin2 3V3 S'
Zero1 R8 4 3 R9
S 1 4 17
S 2 5 18 3.3V DB106
Zero2 4N25
6 19
terminal_3pin_8mm GND GND
7 20
Zero3 I_sens_1 T4
8 21
9 22 U5 U2 R' 0
I_sens_2
C 10 23 S' 1 C
6 1 1 4
11 24 S' T' 2
GND I_sens_3 5 2 2 3

Zero2
V15+ 12 25 3V3 R10 T'
GND R11 4 3 R12 terminal_3pin_8mm
V15- 13
DB106
DB25 4N25
GND

LEMS DE VOLTAJE U6 U3
6 1 1 4
T'

Zero3
LV 1 5 2 2 3 R13
r2 3V3 R'
2 5 R14 4 3 R15
D s2 R1 HT+ - V15- D
15k DB106
T6 4 4N25
+ V15+
GND
2 r2
1 3 I_sens_1
1 s2 HT- M
0 t2
LV20P pin2 U10

II
terminal_3pin_8mm 1 14
3V3
LV 2 2 13
s2
2 5 disparo2 3 12
t2 R2 HT+ - V15- pin4
4 11
15k pin3
4 5 10 GND
+ V15+
E disparo1 6 9 disparo3 E
1 3 I_sens_2 7 8
HT- M
LV20P 74HC86
GND
LV 3
t2
2 5
r2 R3 HT+ - V15-
15k
4 R
+ V15+
1 3 I_sens_3 CIRCUITO DE DISPARO
HT- M
LV20P
2

F F
U7 D1
1

R16
disparo3

1 6 3
S R17 2 5 Q1
3 4 Q2 3
1

MOC3011 R18

2
2

U8 D2 C15

1
2

R20 U9 D3

disparo1
1 6 3 T
1

R19 2 5 Q3 disparo2 1 6 3
3 4 Q4 3 R21 2 5 Q5 C16
3 4 Q6 3

1
G MOC3011 R23 R24 D4 G

2
1

Figura A.1: Esquemtico de la placa de adquisicin


C17 MOC3011 R25
2

L1
GND

D5
D6
L3
GND Title
L2
GND PLACA DE ADQUISICIN

Size Number Revision


H A4 H

Date: 07-04-2014 Sheet of Martn Cornejo S.


File: C:\Users\..\esq_placa_lem+disparo+detector_cero.SchDoc
Drawn By:
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

A A

ALIMENTACION
JTAG

TDI
TMS
DIM-100
V12+' D7 V12+ V5 V5 U1 3.3V V3.3 J2
B V12+ TRSTn U2 B
Vin Vout 1 2

+
+
+
C1 C2 V3.3' 3v3-ISO 1 51 3V3-ISO
C19 3 4 3V3-ISO 3V3-ISO

+
Diodo_axial_04 - - - RX-ISO 2 52 TX-ISO
C20 C4
capacitor_47uF_SMD 5 6 RX-ISO TX-ISO
- TDO

GND
capacitor_47uF_SMD C5 7 8 3 53
TCK GND
9 10 4 54
GND GND
11 12 5 55
GND GND EMU0 EMU1 GND-ISO 6 56 GND-ISO
13 14 GND-ISO GND-ISO
GND O3' ADC-B0 7 57 ADC-A0 O2
ADC-B0 ADC-A0
V3.3' JTAG 8 58
GND GND
O1' ADC-B1 9 59 ADC-A1 O1
ADC-B1 ADC-A1

+
GND C24 10 60
- GND GND
C O2' ADC-B2 GND 11 61 GND ADC-A2 O3 C
ADC-B2 ADC-A2
V5 12 62
GND GND
V5 V12+ V5 V3.3 V5 O3''' ADC-B3 13 63 ADC-A3 O2''
ADC-B3 ADC-A3

+
+
+
C7 C8 C9 GND 14 64
GND GND

+
+
+
+
+
- - - O1''' ADC-B4 15 65 ADC-A4 O1''
C6 C12 C15 C16 C17 C18 ADC-B4 ADC-A4
R1 R2 - - - - - 16
resistencia_axial_04 resistencia_axial_04 XCLK-IN 66
O2''' ADC-B5 17 67 ADC-A5 O3''
ADC-B5 ADC-A5
GND GND GND 18 68
GPIO-58 GPIO-59
D1 D2 GND GND ADC-B6 19 69 ADC-A6
ADC-B6 ADC-A6
LED-LTST-C191KFKT LED-LTST-C191KFKT GND 20 70
GPIO-60 GPIO-61
ADC-B7 21 71 ADC-A7
ADC-B7 ADC-A7
D 22 72 D
GPIO-62 GPIO-63
GND GND V5 U4 3.3V V3.3' V3.3 GPIO-00 23 73 GPIO-01
GPIO-00 GPIO-01
ePWM-A2 24 74 ePWM-B2
Vin Vout GPIO-02 GPIO-03

+
+
+
+
+
+
ePWM-A3 25 75 ePWM-B3
- - - - - - GPIO-04 GPIO-05
C13 C14 C21 C22 C23 C25 ePWM-A4 26 76 ePWM-B4
GPIO-06 GPIO-07
27 77

GND
GND 5V V5
GPIO-08 28 78 GPIO-09
GPIO-08 GPIO-09
GND GND GND GPIO-10 29 79 GPIO-11
GPIO-10 GPIO-11
GND GPIO-48 30 80 GPIO-49
GPIO-48 GPIO-49
GPIO-84 31 81 GPIO-85
GPIO-84 GPIO-85
GPIO-86 32 82
GPIO-86 5V V5
GPIO-12 33 83 DISPARO1
E GPIO-12 GPIO-13 E
GND GPIO-15 34 84 DISPARO2
GPIO-15 GPIO-14
GPIO-24 35 85 DISPARO3
GPIO-24 GPIO-25
RELE1-1 36 86 GPIO-27
RELES GPIO-26 GPIO-27
37 87
GND 5V V5
RELE2-1 38 88 GPIO-17
GPIO-16 GPIO-17
V12+ V12+ GPIO-18 39 89 GPIO-19
GPIO-18 GPIO-19
RELE2+ RELE3+ GND RELE3-1 40 90 GPIO-21
GPIO-20 GPIO-21
RELE2- RELE3- GPIO-22 41 91 GPIO-23
D3 D4 GPIO-22 GPIO-23
RELE4-1 42 92

2
2
Diodo_axial_04 Diodo_axial_04 GPIO-87 5V V5
GPIO-28 43 93 GPIO-29
RS485 R3 Q1 R4 Q2 U5 GPIO28/SCIRX-A
GPIO29/SCITX-A
RELE2 1 RELE3 1 V3.3 GPIO-30 44 94 GPIO-31
F BDX53 BDX53 GPIO-30 GPIO-31 F
resistencia_axial_04 resistencia_axial_04 RELE2-1 1 14 GPIO-32 45 95 GPIO-33
U6 GPIO-32 GPIO-33
V3.3' 2 13 Modbus_E 46 96

3
3
GPIO-34 5V V5
GPIO-19 1 8 RELE2 3 12 RELE4-1 47 97 TDI
GND GND TDI

+
Modbus_E2 7 B- C3 RELE1-1 4 11 RELE4 TCK 48 98 TDO
- TCK TDO
3 6 A+ 5 10 TMS 49 99 TRSTn
TMS TRSTn
GPIO-18 4 5 GND GND RELE1 6 9 RELE3-1 EMU1 50 100 EMU0
EMU1 EMU0
7 8 RELE3
MAX3485 DIM-100
GND V12+ V12+ 74HC86
RELE1+ RELE4+
RELE1- RELE4- GND GND
G D5 D6 G

2
2
Diodo_axial_04 Diodo_axial_04
RELE1 R5 1 Q3 RELE4 R6 1 Q4
BDX53
resistencia_axial_04 BDX53
resistencia_axial_04

3
3
GND GND

H H

CONECTORES J3
GND-ISO

III
1
TX-ISO
2 OPAMPS
RX-ISO
3

I
ENTRADA-ADC CRUCE POR CERO Y COM Header_3pin_male
I
T1
GPIO-33 B- T2
1 14 U7 U8
A+ Ii3 V3.3
GND 2 15 1 14 U9
Ii1 V3.3 O1' 1 14 V3.3 O1'' 1 14
3 16 GND 2 15
GPIO-85 T3 O1 1 14 E1-' 2 13 E1-'' 2 13
4 17 3 16 R9
GPIO-49 RELE2-
1 E1- 2 13 E1+' 3 12 E1+'' 3 12
5 18 4 17 R7 R8
GPIO-11 RELE2+
2 9 RELE4- E1+ 3 12 4 11 4 11
6 19 5 18 V3.3 V3.3
GPIO-09 RELE1-
3 8 RELE3+ 2.5V 4 11 E2+' 5 10 E3+' E2+'' 5 10 E3+''
7 20 6 19 V3.3
RELE1+
4 7 RELE4+ E2+ 5 10 E3+ 2.5V' E2-' 6 9 E3-' 2.5V'' E2-'' 6 9 E3-''
GND 8 21 7 20
DISPARO3 RELE3-
5 6 E2- 6 9 E3- O2' 7 8 O3' O2'' 7 8 O3''
9 22 8 21 U10
DISPARO2 O2 7 8 O3
J 10 23 9 22 LM385 U11 U12 J
DISPARO1 GND DB9 TLC_274 TLC_274
11 24 10 23 LM385 LM385
GPIO-01 Iv2 TLC_274
12 25 11 24
GPIO-00 Ii2 Iv1 GND GND
13 12 25
Iv3 T4 GND
13
DB25 1 GND 2.5V' E1+' Iv4 E1-' 2.5V' E2+' Iv5 E2-' 2.5V'' E1+'' Ii1 E1-'' 2.5V'' E2+''
GND
DB25 2 9 2.5V E1+ Iv1 E1- 2.5V E2+ Iv2 E2- GND R10 R11 R12 R13 GND R14 R15 R16
3 8 R22 R23 R24 R25 R18 R19 R20 R21
V12+' V12+' R26 R27 R59 R28 R60 R29 R61 R30
4 7
5 6 R63 R32 R64 R33 O1' O2' O1''
V5
O1 O2
GND DB9
K GND GND GND GND GND GND GND GND K
GND GND GND GND
Ii2 E2-''
2.5V' E3+' Iv6 E3-' 2.5V'' E3+'' Ii3 E3-'' R17
GPIO Y ePWM 2.5V E3+ Iv3 E3- R34 R35 R36 R37
R40 R41 R38 R39 R65 R31
T5 R42 R66 R43 R67 R44 O2''
Iv5 Iv4 R68 R45 O3' O3''
1 14
Ii6 Iv6 O3
2 15
Ii4 GND
3 16
Ii5 GND GND GND GND
4 17
L ePWM-A2 GND GND L
5 18
ePWM-A3
6 19
ePWM-A4 GND

Figura A.2: Esquemtico de la placa de control


7 20
GND 8 21
GPIO-08
9 22
GPIO-10
10 23 U13
GPIO-48
11 24
GPIO-86 V3.3 O1''' 1 14
12 25
GPIO-84 E1-''' 2 13
13
E1+''' 3 12
DB25 R46 4 11
V3.3
E2+''' 5 10 E3+'''
M 2.5V''' E2-''' 6 9 E3-''' M
O2''' 7 8 O3'''
U14 TLC_274
LM385
GND

2.5V''' E1+''' Ii4 E1-''' 2.5V''' E2+''' Ii5 E2-'''


GND R47 R48 R49 R50
R51 R52
R69 R53 R70 R54
N O1''' O2''' N

GND GND GND GND

2.5V' E3+''' Ii6 E3-'''


R55 R56
R57
R71 R58
O3'''
O O

GND GND

Title
PLACA DE CONTROL

Size Number Revision


A4

P Date: 07-04-2014 Sheet of Martn Cornejo S. P


File: C:\Users\..\esq_placa_control.SchDoc Drawn By:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
1 2 3 4 5 6

ENTRADA-AC
A GND A
V15+ DB9
S1 - C2

+
T2
1 N +
1 V12
2 C GND V15+
V15- 2 9
L - V15-
T1 - C3 3 8
GND GND

+
fuente_pcb_2 4 7
V15-
5 6
V5 V15+
DB9
GND

B JACK DC REGULADOR 5V B
h1
1 GND
S2 V9 V9 * V5 header_1pin
P
Vin Vout

+
+
g1 h2
g2 - -
C4 C5 1 V15+

IV
GND
power_jack header_1pin
GND GND GND
h3
1 V15-
regulador_7805
S3 V12 header_1pin
P GND
C C
g1 h4
g2 C1
47uF 1 V5
power_jack header_1pin
GND
GND h5
1 V12

Figura A.3: Esquemtico de la placa de alimentacin


header_1pin

Title
PLACA DE ALIMENTACIN
D D
Size Number Revision
A4
Date: 08-04-2014 Sheet of Martin Cornejo S.
File: C:\Users\..\fuente_pcb.SchDoc Drawn By:
1 2 3 4 5 6
1 2 3 4 5 6

3V3
3V3 v1
COR8
R8 COR1
R1

+
+
+
A PIC102 COC1
C1 COC2
PIC202 C2 PIC302 COC3
C3 PIT101 PIR801 PIR802IN1-
NLIN10
IN1-
PIR101
NLOUT1
PIR102OUT1 A
- 1
PIC101 PIC20-1 PIC30-1 2 PIT102 PIR202 resistencia_axial_04
COR2
R2
COT1
T1
GND PIR201
GND 3V3
GND
PIR302
COR3
R3
COT2
T2 v1 COT3
T3
PIR301 NL205V
2.5V OUT1
1 PIT201 PIR402 PIR401IN1+ PIT301 1
COR4 PIR502 COO1
O1 NLOUT2
OUT2
2 PIT202 v2 R4 PIT302 2
PIU102 COR5
R5 1 8 3V3 NLOUT3
OUT3
3 PIT203 v3 COU1 PIO101 PIO108 PIT303 3
U1 IN1- 2 7
PIO102 IN- Vcc+ PIO107
Terminal_3pin_5mm LM385 PIR501 NLIN10
IN1+ 3 6 OUT1 Terminal_3pin_5mm
PIO103 IN+ OUT PIO106
PIU103 4
PIO104 Vcc-
5
PIO105

GND OP07
GND GND
B B

v2
COR13
R13 IN2- IN2- COR6
R6 OUT2
PIR1301 PIR1302 PIR601 PIR602
PIR702 resistencia_axial_04
COR7
R7

PIR701

V
GND

2.5V IN2+ COO2


O2
PIR902 PIR901
COR9
R9 PIR10 2 1
PIO201
8
PIO208
3V3
COR10
R10 NLIN20
IN2- 2
PIO202 IN-
7
Vcc+ PIO207
NLIN20
IN2+ 3
PIO203
6 OUT2
IN+ OUT PIO206
PIR10 1 4
PIO204 Vcc-
5
PIO205

C OP07 C
GND GND

v3
COR16
R16 IN3- IN3- COR11
R11 OUT3
PIR1601 PIR1602 PIR1101 PIR1102
PIR1202 resistencia_axial_04
COR12
R12

PIR1201

Figura A.4: Esquemtico de la placa de ajuste


GND

2.5VPIR1402 IN3+ COO3


O3
PIR1401
COR14
R14 PIR1502 1
PIO301
8
PIO308
3V3
COR15
R15 NLIN30
IN3- 2 7
PIO302 IN- Vcc+ PIO307
D NLIN30
IN3+ 3
PIO303 IN+
6 OUT3
OUT PIO306
Title D
PIR1501 4
PIO304 Vcc-
5
PIO305
Placa de ajuste
OP07 Size Number Revision
GND GND
A4
Date: 27-05-2014 Sheet of
File: C:\Users\..\esq_ajuste.SchDoc Drawn By: Martn Cornejo S.
1 2 3 4 5 6
Apndice B

Cdigo del programa

VI
svc4-Main.c

1 // DESCRIPCIN
2 //
3 // Rutina de control del SVC, modo manual.
4 // Envia datos por Puerto Serie A.
5 // El angulo de disparo es elegido por el usuario
6 //###########################################################################
7 // $Microcontrolador: TMS320F283335 $
8 // $Fecha: 24 de Marzo, 2014 $
9 // $Autor: Martn Cornejo Saavedra $
10 //###########################################################################
11 //
12
13 #include "DSP28x_Project.h" // Device Headerfile and Examples Include File
14 #include "math.h"
15 //#include "time.h"
16 //#include <stdio.h>
17 //#include <stdlib.h>
18
19 //=====================================funciones a
utilizar=================================================
20
21 void Rutina_ADC(void);
22 void ConfigurarEPWM(void);
23 void ConfigurarADC(void);
24 void ConfigurarGPIO(void);
25 void ConfigurarXINT(void);
26 void adc_init_offset(void);
27
28 void scia_configurar(void);
29 void scia_fifo_iniciar(void);
30 void scia_emitir(int a);
31 void scia_msg(char *msg);
32
33 interrupt void cpu_timer0_isr(void);
34 interrupt void adc_isr(void);
35 interrupt void epwm1_isr(void);
36 interrupt void xint1_isr(void);
37 interrupt void xint2_isr(void);
38 interrupt void xint3_isr(void);
39
40 //========================================constantes==========================================
=======
41 //universales
42 #define FALSE 0
43 #define TRUE 1
44
45 //definiciones de constantes
46 #define UNODIVRAIZTRES 0.5773502691896258
47 //#define DOS_PI 6.2831853071795865
48
49 // ADC start parameters
50 #define ADC_MODCLK 0x2 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 150/(2*2) = 37.5 MHz
51 #define BUF_SIZE 2048 // Sample buffer size
52 #define ADC_CLKPS 0x1 // ADCCLK = HSPCLK/(2*ADC_CLKPS*(CPS+1))
53 #define ADC_CPS 0x0
54 #define ADC_SHCLK 0xf // S/H width in ADC module periods = 16 ADC
clocks

Page 1
svc4-Main.c

55
56 //ePWM parameters
57 #define EPWM_TIMER_TBPRD 17858 // Indica hasta dnde cuenta el PWM en ciclos de TBCLK,
cuenta para arriba y para abajo, luego el perodo es el doble en ciclos TBCLK
58
59 //GPIOs disparo
60 #define PIN_DISPARO_AB GPIO13
61 #define PIN_DISPARO_BC GPIO14
62 #define PIN_DISPARO_CA GPIO25
63
64 #define PIN_CONTACTOR_1 GPIO16
65 #define PIN_CONTACTOR_2 GPIO26
66
67 //========================================variables===========================================
======
68 //Bancos de condensadores
69 Uint16 numero_bancos=0;
70
71 //Setpoint
72 Uint16 V_setpoint=0;
73
74 //deteccion cruce por cero
75 Uint16 deteccion_AB=FALSE;
76 Uint16 deteccion_BC=FALSE;
77 Uint16 deteccion_CA=FALSE;
78 Uint16 angulo_por_cero=90; //es el angulo de control que se tiene cuando se detecta el cruce
por cero
79 Uint16 contador_AB=0; //contador de cruces por cero, sirve para debuggear
80 Uint16 contador_BC=0; //contador de cruces por cero
81 Uint16 contador_CA=0; //contador de cruces por cero
82
83 //Timer y disparo
84 Uint16 step_counter_AB=0;
85 Uint16 step_counter_BC=0;
86 Uint16 step_counter_CA=0;
87 //Uint16 freqStep = 500000; //55 uSeg, resolucion de 180 para 100Hz (frecuencia de semi-ciclo)
88 Uint16 step_deseado=68;
89 Uint16 step_deseado_AB=0;
90 Uint16 step_deseado_BC=0;
91 Uint16 step_deseado_CA=0;
92
93 Uint16 estado_CA_1=FALSE;
94
95 Uint16 estado_BC_1=FALSE;
96
97 Uint16 estado_AB_1=FALSE;
98
99 Uint16 angulo_disparo=0;
100
101
102 // variables auxiliares
103 Uint16 aux1=0;
104
105 //Calculo de Offset ADC
106 int Offset_cnt = 0;
107 float offsetVbt_AB = 0, offsetVbt_BC = 0, offsetVbt_CA = 0;
108

Page 2
svc4-Main.c

109 float KI_offset = 0.998, KP_offset = 0.001999;


110
111 //Calculo de variables electricas
112 float KgainVbt_AB = 0.243645, KgainVbt_BC = 0.247982, KgainVbt_CA= 0.247982;
113 float Vbt_AB = 0, Vbt_BC = 0,Vbt_CA = 0;
114 float Vbt_A = 0, Vbt_B = 0, Vbt_C = 0;
115 float Vbt_AB_2 = 0, Vbt_BC_2 = 0, Vbt_CA_2 = 0;
116 float Vbt_AB_f = 0, Vbt_AB_22 = 0, Vbt_AB_21 = 0, Vbt_AB_f2 = 0, Vbt_AB_f1 = 0;
117 float Vbt_BC_f = 0, Vbt_BC_22 = 0, Vbt_BC_21 = 0, Vbt_BC_f2 = 0, Vbt_BC_f1 = 0;
118 float Vbt_CA_f = 0, Vbt_CA_22 = 0, Vbt_CA_21 = 0, Vbt_CA_f2 = 0, Vbt_CA_f1 = 0;
119 float Vbt_AB_rms = 0, Vbt_BC_rms = 0, Vbt_CA_rms = 0;
120 float Vbt_rms = 0;
121
122 //==========================Ac empieza el main====================================
123
124 main()
125 {
126
127 InitSysCtrl(); // PLL, WatchDog, enable Peripheral Clocks
128 InitSciaGpio(); //Inicia el puerto serial SCI-A
129
130 EALLOW;
131 SysCtrlRegs.HISPCP.all = ADC_MODCLK; // HSPCLK = SYSCLKOUT/ADC_MODCLK
132 EDIS;
133
134 DINT;
135
136 InitPieCtrl();
137
138 // Disable CPU interrupts and clear all CPU interrupt flags:
139 IER = 0x0000;
140 IFR = 0x0000;
141
142 InitPieVectTable();
143
144 InitAdc(); // For this example, init the ADC
145
146 InitCpuTimers();
147 ConfigCpuTimer(&CpuTimer0, 150,75);
148
149 ConfigurarEPWM();
150 ConfigurarADC();
151 ConfigurarGPIO();
152 ConfigurarXINT();
153 scia_fifo_iniciar(); // Inicia el FIFO
154 scia_configurar(); // Configura el SCI-A
155
156 EALLOW;
157 PieVectTable.TINT0 = &cpu_timer0_isr;
158 PieVectTable.EPWM1_INT = &epwm1_isr;
159 PieVectTable.ADCINT = &adc_init_offset;
160 PieVectTable.XINT1 = &xint1_isr;
161 PieVectTable.XINT2 = &xint2_isr;
162 PieVectTable.XINT3 = &xint3_isr;
163 EDIS;
164
165 PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Enable the PIE block

Page 3
svc4-Main.c

166 PieCtrlRegs.PIEIER1.bit.INTx4 = 1; //Enable XINT1


167 PieCtrlRegs.PIEIER1.bit.INTx5 = 1; //Enable XINT2
168 PieCtrlRegs.PIEIER12.bit.INTx1 = 1; //Enable XINT3
169 PieCtrlRegs.PIEIER1.bit.INTx6 = 1; //adc
170 PieCtrlRegs.PIEIER1.bit.INTx7 = 1; //timer0
171 PieCtrlRegs.PIEIER3.bit.INTx1 = 1;// ePWM1
172 IER |= M_INT1;
173 IER |= M_INT3;
174 IER |= M_INT12;
175 EINT; // Enable Global interrupt INTM
176 ERTM; // Enable Global realtime interrupt DBGM
177
178 CpuTimer0Regs.TCR.all = 0x4001; // Use write-only instruction to set TSS bit = 0
179
180 for(;;)
181 {
182
183 }
184 }
185
186 //=========================Termina el
main===============================================================================
187
188 //======================Implementacin de funciones e
interrupciones=====================================================
189
190 void ConfigurarEPWM()
191 {
192 EALLOW;
193 SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; // Deshabilita el reloj del EPWM
194 EDIS;
195
196 // >>>>> CONFIGURACIN EPWM1 <<<<<
197 // Setup TBCLK
198 EPwm1Regs.TBPRD = EPWM_TIMER_TBPRD; // Fijar perodo del PWM
199 EPwm1Regs.TBCTR = 0x0000; // Clear counter
200 // Setup counter mode
201 EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Modo simtrico (ie contador triangular)
202 EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // TBLK = SYSCLKOUT/(CLKDIV x HSPCLKDIV)
este registro es pa tener un control ms fino de la frecuencia
203 EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1; // Clock ratio to SYSCLKOUT en este caso:
TB_DIV1 -> TBLK = SYSCLKOUT
204 // Set actions
205 EPwm1Regs.AQCTLB.all = 0x0600;
206 // Interrupt where we will change the Compare Values
207 EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Select INT on Zero event
208 EPwm1Regs.ETSEL.bit.INTEN = 1; // Enable INT
209 EPwm1Regs.ETPS.bit.INTPRD = ET_1ST; // Genera interrupcin cada vez
210
211 EALLOW;
212 SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; // Habilitar el reloj del EPWM
213 EDIS;
214 }
215
216 void ConfigurarADC(void){
217 // Specific ADC setup for this example:
218

Page 4
svc4-Main.c

219 AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK; // Duracin del sample and hold


220 AdcRegs.ADCTRL1.bit.CPS = ADC_CPS; //ADCCLK=FCLK/1
221 AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CLKPS; // Divisor para el reloj ADC, ADCCLK =
HSPCLK/(2*ADC_CLKPS*(CPS+1))
222 AdcRegs.ADCTRL3.bit.SMODE_SEL = 0x1; //Setup simultaneous sampling mode
223 AdcRegs.ADCTRL1.bit.SEQ_CASC = 0x1; // 0x0 Non-Cascaded Mode 0x1 Cascaded Mode
224 AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 0x1; // Habilita la interrupcin de la secuencia 1
que se gatilla cada EOS (end of sequence)
225 AdcRegs.ADCTRL2.bit.RST_SEQ1 = 0x1; // Resetea el contador de SEQ1
226 AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; // Setup ADCINA0 y ADCINB0 (0x0) como la
primera conversin de la secuencia (CONV0x0)
227 AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1;
228 AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x2;
229 AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x3;
230 AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x4;
231 AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x5;
232 AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x0005; // En cada SOC se ejecutan 6 conversiones
dobles (canales A y B, desde 0 a 5, 12 conversiones).
233 }
234
235 void ConfigurarGPIO(void){
236 EALLOW;
237 GpioCtrlRegs.GPAMUX2.bit.GPIO31 = 0;
238 GpioCtrlRegs.GPADIR.bit.GPIO31 = 1;
239 GpioDataRegs.GPASET.bit.GPIO31 = 1;
240 GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0;
241 GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1;
242 GpioDataRegs.GPBSET.bit.GPIO34 = 1;
243
244 //configuramos los pines de interrupcion externa
245 GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0; // GPIO
246 GpioCtrlRegs.GPADIR.bit.GPIO0 = 0; // input
247 GpioCtrlRegs.GPAQSEL1.bit.GPIO0 = 0; // Xint1 Synch to SYSCLKOUT only
248
249 GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0; // GPIO
250 GpioCtrlRegs.GPADIR.bit.GPIO1 = 0; // input
251 GpioCtrlRegs.GPAQSEL1.bit.GPIO1 = 0; //Xint2 Synch to SYSCLKOUT
252
253 GpioCtrlRegs.GPBMUX1.bit.GPIO33 = 0; // GPIO
254 GpioCtrlRegs.GPBDIR.bit.GPIO33 = 0; // input
255 GpioCtrlRegs.GPBQSEL1.bit.GPIO33 = 0; //Xint3 Synch to SYSCLKOUT
256
257 //declaramos GPIO0 como XINT1
258 GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 0; // Xint1 is GPIO0
259 GpioIntRegs.GPIOXINT2SEL.bit.GPIOSEL = 1; // XINT2 is GPIO1
260 GpioIntRegs.GPIOXINT3SEL.bit.GPIOSEL = 1; // XINT3 is GPI33
261
262 GpioCtrlRegs.GPAPUD.bit.PIN_DISPARO_AB = 0; // Enable pull-up
263 GpioCtrlRegs.GPAMUX1.bit.PIN_DISPARO_AB = 0;
264 GpioCtrlRegs.GPADIR.bit.PIN_DISPARO_AB = 1;
265 GpioDataRegs.GPACLEAR.bit.PIN_DISPARO_AB = 1;
266
267 GpioCtrlRegs.GPAPUD.bit.PIN_DISPARO_BC = 0; // Enable pull-up
268 GpioCtrlRegs.GPAMUX1.bit.PIN_DISPARO_BC = 0;
269 GpioCtrlRegs.GPADIR.bit.PIN_DISPARO_BC = 1;
270 GpioDataRegs.GPACLEAR.bit.PIN_DISPARO_BC = 1;
271

Page 5
svc4-Main.c

272 GpioCtrlRegs.GPAPUD.bit.PIN_DISPARO_CA = 0; // Enable pull-up


273 GpioCtrlRegs.GPAMUX2.bit.PIN_DISPARO_CA = 0;
274 GpioCtrlRegs.GPADIR.bit.PIN_DISPARO_CA = 1;
275 GpioDataRegs.GPACLEAR.bit.PIN_DISPARO_CA = 1;
276
277 GpioCtrlRegs.GPAPUD.bit.PIN_CONTACTOR_1 = 0; // Enable pull-up
278 GpioCtrlRegs.GPAMUX2.bit.PIN_CONTACTOR_1 = 0;
279 GpioCtrlRegs.GPADIR.bit.PIN_CONTACTOR_1 = 1;
280 GpioDataRegs.GPACLEAR.bit.PIN_CONTACTOR_1 = 1;
281
282 GpioCtrlRegs.GPAPUD.bit.PIN_CONTACTOR_2 = 0; // Enable pull-up
283 GpioCtrlRegs.GPAMUX2.bit.PIN_CONTACTOR_2 = 0;
284 GpioCtrlRegs.GPADIR.bit.PIN_CONTACTOR_2 = 1;
285 GpioDataRegs.GPACLEAR.bit.PIN_CONTACTOR_2 = 1;
286
287 EDIS;
288
289 }
290
291 void ConfigurarXINT(void){
292
293 XIntruptRegs.XINT1CR.bit.POLARITY = 1; //Xint1 Flanco de subida
294 XIntruptRegs.XINT2CR.bit.POLARITY = 1; //Xint2 Flanco de subida
295 XIntruptRegs.XINT3CR.bit.POLARITY = 1; //Xint3 Flanco de subida
296
297 XIntruptRegs.XINT1CR.bit.ENABLE = 1; // Enable Xint1
298 XIntruptRegs.XINT2CR.bit.ENABLE = 1; // Enable Xint2
299 XIntruptRegs.XINT3CR.bit.ENABLE = 1; // Enable Xint3
300 }
301
302 interrupt void epwm1_isr(void) // Inicio de ciclo. Aqu se hace SOC y se fija la bandera que
usa la interrupcin del adc pa saber en q parte del pwm estamos
303 {
304 //contador1++;
305 AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1; // gatilla la interrupcion para el ADC
306 // Clear INT flag for this timer
307 EPwm1Regs.ETCLR.bit.INT = 1;
308 // Acknowledge this interrupt to receive more interrupts from group 3
309 PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
310 }
311 interrupt void adc_init_offset(void){
312
313 Offset_cnt++;
314
315 offsetVbt_AB = KI_offset*offsetVbt_AB+KP_offset*((float)(AdcRegs.ADCRESULT0 >>4));
316 offsetVbt_BC = KI_offset*offsetVbt_BC+KP_offset*((float)(AdcRegs.ADCRESULT2 >>4));
317 offsetVbt_CA = KI_offset*offsetVbt_CA+KP_offset*((float)(AdcRegs.ADCRESULT4 >>4));
318
319
320 if(Offset_cnt >= 30000){
321 EALLOW;
322 PieVectTable.ADCINT = &adc_isr;
323 EDIS;
324 }
325
326 //Limpiar ADC
327 AdcRegs.ADCTRL2.bit.RST_SEQ1 = 0x1; // Resetea el contador de SEQ1

Page 6
svc4-Main.c

328 AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; // Clear INT SEQ1 bit


329 PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; // Acknowledge interrupt to PIE
330 }
331
332 interrupt void adc_isr(void)
333 {
334 Rutina_ADC(); //rutina de medicion voltajes y corrientes rms
335
336 AdcRegs.ADCTRL2.bit.RST_SEQ1 = 0x1; // Resetea el contador de SEQ1
337 AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; // Clear INT SEQ1 bit
338 PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; // Acknowledge interrupt to PIE
339
340 }
341
342 void Rutina_ADC(void){
343 //Lectura ADC
344 //Vbt_AB=KgainVbt_AB*((float)(AdcRegs.ADCRESULT0 >>4)-offsetVbt_AB);
345 Vbt_AB=0.11*((float)(AdcRegs.ADCRESULT0 >>4)-offsetVbt_AB);
346 Vbt_BC=KgainVbt_BC*((float)(AdcRegs.ADCRESULT2 >>4)-offsetVbt_BC);
347 Vbt_CA=KgainVbt_CA*((float)(AdcRegs.ADCRESULT4 >>4)-offsetVbt_CA);
348
349 //Fase-Fase a Fase-Neutro
350 Vbt_A=0.333333333333333*(Vbt_AB-Vbt_CA);
351 Vbt_B=0.333333333333333*(Vbt_BC-Vbt_AB);
352 Vbt_C=0.333333333333333*(Vbt_CA-Vbt_BC);
353
354 //RMS
355 Vbt_AB_2 = Vbt_AB*Vbt_AB;
356 Vbt_BC_2 = Vbt_BC*Vbt_BC;
357 Vbt_CA_2 = Vbt_CA*Vbt_CA;
358
359 Vbt_AB_f=8.85174031474353e-005*Vbt_AB_21+8.85174031474353e-005*Vbt_AB_22-
(-1.98109467563163*Vbt_AB_f1+0.98127171043792*Vbt_AB_f2);
360 Vbt_AB_22=Vbt_AB_21;
361 Vbt_AB_21=Vbt_AB_2;
362 Vbt_AB_f2=Vbt_AB_f1;
363 Vbt_AB_f1=Vbt_AB_f;
364
365 Vbt_BC_f=8.85174031474353e-005*Vbt_BC_21+8.85174031474353e-005*Vbt_BC_22-
(-1.98109467563163*Vbt_BC_f1+0.98127171043792*Vbt_BC_f2);
366 Vbt_BC_22=Vbt_BC_21;
367 Vbt_BC_21=Vbt_BC_2;
368 Vbt_BC_f2=Vbt_BC_f1;
369 Vbt_BC_f1=Vbt_BC_f;
370
371 Vbt_CA_f=8.85174031474353e-005*Vbt_CA_21+8.85174031474353e-005*Vbt_CA_22-
(-1.98109467563163*Vbt_CA_f1+0.98127171043792*Vbt_CA_f2);
372 Vbt_CA_22=Vbt_CA_21;
373 Vbt_CA_21=Vbt_CA_2;
374 Vbt_CA_f2=Vbt_CA_f1;
375 Vbt_CA_f1=Vbt_CA_f;
376
377 //Vbt_AB_rms = sqrt(Vbt_AB_f)*0.222222-138.8889;
378 Vbt_AB_rms = sqrt(Vbt_AB_f);
379 Vbt_BC_rms = sqrt(Vbt_BC_f);
380 Vbt_CA_rms = sqrt(Vbt_CA_f);
381

Page 7
svc4-Main.c

382 Vbt_rms = (Vbt_AB_rms + Vbt_BC_rms + Vbt_CA_rms)*UNODIVRAIZTRES/3;


383
384 }
385
386 interrupt void xint1_isr(void)
387 {
388 //GpioDataRegs.GPATOGGLE.bit.GPIO31=1; //Enciende o apaga el LED cuando se entra en
la interrupcion
389 contador_AB++;
390
391 step_deseado_AB=step_deseado+contador_AB/10;
392 if(step_deseado_AB > 130) {contador_AB=0;}
393 //Variable que sirve para visualizar en watch expresions, para debugear.
394 deteccion_AB=TRUE;
395 step_counter_AB=0; //reseteamos el contador de ciclo
396 estado_AB_1=FALSE; //el pin de disparo AB est apagado
397
398 //enviar datos por puerto serie cada 20ms (interrupciones pares), ya que la interrupcion
ocurre cada 10ms (cada semiciclo)
399 if (contador_AB%2==0){
400 scia_emitir(Vbt_rms);
401 scia_emitir(numero_bancos);
402 scia_emitir(angulo_disparo);
403 scia_emitir(V_setpoint);
404 scia_emitir('\n');
405 }
406
407 // Acknowledge this interrupt to get more from group 1
408
409 PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
410 }
411
412 interrupt void xint2_isr(void)
413 {
414 //GpioDataRegs.GPATOGGLE.bit.GPIO31=1; //Enciende o apaga el LED cuando se entra en
la interrupcion
415 contador_BC++;
416 step_deseado_BC=step_deseado+contador_BC/10;
417 if(step_deseado_BC > 130) {contador_BC=0;}
418 deteccion_BC=TRUE;
419 step_counter_BC=0; //reseteamos el contador de ciclo
420 estado_BC_1=FALSE; //el pin de disparo BC est apagado
421
422 // Acknowledge this interrupt to get more from group 1
423 PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
424 }
425
426 interrupt void xint3_isr(void)
427 {
428 //GpioDataRegs.GPATOGGLE.bit.GPIO31=1; //Enciende o apaga el LED cuando se entra en
la interrupcion
429 contador_CA++;
430
431 step_deseado_CA=step_deseado+contador_CA/10;
432 if(step_deseado_CA > 130) {contador_CA=0;}
433 deteccion_CA=TRUE;
434 step_counter_CA=0; //reseteamos el contador de ciclo

Page 8
svc4-Main.c

435 estado_CA_1=FALSE; //el pin de disparo CA est apagado


436
437 // Acknowledge this interrupt to get more from group 12
438 PieCtrlRegs.PIEACK.all = PIEACK_GROUP12;
439 }
440
441 interrupt void cpu_timer0_isr(void)
442 {
443
444 //Algoritmo de disparo en fase AB
445
446 if (deteccion_AB==TRUE){
447 if(step_counter_AB>step_deseado_AB && estado_AB_1==FALSE){
448 GpioDataRegs.GPASET.bit.PIN_DISPARO_AB = 1;
449 estado_AB_1=TRUE;
450 }
451 else if(step_counter_AB>step_deseado_AB && estado_AB_1==TRUE){
452 GpioDataRegs.GPACLEAR.bit.PIN_DISPARO_AB = 1;
453 deteccion_AB=FALSE;
454 }
455 else step_counter_AB++;
456 }
457
458 //Algoritmo de disparo en fase BC
459
460 if (deteccion_BC==TRUE){
461 if(step_counter_BC>step_deseado_BC && estado_BC_1==FALSE){
462 GpioDataRegs.GPASET.bit.PIN_DISPARO_BC = 1;
463 estado_BC_1=TRUE;
464 }
465 else if(step_counter_BC>step_deseado_BC && estado_BC_1==TRUE){
466 GpioDataRegs.GPACLEAR.bit.PIN_DISPARO_BC = 1;
467 deteccion_BC=FALSE;
468 }
469 else step_counter_BC++;
470 }
471
472 //Algoritmo de disparo en fase CA
473
474 if (deteccion_CA==TRUE){
475 if(step_counter_CA>step_deseado_CA && estado_CA_1==FALSE){
476 GpioDataRegs.GPASET.bit.PIN_DISPARO_CA = 1;
477 estado_CA_1=TRUE;
478 }
479 else if(step_counter_CA>step_deseado_CA && estado_CA_1==TRUE){
480 GpioDataRegs.GPACLEAR.bit.PIN_DISPARO_CA = 1;
481 deteccion_CA=FALSE;
482 }
483 else step_counter_CA++;
484 }
485
486 // Acknowledge this interrupt to receive more interrupts from group 1
487 PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; //Si no se pone esto la interrupcion deja de servir
488 //Esta sentencia es una forma de resetear la
interrupcion
489 //O permitir que sigan ocurriendo interrupciones
del grupo 1 del vector pie

Page 9
svc4-Main.c

490 }
491
492 void scia_configurar()
493 {
494 SciaRegs.SCICCR.all =0x0007; // 1 stop bit, No loopback
495 // Sin paridad,8 char bits,
496 // async mode, idle-line protocol
497 SciaRegs.SCICTL1.all =0x0003; // Habilitar TX, RX, internal SCICLK,
498 // Disable RX ERR, SLEEP, TXWAKE
499 SciaRegs.SCICTL2.all =0x0003;
500 SciaRegs.SCICTL2.bit.TXINTENA =1;
501 SciaRegs.SCICTL2.bit.RXBKINTENA =1;
502 #if (CPU_FRQ_150MHZ)
503 SciaRegs.SCIHBAUD =0x0001; // 9600 baud @LSPCLK = 37.5MHz.
504 SciaRegs.SCILBAUD =0x00E7;
505 #endif
506 #if (CPU_FRQ_100MHZ)
507 SciaRegs.SCIHBAUD =0x0001; // 9600 baud @LSPCLK = 20MHz.
508 SciaRegs.SCILBAUD =0x0044;
509 #endif
510 SciaRegs.SCICTL1.all =0x0023; // Relinquish SCI from Reset
511 }
512
513 void scia_emitir(int a) //Transmite un caracter
514 {
515 while (SciaRegs.SCIFFTX.bit.TXFFST != 0) {}
516 SciaRegs.SCITXBUF=(int)a;
517 }
518
519 void scia_msg(char * msg) //Transmite un arreglo de caracteres
520 {
521 int i;
522 i = 0;
523 while(msg[i] != '\0')
524 {
525 scia_emitir(msg[i]);
526 i++;
527 }
528 }
529
530 void scia_fifo_iniciar()
531 {
532 SciaRegs.SCIFFTX.all=0xE040;
533 SciaRegs.SCIFFRX.all=0x204f;
534 SciaRegs.SCIFFCT.all=0x0;
535
536 }
537
538 //===========================================================================
539 // Fin del cdigo
540 //===========================================================================
541
542

Page 10
Modbus_SCIB-Main.c

1 // DESCRIPCIN
2 //
3 // Rutina de conmunicacin Modbus del SVC.
4 // Ejemplo para monitorear, encender o apagar un LED utilizando holding register o coils
5 // Comunicacin realizada por Puerto Serie B.
6 //###########################################################################
7 // $Microcontrolador: TMS320F283335 $
8 // $Fecha: 24 de Marzo, 2014 $
9 // $Autor: Andrs Vargas $
10 // $Modificado por: Martn Cornejo S.
11 //###########################################################################
12
13 #include "DSP28x_Project.h" // Device Headerfile and Examples Include File
14
15 Uint16 contador_rx=0;
16 Uint16 contador_tx=0;
17
18 // Prototype statements for functions found within this file.
19 void Scib_configurar(void);
20 void Scib_fifo_init(void);
21 void delay_loop();
22 void EnviarDatosModbus();
23 void InicializarRegistros();
24 void ReadCoilStatus(); //Leer bits de cambio de estado
25 void ReadInputStatus(); //Leer bits de estado de operacin
26 void ReadHoldingRegisters(); //Leer floats modificables
27 void ReadInputRegisters(); //Leer floats de estado de operacin
28 void ForceMultipleCoils(); //Modificar bits de cambio de estado
29 void PresetMultipleRegisters(); //Modificar registros float
30 void PresetSingleRegister(); //Modificar registros float
31 void ModbusExcep(Uint16);
32 interrupt void ScibRxFifoIsr(void);
33 interrupt void ScibTxFifoIsr(void);
34 interrupt void cpu_timer0_isr(void);
35 Uint16 AddrCheck(Uint16,Uint16,Uint16);
36 Uint16 CRC16(Uint16 *, Uint16);
37
38
39 #define SCI_PRD 243
40
41 //Variables Globales
42 #define FALSE 0
43 #define TRUE 1
44
45 //Variables de entrada
46 int Encendido=FALSE;
47 int holding = 8;
48 int analoginput = 7;
49
50 //Variables auxiliares
51 Uint16 ReceivedChar;
52 Uint16 contador=10;
53 char *msg;
54
55 //Estados Coil
56 #define COIL_LED 0
57 #define COIL_2 1

Page 1
Modbus_SCIB-Main.c

58
59 // Asignacin de pines GPIO
60 #define PIN_MODBUS_DE GPIO34
61 #define PIN_LED GPIO31
62 #define PIN_LED_COMUNICACIONES GPIO20
63
64 //Constantes para Modbus
65 #define MaxI 75 //Max input variables que definen el tamao mximo de los
mensajes y las direcciones mximas de los registros
66 #define MaxQ 32 //Max Coil
67 #define MaxAI 75 // Max Analog Input
68 #define MaxHold 32 // Max Holding Registers
69 #define ILLEGAL_FUNCTION 0x01 // Cdigos de los errores de modbus
70 #define ILLEGAL_DATA_ADDRESS 0x02
71 #define ILLEGAL_DATA_VALUE 0x03
72 #define SLAVE_DEVICE_FAILURE 0x04
73 #define ACKNOWLEDGE 0x05
74 #define SLAVE_DEVICE_BUSY 0x06
75
76 //Matrices auxiliares para clculo del CRC en protocolo Modbus
77 const Uint16 auchCRCHi[] = {
78 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
79 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
80 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
81 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
82 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
83 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
84 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
85 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
86 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
87 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
88 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
89 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
90 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
91 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
92 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
93 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
94 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
95 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
96 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
97 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
98 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
99 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
100 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
101 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
102 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
103 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40
104 } ;
105
106 const Uint16 auchCRCLo[] = {
107 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06,
108 0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD,
109 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,
110 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A,
111 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4,
112 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,
113 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3,

Page 2
Modbus_SCIB-Main.c

114 0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4,
115 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,
116 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29,
117 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED,
118 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,
119 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60,
120 0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67,
121 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,
122 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68,
123 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E,
124 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,
125 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71,
126 0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92,
127 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,
128 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B,
129 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B,
130 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,
131 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42,
132 0x43, 0x83, 0x41, 0x81, 0x80, 0x40
133 } ;
134
135 //Variables Modbus
136 Uint16 SdataA[]={0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0}; //
Datos para enviar
137 Uint16 RdataA[]={0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0}; //
Datos recibidos
138 Uint16 RdataA_Num=1; // Nmero de bytes recibidos
139 Uint16 SdataA_Num=1; // Nmero de bytes para enviar
140 Uint16 Local=5; //Address del equipo. El valor se actualiza de acuerdo a la posicin de
los pines de la placa
141 int ContadorEnvioModbus=1;
142 Uint16 CRCCheck=0;
143 Uint16 AnteriorModbus=0;
144 int* DiscreteInput[]={0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0};
145 int* HoldingRegister[]={0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0};
146 int* InputRegister[]={0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0};
147 int ContadorFinDeCuadroModbus=0;
148 Uint16 ContadorLedComunicaciones=0;
149 Uint16 ContadorLedAddress=0;
150 int ComenzarEnvio=FALSE;
151
152 void main(void)
153 {
154
155
156 // Step 1. Initialize System Control::
157 // PLL, WatchDog, enable Peripheral Clocks
158 // This example function is found in the DSP2833x_SysCtrl.c file.
159 InitSysCtrl();
160 InitScibGpio();
161 DINT;
162 InitPieCtrl();

Page 3
Modbus_SCIB-Main.c

163 IER = 0x0000;


164 IFR = 0x0000;
165 InitPieVectTable();
166
167 InicializarRegistros();
168
169 EALLOW; // This is needed to write to EALLOW protected registers
170 PieVectTable.TINT0 = &cpu_timer0_isr;
171 PieVectTable.SCIRXINTB = &ScibRxFifoIsr;
172 PieVectTable.SCITXINTB = &ScibTxFifoIsr;
173 EDIS;
174
175 InitCpuTimers(); // For this example, only initialize the Cpu Timers
176
177 #if (CPU_FRQ_150MHZ) //Mi DSP es de 150 MHz
178 // Configure CPU-Timer 0 to interrupt every 500 milliseconds:
179 // 150MHz CPU Freq, 500 millisecond Period (in uSeconds)
180 ConfigCpuTimer(&CpuTimer0, 150, 10000); //Lo cambie a 1 segundo
181 #endif
182 #if (CPU_FRQ_100MHZ)
183 // Configure CPU-Timer 0 to interrupt every 500 milliseconds:
184 // 100MHz CPU Freq, 500 millisecond Period (in uSeconds)
185 ConfigCpuTimer(&CpuTimer0, 100, 500000);
186 #endif
187
188 CpuTimer0Regs.TCR.all = 0x4001;
189
190 EALLOW;
191 GpioCtrlRegs.GPAMUX2.bit.GPIO20 = 0;
192 GpioCtrlRegs.GPADIR.bit.GPIO20 = 1;
193 GpioDataRegs.GPACLEAR.bit.GPIO20 = 1;
194 GpioCtrlRegs.GPAMUX2.bit.GPIO31 = 0;
195 GpioCtrlRegs.GPADIR.bit.GPIO31 = 1;
196 GpioDataRegs.GPASET.bit.GPIO31 = 1;
197 GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0;
198 GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1;
199 GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1;
200 EDIS;
201
202
203 IER |= M_INT1; //Siempre despues de configurar una interrupcion se debe habilitar mediante
IER y luego el comando
204 //Correspondiente a la interrupcin
205 PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
206
207 PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Habilita el bloque PIE
208 PieCtrlRegs.PIEIER9.bit.INTx3 = 1; // Habilita SCIRXINTA
209 PieCtrlRegs.PIEIER9.bit.INTx4 = 1; // Habilita SCITXINTA
210 IER |= M_INT9; // Enable CPU Interrupt 9
211
212 EINT; // Enable Global interrupt INTM
213 ERTM; // Enable Global realtime interrupt DBGM
214 //Scib_fifo_init(); // Initialize the SCI FIFO
215 Scib_configurar(); // Initalize SCI for echoback
216
217 for(;;){
218

Page 4
Modbus_SCIB-Main.c

219 if(holding == 1 || Encendido == TRUE) GpioDataRegs.GPACLEAR.bit.PIN_LED = 1;


220 else GpioDataRegs.GPASET.bit.PIN_LED = 1;
221 }
222
223 }
224
225 // Test 1,Scib DLB, 8-bit word, baud rate 0x000F, default, 1 STOP bit, no parity
226 void Scib_configurar()
227 {
228 ScibRegs.SCICCR.all=0x0007; // 1 stop bit, Sin Loopback, Paridad par, 8 bits de datos,
Async, Protocolo idle-line // antes era: ScibRegs.SCICCR.all=0x00E7; // 2 stop bits, Sin
Loopback, Paridad par, 8 bits de datos, Async, Protocolo idle-line
229 ScibRegs.SCICTL1.all=0x0043; // Habilita TX, RX, SCICLK interno, RX ERR, Sleep,
deshabilita TXWAKE// antes era: ScibRegs.SCICTL1.all=0x0003; // Habilita TX, RX, SCICLK
interno, deshabilita RX ERR, Sleep, TXWAKE
230 ScibRegs.SCICTL2.bit.TXINTENA =1;
231 ScibRegs.SCICTL2.bit.RXBKINTENA =1;
232 ScibRegs.SCIHBAUD = (((int)(SCI_PRD)) >> 8) & 0x00FF;
233 ScibRegs.SCILBAUD = (int)(SCI_PRD) & 0x00FF;
234 ScibRegs.SCICTL1.all =0x0023; // Habilita SCI
235 }
236
237 // Initalize the SCI FIFO
238
239 interrupt void ScibRxFifoIsr(void)
240 {
241 GpioDataRegs.GPASET.bit.PIN_LED_COMUNICACIONES = 1;
242 contador_rx++;
243 if(ContadorFinDeCuadroModbus==0) {
244 RdataA_Num=0;
245 }
246 //if (RdataA_Num >= 1) GpioDataRegs.GPACLEAR.bit.PIN_LED = 1; //para probar si lee mas
desde el 0
247 RdataA[RdataA_Num++]=ScibRegs.SCIRXBUF.all;
248 AnteriorModbus=RdataA[RdataA_Num-1];
249 if(GpioDataRegs.GPBDAT.bit.PIN_MODBUS_DE == 0 && ContadorEnvioModbus>0){ // Si no est
enviando, activa el contador para recibir
250 ContadorFinDeCuadroModbus=10;
251 ContadorLedComunicaciones=200;
252 }
253 if(RdataA_Num>=69){
254 RdataA_Num=2;
255 }
256 PieCtrlRegs.PIEACK.all |= 0x100; // Emitir Ack para el PIE
257 ScibRegs.SCIFFRX.bit.RXFFOVRCLR=1; // Borrar bandera overflow
258 ScibRegs.SCIFFRX.bit.RXFFINTCLR=1; // Borrar bandera interrupcin
259 }
260
261 interrupt void ScibTxFifoIsr(void)
262 {
263 if(ComenzarEnvio==TRUE){
264 //GpioDataRegs.GPACLEAR.bit.PIN_LED = 1;
265 ContadorLedComunicaciones=200;
266 CRCCheck=CRC16(RdataA,RdataA_Num-2);
267 if((CRCCheck==(RdataA[RdataA_Num-1]+(RdataA[RdataA_Num-2]<<8)))){ // Calcula CRC
268 switch(RdataA[1]){
269 case 1:

Page 5
Modbus_SCIB-Main.c

270 ReadCoilStatus(); //Leer bits de cambio de estado


271 break;
272 case 2:
273 ReadInputStatus(); //Leer bits de estado de operacin
274 break;
275 case 3:
276 ReadHoldingRegisters(); //Leer floats modificables
277 break;
278 case 4:
279 ReadInputRegisters(); //Leer floats de estado de operacin
280 break;
281 case 6:
282 PresetSingleRegister(); //Leer floats de estado de operacin
283 break;
284 case 15:
285 ForceMultipleCoils(); //Modificar bits de cambio de estado
286 break;
287 case 16: //case 6:
288 PresetMultipleRegisters(); //Modificar registros float
289 break;
290 default:
291 ModbusExcep(ILLEGAL_FUNCTION);
292 break;
293 }
294 ComenzarEnvio=FALSE;
295 }
296 }else{
297 if(ContadorEnvioModbus<SdataA_Num){
298 ScibRegs.SCITXBUF=SdataA[ContadorEnvioModbus++] & 0x00FF; // Send data
299 }
300 }
301
302 ScibRegs.SCIFFTX.bit.TXFFINTCLR=1; // Borrar bandera interrupcin
303 PieCtrlRegs.PIEACK.all|=0x100; // Emitir Ack para el PIE
304 }
305
306 void InicializarRegistros(){
307 Uint16 i=0;
308 DiscreteInput[0]=&Encendido;
309
310 HoldingRegister[i]=(int *)&holding;
311 HoldingRegister[i++]=HoldingRegister[i++]+1;
312 i=0;
313 InputRegister[i]=(int *)&analoginput;
314 InputRegister[i++]=InputRegister[i++]+1;
315
316 }
317
318 Uint16 CRC16(Uint16 *puchMsg, Uint16 usDataLen)
319 {
320 Uint16 uchCRCHi = 0xFF ; /* CRC */
321 Uint16 uchCRCLo = 0xFF ; /* CRC */
322 Uint32 uIndex ; /* CRC- */
323 while (usDataLen--) /* */
324 {
325 uIndex = uchCRCHi ^ *puchMsg++ ; /* CRC */
326 uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex] ;

Page 6
Modbus_SCIB-Main.c

327 uchCRCLo = auchCRCLo[uIndex] ;


328 }
329 return (uchCRCHi << 8 | uchCRCLo) ;
330 }
331
332 void EnviarDatosModbus(){
333 if(ContadorFinDeCuadroModbus==0) { // Slo si el bus no est en uso
334 ContadorEnvioModbus=0;
335 contador_tx++;
336 GpioDataRegs.GPBSET.bit.PIN_MODBUS_DE = 1;
337 ScibRegs.SCITXBUF=SdataA[ContadorEnvioModbus++] & 0x00FF; // Send data
338 }
339 }
340
341 void ReadCoilStatus(){ //Leer bits de cambio de estado
342 Uint16 AddrStart=0;
343 Uint16 TempAddr=0;
344 Uint16 CoilCount=0;
345 Uint16 ByteCount=0;
346 Uint16 TempData=0;
347 Uint16 i=0,k=0;
348
349 AddrStart = (RdataA[2]<<8) + RdataA[3];
350 CoilCount = (RdataA[4]<<8) + RdataA[5];
351 ByteCount = CoilCount/8;
352 if(CoilCount%8 != 0){
353 ByteCount+=1;
354 }
355 if(AddrCheck(AddrStart,CoilCount,MaxQ)){
356 return;
357 }
358
359 TempAddr=AddrStart;
360 for(k=0;k<ByteCount;k++){
361 SdataA[k + 3] = 0;
362 for(i=0;i<8;i++){
363 switch(TempAddr){
364 case COIL_LED:
365 TempData=Encendido;
366 break;
367 case COIL_2:
368 break;
369
370 default:
371 TempData=0;
372 break;
373 }
374 SdataA[k + 3] |= TempData << i;
375 TempAddr++;
376 if(TempAddr >= AddrStart+CoilCount){
377 k=ByteCount;
378 i=8;
379 }
380 }
381 }
382
383 SdataA[0] = Local;

Page 7
Modbus_SCIB-Main.c

384 SdataA[1] = RdataA[1];


385 SdataA[2] = ByteCount;
386
387 CRCCheck = CRC16(SdataA,ByteCount+3);
388 SdataA[ByteCount+3] = CRCCheck >> 8;
389 SdataA[ByteCount+4] = CRCCheck & 0xff;
390
391 SdataA_Num = ByteCount+5;
392
393 EnviarDatosModbus();
394 }
395
396 void ReadInputStatus(){ //Leer bits de estado de operacin
397 Uint16 AddrStart=0;
398 Uint16 TempAddr=0;
399 Uint16 InputCount=0;
400 Uint16 ByteCount=0;
401 Uint16 TempData=0;
402 Uint16 i=0,k=0;
403
404 AddrStart = (RdataA[2]<<8) + RdataA[3];
405 TempAddr=AddrStart;
406 InputCount = (RdataA[4]<<8) + RdataA[5];
407 ByteCount = InputCount / 8;
408 if(InputCount%8 != 0)
409 ByteCount+=1;
410 if(AddrCheck(AddrStart,InputCount,MaxI)){
411 return;
412 }
413 for(k=0;k<ByteCount;k++){
414 SdataA[k + 3] = 0;
415 for(i=0;i<8;i++){
416 TempData=*DiscreteInput[TempAddr];
417 SdataA[k + 3] |= TempData << i;
418 TempAddr++;
419 if(TempAddr >= AddrStart+InputCount){
420 k=ByteCount;
421 i=8;
422 }
423 }
424 }
425
426 SdataA[0] = Local;
427 SdataA[1] = RdataA[1];
428 SdataA[2] = ByteCount;
429
430 CRCCheck = CRC16(SdataA,ByteCount+3);
431 SdataA[ByteCount+3] = CRCCheck >> 8;
432 SdataA[ByteCount+4] = CRCCheck & 0xff;
433
434 SdataA_Num = ByteCount+5;
435
436 EnviarDatosModbus();
437 }
438
439 void ReadHoldingRegisters(){ //Leer floats modificables
440 Uint16 AddrStart=0;

Page 8
Modbus_SCIB-Main.c

441 Uint16 TempAddr=0;


442 Uint16 RegistersCount=0;
443 Uint16 ByteCount=0;
444 Uint16 TempData=0;
445 Uint16 i=0;
446
447 AddrStart = (RdataA[2]<<8) + RdataA[3];
448 TempAddr=AddrStart;
449 RegistersCount = (RdataA[4]<<8) + RdataA[5];
450 ByteCount = RegistersCount * 2;
451
452 if(AddrCheck(AddrStart,RegistersCount,MaxHold)){
453 return;
454 }
455
456 for(i=0;i<ByteCount;i+=2,TempAddr++){
457 TempData=*HoldingRegister[TempAddr];
458 SdataA[i+3] = TempData >> 8;
459 SdataA[i+4] = TempData & 0xff;
460 }
461
462
463 SdataA[0] = Local;
464 SdataA[1] = RdataA[1];
465 SdataA[2] = ByteCount;
466 CRCCheck = CRC16(SdataA,ByteCount+3);
467 SdataA[ByteCount+3] = CRCCheck >> 8;
468 SdataA[ByteCount+4] = CRCCheck & 0xff;
469 SdataA_Num = ByteCount + 5;
470
471 EnviarDatosModbus();
472 }
473
474 void ReadInputRegisters(){ //Leer floats de estado de operacin
475 Uint16 AddrStart=0;
476 Uint16 TempAddr=0;
477 Uint16 RegistersCount=0;
478 Uint16 ByteCount=0;
479 Uint16 TempData = 0;
480 Uint16 i=0;
481
482 AddrStart = (RdataA[2]<<8) + RdataA[3];
483 TempAddr=AddrStart;
484 RegistersCount = (RdataA[4]<<8) + RdataA[5];
485 ByteCount = RegistersCount * 2;
486
487 if(AddrCheck(AddrStart,RegistersCount,MaxAI)){
488 return;
489 }
490
491 for(i=0;i<ByteCount;i+=2,TempAddr++)
492 {
493 TempData=*InputRegister[TempAddr];
494 SdataA[i+3] = TempData >> 8;
495 SdataA[i+4] = TempData & 0xff;
496 }
497 SdataA[0] = Local;

Page 9
Modbus_SCIB-Main.c

498 SdataA[1] = RdataA[1];


499 SdataA[2] = ByteCount;
500 CRCCheck = CRC16(SdataA,ByteCount+3);
501 SdataA[ByteCount+3] = CRCCheck >> 8;
502 SdataA[ByteCount+4] = CRCCheck & 0xff;
503 SdataA_Num = ByteCount + 5;
504
505 EnviarDatosModbus();
506 }
507
508 void ForceMultipleCoils(){
509 Uint16 AddrStart=0;
510 Uint16 TempAddr=0;
511 Uint16 SetCount=0;
512 unsigned TempState=0;
513
514 AddrStart = (RdataA[2]<<8) + RdataA[3];
515 TempAddr = AddrStart;
516 SetCount = (RdataA[4]<<8) + RdataA[5];
517
518 if(SetCount>1){
519 ModbusExcep(ILLEGAL_DATA_ADDRESS);
520 return;
521 }
522 if(AddrCheck(AddrStart,SetCount,MaxQ)){
523 return;
524 }
525
526 TempState = (RdataA[7]) & 0x01;
527
528 switch(TempAddr){
529 case COIL_LED:
530 if(TempState){
531 Encendido= TRUE;
532 SdataA[0] = Local;
533 SdataA[1] = RdataA[1];
534 SdataA[2] = AddrStart >> 8;
535 SdataA[3] = AddrStart & 0xff;
536 SdataA[4] = SetCount >> 8;
537 SdataA[5] = SetCount & 0xff;
538 CRCCheck = CRC16(SdataA,6);
539 SdataA[6] = CRCCheck >> 8;
540 SdataA[7] = CRCCheck & 0xff;
541 SdataA_Num = 8;
542 EnviarDatosModbus();
543 }
544 break;
545 case COIL_2:
546 if(TempState){
547 Encendido= FALSE;
548 SdataA[0] = Local;
549 SdataA[1] = RdataA[1];
550 SdataA[2] = AddrStart >> 8;
551 SdataA[3] = AddrStart & 0xff;
552 SdataA[4] = SetCount >> 8;
553 SdataA[5] = SetCount & 0xff;
554 CRCCheck = CRC16(SdataA,6);

Page 10
Modbus_SCIB-Main.c

555 SdataA[6] = CRCCheck >> 8;


556 SdataA[7] = CRCCheck & 0xff;
557 SdataA_Num = 8;
558 EnviarDatosModbus();
559 }
560 break;
561 default:
562 ModbusExcep(ILLEGAL_DATA_ADDRESS);
563 break;
564 }
565 }
566
567 void ModbusExcep(Uint16 ExceptionCode){
568 SdataA[0] = Local;
569 SdataA[1] = RdataA[1]+0x80;
570 SdataA[2] = ExceptionCode;
571
572 CRCCheck = CRC16(SdataA,3);
573 SdataA[3] = CRCCheck >> 8;
574 SdataA[4] = CRCCheck & 0xFF;
575
576 SdataA_Num = 5;
577
578 EnviarDatosModbus();
579 }
580
581 void PresetMultipleRegisters(){ //Modificar registros float
582 Uint16 AddrStart=0;
583 Uint16 TempAddr=0;
584 Uint16 SetCount=0;
585 Uint16 TempData=0;
586 Uint16 i=0;
587
588 AddrStart = (RdataA[2]<<8) + RdataA[3];
589 TempAddr = AddrStart;
590 SetCount = (RdataA[4]<<8) + RdataA[5];
591
592 if(AddrCheck(AddrStart,SetCount,MaxHold)){
593 return;
594 }
595
596 for(i=0;i<SetCount;i++,TempAddr++){
597 TempData = (RdataA[i*2+7]<<8) + RdataA[i*2+8];
598 *HoldingRegister[TempAddr]=TempData;
599 }
600
601 SdataA[0] = Local;
602 SdataA[1] = RdataA[1];
603 SdataA[2] = AddrStart >> 8;
604 SdataA[3] = AddrStart & 0xff;
605 SdataA[4] = SetCount >> 8;
606 SdataA[5] = SetCount & 0xff;
607 CRCCheck = CRC16(SdataA,6);
608 SdataA[6] = CRCCheck >> 8;
609 SdataA[7] = CRCCheck & 0xff;
610 SdataA_Num = 8;
611

Page 11
Modbus_SCIB-Main.c

612 EnviarDatosModbus();
613 }
614
615 void PresetSingleRegister(){
616 Uint16 AddrStart=0;
617 Uint16 TempAddr=0;
618 //Uint16 SetCount=0;
619 Uint16 TempData=0;
620 //Uint16 i=0;
621
622 AddrStart = (RdataA[2]<<8) + RdataA[3];
623 TempAddr = AddrStart;
624 //SetCount = (RdataA[4]<<8) + RdataA[5];
625
626 //if(AddrCheck(AddrStart,SetCount,MaxHold)){
627 // return;
628 //}
629
630 TempData = (RdataA[4]<<8) + RdataA[5];
631 *HoldingRegister[TempAddr]=TempData;
632
633 SdataA[0] = Local;
634 SdataA[1] = RdataA[1];
635 SdataA[2] = AddrStart >> 8;
636 SdataA[3] = AddrStart & 0xff;
637 SdataA[4] = RdataA[4] >> 8;
638 SdataA[5] = RdataA[5] & 0xff;
639 CRCCheck = CRC16(SdataA,6);
640 SdataA[6] = CRCCheck >> 8;
641 SdataA[7] = CRCCheck & 0xff;
642 SdataA_Num = 8;
643
644 EnviarDatosModbus();
645
646 }
647
648 Uint16 AddrCheck(Uint16 AddrStart,Uint16 Num,Uint16 AddrMax)
649 {
650 Uint16 Result=0;
651 if(AddrStart+Num>AddrMax){
652 ModbusExcep(ILLEGAL_DATA_ADDRESS);
653 Result=1;
654 }
655 return Result;
656 }
657
658 interrupt void cpu_timer0_isr(void)
659 {
660 if(ContadorFinDeCuadroModbus>0){
661 ContadorFinDeCuadroModbus--;
662 if((RdataA[0]==Local)&&(ContadorFinDeCuadroModbus==0)){
663 ComenzarEnvio=TRUE;
664 ScibRegs.SCICTL1.bit.TXWAKE=1;
665 ScibRegs.SCITXBUF=0x00DC; // Da lo mismo qu se pone ac, no se va a mandar.
Slo se busca conseguir una interrupcin del SCI
666 }
667 }

Page 12
Modbus_SCIB-Main.c

668 // FIN Cdigo para encontrar fin de cuadro Modbus


669
670 // Manejo Pin MODBUS_DE
671 if(ContadorEnvioModbus>=SdataA_Num){
672 ContadorEnvioModbus++;
673 if(ContadorEnvioModbus>=SdataA_Num+15){
674 GpioDataRegs.GPBCLEAR.bit.PIN_MODBUS_DE = 1;
675 }
676 }
677
678 // Cdigo para manejo de LEDs
679 //GpioDataRegs.GPACLEAR.bit.PIN_PROCESAMIENTO = 1; // Para ver cuanto tiempo de
procesamiento est usado
680 if(ContadorLedComunicaciones>0){
681 ContadorLedComunicaciones--;
682 if(ContadorLedComunicaciones==0){
683 GpioDataRegs.GPACLEAR.bit.PIN_LED_COMUNICACIONES = 1;
684 }
685 }else{
686 GpioDataRegs.GPBCLEAR.bit.PIN_MODBUS_DE = 1;
687 ContadorEnvioModbus=1;
688 ContadorFinDeCuadroModbus=0;
689 }
690
691 PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
692 }
693
694

Page 13
Apndice C

Interfaz en Matlab-Simulink

XXX
COM3
19200
Voltaje
8,none,1
Serial Configuration
Numero bancos

COM3 Data
Angulo disparo
datos DSP

V_setpoint

Elapsed Real Time

Elapsed Real Time1

Figura C.1: Interfaz para visualizar las variables del CER

XXXI

También podría gustarte