Você está na página 1de 202

UNIVERSIDADE PAULISTA

Engenharia de Controle e Automao

Israel P. S. Cezar 962609-3


Marcelo Maciel 672039-0
Victor Hugo Bolfarini Francisco 627091-3
Thiago Polleti Alonso 780322-2
Wagner Roberto Rezador 904265-2

Climatizao de ambiente industrial com controle PID e


superviso remota via WEB

So Paulo/SP
Dezembro 2012
Israel P. S. Cezar 962609-3
Marcelo Maciel 672039-0
Victor Hugo Bolfarini Francisco 627091-3
Thiago Polleti Alonso 780322-2
Wagner Roberto Rezador 904265-2

Climatizao de ambiente industrial com controle PID e


superviso remota via WEB

Trabalho de concluso de curso


apresentado ao Instituto de Cincias
Exatas e Tecnologia da Universidade
Paulista UNIP, como requisito para a
obteno do ttulo de Engenheiro de
Automao e Controle.

Orientador: Prof. Eng. Maurcio Marsura

So Paulo/SP
Dezambro 2012
Israel P. S. Cezar 962609-3
Marcelo Maciel 672039-0
Victor Hugo Bolfarini Francisco 627091-3
Thiago Polleti Alonso 780322-2
Wagner Roberto Rezador 904265-2

Climatizao de ambiente industrial com controle PID e


superviso remota via WEB

Trabalho de concluso de curso


apresentado ao Instituto de Cincias
Exatas e Tecnologia da Universidade
Paulista UNIP, como requisito para a
obteno do ttulo de Engenheiro de
Automao e Controle.

Aprovado em: 18/12/2012

BANCA EXAMINADORA

__________________________________________________
Prof Dr Maurcio Corra - Universidade Paulista

__________________________________________________
Prof MSc Jos Srgio do Nascimento - Universidade Paulista

__________________________________________________
Prof Dr Rogrio Augusto Gasparetto S - Universidade Paulista

So Paulo/SP
Dezambro 2012
DEDICATRIA

A todos os nossos familiares, principalmente esposas e filhos, pelo apoio que nos foi
dispensado e pela compreenso e pacincia por nossa ausncia, durante a jornada de trabalho
para a execuo desse projeto.
AGRADECIMENTOS

Gostaramos de agradecer todos os colegas, professores e funcionrios da UNIP


Universidade Paulista, Campus Marques, pela colaborao e ateno dispensada durante todo
o perodo de nossa graduao.

Ao Eng. Euryale de Jesus Zerbini, Professor Doutor do Depto. De Engenharia


Mecnica da EPUSP, pela orientao dada em assuntos relacionados ao controle.

Ao Sr. Thiago, da empresa Artmveis, por haver fornecido em cortesia a construo


da maquete para o projeto.

Sra. Cristiane Scerni por haver cedido espao em sua residncia para guarda,
montagem de projetos e reunies do grupo.
EPGRAFE

A mente que se abre a uma nova


idia jamais voltar ao seu
tamanho original.

(Albert Einstein)
RESUMO

O presente Trabalho de Concluso de Curso apresenta os estudos iniciais relacionados


ao projeto de um sistema microcontrolado para climatizao de um ambiente industrial ou
comercial utilizando a tcnica PID e superviso deste sistema remotamente atravs da
tecnologia internet embarcada. Demonstra o projeto do hardware e das interfaces para
sensores e atuadores utilizados. Apresenta tambm o desenvolvimento do software para a
aquisio remota de dados e um servidor WEB embarcado para superviso e controle da
temperatura. O sistema aqui proposto, em um futuro prximo, poder ser empregado para a
superviso e controle, em tempo real e remotamente, da climatizao de um determinado
ambiente, representando ainda, baixo custo de investimento para a empresa em relao aos
sistemas existentes hoje no mercado, j que dispensa softwares supervisrios e CLPs
adicionais, necessitando apenas de uma rede Ethernet e um navegador WEB para acessar o
sistema.

Palavras chave: Climatizao industrial, Controle PID aplicado microcontroladores,


Superviso remota via Ethernet, Servidor WEB embarcado.
ABSTRACT

This coursework presents the initial studies related to the project of a microcontrolled
system for HVAC control of an industrial or commercial plant using the PID method and
monitoring system remotely via the embedded internet technology. It demonstrates the design
of hardware and interfaces to sensors and actuators used. It also features the development of
software for remote data acquisition and an embedded WEB server for supervision and
control of the temperature. The system proposed here could be used for supervision and
control, real-time and remotely, from air conditioning to a particular environment, offering
low cost of investment for the company in relation to the existing systems in the market
today, precluding additional PLCs and supervisory software, requiring only an Ethernet
network and a WEB browser to access the system.

Key words: industrial climate control, PID control applied to microcontrollers, remote
Supervision via Ethernet, embedded WEB server.
LISTA DE ILUSTRAES

Figura 2.1 - Fluxograma de um sistema fan coil simples ......................................................... 29

Figura 2.2 - Ciclo de refrigerao por compresso .................................................................. 30

Figura 2.3 - Funcionamento de uma torre de resfriamento. ..................................................... 31

Figura 3.1 - Fluxograma do sistema de climatizao de nosso prottipo................................. 33

Figura 3.2 - Vista frontal da maquete. ...................................................................................... 33

Figura 3.3 - Ventilador ar quente do Gol.................................................................................. 34

Figura 3.4 - Conjunto motor - ventilador sendo adaptado........................................................ 35

Figura 3.5 - Conjunto motor ventilador adaptado. ................................................................ 35

Figura 3.6 - Vista superior do duto de insuflao..................................................................... 36

Figura 3.7 - Vista inferior do duto de insuflao. ..................................................................... 36

Figura 3.8 - Detalhes da recirculao do ar na maquete. .......................................................... 37

Figura 3.9 - trocador de calor casco tubo aletado. .................................................................... 38

Figura 3.10 - reservatrio de gua gelada instalado no lado externo da maquete. ................... 39

Figura 3.11 - Bomba submersa de aqurio JAD SP 1000. ....................................................... 39

Figura 3.12 - Disco caracterizador de vazo para vlvula de esfera. ....................................... 41

Figura 3.13 - fluxo de gua gelada. .......................................................................................... 42

Figura 3.14 Detalhe da vlvula motorizada fixada na parede traseira da maquete. .............. 42

Figura 4.1 - Sistema de Controle. ............................................................................................. 46

Figura 4.2 - Sistema de Controle em Malha Fechada............................................................... 47

Figura 4.3 - Sistema de Controle ON-OFF............................................................................... 48

Figura 4.4 - Sistema de Controle ON-OFF com histerese ........................................................ 49

Figura 4.5 - Sistema de Controle Proporcional ........................................................................ 50

Figura 4.6 - Ao proporcional: = 1 (contnuo), = 2 (tracejado), = 4 (pontilhado).


.................................................................................................................................................. 51

Figura 4.7 - Sistema de Controle Integral................................................................................. 51


Figura 4.8 - Sistema de Controle Derivativo ............................................................................ 52

Figura 4.9 - Sistema de Controle PID....................................................................................... 53

Figura 4.10 - Grfico de aproximao pelo mtodo de Euler .................................................. 54

Figura 4.11 - Grfico de aproximao por Transformada de Tustin ........................................ 55

Figura 5.1 - Simbologia do PTC............................................................................................... 57

Figura 5.2 - Curva Caracterstica do PTC. ............................................................................... 58

Figura 5.3 - Circuito eletrnico com utilizao PTC. .............................................................. 58

Figura 5.4 Grfico de temperatura x resistncia. ................................................................... 59

Figura 5.5 - Simbologia do PTC............................................................................................... 59

Figura 5.6 Forma construtiva NTC........................................................................................ 59

Figura 5.7 - Circuito divisor de tenso para aplicao do NTC 10K ....................................... 60

Figura 5.8 Grfico temperatura x resistncia do NTC 10k.................................................... 62

Figura 5.9 - Vlvula Borboleta ................................................................................................. 63

Figura 5.10 - Vlvula Globo ..................................................................................................... 64

Figura 5.11 - Aspecto construtivo da vlvula Globo ................................................................ 64

Figura 5.12 - Vlvula esfera ..................................................................................................... 65

Figura 5.13 - Vlvula esfera em corte, detalhe para o disco caracterizador de fluxo............... 66

Figura 5.14 - Exemplos de atuadores j acoplados em vlvulas. ............................................. 68

Figura 5.15 - Vlvula esfera utilizada no projeto. .................................................................... 69

Figura 5.16 - Vlvula esfera em corte com detalhes construtivos similares utilizada no
projeto. ...................................................................................................................................... 69

Figura 5.17 - Detalhe do disco caracterizador de fluxo instalado no interior da vlvula. ........ 70

Figura 5.18 - Servomotor utilizado no projeto. ........................................................................ 70

Figura 5.19 - Conjunto vlvula-atuador adaptado. ................................................................... 71

Figura 5.20 - Sinal de controle PWM (Modulao por largura de pulso). ............................... 71

Figura 5.21 - Sinal de controle PWM Duty = 0,5ms-Servomotor posicionado em 0. ......... 72

Figura 5.22 - Sinal de controle PWM Duty = 2,5ms-Servomotor posicionado em 180. ..... 72
Figura 5.23 - Diagrama de blocos de um circuito com microprocessador. .............................. 73

Figura 5.24 - PIC 18F67J60: Encapsulamento SMD TQFP 64 pinos. ..................................... 75

Figura 5.25 - Arquitetura do microcontrolador PIC 18F67J60. ............................................... 77

Figura 5.26 - Diagrama de terminais do microcontrolador PIC 18F67J60. ............................. 78

Figura 5.27 - Circuito do oscilador externo. ............................................................................. 80

Figura 5.28 - Diagrama de blocos do Timer0 operando em 8 bits. .......................................... 82

Figura 5.29 - Diagrama de blocos do Timer0 operando em 16 bits. ........................................ 83

Figura 5.30 - Diagrama de blocos do Timer1 operando em 8 bits. .......................................... 84

Figura 5.31 - Diagrama de blocos do Timer1 operando em 16 bits. ........................................ 84

Figura 5.32 - Diagrama de blocos do Timer3 operando em 8 bits. .......................................... 86

Figura 5.33 - Diagrama de blocos do Timer3 operando em 16 bits. ........................................ 86

Figura 5.34 - Diagrama de blocos do conversor analgico/digital. .......................................... 87

Figura 5.35 - Diagrama de blocos do controlador ethernet. ..................................................... 92

Figura 5.36 - Interface de rede 100/10 Base-T RJ45. ............................................................... 92

Figura 5.37 - Componentes externos requeridos pelo mdulo ethernet segundo a Microchip.93

Figura 5.38 - Alimentao do microcontrolador com detalhes para os capacitores de


desacoplamento. ....................................................................................................................... 93

Figura 5.39 - Estrutura do hardware do sistema de controle microcontrolado......................... 94

Figura 5.40 - Modelo de matriz de contatos protoboard do fabricante ICEL. ......................... 96

Figura 5.41 - Placa adaptadora TQFP para DIP 64 pinos. ....................................................... 96

Figura 5.42 - Placa de circuito impresso perfurada padro DIP. .............................................. 97

Figura 5.43 - Esquema eletrnico do projeto. .......................................................................... 98

Figura 5.44 - Detalhe do conector ICSP. .................................................................................. 98

Figura 5.45 - Regulador 3,3Vcc LM3940. ............................................................................... 99

Figura 5.46 - Circuito regulador de tenso 3,3Vcc com LM3940. ........................................... 99

Figura 5.47 - Foto do prottipo montado na placa matriz de contatos. .................................. 100

Figura 6.1 - Ambiente de desenvolvimento do MPLAB. ....................................................... 102


Figura 6.2 - Programador para microcontroladores Microchip PKBurner2. .......................... 103

Figura 6.3 - Organizao da pilha TCP/IP da Microchip. ...................................................... 105

Figura 6.4 - Aplicao Microchip MPFS Generator. ............................................................. 106

Figura 6.5 - Fluxograma do software do sistema microcontrolado. ....................................... 107

Figura 6.6 - Seleo do modelo do microcontrolador. ........................................................... 108

Figura 6.7 Tela inicial Microchip TCP/IP Configuration Wizard. ...................................... 110

Figura 6.8 Seleo de Mdulos, Microchip TCP/IP Configuration Wizard. ...................... 110

Figura 6.9 Seleo de mdulos de exemplos, Microchip TCP/IP Configuration Wizard. .. 111

Figura 6.10 Seleo de mdulos, Microchip TCP/IP Configuration Wizard. ..................... 112

Figura 6.11 Configurao de rede, Microchip TCP/IP Configuration Wizard. .................. 112

Figura 6.12 Configurao do WEB Server, Microchip TCP/IP Configuration Wizard. ..... 113

Figura 6.13 Configurao do WEB Server, Microchip TCP/IP Configuration Wizard. ..... 113

Figura 6.14 Configurao do sistema de arquivos, Microchip TCP/IP Configuration Wizard.


................................................................................................................................................ 114

Figura 6.15 Configurao do WEB Server, Microchip TCP/IP Configuration Wizard. ..... 114

Figura 6.16 Configurao das conexes TCP, Microchip TCP/IP Configuration Wizard. 115

Figura 6.17 Configurao do WEB Server, Microchip TCP/IP Configuration Wizard. ..... 115

Figura 6.18 IDE MPLAB com o Projeto compilado. .......................................................... 137

Figura 6.19 Gravao do programa hexadecimal no microcontrolador. ............................. 138

Figura 6.20 Sistemas de controle e termodinmicos conectados. ....................................... 140

Figura 6.21 Execuo do comando PING. .......................................................................... 140

Figura 6.22 Pgina index.htm. ............................................................................................. 141

Figura 6.23 Pgina de configurao dos parmetros PID. .................................................. 142

Figura 6.24 Pgina index com parmetros modificados...................................................... 142

Figura 6.25 Pgina do grfico de temperatura. .................................................................... 143


LISTA DE TABELAS

Tabela 3.1 Vazo de ar insuflado pelo conjunto motor-ventilador. ...................................... 37

Tabela 3.2 Vazo de gua atravs do disco caracterizado instalado na vlvula. ................... 41

Tabela 5.1 - Configurao Timer0. .......................................................................................... 82

Tabela 5.2 - Configurao Timer1. .......................................................................................... 83

Tabela 5.3 - Configurao Timer3. .......................................................................................... 85

Tabela 5.4 - Configurao ADCON0. ...................................................................................... 88

Tabela 5.5 - Configurao ADCON1. ...................................................................................... 89

Tabela 5.6 - Configurao das portas do conversor A/D. ........................................................ 89

Tabela 5.7 - Configurao ADCON2. ...................................................................................... 90

Quadro 6.1 Cdigo de programao do arquivo HardwareProfile.h ................................... 109

Quadro 6.2 Definio do arquivo principal. ........................................................................ 116

Quadro 6.3 Definio da instncia APP_CONFIG. ............................................................ 116

Quadro 6.4 Configurao da instncia APP_CONFIG. ...................................................... 116

Quadro 6.5 Tratamento interrupo Timer0. ....................................................................... 117

Quadro 6.6 Cdigo da funo HTTPExecuteGet( ). ........................................................... 118

Quadro 6.7 Cdigo da funo HTTPPrint. .......................................................................... 118

Quadro 6.8 Sequncia de inicializao do protocolo TCP/IP. ............................................ 119

Quadro 6.9 Funes do protocolo TCP/IP........................................................................... 119

Quadro 6.10 Cdigo da funo InitializeBoard( ). .............................................................. 120

Quadro 6.11 Cdigo para pedido de converso A/D. .......................................................... 122

Quadro 6.12 Cdigo da equao de Steinhart & Hart para leitura de temperatura. ............ 122

Quadro 6.13 Cdigo da rotina de controle PID. .................................................................. 123

Quadro 6.14 Tratamento dos Timers 1 e 3 para gerao de sinal PWM. ............................ 126

Quadro 6.15 Cdigo da rotina de controle da vlvula de gua gelada. ............................... 129

Quadro 6.16 Cdigo fonte do arquivo header.inc. .............................................................. 130


Quadro 6.17 Cdigo fonte do arquivo footer.inc. ............................................................... 130

Quadro 6.18 Incluso de cabealho e rodap dos arquivos HTML. ................................... 131

Quadro 6.19 Estrutura do arquivo status.xml. ..................................................................... 131

Quadro 6.20 Estrutura do cdigo de atualizao de variveis com AJAX.......................... 132

Quadro 6.21 Formulrio utilizando o mtodo GET. ........................................................... 133

Quadro 6.22 Cdigo para criao de grfico de tendncia dinmico. ................................. 134

Quadro 6.23 Estrutura dos prottipos de funo criados no arquivo HTTPPrint.h. ........... 135

Quadro 6.24 Estrutura destas funes HTTPPrint( ). .......................................................... 136


LISTA DE ABREVIATURAS E SIGLAS

AC/DC - Alternating Current / Direct Current - Corrente Alternada/Corrente Contnua


A/D - Conversor Analgico para Digital
AJAX - Asynchronous Javascript and XML - Javascript e XML Assncronos
ANSI - American National Standards Institute - Instituto Nacional Americano de Padres
ARP - Address Resolution Protocol/Reverse Address
ARPANet - Advanced Research Projects Agency Network
Bit - BInary digiT Dgito Binrio
BOD - Brown-out Detect
CLP - Controlador Lgico Programvel
CLPs - Plural de CLP
CPU - Central Processing Unit - Unidade Central de Processamento
DARPA - Defense Advanced Research Projects Agency
DHCP - Dynamic Host Configuration Protocol
DsPIC - Controlador Digital de Sinais (DSC) produzido pela Microchip
EPROM - Erasable Programmable Read-Only Memory - Memria Programvel Apagvel
Somente de Leitura
EEPROM - Electrically-Erasable Programmable Read-Only Memory - Memria Programvel
Apagvel Eletricamente Somente de Leitura
E/S - Entrada/Sada
Fan Coil - do ingls, Ventilador e Serpentina
Hz - Hertz
HTML - HyperText Markup Language - de Marcao de Hipertexto
HTTP - Hypertext Transfer Protocol - Protocolo de Transferncia de Hipertexto
IAB - Internet Activity Board
ICMP - Internet Control Message Protocol
ICSP - In Circuit Serial Program
IDE - Integrated Development Environment - Ambiente de Desenvolvimento Integrado
IEEE - Instituto de Engenheiros Eletricistas e Eletrnicos
I/O - In/Out
Kd - Constante de ganho derivativo
KHz - Kilo Hertz
Ki - Constante de ganho integral
Kp - Constante de ganho proporcional
LAN - Local Area Network - Rede de rea local
MCU - Microcontrolador
MDF - Medium Density Fiberboard - placa de fibra de madeira de mdia densidade.
MHz - Mega Hertz
MIPS - Millions of Instructions Per Second - Milhes de Instrues Por Segundo
MPFS - Microchip File System
MSSP - Master Synchronous Serial Port
MV - Manipulated Variable - Varivel Manipulada
NTC - Coeficiente Negativo de Temperatura
OST - Oscilator Start-up Timer
PIC - Programmable Interface Controller - Controlador de Interface Programvel
PID - Proporcional Integral Derivativo
POR Power On Reset
PTC - Coeficiente Positivo de Temperatura
PV - Process Variable Varivel do Processo
PVC - PolyVinyl Chloride - Policloreto de Vinil
PWM - Pulse-Width Modulation - Modulao por Largura de Pulso
PWRT - Power-up Timer
RAM - Random Access Memory - Memria de Acesso Aleatrio
RFC - Request for Comments
RISC - Reduced Instruction Set Computer
ROM - Read Only Memory Memria de somente Leitura
SGML - Standard Generalized Markup Language
SMD - Surface-Mount Device - Dispositivo de Montagem em Superfcie
TCP/IP - Transmission Control Protocol/ Internet Protocol TQFP - Thin Quad Flat Pack
USART - Universal Synchronous Asynchronous Receiver Transmitter
UDP - User Datagram Protocol
USB - Universal Serial Bus
VCC - VDC - VDD - Voltage Direct Current - Tenso de Corrente Contnua
W3C - World Wide Web Consortium
WDT - Watchdog timer
WEB - Abreviatura de World Wide Web (que em portugus se traduz por teia mundial)
XML - eXtensible Markup Language
LISTA DE SMBOLOS

: Resistncia hmica

: Grau clsius

: Integral do erro do sistema


: Coeficiente de correo da linearidade do termistor
: Coeficiente de correo da linearidade do termistor
: Coeficiente de correo da linearidade do termistor
: Calor especfico do fluido

: Calor especfico do ar

: Calor especfico da gua

! ": Valor carregado nos registradores TMR1L e TMR1H para vlvula aberta

$! " : Valor carregado nos registradores TMR1L e TMR1H para vlvula fechada

: Erro do sistema
1 : Erro 1 do sistema
2 : Erro 2 do sistema
%& : Erro no instante atual;
%& & : Erro no instante de amostragem anterior ao atual.
() *+ !, -: Frequncia do cristal oscilador
./: Hertz

: Ganho Derivativo
01
: Derivada do erro do sistema
0

2: Ganho Integral
%./: kilo Hertz

: Constante de Proporcionalidade

34: Clculo logaritmo Neperiano


56: Vazo mssica do fluido

56 : Vazo mssica do ar

56 :Vazo mssica da gua


57: mili amperes
5: metros cbicos
9./: Mega Hertz

9:;<: Milhes de instrues por segundo

5<: mili segundos


4<: nano segundos

;==: Valor configurado no multiplicador de clock PLL

;) > 3 )+-"+? : Valor carregado no Prescaler de configurao do oscilador;


;) > 3 )! 1 @: Valor carregado no Prescaler do Timer1;
;) > 3 )! 1 A: Valor carregado no Prescaler do Timer3;
B6 : Potncia ou fluxo de calor
B6+10!0" C1-" : Potncia ou fluxo de calor do ar
B6+10!0" C1- : Potncia ou fluxo de calor da gua
) : Referncia do sistema ou Setpoint
D: Resistncia do divisor de tenso para correo da linearidade do termistor
D E2> ) F)GHIA : Valor carregado nos registradores TMR3L e TMR3H.
DJ& :Resistncia atual do Termistor NTC
&: Perodo de amostragem
& : Temperatura lida pelo termistor
& : Temperatura do fluido na entrada

&>: Temperatura do fluido na sada

: Entrada do sistema de controle


2 %& & : Ao integral no instante anterior ao instante atual do sistema;
K3L 3 MN1 : Valor do perodo do Duty Cicle para que a vlvula totalmente aberta;
K3L 3 O1+P 0 : Valor do perodo do Duty Cicle para que a vlvula totalmente fechada;
K : Tenso de Alimentao do circuito
K24: Tenso de Entrada
Vin PIC : Tenso na entrada analgica do microcontrolador PIC
KF : Tenso de Sada
Vout Divisor : Tenso de sada do divisor de tenso
: Varivel controlada
19

SUMRIO

EPGRAFE ................................................................................................................................. 6

RESUMO ................................................................................................................................... 7

ABSTRACT ............................................................................................................................... 8

LISTA DE ILUSTRAES ...................................................................................................... 9

LISTA DE TABELAS ............................................................................................................. 13

LISTA DE ABREVIATURAS E SIGLAS .............................................................................. 15

LISTA DE SMBOLOS ........................................................................................................... 17

SUMRIO ................................................................................................................................ 19

1 INTRODUO ................................................................................................................ 23

1.1 Contextualizao ........................................................................................................ 24

1.2 Objetivo ..................................................................................................................... 25

1.3 Justificativa ................................................................................................................ 25

2 CLIMATIZAO INDUSTRIAL ................................................................................... 27

2.1 Surgimento dos sistemas de ar condicionado industriais........................................... 27

2.2 Fan Coil...................................................................................................................... 28

2.3 Chiller ........................................................................................................................ 29

2.4 Torres de resfriamento ............................................................................................... 30

3 PROTTIPO DA PLANTA CONTROLADA ................................................................. 32

3.1 Detalhes construtivos ................................................................................................. 32

3.1.1 Maquete .................................................................................................................. 33

3.1.2 Conjunto ventilador trocador de calor ................................................................. 34

3.1.3 Sistema de gua gelada .......................................................................................... 38

3.2 Troca trmica entre fluidos em movimento ............................................................... 40

3.3 Potncia do sistema de climatizao .......................................................................... 42

4 CONTROLE...................................................................................................................... 45
20

4.1 Mtodos de Controle .................................................................................................. 48

4.1.1 Controle ON-OFF .................................................................................................. 48

4.1.2 Controle Proporcional ............................................................................................ 50

4.1.3 Controle Integral .................................................................................................... 51

4.1.4 Controle Derivativo ................................................................................................ 52

4.2 Controle Proporcional Integral Derivativo (PID) ...................................................... 52

4.2.1 Implementao do PID Digital ............................................................................... 53

4.2.1.1 Aproximao da derivada pelo mtodo de Euler: .............................................. 54

4.2.1.2 Aproximao da integral pela transformao de Tustin ..................................... 54

5 HARDWARE DO SISTEMA MICROCONTROLADO ................................................. 56

5.1 Sensor de temperatura ................................................................................................ 56

5.1.1 Termistores ............................................................................................................. 56

5.1.1.1 Termistor PTC (Coeficiente Positivo de Temperatura)...................................... 57

5.1.1.2 Termistor NTC (Coeficiente Negativo de Temperatura) ................................... 58

5.1.2 Interface eletrnica para o sensor de temperatura .................................................. 60

5.1.3 Equao de Tenso de Sada do Circuito ............................................................... 61

5.1.3.1 Equao de Steinhart & Hart .............................................................................. 62

5.2 Vlvula de gua gelada .............................................................................................. 63

5.2.1 Vlvula borboleta ................................................................................................... 63

5.2.2 Vlvula Globo ........................................................................................................ 64

5.2.3 Vlvula esfera ......................................................................................................... 65

5.3 Atuador proporcional para vlvula de gua gelada.................................................... 66

5.3.1 Sinal eltrico de controle ........................................................................................ 67

5.3.2 Tipo do movimento do eixo ................................................................................... 67

5.3.3 Torque do eixo da vlvula ...................................................................................... 67

5.4 Montagem da vlvula para o projeto ......................................................................... 68

5.4.1 Vlvula utilizada no projeto ................................................................................... 68


21

5.4.2 Servomotor utilizado no projeto ............................................................................. 70

5.4.2.1 Sinal PWM para controle do servo motor .......................................................... 71

5.5 Microcontrolador ....................................................................................................... 72

5.5.1 Definio do Microcontrolador .............................................................................. 74

5.5.2 Caractersticas PIC 18F67J60 ................................................................................ 75

5.5.2.1 Power-on Reset (POR) ....................................................................................... 76

5.5.2.2 Brown-out Detect (BOD) ................................................................................... 76

5.5.2.3 Power-up Timer (PWRT) ................................................................................... 76

5.5.2.4 Oscilator Start-up Timer (OST).......................................................................... 76

5.5.2.5 Watchdog timer (WDT)...................................................................................... 76

5.5.3 Arquitetura do PIC 18F67J60 ................................................................................ 77

5.5.4 Pinagem do PIC 18F67J60 ..................................................................................... 78

5.5.5 Ciclos de mquina .................................................................................................. 79

5.5.6 Entradas/Sadas digitais.......................................................................................... 80

5.5.6.1 Registrador TRIS ................................................................................................ 80

5.5.6.2 Registrador PORT .............................................................................................. 81

5.5.6.3 Registrador LAT ................................................................................................. 81

5.5.7 Temporizadores ...................................................................................................... 81

5.5.7.1 Timer0 ................................................................................................................ 81

5.5.7.2 Timer1 ................................................................................................................ 83

5.5.7.3 Timer3 ................................................................................................................ 85

5.5.8 Conversor analgico/digital ................................................................................... 87

5.5.8.1 Configurao do registrador ADCON0 .............................................................. 88

5.5.8.2 Configurao do registrador ADCON1 .............................................................. 89

5.5.8.3 Configurao de PCFG<3:0> ............................................................................. 89

5.5.8.4 Configurao do registrador ADCON2 .............................................................. 90

5.6 Mdulo controlador Ethernet ..................................................................................... 91


22

5.7 Desenvolvimento do hardware do sistema microcontrolado ..................................... 94

5.7.1 Esquema eletrnico ................................................................................................ 97

6 SOFTWARE DO SISTEMA MICROCONTROLADO ................................................. 101

6.1 Ferramentas utilizadas ............................................................................................. 101

6.1.1 MPLAB IDE ........................................................................................................ 101

6.1.2 Compilador MPLAB C18 .................................................................................... 102

6.1.3 Programador PKBurner2 ...................................................................................... 102

6.2 Servidor WEB .......................................................................................................... 103

6.2.1 Pilhas TCP/IP da Microchip................................................................................. 104

6.3 Desenvolvimento do software do sistema microcontrolado .................................... 107

6.3.1 Configurao da Pilha TCP/IP Microchip ........................................................... 108

6.3.1.1 Configurao do arquivo HardwareProfile.h.................................................... 108

6.3.1.2 Configurao do protocolo TCP/IP .................................................................. 110

6.3.1.3 Configurao do arquivo principal Main.c ....................................................... 116

6.3.2 Rotina para leitura e tratamento da temperatura ambiente ................................... 121

6.3.3 Rotina para clculo da funo PID ....................................................................... 122

6.3.4 Rotina para gerao de sinal PWM para o servomotor ........................................ 124

6.3.5 Criao dos arquivos do servidor HTTP .............................................................. 129

6.3.6 Compilao do Projeto ......................................................................................... 136

6.3.7 Gravao do software no microcontrolador ......................................................... 137

7 TESTES E RESULTADOS de funcionamento do projeto ............................................. 139

8 CONCLUSO ................................................................................................................ 144

REFERNCIAS BIBLIOGRFICAS ................................................................................... 150

APNDICE A DESENHOS CONSTRUTIVOS ................................................................ 154

APNDICE B CDIGO FONTE SERVIDOR HTTP ....................................................... 170

APNCIDE C CDIGO FONTE MODIFICADO DA PILHA TCPC/IP MICROCHIP .. 182


23

1 INTRODUO

O presente Trabalho de Concluso de Curso apresenta os estudos iniciais relacionados ao


projeto de um sistema microcontrolado para climatizao de um ambiente industrial ou
comercial utilizando a tcnica PID1 e ainda a superviso deste sistema remotamente atravs da
tecnologia internet embarcada.

O primeiro captulo introduz o assunto, demonstra os objetivos do trabalho e a


justificativa do tema escolhido.

O Segundo Captulo apresenta um pouco da histria da climatizao industrial, quais os


motivos que levaram criao dos primeiros sistemas e uma breve descrio de sua evoluo.
Apresenta tambm os principais componentes deste sistema.

No captulo terceiro apresentada a aplicao dos conhecimentos adquiridos no estudo do


capitulo anterior e durante o curso de engenharia para construo da maquete que receber o
sistema de climatizao e que ser a base para desenvolvimento dos sistemas de controle e
superviso remota.

O quarto captulo traz a introduo ao sistema de controle e apresenta as tcnicas


utilizadas neste trabalho.

O quinto captulo descreve todos os componentes fsicos utilizados e o desenvolvimento


do circuito eletrnico: Descreve as caractersticas que levaram a estas escolhas.

J no captulo sexto so aplicados os conceitos de controle, climatizao, programao e


ambiente web embarcado para o desenvolvimento do software do microcontrolador
responsvel por todo o projeto.

1
PID Controle proporcional integral derivativo, controle PID ou simplesmente PID, uma tcnica
de controle de processos que une as aes derivativa, integral e proporcional, fazendo assim com
que o sinal de erro seja minimizado pela ao proporcional, zerado pela ao integral e obtido com
uma velocidade antecipativa pela ao derivativa.
24

O stimo captulo apresenta os resultados obtidos durante o desenvolvimento do projeto e


o oitavo captulo, as concluses do trabalho.

1.1 Contextualizao

Em um processo industrial controlado, manter a climatizao do ambiente dentro de


parmetros rgidos e precisos fundamental para alcanar a excelncia na qualidade final do
produto. Mais importante que a tecnologia de refrigerao utilizada o mtodo de controle
empregado a esta tecnologia. Dentre os diversos mtodos conhecidos, o controle PID se
destaca dos demais por sua simplicidade em ser implementado em um microcontrolador2 e
por sua eficincia no controle de temperatura, por isso utilizado largamente pela grande
maioria de controladores existentes no mercado.

Existe ainda a consolidao da Internet como meio de comunicao universal,


disponvel no computador pessoal do escritrio ou na palma da mo em qualquer lugar,
atravs de um SmartPhone3. E a utilizao da Internet para supervisionar e controlar
remotamente as condies do processo produtivo vem crescendo de forma exponencial em
empresas de todos os segmentos e tamanhos, em toda a parte do planeta.

Para demonstrar este controle, foi montada uma maquete de um galpo industrial, nela
foi instalado um sistema de refrigerao gua e, a este sistema, foi aplicada a tcnica de
controle PID utilizando um microcontrolador PIC. Neste mesmo microcontrolador tambm
foi incorporado um Servidor4 WEB5 embarcado6 que permitiu a conectividade entre o
operador e a planta do sistema atravs de uma rede Ethernet7.

2
Um microcontrolador (tambm denominado MCU) um computador-num-chip, contendo um processador,
memria e perifricos de entrada/sada.
3
Smartphone (telefone inteligente, numa traduo livre do ingls) um telefone mvel com funcionalidades
avanadas que podem ser estendidas por meio de programas executados por seu sistema operacional.
4
Servidor web pode ser um programa de computador responsvel por aceitar pedidos HTTP de clientes,
geralmente os navegadores, e servi-los com respostas HTTP, incluindo opcionalmente dados, que geralmente so
pginas web, tais como documentos HTML com objetos embutidos (imagens, etc.).
5
World Wide Web (que em portugus se traduz literalmente por teia mundial), tambm conhecida
como Web e WWW, um sistema de documentos em hipermdia que so interligados e executados na Internet.
6
Um sistema embarcado (ou sistema embutido, ou sistema embebido) um sistema microprocessado no qual
o computador completamente encapsulado ou dedicado ao dispositivo ou sistema que ele controla.
7
Ethernet um protocolo de interconexo para redes locais - Rede de rea Local (LAN) - baseada no envio de
pacotes. Ela define cabeamento e sinais eltricos para a camada fsica, e formato de pacotes e protocolos para a
camada de controle de acesso ao meio (Media Access Control -MAC) do modelo OSI.
25

1.2 Objetivo

O objetivo deste trabalho iniciar os estudos para o desenvolvimento de um sistema


microcontrolado capaz de controlar a grandeza fsica temperatura de um determinado
ambiente utilizando a tcnica de controle Proporcional Integral Derivativa (PID) e
disponibilizar a superviso e configurao dos parmetros deste controle atravs de uma rede
Ethernet utilizando um navegador padro de Internet. Tanto a rotina de controle PID quanto o
servidor WEB devem estar embarcados no microcontrolador.

O projeto deve ser competitivo economicamente perante os controladores semelhantes


existentes no mercado caso venha a ser transformado em produto comercializvel. Sobretudo
para o industrial ou comercirio de pequeno e mdio porte que no pode investir em um
sistema supervisrio robusto e de alto custo para suas instalaes.

Outro objetivo do trabalho o de adquirir conhecimento a cerca da tecnologia Internet


embarcada em microcontroladores para desenvolvimentos de projetos ainda mais elaborados
no futuro.

1.3 Justificativa

Dispositivos e equipamentos munidos de internet embarcada se revelam uma


tendncia mundial apesar do pouco tempo de existncia desta tecnologia. Por outro lado o
mercado de sistemas de controle de processos automatizados j est consolidado h muitos
anos e dispe de centenas de fabricantes que atendem aos mais variados segmentos
produtivos. Estes sistemas apresentam tecnologias muitas vezes antigas e ultrapassadas no
ponto de vista de conectividade e acessibilidade para os dias atuais. Utilizam redes de dados
com pequeno alcance e softwares supervisrios especficos para acesso instalados em
configurao cliente-servidor.

J os sistemas que possuem alta conectividade e acesso via Ethernet so, em geral,
muito caros para aplicao em pequenas plantas, inviabilizando seu uso. E esta lacuna entre
os robustos sistemas supervisrios com conexo Web e as pequenas plantas industriais que a
tecnologia Internet embarcada vem preencher com baixo custo e grande facilidade de
implantao.
26

A vivncia na rea de climatizao vem comprovar a ausncia do uso da tecnologia


Internet embarcada para o controle de equipamento de condicionamento de ar. O que existe
hoje so os dois extremos comentados h pouco: De um lado controladores de temperatura
Stand Alone instalados no painel do equipamento e sem nenhuma conectividade externa,
mas com relativo baixo custo de implantao e, do outro lado, sofisticados sistemas
supervisrios com alta conectividade e tambm alto custo para ser implantado.

O campo de aplicabilidade para esta tecnologia imenso e demanda mo-de-obra


qualificada que, em boa parte, ainda est sendo formada ou recm-formada. Assim, os
estudos nesta rea so necessrios para avanar sobre esta tecnologia e permitir explorar ao
mximo seus os recursos, que podem ser agregados a qualquer modelo de controle
automatizado.
27

2 CLIMATIZAO INDUSTRIAL

2.1 Surgimento dos sistemas de ar condicionado industriais

Em 1902, uma indstria grfica situada em Nova Iorque, enfrentava srios problemas
com a impresso, pois o papel absorvia a excessiva umidade contida no ar, causando borres e
manchas escuras. Foi quando o engenheiro Willis Carrier desenvolveu um sistema composto
por dutos resfriados de maneira artificial, pelos quais o ar era forado a circular. Dessa
maneira foi possvel obter controle sobre a umidade e temperatura do ar, que fora
condicionado a fluir por esse sistema antes de ser lanado planta. Esse fora o primeiro
sistema de condicionamento mecnico de ar.

A indstria txtil tambm enfrentava problemas decorrentes da falta de controle da


umidade do ar, seu baixo ndice implicava em gerao de eletricidade esttica, e essa causava
srios problemas ao processo de tecelagem, pois os fios de algodo embaraavam, quebravam
e interrompiam o funcionamento dos teares. Logo esse segmento industrial adotou o sistema
de ar condicionado inventado por Willis Carrier, proporcionando um grande avano
industrial.

No caso da indstria grfica, o excesso de umidade prejudicava a produo, pois


causava borres na impresso. J no caso da indstria txtil a falta de umidade causava
problemas com a tecelagem devido gerao de eletricidade esttica. Tais situaes
mostravam que cada segmento industrial tinha uma necessidade especfica e que o sistema
inventado por Willis Carrier poderia atender a vrios deles, j que o condicionamento de ar
era mecnico, bastava exercer algum tipo de controle sobre o sistema de resfriamento
artificial criado, ou sobre o volume de ar que circulava, ou ainda, sobre os dois
simultaneamente. Tal versatilidade logo despertou o interesse de vrios outros segmentos, tais
como, o de fabricao de papel, indstrias do tabaco e farmacutica.

Antes do projeto de Willis Carrier as indstrias sofriam perdas significativas na


produo gerando prejuzos enormes devido s variaes drsticas de temperatura e umidade
do ar. A partir dele, ao longo dos anos, a climatizao evoluiu em grande escala e em
diversas reas, assim muitas indstrias conseguiram melhorar seus processos produtivos pelo
28

simples fato de melhorar o controle da temperatura do ambiente onde o processo produtivo


acontecia. Os processos produtivos ficaram com maior qualidade e confiabilidade, sendo a
climatizao componente determinante na otimizao e qualidade dos processos industriais e,
porque no dizer, questo de sobrevivncia em certos segmentos industriais, num cenrio de
competio to acirrada.

2.2 Fan Coil

Um sistema fan coil8 ou trocador de calor simples composto de ventilador, trocador


de calor de passagem com gua gelada e/ou trocador de calor de passagem com gua quente,
misturador de ar exterior e damper9 de exausto.

Cada trocador de calor conectado a um dos ciclos de gua, um no ciclo de gua


quente e outro no ciclo de gua gelada. O sistema controla o fluxo de gua quente ou fria de
maneira a atender a demanda. Se h uma demanda de aquecimento no ambiente com
temperatura controlada, o trocador com gua gelada est desligado e o fluxo de gua quente
atravs da bobina de aquecimento acelerado para atender a demanda. O mesmo se aplica se
houver demanda de resfriamento, ou seja, o trocador com gua quente ser desligado e o fluxo
de gua gelada acelerado para atender a nova demanda.

Pode-se ainda, opcionalmente, tomar ar exterior, caso esse esteja em condies mais
favorveis, ou seja, se as condies naturais externas prximas ao requisitado no ambiente
controlado. Para que isso seja possvel, basta a aplicao de um damper misturador
motorizado e inseri-lo na automao do sistema, combinado com outro damper de exausto. A
utilizao do ar externo, quando favorvel, proporciona rpida resposta e economia de
energia.

O ventilador lana o ar no ambiente e cria uma presso positiva em relao ao meio


externo caso o damper de exausto esteja fechado, assim o ar forado a escoar de volta pelo
retorno e entra de volta no fan coil, passando pelo trocador de calor e sendo novamente
lanado ao ambiente controlado, formando um ciclo.

8
Fan Coil do ingls, Ventilador e Serpentina.
9
Damper um dispositivo mecnico utilizado para regular e/ou direcionar o fluxo de ar em um sistema de dutos.
29

Figura 2.1 - Fluxograma de um sistema fan coil simples

2.3 Chiller

O chiller um equipamento composto de 3 partes principais. So elas compressor,


condensador e evaporador. Um gs refrigerante submetido compresso e, logo em
seguida, a expanso. Quando o gs comprimido h uma elevao em sua temperatura e o
oposto ocorre quando se possibilita sua expanso. Entre o condensador e o evaporador
existem vlvulas de expanso, que so responsveis pela liberao do fluido comprimido. A
parte do chiller onde ocorre a expanso o evaporador, onde o gs atinge baixas temperaturas
e troca calor com a gua gelada que retornou aps ter trocado calor com o ar no fan coil. No
condensador o gs aquecido pela compresso troca calor com outro sistema de gua
dimensionado para esse fim. A gua que ganhou calor nessa troca com o gs ser resfriada em
torres, cujo principio bsico forar sua passagem em forma de gotas contra um forte fluxo
de ar. A figura a seguir ilustra um fluxograma de um ciclo de refrigerao por compresso.
30

Figura 2.2 - Ciclo de refrigerao por compresso

2.4 Torres de resfriamento

As torres de resfriamento so utilizadas tanto para remover calor em processos


industriais como em sistemas de ar condicionado. Embora o volume de gua contido circule
por todo o sistema, haver perdas por evaporao. Estima-se em 1% do volume para cada 5
C so reduzidos.

Ateno especial deve ser dada ao tratamento qumico que dever ser adotado nesse
sistema, tanto para o trato biolgico, quanto preveno a oxidao. Normalmente se utiliza
sistemas automticos de dosagem. Sais minerais ficam concentrados na bacia da torre e um
sistema de purga peridica automtica deve ser implantado.

Em nosso caso de estudo, as torres de resfriamento so utilizadas para resfriar a gua


que, ao passar pelo condensador do chiller, ganhou calor pela troca com o gs refrigerante
aquecido pela compresso.

A figura 2.3 ilustra o funcionamento de uma torre de resfriamento.


31

Figura 2.3 - Funcionamento de uma torre de resfriamento.


Fonte: Torres, Meio Filtrante www.meiofiltrante.com.br disponvel em nov/2012.

A gua aquecida na passagem pelo condensador do chiller retornada ao topo da torre


e distribuda ao enchimento (colmeia), descendo por gravidade e seguindo em sentido
contrrio ao fluxo de ar. O fluxo de ar gerado pela ao do ventilador que fica no topo e
forado a entrar por venezianas localizadas na parte inferior da torre. A mistura entre ar e
gotculas dgua vai provocar o resfriamento.
32

3 PROTTIPO DA PLANTA CONTROLADA

O objetivo foi o de construir uma maquete, cujas formas remetessem a um galpo


industrial e assim ele foi dimensionado de tal maneira que seu interior contivesse o volume
til de 1m. Essa maquete foi construda em laminado de madeira MDF10 com acabamento em
LACA11. No sentido longitudinal, foi instalado um duto de insuflao de ar, a ser resfriado
pela passagem forada por um trocador de calor com aletas, em cujo interior circulava gua
gelada. A recirculao de ar fora gerada por um ventilador acoplado na parede da maquete.

Foi enfrentado certo grau de dificuldade em encontrar no mercado componentes que


pudessem ser diretamente adaptados ao projeto, devido s pequenas dimenses e capacidades
envolvidas.

3.1 Detalhes construtivos

Adotado um sistema de fan coil simples, que num primeiro instante serviu de base
para comprovao das leis da termodinmica e princpios da mecnica de fluido, mais a frente
as formas de controle que foram implementadas sero descritas com detalhes. Nesse captulo
esto descritos os detalhes construtivos do prottipo, cujo fluxograma est ilustrado na figura
3.1.

10
MDF - Medium-Density Fiberboard um material derivado da madeira e internacionalmente conhecido
por MDF. Em portugus o significado correto placa de fibra de madeira de mdia densidade.
11
Pintura em LACA um termo utilizado na indstria de mveis, marcenarias e construo civil, para
denominar qualquer tipo de pintura que seja capaz de selar e bloquear a superfcie abaixo delas. Estas pinturas
so aplicadas por meio de pistola de pintura com ar comprimido, e secam por meio da evaporao do solvente
utilizado para diluio dos aglutinantes slidos existentes na mesma, gerando Resistncia e Durabilidade
superiores as pinturas comuns.
33

Figura 3.1 - Fluxograma do sistema de climatizao de nosso prottipo.

3.1.1 Maquete

Projetada e construda uma maquete de galpo industrial cujo interior contivesse o


volume de 1m. Foi utilizado laminado MDF de 15mm de espessura com acabamento em
LACA, para garantir certo grau de proteo umidade. A parte frontal foi provida de uma
ampla abertura para possibilitar a visualizao do interior. Por se tratar de ambiente a
climatizar essa abertura foi selada com vidro transparente incolor de 4mm.

Figura 3.2 - Vista frontal da maquete.


34

3.1.2 Conjunto ventilador trocador de calor

Foram buscados equipamentos disponveis no mercado, produzidos em escala


industrial, afim de que seu custo se tornasse vivel. Uma fonte interessante de suprimento a
indstria automotiva. Fez-se necessrio um ventilador potente, capaz de produzir um fluxo de
ar que atravessasse o trocador de calor e chegasse aos extremos da maquete atravs do duto de
insuflao. Foram encontrados diversos coolers de vazo adequada, mas de baixa presso e,
da mesma forma, variados equipamentos que no atendiam a necessidade do projeto por
completo.

Pesquisando em lojas de autopeas, foi encontrado um conjunto de ventilador com


caixa, utilizado para gerar fluxo de ar quente no automvel modelo Gol. Tal ventilador
mostrou-se suficientemente potente em testes preliminares.

Figura 3.3 - Ventilador ar quente do Gol.


Fonte: Mercado livre www.mercadolivre.com.br Disponvel em nov/2012.

O sistema em seu formato original no atendia s necessidades do projeto por no ser


possvel assim adapta-lo ao prottipo. A soluo foi partir para o desmonte da pea e
fabricao de novo conjunto com as caractersticas necessrias. Do conjunto anteriormente
ilustrado foi aproveitado somente o conjunto de motor - ventilador. A montagem inicialmente
ficou como mostrado na figura 3.4.
35

Figura 3.4 - Conjunto motor - ventilador sendo adaptado.

A esse conjunto foi agregado um pequeno duto que iria fazer a conexo com o
conjunto de duto de insuflao trocador de calor, que ser descrito a frente.

Figura 3.5 - Conjunto motor ventilador adaptado.

O duto de insuflao foi construdo de maneira a conter em seu interior o trocador de


calor (trocador com serpentina aletada) e foi dimensionado para atender toda seo
longitudinal da maquete. O ar insuflado encontra logo no inicio o trocador de calor, passa por
entre ele trocando calor com a gua gelada presente no interior dos tubos e distribudo para
o ambiente controlado atravs das bocas construdas para esse fim.
36

Figura 3.6 - Vista superior do duto de insuflao.

Figura 3.7 - Vista inferior do duto de insuflao.

Atravs de medies executadas com anemmetro, determinou-se a vazo de ar


insuflado, dado importante para o levantamento das cargas trmicas no decorrer do
desenvolvimento do projeto. As medies encontradas foram:
37

Tabela 3.1 Vazo de ar insuflado pelo conjunto motor-ventilador.

O ar insuflado induzido a entrar por orifcios no piso da maquete, formando um


plenum12. Essa massa de ar captada por um duto que liga o piso entrada do ventilador.

ventilador

duto de insuflao

duto de retorno

captao do ar
para o plenum

Figura 3.8 - Detalhes da recirculao do ar na maquete.

12
Plenum Termo muito utilizado em instalaes de ar condicionado e se refere concentrao de todas as vias
de mesmo sentido ( insuflao ou retorno) em uma nica caixa plena, onde todos os fluidos so misturados a fim
de que adquiram a mesma temperatura antes de seguir seu caminho no sistema.
38

O trocador de calor escolhido foi o radiador de gua quente tambm utilizado no


automvel Gol. Trata-se de um trocador do tipo casco tubo, dotado de aletas, de pequeno
porte, mas suficiente para atender a demanda de troca trmica no interior da maquete.

Figura 3.9 - trocador de calor casco tubo aletado.

3.1.3 Sistema de gua gelada

A manuteno da temperatura no interior da maquete depende diretamente da troca


trmica entre os fluidos ar e gua gelada. medida que o ar cede calor a gua o recebe, logo,
se faz necessrio um subsistema que mantivesse a gua gelada. A primeira tentativa foi usar
clulas de Peltier, mas logo se chegou concluso que seria invivel prosseguir com essa
alternativa, pois demandaria um grande conjunto desse componente para conservar um
volume de cerca de 15 litros de gua em baixa temperatura. Como o foco principal era estudar
as trocas trmicas dos fluidos em movimento e, numa segunda etapa, implantar um sistema de
controle, chegou-se a concluso que seria vivel tentar adicionar gelo gua, manter esse
volume acondicionado em um tanque de isopor e trabalhar com uma temperatura requerida no
interior do ambiente que no requeresse alto impacto na troca trmica. Obtendo sucesso nessa
configurao, para um projeto maior, bastaria a insero de um chiller para a manuteno da
gua em baixas temperaturas.
39

Figura 3.10 - reservatrio de gua gelada instalado no lado externo da maquete.

Definido o volume de gua gelada, as temperaturas inicial e final necessrias ao


desenrolar do projeto, faltava encontrar no mercado alguma bomba para promover a
circulao desse fluido. Os equipamentos industriais existentes so robustos e
superdimensionados para nossa necessidade. Cogitou-se o uso de bombas automotivas de
combustvel, mas essas no se mostraram adequadas para nossa necessidade. Foi testada e
aprovada uma bomba submersa de aqurio, marca JAD, modelo SP-1000, cuja vazo plena
550 l/h e altura manomtrica mxima de 0,8m.

Figura 3.11 - Bomba submersa de aqurio JAD SP 1000.


40

3.2 Troca trmica entre fluidos em movimento

A base do experimento a propriedade conhecida sobre a troca trmica entre fluidos


em movimento. Sabe-se que o calor transferido do fluido mais quente para o mais frio, no
caso em estudo, o calor ser transferido do ar para gua. A transferncia de calor continuar a
ocorrer at o equilbrio. Sabemos ainda que a quantidade calor transferido pode ser
determinado pela equao:

B6 = 56 . . & &>

Se a parcela cedida igual parcela recebida podemos afirmar que:

B6+10!0" C1-" = B6+10!0" C1-

E, por deduo, podemos afirmar que:

56 . . & &> = 56 . . & &>

A partir dessa deduo, conclui-se que para ajustar a temperatura do ar no interior da


maquete bastaria variar a vazo mssica do ar (56 ) ou da gua (56 ), at que se obtivesse
o valor desejado. Restava, ento, escolher qual fluido teria sua vazo variada. Numa primeira
ao, tentou-se implementar um controle PWM no motor 12VDC (12 Volts corrente
contnua), mas no foi obtido sucesso, pois a variao de rotao do motor no correspondia
linearmente dimenso dos pulsos e o range de controle ficou muito limitado. Assim sendo,
restava tentar impor o controle de vazo no fluido gua gelada. O ideal seria a aplicao de
uma vlvula de controle de fluxo proporcional de 3 vias motorizada, mas seu custo se mostrou
invivel para essa aplicao. Decidiu-se, ento, comprar um servo motor, uma vlvula de
esfera de comum de mercado e acopla-los, aes executadas com xito, mas um novo
problema surgiu. Uma vlvula de esfera, de passagem plena, com curso de abertura de 90,
permite quase que a totalidade da passagem nos primeiros 20 de abertura. Foi verificado em
pesquisas que esse problema havia sido solucionado por empresas de automao inserindo um
disco caracterizador de vazo, logo aps a abertura da esfera, que proporcionaria uma vazo
perto do modelo linear. Assim procedemos e obtivemos xito.
41

Figura 3.12 - Disco caracterizador de vazo para vlvula de esfera.


Fonte: Belimo, 2012

Abaixo seguem as medies de vazo, aps a instalao do disco caracterizador de


vazo.

Tabela 3.2 Vazo de gua atravs do disco caracterizado instalado na vlvula.

Abertura da vlvula (%) Vazo de gua (l/min)


0 0
10 0,74
20 1,12
30 1,83
40 2,04
50 2,38
60 2,97
70 3,45
80 4,13
90 4,81
100 5,16

Uma vez obtido o controle quase linear da vazo, o conjunto vlvula-motor foi fixado
atravs de mo francesa na parede do fundo da maquete. O fluxo de gua gelada est ilustrado
na figura 3.13.
42

Figura 3.13 - fluxo de gua gelada.

Figura 3.14 Detalhe da vlvula motorizada fixada na parede traseira da maquete.

3.3 Potncia do sistema de climatizao

Considerando que a vazo mxima de gua gelada no sistema de 5,16 3/524 (tabela
3.2), que, de maneira manual, manteve-se a temperatura deste fluido entre 5C 10C e que
seu calor especfico13, na presso de 1atm, seja de aproximadamente 1,002 3. Ed@ . d@
,

13
Calor especfico: Quantidade de calor necessria para elevar em 1C a temperatura de 1g de uma substncia,
sem que haja mudana de estado.
43

pode-se calcular a quantidade de calor, por unidade de tempo, que esse fluido poder oferecer
para troca.

Colocando as grandezas no sistema internacional de unidades MKS, temos:

5,16 3 5,16 %E
56 1- 0 = =
e = 0,086 %E. > d@
524 60 >

1- 0 = 1,002 3. Ed@ . d@
= 4,19838 i. Ed@ . d@
= 4,19838 %i. %Ed@ . d@

& = &(24 3 &242 2 3 = 10 5 = 5

Nestas condies, o fluxo de calor desse fluido pode ser calculado por:

B6 = 56 . . &

B6 = 0,086%E. > d@ k 4,19838 %i. %Ed@ . d@


k 5

B6 = 1,805 %i. > d@ , ou:

B6 = 1,805 %l

Em contrapartida, sabemos que o fluido que troca calor com a gua gelada o ar e que
esse possui sua vazo invarivel e igual a 444,76 5A / (ver tabela 3.1).

Conhecendo seu calor especfico, = 0,24 3. Ed@ . d@


, possivel calcular qual
ser o mximo & em que o sistema poder atuar nesse fluido.

3F) 2 F 3F ) = 3F) ) 2 F 3 E

Acertando unidade no MKS:

= 0,24 3. Ed@ . d@
= 1,0056 %i. %Ed@ . d@
44

; >F > (2 F F ) = 1,29 %E. 5A d@

56 = 444,76 5A . d@ = 0,123544 5A . > d@ = 0,123544 5A . > d@ k 1,29 %E. 5A d@

56 = 0,1594 %E. > d@

B6+10!0" = B6 1+1N!0"

0,1594 %E. > d@ k 1,0056 %i. %Ed@ . d@


k & = 1,805 %i. > d@

1,805
& =
0,1595 k 1,0056 d@

& = 11,26

Com isso fica determinado que este sistema capaz de controlar a temperatura desta
planta, utilizando este sistema de climatizao, desde que o setpoint esteja ajustado dentro da
faixa do & , ou seja, at 11,26C abaixo da temperatura ambiente inicial.

OBS: Desconsiderando as perdas para o meio externo. Clculo terico.


45

4 CONTROLE

Segundo Ogata, com a evoluo da indstria, veio modernizao tambm das


tcnicas de controle automatizado que hoje de suma importncia para o avano da
Engenharia. O controle est presente em sistemas robticos, na indstria aeronutica, em
veculos espaciais e hoje parte integrante e indispensvel dos processos de fabricao
modernos. Alm de estar presente nos equipamentos de produo, tem papel fundamental no
controle das utilidades necessrias aos processos, tais como, presso, viscosidade, vazes,
umidade e temperatura, entre outros.

O controle automtico viabiliza a obteno de timo desempenho em sistemas


dinmicos, aumenta a produtividade, suprime a atuao manual exaustiva, custosa e passvel
de falhas.

James Watt construiu no sculo XVIII um controlador centrfugo para mquinas a


vapor, tendo esse sido considerado o primeiro trabalho importante no tema controle
automtico. Minorsky em 1922 conseguia determinar a estabilidade de navios atravs de
equaes diferenciais. Nyquist em 1932 aplicou excitaes senoidais em sistemas de malha
aberta, conseguindo obter estabilidade em controles com malhas fechadas. Dois anos mais
tarde, Hazen desenvolvia sistemas de controle de posio, atravs de servomecanismos a
reles.

Os anos 40 foram marcados pelo desenvolvimento do mtodo chamado Lugar das


Razes. O mtodo do Lugar das Razes foi desenvolvido por W. R. Evans e apresentado em
um artigo publicado em 1948. Este mtodo tem por objetivo representar graficamente o
deslocamento dos polos de malha-fechada de um sistema linear quando sujeito a variao de
um ou mais parmetros.

A base da teoria clssica de controle so os mtodos de resposta frequncia e do


lugar das razes. Constituem sistemas aceitveis, mas ainda no eram o que se chama de
controle timo. Nos anos 50 buscava-se a soluo tima para um problema segundo um
critrio especfico. Mas ainda se tratava de sistemas limitados, onde havia apenas uma entrada
e uma sada.
46

Com a chegada dos computadores digitais nos anos 60, tornou-se possvel a anlise de
sistemas complexos no domnio do tempo, evoluindo para a teoria de controle moderno, que
se baseia em analise de sntese atravs de variveis de estado, tendo evoludo at os anos 80, o
controle determinstico.

De 80 at hoje, os desenvolvimentos da teoria moderna tm sido concentrados em


controles robustos, os computadores evoluram, se tornando mais compactos, velozes e mais
baratos e seu emprego nos sistemas de controle cada vez maior.

Um sistema de controle basicamente formado por um ncleo provido por entradas e


sadas, conforme a figura abaixo, o ncleo, ou processo responsvel por receber
adequadamente os sinais de entradas e tratar os sinais de sada para que executem o que o
sistema prope.

Figura 4.1 - Sistema de Controle.

O Processo, ou planta, um sistema dinmico, seu comportamento descrito atravs


de modelos matemticos de equaes diferenciais. A entrada chamada de varivel de
controle ou varivel manipulada (MV) e a sada chamada de varivel controlada ou
varivel de processo (PV).

Desta maneira se caracteriza um Sistema de Controle em Malha Aberta, onde o


sinal de sada no afeta a ao de controle. Nesse sistema o sinal de sada no medido e nem
enviado de volta para comparao com o desejado. Tomemos como exemplo uma mquina de
lavar roupas, que tem vrias operaes sequenciais programadas, como, molho, lavar,
enxaguar e centrifugar, todas essas realizadas em funo do tempo. Passado o tempo as
operaes so finalizadas e no medido se a roupa ficou limpa ou no, se o efeito da
centrifugao foi suficiente ou no.
47

As programaes so realizadas por meio de testes prvios e no h qualquer ajuste


durante o processo. Essas programaes so realizadas por meio de calibraes. Em havendo
a ocorrncia de qualquer distrbio correo alguma ser aplicada. Assim sendo, esse sistema
de controle s deve ser aplicado em processos onde se garante a inexistncia de distrbios
internos ou externos e onde se conhece muito bem as relaes entre entrada e sada.

Nesse sistema as aes so tomadas somente em funo do tempo. Um exemplo


clssico so os semforos operados com base no tempo.

J em um Sistema de Controle em Malha Fechada mantida uma relao


previamente estabelecida entre a grandeza de sada e a de referencia ) , comparando
ambas e utilizando a diferena entre elas, chamada de erro , como meio de controle.
Sobre este sinal de erro so aplicadas operaes matemticas a fim de fazer com que seu
valor chegue zero, o que significa que a situao de controle foi alcanada.

Figura 4.2 - Sistema de Controle em Malha Fechada.

O corpo humano um exemplo de controle complexo por malha fechada. A presso


sangunea e a temperatura do corpo so mantidas constantes por retroao fisiolgica. Por
exemplo, o corpo humano sendo submetido a um ambiente aquecido transpira em busca do
equilbrio trmico, esse pode ser considerado um efeito de retroao.

Em sistemas de malha fachada, o uso da retroao o torna insensvel aos distrbios


internos ou externos, tornando possvel um controle preciso utilizando-se componentes de
baixo custo. A busca pela estabilidade pode ser um problema nesses sistemas, pois eles
induzem a tendncia de correo de erros alm do necessrio, podendo causar oscilaes de
amplitude constante ou mesmo crescente com o decorrer do tempo.
48

Em sistemas, nos quais conhecemos as entradas e no h ocorrncia de distrbios


aconselhvel o emprego de sistema a malha aberta. Os controles a malha fechada devero ser
empregados quando houver perturbaes imprevisveis. H casos onde se pode empregar um
sistema misto, ou seja, uma combinao entre controle a malha aberta e a malha fechada.

4.1 Mtodos de Controle

Existem mundialmente, infinitos mtodos para se controlar uma varivel em um


processo automatizado. Algumas delas muito difundidas e pesquisadas em todo mundo
acadmico, desde o controle On-Off, passando pelo PID, logica difusa (controle Fuzzy) at as
recentes redes neurais que despontam na vanguarda do controle automatizado e prometem
muito para um futuro muito prximo.

4.1.1 Controle ON-OFF

Em se tratando de controle de temperatura, uma grande parcela dos sistemas


encontrados no mercado utilizam ainda o mtodo On-Off que consiste em se determinar uma
temperatura de trabalho, chamada de setpoint14 onde o sistema de refrigerao ir operar de
modo a ligar a refrigerao em sua mxima potncia quando detectada temperatura acima do
setpoint e mant-la ligada at a temperatura se torne menor que o valor do setpoint.

Neste mtodo de controle, o sistema atua atravs de um termostato, conforme a figura


4.3:

Figura 4.3 - Sistema de Controle ON-OFF.

14
Setpoint o valor-alvo que um sistema de controle automtico, por exemplo controlador PID, alcanar.
49

O sinal de controle s pode assumir dois valores, ligado ou desligado, conforme o


valor do erro apresentado seja positivo ou negativo. Matematicamente:

q1 > >0
=p
q2 > <0

Nota-se que no existe valor de quando = 0, isso causa uma grande variao
na temperatura do ambiente controlado que em muitos casos pode aceitar esta variao.

Um grande problema deste sistema ocorre quando a temperatura est muito


prxima ao valor do setpoint ) . Neste caso, poder entrar em oscilao devido
proximidade destes valores. Para resolver este problema podemos utilizar o mtodo de
controle ON-OFF com histerese, conforme figura abaixo.

Figura 4.4 - Sistema de Controle ON-OFF com histerese

Esta modificao pode ser demonstrada da seguinte maneira:

q1 > 1 >0
=p
q2 > 2 <0

Desta forma, cria-se uma banda morta entre o setpoint que acionar o sistema de
refrigerao e o setpoint que desligar este mesmo sistema. Isso acaba com o problema de
oscilaes no acionamento do sistema, por outro lado, aumenta ainda mais a variao da
varivel controlada ,portanto, quando precisamos que o controle seja mais eficaz ao
50

ponto de manter essa variao de temperatura do ambiente em nveis muito pequenos faz-se
necessrio a aplicao de mtodos de controle mais complexos.

4.1.2 Controle Proporcional

Depois do controle ON-OFF, em termos de simplicidade, pode-se utilizar o controle


proporcional que j permite alguma melhora na resposta da sada controlada e que trata
basicamente de se pegar o erro do sistema e aplicar um ganho fixo (constante de
proporcionalidade ) antes da realimentao.

Figura 4.5 - Sistema de Controle Proporcional

= .

Assim, o sinal aplicado planta, ser sempre inversamente proporcional ao mdulo do


erro .

Quanto maior o ganho , menor ser o erro em regime permanente, ou seja, melhor a
preciso do sistema em malha fechada. O erro ser diminudo com o aumento de ,
porm nunca poder ser anulado. Em contrapartida, quanto maior o ganho , mais
oscilatrio o sistema tende a ficar, podendo chegar instabilidade do sistema.
51

Figura 4.6 - Ao proporcional: = 1 (contnuo), = 2 (tracejado), = 4 (pontilhado).


Fonte: Venciguerra, 2005

4.1.3 Controle Integral

O controle integral consiste, assim como seu nome sugere, em se aplicar ao sinal de
controle , um ganho 2 proporcional a integral do sinal de erro , onde 2 a
constante ajustvel.

Figura 4.7 - Sistema de Controle Integral

= 2. t

Se o valor de for dobrado, ento o valor de varia duas vezes mais rpido.
Para erro nulo, o valor de permanece estacionrio. A ao de controle integral muitas
vezes denominada de controle de reestabelecimento (reset) (OGATA).

O Controle integral no isoladamente uma tcnica de controle. Deve ser associada a


outras como a proporcional-integral ou, como nosso caso, a proporcional-integral-derivativa
(PID).
52

4.1.4 Controle Derivativo

Assim como o controle integral, o controle derivativo no uma tcnica de controle


utilizada isoladamente.

A ao de controle derivativa, quando adicionada a um controlador proporcional,


propicia um meio de obter um controlador com alta sensibilidade. Uma vantagem em
se usar ao de controle derivativa que ela responde taxa de variao do erro
atuante e pode produzir uma correo significativa antes de o valor do erro atuante
tornar-se demasiadamente grande. O controle derivativo, portanto, antecipa o erro
atuante e inicia uma ao corretiva mais cedo, tendendo a aumentar a estabilidade do
sistema (OGATA, 2003).

Figura 4.8 - Sistema de Controle Derivativo

= .

4.2 Controle Proporcional Integral Derivativo (PID)

A combinao das tcnicas de controle proporcional, integral e derivativo conhecida


como controle PID, que soma a ao proporcional s aes integral e derivativa. A ao
integral elimina o erro em um regime estacionrio, pois apresenta um resultado no nulo
quando o erro do sistema for nulo. Por outro lado, a ao integral pode introduzir oscilao na
resposta devido ao aumento da ordem do sistema. A ao derivativa antecipa o erro e produz
uma ao corretiva mais cedo e proporcional taxa de variao do erro atual.
53

Figura 4.9 - Sistema de Controle PID

= . + 2. t + .

4.2.1 Implementao do PID Digital

A equao do PID bastante complexa e quando executado em tempo real durante o


processo de controle exige muito processamento. Os controladores comerciais destinados a
esta tarefa, devido ao custo de produo, no possuem capacidade para processar todos os
clculos desta equao em tempo real, desta forma, para aplicar o controle PID em um
microcontrolador da Famlia PIC, por exemplo, tem-se que deduzir a equao para um
formato digital e adotar algumas aproximaes nos termos integral e derivativo.

Existem inmeras maneiras para discretizao, ou aproximao digital, de uma


equao em tempo discreto, objetivando a obteno final da equao das diferenas a ser
implementada no microcontrolador.
54

4.2.1.1 Aproximao da derivada pelo mtodo de Euler:

Uma das tcnicas mais comuns para fazer estas aproximaes consiste na estratgia de
derivao por emulao. Nela a primeira derivada no tempo de uma funo aproximada por
uma diferena no tempo conforme a equao:

%& %& &


F4 :
&

&: o perodo de amostragem;


%& : valor do erro no instante atual;
%& ' & : valor do erro no instante de amostragem anterior ao atual.

Pode-se observar o resultado desta aproximao na figura a seguir, comparando


original com o sinal discretizado:

Figura 4.10 - Grfico de aproximao pelo mtodo de Euler


Fonte: Makino, 2009

4.2.1.2 Aproximao da integral pela transformao de Tustin

Esta regra consiste em aproximar uma integral pela regra trapezoidal, da seguinte
maneira:

?G ?GdG ?G
t t ut
?GdG
55

?G
Aplicando a tcnica, aproxima-se no intervalo T e defini-se %& como a
rea acumulada dos trapzios at o instante %&, restando:

%& ' & u %


%& %& ' & u &
2

Esta tcnica est representada na figura a seguir:

Figura 4.11 - Grfico de aproximao por Transformada de Tustin


Fonte: Makino, 2009

Aplicadas s aproximaes tem-se novamente a equao completa para o controle PID


ajustada utilizao em microcontroladores:

%& ' & u % %& ' %& ' &


. u 2 %& ' & u 2 &u .
2 &

Onde:
: ganho proporcional do sistema;
2: ganho integral do sistema;
: ganho derivativo do sistema;
&: o perodo de amostragem do sistema;
%& : o erro atual do sistema;
%& ' & : o erro no instante anterior ao instante atual do sistema;
2 %& ' & : o valor da ao integral no instante anterior ao instante atual do sistema;
: o sinal de entrada em nosso sistema, neste caso, o sinal que aplicado na vlvula de
controle de gua gelada.
56

5 HARDWARE DO SISTEMA MICROCONTROLADO

Definidas as tcnicas de controle utilizadas, a prxima etapa definir todos os


componentes de Hardware15 do sistema de controle. Devem ser definidos os Transdutores que
captaro a temperatura da planta do sistema, os atuadores que faro com o resultado de
controle da temperatura seja alcanado, assim como o microcontrolador a ser utilizado, seus
perifricos e a Interface do operador.

5.1 Sensor de temperatura

Existem disponveis hoje no mercado diversos tipos de sensores de temperatura, como


por exemplo: termistores, termopares, termo resistncia, sensores eletrnicos entre outros.
Cada um deles com suas caractersticas negativas e positivas. Neste projeto ser utilizado o
termistor NTC 10K, um sensor muito utilizado em sistemas de climatizao e
condicionamento de ar j que possui baixo custo e elevada confiabilidade.

5.1.1 Termistores

So resistores termicamente sensveis. Os termistores so muito utilizados em


aplicaes que necessitem de uma alta sensibilidade com mudana temperatura, pois eles
so extremamente sensveis a mudanas relativamente pequenas de temperaturas.

Todavia no so lineares. A resposta da variao de temperatura no linear


variao de sua resistncia, mas pode-se obter a relao entre a resistncia e a temperatura
para faixas pequenas de variao de temperatura atravs da equao de Steinhart & Hart,
demonstrada a seguir:

1
&
u . 34 + . 34. D A

15
No mbito eletrnico o termo "hardware" bastante utilizado, e se aplica unidade central de processamento,
memria e aos dispositivos de entrada e sada, ou seja, a todas as partes fsicas.
57

Onde os valores de a, b e c so coeficientes que devem ser especificados para cada


dispositivo, T a temperatura e R a resistncia do termistor.

Existem dois tipos de termistores, o PTC (Coeficiente Positivo de Temperatura) e o


NTC (Coeficiente Negativo de Temperatura), essa distino devida ao material de sua
construo. Esses dispositivos so construdos a partir de misturas cermicas de xidos
semicondutores, como titnio de brios para os PTCs e magnsio, nquel, cobalto, titnio,
ferro e cobre para os NTCs.

5.1.1.1 Termistor PTC (Coeficiente Positivo de Temperatura)

Possui coeficiente positivo de temperatura de resistncia, podendo ser utilizado para


medies de temperaturas at 150C. Seu valor de resistncia aumenta com a temperatura.

Tem como caractersticas, alta sensibilidade de temperatura, fcil aplicao em


bobinas de motores, rpida resposta, custo baixo progressivo para grandes demanda, valor
absoluto de coeficiente trmico maior que o NTC.

Podem ser aplicados em motores eltricos AC/DC, circuitos eletrnicos,


transformadores e equipamentos de udio, controle de temperatura em geral.

Abaixo a simbologia, curva caracterstica e exemplo de circuitos eletrnicos com a


utilizao do PTC.

Figura 5.1 - Simbologia do PTC


Fonte: Livro Sensores Industriais Fundamentos e Aplicao
58

Figura 5.2 - Curva Caracterstica do PTC.


Fonte: Livro Sensores Industriais Fundamentos e Aplicao

Figura 5.3 - Circuito eletrnico com utilizao PTC.


Fonte: Autoria prpria

5.1.1.2 Termistor NTC (Coeficiente Negativo de Temperatura)

Termistor sensvel a variaes de temperatura. Sua resistncia diminui medida que a


temperatura aumenta. Desenvolvidos com uma tecnologia que permite tolerncia de variao
de 1%.

So usados principalmente para faixas de medies entre -55 a 150C.

Devido ao baixo custo e ao excelente desempenho o NTC possui uma vasta utilizao
nas indstrias, seja para refrigerao e ar condicionado, linhas automotivas, controle de
temperatura, sistemas de deteco e alarmes contra incndio dentre outras.
59

A curva que defini o comportamento da temperatura em relao resistncia tem um


comportamento exponencial, como pode ser visto no grfico abaixo:

60
50
Temperatura (C)

40
30
20
10
0
0 5 10 15 20 25
Resistncia (K)

Figura 5.4 Grfico de temperatura x resistncia.


Fonte: Autoria prpria Baseado em experimento real.

Abaixo a simbologia, modelo e exemplo de aplicao com a utilizao do NTC.

Figura 5.5 - Simbologia do PTC.


Fonte: Livro Sensores Industriais Fundamentos e Aplicao

Figura 5.6 Forma construtiva NTC


Fonte: Addtherm, 2011
60

5.1.2 Interface eletrnica para o sensor de temperatura

Para que o microcontrolador consiga interpretar a temperatura medida pelo Termistor


NTC 10K deve-se desenhar um circuito eletrnico que permita converter a variao da
resistncia, decorrente da variao de temperatura medida, em um sinal analgico compatvel
com o microcontrolador.

Para isso, foi utilizada uma das entradas analgicas do microcontrolador. Esta entrada
analgica , na verdade, um conversor A/D (analgico para digital) que l o valor de tenso
presente em seu terminal que pode variar entre 0V e +3,3VCC e converte para uma
palavra digital de 10 bits16 (0 a 1023) proporcional a este sinal de entrada.

Utilizando as caractersticas do sensor resistivo foi montado um circuito divisor de


17
tenso com a adio de um resistor de 10k em srie ao NTC. Este divisor tem como tenso
de entrada +3,3VCC o limite permitido entrada analgica do microcontrolador e o sinal
de sada do divisor de tenso ser injetado entrada analgica do microcontrolador conforme
a figura abaixo:

Figura 5.7 - Circuito divisor de tenso para aplicao do NTC 10K


Fonte: Autoria prpria.

16
Bit (simplificao para dgito binrio, "BInary digiT" em ingls) a menor unidade de informao que pode
ser armazenada ou transmitida. Um bit pode assumir somente 2 valores, por exemplo: 0 ou 1, verdadeiro ou
falso.
17
Em eletrnica, a regra do divisor de tenso, ou simplesmente o divisor de tenso, uma tcnica de projeto
utilizada para criar uma tenso eltrica (Vout) que seja proporcional outra tenso (Vin).
61

5.1.3 Equao de Tenso de Sada do Circuito

Para este circuito divisor de tenso determina-se a equao para o sinal de sada
injetado ao microcontrolador da seguinte maneira:
Sendo:

K
:
D1 u DJ&
KD1
:
D1

K KD1
D1 u DJ& D1

K KD1
D1 u DJ& D1

K D1
KD1
D1 u DJ&

Como a Tenso de Sada KF VR1, temos:

K D1
KF
D1 u DJ&

Como KF do circuito igual K24 da entrada analgica do microcontrolador, pode-


se adaptar a equao e inseri-la ao cdigo do programa para determinar corretamente o valor
da resistncia do NTC. Este valor de resistncia ser utilizado na equao seguinte, equao
de Steinhart-Hart:

Vout Divisor Vin PIC

K u D1
DJ& y z ' D1
K24 ;:
62

5.1.3.1 Equao de Steinhart & Hart

Analisando o grfico da curva resistiva caracterstica deste Termistor NTC 10K


abaixo, observa-se que a resposta do sensor variao da temperatura medida no linear,
desta forma, a interpretao do sinal de entrada injetado ao microcontrolador precisar ser
tratada atravs de uma equao que torne precisa qualquer temperatura medida.

100
90
80
Temperatura (C)

70
60
50
40
30 temp (C)
20
10
0

Resistncia ()

Figura 5.8 Grfico temperatura x resistncia do NTC 10k

A relao entre resistncia e temperatura no NTC dada pela equao de Steinhart & Hart:

1
&
u ln DJ& u ln A DJ&

Para utiliz-la, selecionam-se as constantes a, b e c definidas no manual do fabricante


do Termistor NTC ou atravs de medies realizadas em ensaio quando estas informaes no
estiverem disponveis.

As constantes para o sensor utilizado no projeto so:

a = 0,0011303
b = 0,0002339
c = 0,00000008863
63

Basta agora aplicar estes valores a formula inserida no programa do microcontrolador


para determinar a correta leitura de temperatura em tempo real.

5.2 Vlvula de gua gelada

Outro componente fundamental para este sistema a vlvula de controle da vazo de


gua gelada. Esta vlvula recebe a informao tratada do microcontrolador e ajusta a vazo de
gua gelada por seu mecanismo, o que afeta todo o sistema de refrigerao da planta
controlada. Existem no mercado diversas formas construtivas de vlvulas, a saber:

5.2.1 Vlvula borboleta

A vlvula tem esse nome devido forma construtiva de seu elemento mvel
responsvel pelo controle da vazo em forma de duas palhetas unidas ao eixo, e que ficou
conhecida por se assemelhar s asas de uma borboleta, conforme podemos observar na figura
abaixo.

Figura 5.9 - Vlvula Borboleta


Fonte: Intervlvulas, 2012

O controle da vazo conseguido variando-se o ngulo do eixo do elemento mvel


entre 0 (vazo = 0) e 90 (vazo mxima). Este tipo de vlvula muito utilizado em sistemas
robustos que possuem tubulao de dimetro maior que cinco polegadas. Isso porque, quanto
maior o dimetro da tubulao, menor o espao proporcional ocupado pelo elemento mvel e
menor a perda de carga da vlvula. Em tubulaes pequenas, o espao proporcional utilizado
pelo elemento mvel torna seu uso invivel.
64

5.2.2 Vlvula Globo

A vlvula globo muito utilizada para controle de vazo de gua gelada em sistemas
de climatizao devido linearidade de fluxo que proporcional seu elemento mvel.

Figura 5.10 - Vlvula Globo


Fonte: Belimo, 2012a

Diferentemente da vlvula borboleta, o eixo da vlvula globo no rotacionado, mas


sim deslocado transversalmente dentro do corpo da vlvula para controlar a vazo de gua.
Este mecanismo demonstrado na figura 5.11.

Figura 5.11 - Aspecto construtivo da vlvula Globo


Fonte: Belimo, 2012a

A maior desvantagem da vlvula globo a perda de carga que ela representa ao


sistema, tanto em dimenses pequenas quanto em grandes vlvulas deste tipo.
65

5.2.3 Vlvula esfera

A vlvula esfera , assim como a vlvula globo, largamente utilizada em sistemas de


ar condicionado, porm possui caractersticas mecnicas muito diferentes. Internamente
possui uma esfera metlica conectada ao eixo. Esta esfera por sua vez possui um furo de
mesmo dimetro e orientao da tubulao qual vai conectada. Ao movimentar-se o eixo, o
canal rotaciona internamente modificando sua orientao com relao tubulao at ficar
perpendicular, estrangulando assim a passagem da gua e controlando sua vazo.

Figura 5.12 - Vlvula esfera


Fonte: Belimo, 2012b

Assim, como a vlvula borboleta, no existe linearidade no controle da vazo em


consonncia com a movimentao do eixo, isso significa que assim que a vlvula comea a
ser aberta, a vazo j aumenta expressivamente, podendo alcanar 80% de vazo com apenas
15% de abertura. Para solucionar este problema, fabricantes, como a Belimo, desenvolveram
dispositivos para corrigir e linearizar a vo de suas vlvulas. A Belimo chama este disposto de
disco caracterizador de fluxo. Este disco faz com o percentual de vazo acompanhe o
percentual de abertura da vlvula. O fator negativo deste disco caracterizador que ele
representa um acrscimo considervel de perda de carga vlvula, o que deve ser considerado
no clculo do sistema. Na figura abaixo est uma vlvula esfera do fabricante Belimo em
corte com detalhe para o disco caracterizador de fluxo.
66

Figura 5.13 - Vlvula esfera em corte, detalhe para o disco caracterizador de fluxo.
Fonte: Mercato, 2012

5.3 Atuador proporcional para vlvula de gua gelada

Para que a vlvula controle a vazo de gua gelada preciso utilizar um transdutor18
que receba o sinal eltrico de controle proveniente do microcontrolador e o converta em
movimento mecnico e proporcional do eixo da vlvula controlada. Este transdutor
chamado de atuador da vlvula e deve ser especificado para atender aos seguintes critrios do
sistema:

- Sinal eltrico de controle;


- Tipo do movimento do eixo;
- Torque do eixo da vlvula.

18
Transdutor um dispositivo que transforma um tipo de energia em outro, utilizando para isso um elemento
sensor.
67

5.3.1 Sinal eltrico de controle

O atuador da vlvula deve ser capaz de interpretar de maneira correta o sinal de


controle proveniente do controlador. De maneira geral este sinal padronizado e obedece aos
seguintes parmetros:

-Sinal de corrente de 4 a 20 mA;


-Sinal de tenso de 0 a 10 V;
-Sinal de tenso de 2 10V;
-Sinal pulsante PWM19;

A resposta do movimento ainda pode ser diretamente ou inversamente proporcional ao


sinal recebido. Quer dizer, se o movimento for diretamente proporcional, um sinal recebido de
4ma, por exemplo, deixar a vlvula fechada, enquanto um sinal de 20mA deixar a vlvula
totalmente aberta. J no movimento inversamente proporcional, o sinal de 4mA deixar a
vlvula totalmente aberta, enquanto o sinal de 20mA deixar a vlvula totalmente fechada.

5.3.2 Tipo do movimento do eixo

O atuador tambm deve ser especificado quanto ao tipo de movimento do eixo, se


angular ou linear vertical.

5.3.3 Torque do eixo da vlvula

Outro parmetro do atuador a ser considerado em sua especificao capacidade de


torque para movimentao do eixo da vlvula sem prejudicar seu prprio mecanismo de
engrenagens durante a operao do sistema. A presso da gua utilizada pelo sistema um
dos maiores determinantes para especificao deste torque.

19
PWM (Pulse-Width Modulation) ou modulao por largura de pulso - de um sinal envolve a modulao de
sua razo cclica (duty cycle) para transportar qualquer informao sobre um canal de comunicao ou controlar
o valor da alimentao entregue a carga.
68

Figura 5.14 - Exemplos de atuadores j acoplados em vlvulas.


Fonte: Belimo, 2012.

5.4 Montagem da vlvula para o projeto

Para a montagem deste projeto, um dos objetivos foi utilizar componentes de baixo
custo e um conjunto vlvula-atuador comercial representaria uma parcela muito alta no custo
total do projeto. Em um sistema industrial, deve-se considerar a utilizao de componentes
disponveis no mercado e que possuam alta confiabilidade, j que no desejvel que o
sistema deixe de funcionar por falha de um de seus componentes, o que prejudicaria todo o
processo produtivo. Nestes sistemas, o custo do conjunto vlvula-atuador presenta uma
pequena parcela no custo total do projeto.

Contudo, foi montado um conjunto vlvula-atuador para ser instalado neste prottipo
a partir de componentes de fcil aquisio e que possuem caractersticas equivalentes aos
componentes de um conjunto vlvula-atuador comercial, dadas as dimenses deste projeto.

5.4.1 Vlvula utilizada no projeto

Foi escolhida para utilizao neste projeto uma vlvula esfera passagem plena, de
volta de curso do eixo, montada em corpo de bronze forjado niquelado bipartido, dimetro do
furo de utilizada em tubulaes de gua e com acionamento manual por alavanca. A figura
abaixo ilustra a vlvula esfera escolhida.
69

Figura 5.15 - Vlvula esfera utilizada no projeto.


Fonte: Acrel, 2012.

A figura a seguir apresenta uma vlvula em corte onde possvel verificar todos os
seus componentes internos.

Figura 5.16 - Vlvula esfera em corte com detalhes construtivos similares utilizada no projeto.
Fonte: Wikimedia, 2009.

Para corrigir o problema da linearidade da vazo deste tipo de vlvula, foi criado um
disco caracterizador em filme PVC20 baseado no disco utilizado pela empresa Belimo e
instalado no interior da vlvula. A alavanca de acionamento foi retirada para dar lugar
adaptao no novo atuador.

20
O policloreto de polivinila (tambm conhecido como cloreto de vinila ou policloreto de vinil; nome IUPAC
policloroeteno) mais conhecido pelo acrnimo PVC (da sua designao em ingls Polyvinyl chloride)
um plstico no 100% originrio do petrleo.
70

Figura 5.17 - Detalhe do disco caracterizador de fluxo instalado no interior da vlvula.


Fonte: Autoria prpria.

5.4.2 Servomotor utilizado no projeto

O desafio foi adaptar uma vlvula com acionamento manual para ser comandada por
um atuador eletromecnico. Foi escolhido para esta funo um servomotor21 utilizado para
controle do receptor de sinal em antenas parablicas. As principais caractersticas que
definiram este servomotor como a melhor opo foram seu elevado torque que chega a
3kg/cm, preciso no posicionamento e facilidade de controle com a utilizao de sinal PWM.
Alm de sua alimentao ser de 5Vcc e consumir apenas 200mA (corrente mxima).

Figura 5.18 - Servomotor utilizado no projeto.


Fonte: Motorsat, 2012.

21
Servomotor uma mquina, mecnica ou eletromecnica, que apresenta movimento proporcional a um
comando, em vez de girar ou se mover livremente sem um controle mais efetivo de posio como a maioria dos
motores; servomotores so dispositivos de malha fechada, ou seja: recebem um sinal de controle; verificam a
posio atual; atuam no sistema indo para a posio desejada.
71

Foram realizadas modificaes no acoplamento do servomotor para receber o eixo da


vlvula esfera. Um suporte tambm foi construdo para fixar os dois componentes criando um
conjunto nico.

Figura 5.19 - Conjunto vlvula-atuador adaptado.

5.4.2.1 Sinal PWM para controle do servo motor

Este servomotor possui trs fios, sendo um para a alimentao de 5 Vcc, outro para
receber o sinal de controle e o terceiro comum para alimentao e controle.

O controle obtido atravs de um sinal PWM (Pulse Width Modulation ou Modulao


por largura de pulsos) gerado pelo microcontrolador e enviado ao servomotor que, por sua
vez, possui internamente um controlador dedicado que decodifica este sinal recebido em
posio angular do eixo. O sinal PWM possui as seguintes caractersticas:

Figura 5.20 - Sinal de controle PWM (Modulao por largura de pulso).


72

O microcontrolador gera um sinal de onda quadrada com frequncia de 50hz padro e


utilizada por diversos fabricantes de servomotores deste porte. Esta frequncia no se altera
durante todo o processo, o que alterado a largura do pulso, ou seja, o perodo em que o
sinal gerado permanece em nvel lgico 1 (ou +Vcc) conhecido pelo termo ingls duty. Este
servomotor pode ser controlado de 0 a 180 variando-se a largura do duty entre 0,5ms e
2,5ms conforme as figuras a seguir.

Figura 5.21 - Sinal de controle PWM Duty = 0,5ms-Servomotor posicionado em 0.

Figura 5.22 - Sinal de controle PWM Duty = 2,5ms-Servomotor posicionado em 180.

Depois de acoplada ao eixo do servomotor, para que a vlvula seja controlada entre
totalmente aberta e totalmente fechada, o servomotor dever ser comandado entre 0 e 90,
necessitando que o duty do sinal PWM enviado pelo microcontrolador varie entre 0,5ms e
1,5ms apenas. Este processo ser detalhado diante no trabalho.

5.5 Microcontrolador

Para entender o funcionamento de um microcontrolador podemos fazer uma analogia


a um computador, pois ele possui uma CPU (unidade central de processamento),
memria RAM (memria de acesso aleatrio), entradas e sadas (em um PC temos
teclado, mouse, monitor, etc.). O diferencial de um microcontrolador em relao a um
computador que o microcontrolador um dispositivo que possui um propsito
especfico, ou seja, processa um nico programa, que fica armazenado na memria
73

ROM (memria apenas para leitura), ou memria de programa. Alm disso, um


microcontrolador pode se comunicar com outros equipamentos por meio de
comunicao serial, paralela e atualmente tambm por USB ou Ethernet (DIAS e
JAREK, 2011).

A diferena fundamental entre um microcontrolador e um microprocessador que o


microcontrolador traz embutido, em um nico chip, perifricos como conversores A/D,
temporizadores, contadores, memrias EEPROM22 e RAM23, etc. Um microprocessador,
apesar da sua grande capacidade de processamento, no possui tais perifricos internos e
necessita que estes sejam integradas atravs de outros circuitos externos.

Para construo do projeto utilizando-se um microcomputador, seriam utilizados os


recursos do microprocessador, memrias ROM24 e RAM, uma porta paralela para dar sada
aos acionamentos, de outra para receber sinais dos sensores, de uma porta serial para fazer as
configuraes e rodar os resultados, de conversores A/D para ler os sensores de temperatura,
de temporizadores para as rotinas, etc. Atravs desta lista, seria criado um circuito com o
diagrama de blocos abaixo.

Figura 5.23 - Diagrama de blocos de um circuito com microprocessador.

22
Uma EPROM (sigla do ingls "erasable programmable read-only memory", significando "memria
programvel apagvel somente de leitura") um tipo de chip de memria que mantm seus dados quando a
energia desligada. Em outras palavras, no voltil.
23
Memria de acesso aleatrio (do ingls Random Access Memory, frequentemente abreviado para RAM) um
tipo de memria que permite a leitura e a escrita, utilizada como memria primria em sistemas eletrnicos
digitais e que perde seus dados quando desligada. uma memria voltil.
24
A memria somente de leitura (acrnimo ROM (em ingls)) um tipo de memria que permite apenas a
leitura, ou seja, as suas informaes so gravadas pelo fabricante uma nica vez e aps isso no podem ser
alteradas ou apagadas, somente acessadas. So memrias cujo contedo gravado permanentemente.
74

Neste projeto, se dedicado o microcomputador apenas para esta aplicao, seria


subutilizada a capacidade do equipamento e o custo do projeto seria elevado, alm de estar
fora dos padres utilizados na indstria para esta tarefa.

Define-se assim, como melhor alternativa para o desenvolvimento deste projeto, a


utilizao de um microcontrolador que integra todos os perifricos necessrios ao sistema em
um nico circuito integrado, restando apenas a construo de drives de interface eletrnica
entre os nveis de tenso do microcontrolador e os demais componentes do projeto.

Apesar de inferior ao microcontrolador, o processamento de um microcontrolador


suficiente para atender s necessidades deste projeto.

5.5.1 Definio do Microcontrolador

O microcontrolador selecionado para utilizao neste projeto fabricado pela


Microchip e pertence Famlia PIC25 18. Os microcontroladores desta famlia possuem
processamento de 10 a 16 MIPS (milhes de instrues por segundo). Possuem at 128KB de
memria de programa e uma faixa de 18 a 100 pinos. Possuem 16 bits de palavra de programa
e um conjunto de perifricos tais como: Entradas e sadas digitais, PWM, USART (Universal
Synchronous Receiver Trasmitter), entradas analgicas, MSSP (Master Synchronous Serial
Port), dentre outros. A famlia PIC 18 tambm permite a implementao em firmware26 de
tecnologias como USB, ZigBee27, Ethernet e CAN e/ou utilizao, em conjunto, de um
microcontrolador PIC 18 com chips externos que implementam essas tecnologias.

Para a utilizao neste projeto foi selecionado o microcontrolador PIC 18f67J60 por
apresentar o diferencial da interface Ethernet integrada a seu chip, no necessitando de outros
conversores para isso. Este microcontrolador ser detalhado a seguir.

25
PIC uma famlia de microcontroladores fabricados pela Microchip Technology, que processam dados de
8 bits, de 16 bits e, mais recentemente, de 32 bits. Seu nome oriundo de "Programmable Interface Controller"
(Controlador de Interface Programvel).
26
firmware o conjunto de instrues operacionais programadas diretamente no hardware de um equipamento
eletrnico.
27
O termo ZigBee designa um conjunto de especificaes para a comunicao sem-fio entre dispositivos
eletrnicos, com nfase na baixa potncia de operao, na baixa taxa de transmisso de dados e no baixo custo
de implantao.
75

5.5.2 Caractersticas PIC 18F67J60

O microcontrolador PIC 18F67J60 possui 64 pinos e montado em encapsulamento


SMD28 TQFP29. Suas principais caractersticas so:

Memria de programa Flash com 128K Bytes;


Memria SRAM de 3808;
Multiplicao por hardware;
Processamento a 10.5 MIPS;
Mais de 26 fontes de interrupo;
Oscilador RC Interno;
Interrupes com prioridade;
4 pinos de interrupo externa;
USART30;
11 canais de Conversor A/D (Analgico/Digital);
5 Temporizadores;
39 pinos para E/S Digital;
Ethernet 10 Base T integrada;
Compatvel com protocolo Ethernet IEEE 802.3;
Totalmente compatvel com Redes 10/100/1000Base-T;
Alimentao em 3,3Vcc;
Tolerncia de alguns pinos de entrada a 5,5Vcc.

Figura 5.24 - PIC 18F67J60: Encapsulamento SMD TQFP 64 pinos.


Fonte: Ictradenet, 2009.

28
SMD (surface-mount device, ou dispositivo de montagem em superfcie em portugus)- uma tecnologia para
construo de componentes eletrnicos em dimenses reduzidas.
29
(TQFP) Thin Quad Flat Pack um tipo encapsulamento SMD utilizado por diversos circuitos integrados
caracterizado por possuir seus terminais em formato de asa de gaivota e nos quatro lados do corpo do
componente.
30
USART se refere a Universal Synchronous Asynchronous Receiver Transmitter, significando Transmissor/
Receptor Universal Sncrono e Assncrono. um formato padro para comunicao de dados de forma serial.
76

Esse microcontrolador possui tambm alguns recursos especiais relacionados CPU


(Unidade Central de Processamento). So eles:

5.5.2.1 Power-on Reset (POR)

Faz com que o microcontrolador ao ser ligado seja mantido em estado de reset31, at
que a tenso VDD (tenso de alimentao do circuito) atinja um nvel mnimo aceitvel para
operao;

5.5.2.2 Brown-out Detect (BOD)

Faz com que o microcontrolador seja resetado, se a tenso de alimentao VDD cair
abaixo de um determinado nvel que pode ser configurado via programa;

5.5.2.3 Power-up Timer (PWRT)

Causa um delay de aproximadamente 65.6 ms, que mantm o microcontrolador em


estado de reset aps o mesmo ser ligado ou ter ocorrido um reset causado por um evento
de Brown-Out. Pode ser habilitado ou desabilitado por programa;

5.5.2.4 Oscilator Start-up Timer (OST)

Gera um delay de 1024 ciclos do oscilador logo aps o trmino do delay do


PWRT, a fim de assegurar que o oscilador tenha sido inicializado corretamente e esteja
estvel, antes do microcontrolador sair do estado de reset;

5.5.2.5 Watchdog timer (WDT)

um recurso que pode ser muito til para garantir restries de tempo e prevenir o
travamento do microcontrolador na execuo de determinada tarefa. Consiste em um timer
progressivo que resetar o microcontrolador, cada vez que estourar seu limite mximo.
Logo, em uma operao normal, o microcontrolador deve zerar esse timer periodicamente,

31
Reset comando utilizado para reinicializar um sistema eletrnico, fazendo com que seu programa ou
processo volte ao ponto inicial, como no momento de energizao do equipamento.
77

para no ocorrer o estouro. Se o watchdog no for zerado, significa que o microcontrolador


travou e o sistema dever ser resetado para poder entrar em funcionamento novamente;

5.5.3 Arquitetura do PIC 18F67J60

Como pode ser observado na figura 5.25 (MICROCHIP, 2011a), este


microcontrolador utiliza arquitetura Harvard, j que possui dois barramentos, um para dados e
outro para programa.

Figura 5.25 - Arquitetura do microcontrolador PIC 18F67J60.


Fonte: Microchip, 2011a.
78

Alm disso, como o barramento entre a CPU e a memria de dados de 8 bits, o que
o define como microcontrolador de 8 bits. Esse microcontrolador utiliza arquitetura RISC
(Reduced Instruction Set Computer), ou seja, possui um conjunto simples e pequeno de
instrues, que levam aproximadamente a mesma quantidade de tempo para serem
executadas.

5.5.4 Pinagem do PIC 18F67J60

O microcontrolador PIC 18F67J60 possui 39 pinos de Entrada/Sada. Se um pino de


Entrada/Sada (E/S em portugus ou I/O em ingls: In/Out) significa que ele pode ser
configurado e utilizado tanto para entrada como para sada de dados. Os pinos de
Entrada/Sada so divididos em 7 grupos denominados PORTs (portas). Estes PORTs so
chamados de PORTA, PORTB, PORTC, PORTD, PORTE, PORTF e PORTG. A disposio
destes pinos pode ser vista na figura abaixo.

Figura 5.26 - Diagrama de terminais do microcontrolador PIC 18F67J60.


Fonte: Microchip, 2011a.
79

Em geral, nos microcontroladores PIC, um mesmo pino pode alm de ter a funo de
Entrada/Sada, assumir outras funes avanadas como, por exemplo, um canal A/D ou uma
entrada de interrupo. Estas funes extras, quando configuradas, fazem com os pinos em
questo deixem a funo bsica de Entrada/Sada e passem a operar exclusivamente nesta
funo avanada.

Outras funes especiais possuem pinos dedicados que no podem ser configurados
para operar como Entrada/Sada, como por exemplo os pinos de comunicao Ethernet.

5.5.5 Ciclos de mquina

Ciclo de mquina o tempo necessrio para que o microcontrolador possa executar


uma nica instruo. Para que esse microcontrolador possa executar um ciclo de mquina, so
necessrios 4 pulsos de clock da fonte de oscilao do sistema, j que internamente o
microcontrolador possui um pipeline32 de 4 estgios.

Normalmente o clock interno equivalente ao clock externo dividido por 4, devido ao


pipeline utilizado. Entretanto, este microcontrolador possui um multiplicador para a
frequncia do cristal oscilador externo. Utilizando um cristal oscilador de at 25MHz e as
configuraes de multiplicao e diviso do clock externo pode-se fazer com que o
microcontrolador PIC 18F67J60 opere com clock de 41,67MHz.

Com isso o clock interno ser:

41,679./4 10,419./

Mais importante que a frequncia e o perodo em que cada instruo ser realizada,
neste caso:

32
Pipeline uma tcnica de hardware que permite que a CPU realize a busca de uma ou mais instrues alm da
prxima a ser executada. Estas instrues so colocadas em uma fila de memria dentro do processador (CPU)
onde aguardam o momento de serem executadas, s poder comear quando a outra instruo acabar s assim da
sequncia ao procedimento. Em resumo, o processo pelo qual uma instruo de processamento subdivida em
etapas, uma vez que cada uma destas etapas executada por uma poro especializada da CPU, podendo colocar
mais de uma instruo em execuo simultnea. Isto traz um uso mais racional da capacidade computacional
com ganho substancial de velocidade.
80

110,419./ 964<

Ento o ciclo de mquina, para esta configurao ser de 96nS (nano segundos): mais
de 10MIPS, bem mais que o suficiente para esta aplicao.

Este projeto utiliza um cristal oscilador externo de 25MHz montado conforme


especificaes do fabricante Microchip.

Figura 5.27 - Circuito do oscilador externo.


Fonte: Microchip, 2011a.

5.5.6 Entradas/Sadas digitais

Como visto, o PIC 18F67J60 possui 39 pinos de Entrada/Sada distribudos em 7


grupos chamados PORTs. Todas elas podem ser configuras como Entradas/Sadas digitais,
quer dizer, podem assumir nvel lgico 1 (+3,3Vcc) ou nvel lgico 0 (0Vcc ou GND). Cada
PORT possui 3 registradores associados a sua operao.

5.5.6.1 Registrador TRIS

O registrador TRIS responsvel por definir o sentido de fluxo dos dados. Se


configurado em 0, o pino correspondente funcionar como uma sada. Se configurado como 1,
o pino correspondente funcionar como entrada;
81

5.5.6.2 Registrador PORT

O registrador PORT utilizado para leitura do nvel lgico do pino correspondente;

5.5.6.3 Registrador LAT

Utilizado em operaes de leitura modificao escrita nos valores dos pinos


correspondentes.

Devemos configurar corretamente cada um dos pinos utilizados no projeto de acordo


com sua funo de Entrada ou Sada de sinal.

5.5.7 Temporizadores

Existem no microcontrolador PIC 18F67J60 cinco mdulos temporizadores, definidos


pela Microchip como Timer0, Timer1, Timer2, Timer3 e Timer4. Neste projeto so utilizados
trs deles: Timer0, Timer1 e Timer3. Estes temporizadores sero detalhados a seguir, os
demais possuem caractersticas semelhantes que podem ser consultadas no datasheet33
disponvel no site da Microchip.

5.5.7.1 Timer0

O timer0 (zero) um mdulo utilizado para criar temporizaes e contagens no


microcontrolador. Sua operao definida via programao e pode ser configurado como
contador ou temporizador de 8 ou 16 bits. Sua operao tambm pode ser definida para operar
a partir de uma fonte de clock interna ou externa.

O registrador que configura o Timer0 o T0CON. Este um registrador de 8 bits e


cada um de seus bits configura um determinado parmetro do Timer0 conforme vemos a
seguir:

33
Datasheet (significa folha de dados) um documento distribudo pelo fabricante que apresenta de forma
resumida, todos os dados e caractersticas tcnicas de um equipamento ou produto.
82

Tabela 5.1 - Configurao Timer0.


BIT FUNO CONFIGURAO
Bit 7 TMR0ON: 1 = Timer0 habilitado
Habilita o Timer0 0 = Timer0 desabilitado
Bit 6 T08BIT: 1 = Timer0 configurado para operar em 8-bits
Timer0 8-Bit/16-Bit 0 = Timer0 configurado para operar em 16-bits
Bit 5 T0CS: 1 = Transio do pino T0CKI
Fonte de clock do Timer0 0 = Clock Interno (CLKO)
Bit 4 T0SE: 1 = Incrementa na transio de alto para baixo no
Seleo de borda do pino T0CKI
clock externo 0 = Incrementa na transio de baixo para alto no
pino T0CKI
Bit 3 PSA: 1 = Prescaler desabilitado
Habilita Prescaler 0 = Prescaler habilitado
Bits 2-0 T0PS<2:0>: 111 = 1:256 Valor do prescaler
Bits de seleo do valor 110 = 1:128 Valor do prescaler
do prescaler 101 = 1:64 Valor do prescaler
100 = 1:32 Valor do prescaler
011 = 1:16 Valor do prescaler
010 = 1:8 Valor do prescaler
001 = 1:4 Valor do prescaler
000 = 1:2 Valor do prescaler
Fonte: Microchip, 2011a.

Figura 5.28 - Diagrama de blocos do Timer0 operando em 8 bits.


Fonte: Microchip, 2011a.
83

Figura 5.29 - Diagrama de blocos do Timer0 operando em 16 bits.


Fonte: Microchip, 2011a.

5.5.7.2 Timer1

O timer1 se assemelha bastante ao Timer0 nos resultados que proporciona como


temporizador ou contador, porm a estrutura interna de cada um dos dois temporizadores foi
construda de formas diferentes. Sua configurao tambm deve ser realizada via
programao, e o registrador responsvel pelo Timer1 o T1CON. Cada um de seus bits
descrito abaixo.
Tabela 5.2 - Configurao Timer1.
BIT FUNO CONFIGURAO
Bit 7 RD16: 1 = Timer1 configurado para operar em 16-bits
Habilita modo 16-Bits 0 = Timer1 configurado para operar em 8-bits
Bit 6 T1RUN: 1 = Clock a partir do oscilador externo Timer1
Fonte de clock do Timer1 0 = Clock a partir de outra fonte
Bits 5-4 T1CKPS<1:0>: 11 = 1:8 Valor do prescaler
Bits de seleo do valor 10 = 1:4 Valor do prescaler
do prescaler 01 = 1:2 Valor do prescaler
00 = 1:1 Valor do prescaler
Bit 3 T1OSCEN: 1 = Oscilador Timer1 habilitado
Habilita o oscilador 0 = Oscilador Timer1 desabilitado
externo Timer1
Bit 2 T1SYNC: Quando TMR1CS = 1:
Habilita sincronismo do 1 = No sincroniza clock externo
84

clock externo 0 = Sincroniza clock externo


Quando TMR1CS = 0:
Este bit ignorado quando TMR1CS = 0.
Bit 1 TMR1CS: 1 = Clock externo a partir do pino
Fonte de clock do Timer1 RC0/T1OSO/T13CKI
0 = Clock interno (FOSC/4)
Bit 0 TMR1ON: 1 = Timer1 habilitado
Habilita o Timer1 0 = Timer1 desabilitado
Fonte: Microchip, 2011a.

Figura 5.30 - Diagrama de blocos do Timer1 operando em 8 bits.


Fonte: Microchip, 2011a.

Figura 5.31 - Diagrama de blocos do Timer1 operando em 16 bits.


Fonte: Microchip, 2011a.
85

5.5.7.3 Timer3

O timer3 utiliza estrutura interna idntica ao Timer1 no modo 8 bits. No modo 16 bits
acrescentado apenas integrao com o mdulo ECCP que no ser utilizado neste projeto. O
registrador utilizado para configurao do Timer3 o T3CON. Da mesma forma como os
outros temporizadores, apresentamos a configurao de cada um dos bits do registrador
T3CON.

Tabela 5.3 - Configurao Timer3.


BIT FUNO CONFIGURAO
Bit 7 RD16: 1 = Timer1 configurado para operar em 16-bits
Habilita modo 16-Bits 0 = Timer1 configurado para operar em 8-bits
Bits 6,3 T3CCP<2:1>: 11 = Timer3 e Timer4 so fonte de clock para todos
Seleciona temporizadores os mdulos CCPx/ECCPx
para operar os mdulos 10 = Timer3 e Timer4 so fonte de clock para os
CCPx/ECCPx mdulos ECCP3, CCP4 eCCP5;Timer1 e Timer2
so fontes de clock para os mdulos ECCP1 e
ECCP2
01 = Timer3 e Timer4 so fonte de clock para os
mdulos ECCP2, ECCP3, CCP4 eCCP5; Timer1 e
Timer2 so fontes de clock para o mdulo ECCP1.
00 = Timer1 e Timer2 so fonte de clock para todos
os mdulos CCPx/ECCPx
Bits 5-4 T3CKPS<1:0>: 11 = 1:8 Valor do prescaler
Bits de seleo do valor 10 = 1:4 Valor do prescaler
do prescaler 01 = 1:2 Valor do prescaler
00 = 1:1 Valor do prescaler
Bit 2 T3SYNC: Quando TMR3CS = 1:
Habilita sincronismo do 1 = No sincroniza clock externo
clock externo 0 = Sincroniza clock externo
Quando TMR3CS = 0:
Este bit ignorado quando TMR3CS = 0.
Bit 1 TMR3CS: 1 = Clock externo a partir do pino
86

Fonte de clock do Timer1 RC0/T1OSO/T13CKI


0 = Clock interno (FOSC/4)
Bit 0 TMR3ON: 1 = Timer3 habilitado
Habilita o Timer3 0 = Timer3 desabilitado
Fonte: Microchip, 2011a.

Figura 5.32 - Diagrama de blocos do Timer3 operando em 8 bits.


Fonte: Microchip, 2011a.

Figura 5.33 - Diagrama de blocos do Timer3 operando em 16 bits.


Fonte: Microchip, 2011a.

A configurao dos temporizadores Time0, timer1 e Timer3 utilizados neste projeto


ser tratada no capitulo onde abordado o software do microcontrolador.
87

5.5.8 Conversor analgico/digital

Dos 39 pinos de Entrada/Sada que microcontrolador PIC 18F67J60 disponibiliza, 11


deles podem ser configurados para trabalhar como entrada analgica. Quando configurados,
estes pinos so conectados internamente ao mdulo conversor analgico/digital do
microcontrolador. Este mdulo permite a converso de um sinal analgico presente em cada
uma destas entradas em um sinal digital de 10 bits. O mesmo mdulo controla todas as 11
entradas que devem ser selecionadas antes da leitura. Para leitura de outra entrada analgica,
deve-se modificar novamente a entrada selecionada atravs de seus registradores. O diagrama
de blocos do mdulo conversor analgico/digital apresentado abaixo:

Figura 5.34 - Diagrama de blocos do conversor analgico/digital.


Fonte: Microchip, 2011a.
88

Os registadores utilizados para configurao do mdulo conversor analgico/digital


so:
ADRESH;
ADRESL;
ADCON0;
ADCON1;
ADCON2;

Os registradores ADRESH e ADRESL so responsveis por manter o resultado da


converso. Cada um deles possui 8 bits e, como o conversor A/D possui 10 bits, o registrador
ADRESL armazena os bits menos significativos e o registrador ADRESH armazena os bits
mais significativos. Podemos ainda definir que o registrador ADRESH armazene os 8 bits
mais significativos e o registrador ADRESL os 2 bits menos significativos justificando o
resultado esquerda, ou inda, que o registrador ADRESH armazene somente os 2 bits mais
significativos e o registrador ADRESL armazene os 8 bits menos significativos justificando o
resultado direita.

Os demais registradores, responsveis pela configurao do conversor A/D, so


descritos bit a bit abaixo:

5.5.8.1 Configurao do registrador ADCON0

Tabela 5.4 - Configurao ADCON0.


BIT FUNO CONFIGURAO
Bit 7 ADCAL: 1 = Calibrao executada na prxima converso A/D
Calibrao A/D 0 = Sem calibrao Operao normal
Bits 6 No utilizado. Manter em zero
Bits 5-2 CHS<3:0>: 0000 = Canal 0 (AN0)
Seleo de canal 0001 = Canal 1 (AN1)
analgico 0010 = Canal 2 (AN2)
0011 = Canal 3 (AN3)
0100 = Canal 4 (AN4)
0110 = Canal 6 (AN6)
89

0111 = Canal 7 (AN7)


1000 = Canal 8 (AN8)
1001 = Canal 9 (AN9)
1010 = Canal 10 (AN10)
1011 = Canal 11 (AN11)
Bit 1 GO/DONE: Quando ADON = 1:
Status do conversor A/D 1 = Converso A/D em andamento
0 = Converso A/D concluda
Bit 0 ADON: 1 = Mdulo conversor A/D habilitado
Habilita conversor A/D 0 = Mdulo conversor A/D desabilitado
Fonte: Microchip, 2011a.

5.5.8.2 Configurao do registrador ADCON1

Tabela 5.5 - Configurao ADCON1.


BIT FUNO CONFIGURAO
Bits 7-6 No utilizado. Manter em zero
Bits 5 VCFG1: 1 = VREF- (AN2)
Configurao de tenso 0 = AVSS
de referncia (VREF-)
Bit 4 VCFG0: 1 = VREF+ (AN3)
Configurao de tenso 0 = AVDD
de referncia (VREF+)
Bits 3-0 PCFG<3:0>: Configurao na tabela Configurao das portas do
Configurao das portas conversor A/D abaixo
do conversor A/D
Fonte: Microchip, 2011a.

5.5.8.3 Configurao de PCFG<3:0>

Tabela 5.6 - Configurao das portas do conversor A/D.

PCFG<3:0> AN11 AN10 AN9 AN8 AN7 AN6 AN4 AN3 AN2 AN1 AN0
0000 A A A A A A A A A A A
0001 A A A A A A A A A A A
90

0010 A A A A A A A A A A A
0011 A A A A A A A A A A A
0100 D A A A A A A A A A A
0101 D D A A A A A A A A A
0110 D D D A A A A A A A A
0111 D D D D A A A A A A A
1000 D D D D D A A A A A A
1001 D D D D D D A A A A A
1010 D D D D D D A A A A A
1011 D D D D D D D A A A A
1100 D D D D D D D D A A A
1101 D D D D D D D D D A A
1110 D D D D D D D D D D A
1111 D D D D D D D D D D D
Fonte: Microchip, 2011a.

5.5.8.4 Configurao do registrador ADCON2

Tabela 5.7 - Configurao ADCON2.


BIT FUNO CONFIGURAO
Bit 7 ADFM: 1 = Justificado direita
Formato do resultado da 0 = Justificado esquerda
converso A/D
Bits 6 No utilizado. Manter em zero
Bits 5-3 ACQT<2:0>: 111 = 20 TAD
Seleo do tempo de 110 = 16 TAD
aquisio 101 = 12 TAD
100 = 8 TAD
011 = 6 TAD
010 = 4 TAD
001 = 2 TAD
000 = 0 TAD
Bits 2-0 ADCS<2:0>: 111 = FRC (clock derivado do oscilador RC A/D)
91

Seleo do clock do 110 = FOSC/64


conversor A/D 101 = FOSC/16
100 = FOSC/4
011 = FRC (clock derivado do oscilador RC A/D)
010 = FOSC/32
001 = FOSC/8
000 = FOSC/2
Fonte: Microchip, 2011 a.

Para realizar uma converso A/D, em primeiro lugar deve-se selecionar o canal
desejado atravs do registrador ADCON0. Depois setar o bit GO/DONE em nvel lgico 1.
Em seguida aguardar que o bit GO/DONE retorne ao nvel lgico 0, o que indica que a
converso j foi concluda e os registradores ADRESL e ADRSH j possuem o resultado da
ltima converso.

Observa-se que o mdulo conversor A/D do microcontrolador PIC 18F67J60 no


possui o canal AN5. Este est presente somente nos outros microcontroladores da famlia que
possuem 80 pinos (18F8xJ60) e 100 pinos (18F9xJ60).

5.6 Mdulo controlador Ethernet

O microcontrolador PIC 18F67J60 ainda possui internamente um mdulo controlador


ethernet, este mdulo responsvel por receber as informaes enviadas pelo ncleo do
microcontrolador e codifica-lo no padro IEEE 802.3 (Ethernet). Ele responsvel pelo
controle e fluxo de pacotes de dados entre o microcontrolador e outros dispositivos ethernet
aos quais est conectado. Possui ainda uma unidade hardware dedicada somente para correo
de erros de comunicao.
92

Figura 5.35 - Diagrama de blocos do controlador ethernet.


Fonte: Microchip, 2011a.

Para que seja conectado rede ethernet, este mdulo necessita de alguns componentes
externos associados ao microcontrolador. O principal deles a interface de rede 100/10-Base-
T (Conector RJ45) com transformador isolador interno compatvel com o padro IEEE 802.3.
Esta interface conectada ao microcontrolador atravs de um circuito casador de
impedncias. Um resistor tambm deve ser conectado entre o pino RBIAS e o terra do
circuito para regular a amplitude correta dos sinais TPOUT+/-.

Figura 5.36 - Interface de rede 100/10 Base-T RJ45.

O Datasheet do microcontrolador PIC 18F67J60, desenvolvido pela Microchip,


apresenta o seguinte circuito com os componentes necessrios ao mdulo de comunicao
93

ethernet. Veremos em outro captulo que alguns destes componentes foram substitudos
devido s caractersticas da interface de rede utilizada no projeto.

Figura 5.37 - Componentes externos requeridos pelo mdulo ethernet segundo a Microchip.
Fonte: Microchip, 2011a.

Alm do circuito descrito acima, para minimizar interferncias externas do ambiente


que podem prejudicar a comunicao do microcontrolador e/ou leitura das entradas
analgicas, o fabricante recomenda que sejam instalados capacitores de desacoplamento o
mais prximo possvel de todos os terminais de alimentao do microcontrolador conforme
figura abaixo:

Figura 5.38 - Alimentao do microcontrolador com detalhes para os capacitores de desacoplamento.


Fonte: Microchip, 2011a.
94

5.7 Desenvolvimento do hardware do sistema microcontrolado

Concebido o conceito do sistema de controle e como este deve operar, foi desenhada a
estrutura do hardware necessria para esta tarefa, o esboo desta estrutura apresentado a
seguir:

Sensor de Temperatura
Microcontrolador Planta
do
sistema
Vlvula de gua gelada
Pilha TCP/IP

A/D
Interface
de Navegador Usurio
Ethernet rede Web

Figura 5.39 - Estrutura do hardware do sistema de controle microcontrolado.


Fonte: Autoria prpria.

O princpio de funcionamento do hardware de controle dividido em dois subsistemas


autnomos entre si, mas que se comunicam e trocam informaes durante todo o processo.

O primeiro subsistema o responsvel pela leitura da temperatura ambiente, clculo


PID e atuao na vlvula proporcional de gua gelada. O Sensor de Temperatura possui um
cabo de 3m de comprimento que o leva at uma posio estratgica dentro do galpo onde
instalado e fica sujeito variao de temperatura naquele ponto. A outra extremidade do cabo
do sensor conectada ao circuito divisor de tenso resistivo que transforma a variao de
resistncia do termistor em variao de tenso. Este sinal de tenso injetado em uma entrada
analgica do microcontrolador. O Microcontrolador converte este sinal analgico em sinal
digital, em seguida trata este sinal para que represente o valor, em graus clsius, da
temperatura presente no galpo. Este valor ento introduzido na equao de controle PID
que devolve a resposta a ser aplicada vlvula de controle de gua gelada. Para isso, a sada
do PID transformada matematicamente para representar o percentual de variao do duty do
pulso PWM que ser disponibilizado em uma das sadas digitais do microcontrolador. Esta
sada digital conectada entrada de sinal de controle do servomotor que, acoplado vlvula
esfera, transforma o sinal eltrico em movimento mecnico angular do eixo da vlvula de
95

gua gelada. Essa variao angular da vlvula proporciona ao sistema termodinmico do


projeto, variao do fluxo de gua gelada pela serpentina do trocador de calor. Esta variao
do fluxo de gua gelada representa tambm a variao da temperatura do ar insuflado para
dentro do galpo e sobre o sensor de temperatura. O sensor coleta esta nova temperatura e
realimenta o sistema. Este ciclo se repete indefinidamente e para qualquer alterao de
temperatura dentro do galpo, o algoritmo PID corrige a sada do sinal enviado vlvula
fazendo a temperatura do ambiente buscar o valor definido pelo setpoint.

O segundo subsistema opera de forma paralela e independente ao primeiro e


responsvel pela comunicao ethernet do microcontrolador que prov acesso da interface
web embarcada ao operador do sistema. O microcontrolador possui um servidor web
embarcado que funciona como interface visual para operao e monitorao do sistema
remotamente. Isso feito atravs do mdulo de comunicao ethernet que disponibiliza, em
protocolo IEEE 802.3, acesso ao servidor web embarcado a partir de qualquer ponto da rede
na qual estiver conectado, permitindo inclusive acesso ao sistema de qualquer parte do mundo
se conectado internet. Este acesso se faz possvel atravs de qualquer navegador de internet,
disponvel atualmente em diversas plataformas como microcomputadores, laptops, celulares e
tablets.

Estes dois subsistemas se comunicam em tempo real durante todo o perodo em que o
servidor web estiver ativo no software navegador do usurio. Ele coleta informaes como
temperatura, setpoint e resposta PID diretamente no programa do microcontrolador e os
apresenta na tela do navegador em forma de tabelas e grficos. O operador tem ainda
possibilidade de alterar alguns parmetros como setpoint e ganhos do algoritmo PID
diretamente no navegador e salv-los. Neste instante, o servidor web devolve estes valores ao
programa que atualiza estas variveis e passa operar segundo estes novos parmetros.

De posse de todos os componentes de hardware do sistema de controle e depois de


estudar seus respectivos manuais e datasheets, chega o momento de conect-los
eletronicamente antes de partir para a etapa de desenvolvimento do software.

A princpio a ideia seria testar todo o sistema com o auxlio do software de simulao
eletrnica Proteus, mdulo Isis, que permite a construo virtual do circuito eletrnico e
simulao do funcionamento do programa escrito para o microcontrolador em tempo real
96

antes da montagem fsica. Entretanto esta ferramenta no d suporte para este


microcontrolador especificamente, e a montagem do circuito virtual foi abandonada.

Em seguida cogitado o teste do circuito montando-o em matriz de contatos, conhecida


como Protoboard. Novamente foram encontrados problemas de incompatibilidade entre o
Protoboard e o microcontrolador utilizado.

Figura 5.40 - Modelo de matriz de contatos protoboard do fabricante ICEL.


Fonte: ICEL, 2012.

O microcontrolador PIC 18F67J60 construdo em encapsulamento SMD TQFP de 64


pinos e no existe no mercado soquete para este encapsulamento, necessitando o componente
ser soldado diretamente na placa do circuito impresso do sistema.

Para facilitar o manuseio deste componente SMD e propiciar a construo de um


prottipo do circuito que estaria sujeito a modificaes durante o desenvolvimento do
software do microcontrolador, foi utilizada uma placa adaptadora do padro SMD TQFP para
o padro DIP da marca Microfire onde o microcontrolador foi soldado.

Figura 5.41 - Placa adaptadora TQFP para DIP 64 pinos.


Fonte: Microfire, 2012.
97

Este adaptador ainda no compatvel com a matriz de contatos protoboard devido


disposio dos seus terminais, ento foi utilizada uma placa de circuito impresso perfurada
padro DIP para receber os componentes do circuito eletrnico.

Figura 5.42 - Placa de circuito impresso perfurada padro DIP.

Esta matriz de contatos no possui a facilidade e agilidade de uso do protoboard,


entretanto agrega ao prottipo mais robustez j que os componentes ficam soldados e no
apenas encaixados.

5.7.1 Esquema eletrnico

Realizadas as revises de cada circuito individual, foram todos agrupados em um


nico esquema eletrnico. Os resistores de impedncia da interface de rede foram
modificados para 100 conforme datasheet do fabricante do mdulo; Os leds de sinalizao
da interface receberam resistores limitadores de corrente; O servomotor recebeu em seu
conector alimentao 5Vcc exclusiva por ser o componente de maior consumo e o nico que
no funciona em 3,3Vcc; Foram adicionados todos os capacitores de desacoplamento
indicados pela Microchip para minimizar a interferncia de sinais externos ao
microcontrolador; O circuito oscilador foi instalado, conforme indica o fabricante, o mais
prximo possvel do microcontrolador; Foi adicionado um mdulo de memria Eeprom
externa de 256kB para posterior expanso da capacidade de armazenamento dos arquivos
utilizados pelo servidor web; Foi montado o divisor de tenso entre o termistor NTC 10k e um
resistor de 10k para transformar a variao da resistncia do NTC em um sinal de tenso que
injetado na entrada analgica do microcontrolador e determinar a temperatura do sensor.
98

Figura 5.43 - Esquema eletrnico do projeto.

O circuito ainda conta com o conector ICSP utilizado para gravao do programa na
memria do microcontrolador. Este conector permite essa gravao com o microcontrolador
j inserido na aplicao, sem a necessidade de sua remoo, atravs de um gravador
compatvel. Permite ainda a simulao do programa em tempo real utilizando o software
compilador MPLAB.

Figura 5.44 - Detalhe do conector ICSP.

Ainda foi inserido na placa do prottipo o circuito regulador de tenso de 3,3Vcc


responsvel pela alimentao de todos os componentes, exceto o servomotor alimentado
diretamente por fonte externa de 5Vcc. Este circuito formado por regulador de tenso
99

LM3940 que baixa a tenso da fonte de 5Vcc para 3,3Vcc e dois capacitores, de 0,47uF e
47uF, utilizados como filtro.

Figura 5.45 - Regulador 3,3Vcc LM3940.

Figura 5.46 - Circuito regulador de tenso 3,3Vcc com LM3940.


100

Figura 5.47 - Foto do prottipo montado na placa matriz de contatos.


101

6 SOFTWARE DO SISTEMA MICROCONTROLADO

Com o hardware montado, foi dado inicio ao desenvolvimento e programao do


software do microcontrolador. O foco dos estudos muda neste momento para a rea
computacional e antes de se desenhar o software que ser gravado no microcontrolador,
preciso reunir as tecnologias necessrias que viabilizem esta construo. Este captulo mostra
o caminho entre as escolhas de ferramentas at o desenvolvimento do software do sistema
microcontrolado.

6.1 Ferramentas utilizadas

O sucesso ou fracasso dessa etapa do projeto est diretamente relacionado com a


familiaridade que se tem perante as tecnologias utilizadas e o uso de ferramentas que facilitem
a assimilao destas tecnologias fundamental para este sucesso. A seguir so descritas as
principais ferramentas utilizadas na elaborao do software do microcontrolador.

6.1.1 MPLAB IDE

O MPLAB (MICROCHIP) um IDE (Ambiente de Desenvolvimento Integrado)


desenvolvido pela Microchip e distribudo gratuitamente. Ele apresenta um conjunto de
ferramentas integradas como editor, simulador, gravador, depurador e compilador teis para o
desenvolvimento de aplicaes embarcadas baseadas nos microcontroladores da linha PIC e
DsPIC da prpria Microchip. Seu uso intuitivo e de fcil aprendizado. Possui integrao
com diversos compiladores e gravadores aumentando a agilidade do processo. A figura a
seguir apresenta o ambiente do MPLAB com o projeto aberto.
102

Figura 6.1 - Ambiente de desenvolvimento do MPLAB.

6.1.2 Compilador MPLAB C18

O software MPLAB C18 (MICROCHIP) um compilador comercial para Linguagem


C ANSI34 desenvolvido pela Microchip especificamente para a sua linha de
microcontroladores PIC18. Possui total integrao com o MPLAB IDE, sendo chamado por
este apenas no momento da compilao e/ou depurao do programa de maneira transparente
para o programador. Dispes de algoritmos eficientes para otimizao de programa que
servem para reduzir o programa final a ser gravado no microcontrolador tanto em tamanho
(memria ocupada) quanto em processamento, combinando rotinas do programa original e
reduzindo o cdigo final. Apresenta uma vasta biblioteca de funes para o usurio, incluindo
PWM, USART, SPI, I2C, entre outros.

6.1.3 Programador PKBurner2

Para que o programa compilado seja transferido para o microcontrolador preciso a


interface de um programador. Foi utilizado para este projeto o programador PKBurner2,
desenvolvido com base no programador PICKit2 da Microchip. Este programador
totalmente compatvel com o software MPLAB e se conecta ao computador atravs de porta
USB35. Este programador tambm possui interface ICSP (In Circuit Serial Program) que

34
ANSI - American National Standards Institute ("Instituto Nacional Americano de Padres"), tambm
conhecido por sua sigla ANSI, uma organizao particular dos Estados Unidos sem fins lucrativos que tem por
objetivo facilitar a padronizao dos trabalhos de seus membros.
35
Universal Serial Bus (USB) um tipo de conexo "ligar e usar" que permite a conexo de perifricos sem a
necessidade de desligar o computador.
103

permite a gravao do microcontrolador j inserido no circuito. Esta ferramenta agiliza sobre


maneira o processo de desenvolvimento do software, j que necessita diversas
reprogramaes do microcontrolador so necessrias at que o programa esteja finalizado.

Figura 6.2 - Programador para microcontroladores Microchip PKBurner2.

6.2 Servidor WEB

O sistema remoto de controle de temperatura de que trata este trabalho, ter como
meio remoto de comunicao uma rede Ethernet, que pode ser domstica, corporativa,
industrial ou a prpria rede mundial de computadores, a Internet.

Escolhido o meio, deve-se escolher a maneira como o usurio ir interagir com o


sistema. Foi definida a utilizao de uma aplicao web que poder ser acessada em qualquer
dispositivo eletrnico com acesso a esta rede ethernet e que possua um navegador (browser).

Para que isso seja possvel foi criado um servidor web que o sistema que contm a
aplicao em si, com as pginas em HTML36 e demais rotinas e protocolos que disponibilizam
ao operador tal acesso.

Existem inmeras maneiras para se criar este servidor web e a escolhida foi cria-lo
mais compacto possvel, mantendo sua funcionalidade e objetivo do projeto.

36
HTML (abreviao para a expresso inglesa HyperText Markup Language, que significa Linguagem de
Marcao de Hipertexto) uma linguagem de marcao utilizada para produzir pginas na Web. Documentos
HTML podem ser interpretados por navegadores de internet. A tecnologia fruto do "casamento" dos
padres HyTime e SGML.
104

O servidor web ser programado e inserido no microcontrolador PIC, utilizando as


bibliotecas disponibilizadas pelo fabricante Microchip, as pilhas TCP/IP ou Stack TCP/IP.

6.2.1 Pilhas TCP/IP da Microchip

O protocolo TCP nascido na dcada de 70, patrocinado pela DARPA (Defense


Advanced Research Projects Agency) tinha o objetivo de possuir flexibilidade
suficiente para lidar com computadores e redes das mais variadas tecnologias. Aps a
especificao dos protocolos TCP e IP vrias redes de computadores do departamento
de defesa americano foram conectadas por meio desta tecnologia. Essa rede era
conhecida como ARPANet. Mas com o passar dos anos, essa rede deixou de ter um
uso exclusivamente militar. Instituies governamentais, educacionais assim como
comerciais, tambm foram sendo includas. No incio da dcada de 80 a combinao
entre os protocolos de transporte TCP e de rede IP foram adotados como os protocolos
oficiais da Arpanet e todas as redes conectadas a esta foram requisitadas a suportar o
TCP/IP. A partir deste momento essa rede ficou conhecida como Internet e possua um
crescente nmero de usurios espalhados por todo o mundo.

Uma das razes deste sucesso foi a especificao dos protocolos. Essa especificao
obtida por meio de documentos chamados RFCs (Request for Comments). Tambm
existem RFCs que propem os mais variados tipos de sugestes, como melhorias e
otimizaes aos protocolos. Para que um protocolo se torne um Internet Standard,
necessrio que seja publicado seu RFC, outros RFCs podem ser produzidos com
sugestes a este. Caso se torne estvel, um membro do IAB (Internet Activity Board)
pode sugerir ao comit que o protocolo seja um padro. Ento, um RFC publicado
dando este anncio, caso no haja objeo em um perodo determinado pela entidade,
o IAP declara o protocolo como um Internet Standard. Atualmente a pilha TCP/IP
composta por uma grande nmero de protocolos, e no somente pelos dois que do
nome a esta. Dentre eles podemos citar: ARP (Address Resolution Protocol/Reverse
Address), DHCP (Dynamic Host Configuration Protocol), ICMP (Internet Control
Message Protocol), UDP (User Datagram Protocol), entre muitos outros.

O termo pilha de protocolos define um conjunto de protocolos que so comumente


usados em conjunto. Protocolos de comunicao so um conjunto de regras que visam
permitir a comunicao ntegra entre mquinas. Como o conjunto de regras para
garantir esse comunicao extremamente grande, essas regras (os protocolos de
comunicao) so divididos em nveis hierrquicos, um protocolo sobre o outro
(RODRIGUES SINCERO, 2003).

A Microchip disponibiliza em seu site, diversas bibliotecas para a implementao de


um servidor web utilizando seus microcontroladores. Estas bibliotecas so chamadas de
Pilhas TCP/IP ou TCP/IP STACK.

A pilha TCP/IP da Microchip similar a uma pilha TCP tradicional, ela foi
desenvolvida considerando todas as especificaes de cada um dos protocolos implementados
nela, permitindo conexo do microcontrolador internet, de forma transparente, como se
fosse um host qualquer.
105

A pilha TCP/IP da Microchip dividida em diversas camadas como visto na figura a


seguir. A implementao de cada uma delas feita em arquivos separados que podem ser
habilitados ou no de acordo com a necessidade do projeto.

Figura 6.3 - Organizao da pilha TCP/IP da Microchip.


Fonte: Microchip, 2012.

A principal diferena da pilha TCP/IP da Microchip das demais que ela foi
concebida para trabalhar independentemente de um sistema operacional, j que ser instalada
em um microcontrolador que possui recursos limitados em comparao a um
microcomputador.

O servidor HTTP da pilha TCP/IP da Microchip, responsvel pelas pginas acessadas


pelo operador, utiliza um sistema de arquivos simples chamado MPFS (Microchip File
System) para armazenar as pginas WEB no microcontrolador. A imagem do sistema de
arquivos MPFS pode ser armazenada na memria interna do microcontrolador ou em uma
memria externa serial do tipo EEPROM de acordo com as definies de configurao do
projeto.

Esto disponveis para download gratuito no site da Microchip diversas verses de


pilhas TCP/IP que foram incorporando e/ou perdendo suporte a diversos protocolos e modelos
de microcontroladores. Isso significa que a ltima verso disponvel no necessariamente a
melhor escolha para todos os projetos. Deve-se estudar os componentes de cada verso a fim
de se encontrar a melhor opo para cada projeto. Depois deste estudo, foi definida a verso
5.20 como sendo a melhor opo para este projeto, servindo ela como base para este trabalho.
Verses anteriores ou posteriores a 5.20 podem apresentar diferenas nos modos de
configurao e/ou nomes de arquivos.
106

Depois de instalada no computador, a pilha TCP/IP 5.20 apresenta algumas


ferramentas para a configurao do projeto.

Uma delas o Microchip MPFS Generator (MICROCHIP, 2012) que constri uma
imagem MPFS a partir dos arquivos que sero utilizados pelo servidor HTTP como paginas
HTML, figuras, arquivos XML, etc.

Figura 6.4 - Aplicao Microchip MPFS Generator.

A aplicao Microchip MPFS Generator seleciona a pasta contendo todos os arquivos


do servidor HTTP e monta a imagem MPFS. Se o microcontrolador utiliza memria externa,
a imagem criada deve estar no formato .bin, no entanto, se a imagem for gravada
diretamente na memria interna do microcontrolador, a aplicao gera um arquivo que ser
incorporado ao projeto e compilado pelo software MPLAB C18.

Outra ferramenta importantssima apresentada pela pilha TCP/IP da Microchip a


TCPIP Configuration Wizard (MICROCHIP, 2012) utilizada para configurao rpidas de
inmeros detalhes do projeto como endereo MAC37 (MAC ADDRESS), numero IP, servidor
DNS utilizado, servios ativos, entre muitos outros. frente sero demonstrado as
configuraes utilizadas neste projeto.

37
MAC (Media Access Control) um endereo fsico associado interface de comunicao, que conecta um
dispositivo rede. O MAC um endereo nico, no havendo duas portas com a mesma numerao, e usado
para controle de acesso em redes de computadores.
107

6.3 Desenvolvimento do software do sistema microcontrolado

De posse das ferramentas j instaladas e configuradas corretamente chega o momento


do desenvolvimento do software propriamente dito. O software , na verdade, formado por
um conjunto de rotinas criadas para satisfazer cada mdulo do fluxograma principal de
funcionamento do sistema microcontrolado.

Figura 6.5 - Fluxograma do software do sistema microcontrolado.


108

6.3.1 Configurao da Pilha TCP/IP Microchip

Em primeiro lugar foi inicializado a IDE MPLAB e carregado o projeto a ser


configurado. Este trabalho baseado na Pilha TCP/IP do Microchip verso 5.20. Nesta
verso, o projeto que mais se assemelha s necessidades do sistema o TCPIP Demo App.
Carregado o projeto, iniciou-se a reconfigurao de todos os parmetros referentes ao modelo
microcontrolador, pois apesar deste projeto modelo ser escrito para trabalhar com diversos
modelos de microcontroladores diferentes, no compatvel com o microcontrolador PIC
18F67J60 empregado neste sistema.

Acessando a opo Select device no menu Configure, foi selecionado o modelo


do microcontrolador PIC 18F67J60 na janela que se abre.

Figura 6.6 - Seleo do modelo do microcontrolador.

6.3.1.1 Configurao do arquivo HardwareProfile.h

Em seguida foi localizado o arquivo HardwareProfile.h na lista de arquivos do


projeto aberto e realizado sua modificao. Este arquivo responsvel pela configurao de
todo o hardware do microcontrolador: Frequncia de clock, configurao dos fusveis e
funo assumida por cada pino. Existem dois mtodos para se configurar este arquivo. O
primeiro utilizar a estrutura original do arquivo que foi escrito para atender a diversos
109

modelos de microcontrolador e adicionar as configuraes do PIC 18F67J60. O outro, e que


foi utilizado neste trabalho, remover do cdigo todas as informaes relacionadas a outros
modelos de microcontrolador e adicionar somente as informaes referentes ao modelo
utilizado.

Depois de feitas estas alteraes, o contedo do arquivo HardwareProfile.h


apresentado a seguir:

Quadro 6.1 Cdigo de programao do arquivo HardwareProfile.h

#ifndef __HARDWARE_PROFILE_H
#define __HARDWARE_PROFILE_H

#include "GenericTypeDefs.h"
#include "Compiler.h"

#define TCC_BOARD

// Configurao dos Fusveis do microcontrolador


#if defined(THIS_IS_STACK_APPLICATION)
#pragma config XINST=OFF
#pragma config WDT=OFF, FOSC2=ON, FOSC=HSPLL, ETHLED=ON
#endif

// Configurao da frequncia de clock


#define GetSystemClock() (41666667ul) // Hz
#define GetInstructionClock() (GetSystemClock()/4)
#define GetPeripheralClock() GetInstructionClock()
// Mapeamento de Hardware

// I/O pins
#define SERVO_TRIS (TRISBbits.TRISB3)//Servo Motor
#define SERVO_IO (LATBbits.LATB3)

#define REF_TMR1_TRIS (TRISBbits.TRISB1)//Ref de clock do Timer1


#define REF_TMR1_IO (LATBbits.LATB1)

#define REF_TMR3_TRIS (TRISEbits.TRISE0)//Ref de clock do Timer3


#define REF_TMR3_IO (LATEbits.LATE0)

// Definies da Memria EEPROM Externa, inicialmente desabilitada

//#define EEPROM_CS_TRIS (TRISCbits.TRISC2)


#define EEPROM_CS_IO (LATCbits.LATC2)
#define EEPROM_SCK_TRIS (TRISCbits.TRISC3)
#define EEPROM_SDI_TRIS (TRISCbits.TRISC4)
#define EEPROM_SDO_TRIS (TRISCbits.TRISC5)
#define EEPROM_SPI_IF (PIR1bits.SSPIF)
#define EEPROM_SSPBUF (SSPBUF)
#define EEPROM_SPICON1 (SSP1CON1)
#define EEPROM_SPICON1bits (SSP1CON1bits)
#define EEPROM_SPICON2 (SSP1CON2)
#define EEPROM_SPISTAT (SSP1STAT)
#define EEPROM_SPISTATbits (SSP1STATbits)
#endif

Fonte: Pilha TCP/IP 5.20 modificada para este projeto.


110

6.3.1.2 Configurao do protocolo TCP/IP

Em seguida, foi realizada a configurao do protocolo TCP/IP. Para isso, a Microchip


desenvolveu a ferramenta TCP/IP Configuration Wizard que executa toda a configurao
TCP/IP automaticamente a partir da seleo de alguns parmetros. Na primeira tela foi
indicado o caminho para onde o projeto est salvo.

Figura 6.7 Tela inicial Microchip TCP/IP Configuration Wizard.

Na tela seguinte so apresentados diversos mdulos a serem habilitados e utilizados no


projeto. Inicialmente este projeto utiliza apenas o mdulo Web Server, os demais ficaram
desmarcados.

Figura 6.8 Seleo de Mdulos, Microchip TCP/IP Configuration Wizard.


111

Na prxima tela, so apresentados mdulos de exemplo criados pela Microchip. Como


este projeto no utilizar nenhum destes mdulos, todas as opes permaneceram
desmarcadas.

Figura 6.9 Seleo de mdulos de exemplos, Microchip TCP/IP Configuration Wizard.

A prxima tela apresenta mdulos necessrios comunicao TCP/IP. Aqui foram


selecionados os mdulos ICMP Client e ICMP Server necessrios para que a aplicao
consiga responder a comandos PING38 enviados pela rede e muito teis para verificar a
conectividade do dispositivo. O mdulo NetBios Name Service importante para que o
dispositivo seja acessado pelo Navegador ao se digitar na barra de endereos o nome do
dispositivo. O mdulo Remote Reboot Service permite o reset do dispositivo atravs de
um comando do operador atravs do navegador web. Os mdulos DHCP Client e DHCP
Server so responsveis por solicitar e verificar um endereo IP automaticamente ao se
conectar em uma nova rede, contudo foi desabilitado neste projeto, pois utilizado endereo
IP esttico.

38
Ping ou latncia como podemos chamar, um utilitrio que usa o protocolo ICMP para testar a conectividade
entre equipamentos. Seu funcionamento consiste no envio de pacotes para o equipamento de destino e na
"escuta" das respostas. Se o equipamento de destino estiver ativo, uma "resposta" (o "pong", uma analogia ao
famoso jogo de ping-pong) devolvida ao computador solicitante.
112

Figura 6.10 Seleo de mdulos, Microchip TCP/IP Configuration Wizard.

Em seguida so configurados os parmetros de identificao do dispositivo na rede. O


Host Name o nome que o dispositivo ter dentro da rede. O Default MAC Address um
endereo nico para cada equipamento em todo o mundo. Quando o dispositivo fabricado
com fins comerciais, deve-se requerir junto IEEE um cadastro para gerao destes
endereos MAC, assim cada produto no mundo possui um numero nico que identifica seu
fabricante. No entanto, aplicado utilizao deste trabalho, pode-se identificar o dispositivo
com qualquer endereo MAC sem prejuizos para a aplicao ou complicaes legais. Nesta
39
tela ainda so configurados o Endereo IP esttico, Mscara de Rede, Gateway e Servidor
DNS.

Figura 6.11 Configurao de rede, Microchip TCP/IP Configuration Wizard.

39
Gateway, ou ponte de ligao, uma mquina intermediria geralmente destinada a interligar redes,
separar domnios de coliso, ou mesmo traduzir protocolos.
113

Depois de configurados os parmetros para que o dispositivo seja reconhecido na rede


pelos demais equipamentos, chega o momento de escolha da verso do mdulo HTTP
utilizado no projeto. A verso HTTP2 traz inmeras vantagens como a possibilidade de usar
mtodos POST em formulrios e variveis dimmicas, por estes motivos ele foi selecionado.

Figura 6.12 Configurao do WEB Server, Microchip TCP/IP Configuration Wizard.

De acordo com a verso HTTP selecionada, sero solicitados algumas configuraes


adicionais sobre ela. O campo Default Web Page define o nome da pgina inicial que a
aplicao procurar dentre os arquivos do Servidor Web quando iniciada. Foram selecionados
ainda a utilizao do mtodo POST, sistema de autenticao e gravao de arquivos
Cookies40 no navegador.

Figura 6.13 Configurao do WEB Server, Microchip TCP/IP Configuration Wizard.

40
Cookie (do ingls, literalmente: biscoito), testemunho de conexo, ou, testemunho um grupo de dados
trocados entre o navegador e o servidor de pginas, colocado num arquivo (ficheiro) de texto criado no
computador do utilizador. A sua funo principal a de manter a persistncia de sesses HTTP.
114

Ainda de acordo com a verso HTTP utilizada, a tela seguinte define o formato do
sistema de arquivos enviados ao microcontrolador. Neste caso apenas o formato MPFS2
compatvel.

Figura 6.14 Configurao do sistema de arquivos, Microchip TCP/IP Configuration Wizard.

Aps a definio do formato dos arquivos, solicitado onde estes arquivos sero
gravados. Incialmente os arquivos foram gravados na memria interna do microcontrolador.

Figura 6.15 Configurao do WEB Server, Microchip TCP/IP Configuration Wizard.

O prximo passo a definio de memria utilizada para cada tipo de conexo. Os


valores padro foram mantidos.
115

Figura 6.16 Configurao das conexes TCP, Microchip TCP/IP Configuration Wizard.

Por fim definida a quantidade de conexes UDP41 do projeto e se ser habilitado a


correo de erros de comunicao Checksum42 ou no. Com isso concluie-se a configurao
TCP/IP e retornou-se ao ambiente do MPLAB IDE.

Figura 6.17 Configurao do WEB Server, Microchip TCP/IP Configuration Wizard.

41
O User Datagram Protocol (UDP) um protocolo simples da camada de transporte. Ele descrito na RFC
768 e permite que a aplicao escreva um datagrama encapsulado num pacote IPv4 ou IPv6, e ento enviado ao
destino. Mas no h qualquer tipo de garantia que o pacote ir chegar ou no.
42
Checksum ou soma de verificao um cdigo usado para verificar a integridade de dados transmitidos
atravs de um canal com rudos ou armazenados em algum meio por algum tempo. Isto feito calculando
a soma de verificao dos dados antes do envio ou do armazenamento deles, e recalcul-los ao receb-los ou
recuper-los do armazenamento. Se o valor obtido o mesmo, as informaes no sofreram alteraes e,
portanto no esto corrompidas.
116

6.3.1.3 Configurao do arquivo principal Main.c

O arquivo principal, onde est presente a funo main( ), o arquivo Main.c. Este
arquivo contem alguns procedimentos bsicos necessrios para o funcionamento da Pilha
TCP/IP alm da rotina de leitura e tratamento da temperatura da planta, da rotina para clculo
da funo PID, rotina para gerao do sinal PWM enviado ao servomotor e da rotina para
comunicao com o servidor web.

A primeira exigncia do projeto a presena da seguinte definio:

Quadro 6.2 Definio do arquivo principal.

#define THIS_IS_STACK_APPLICATION

Fonte: Pilha TCP/IP 5.20 modificada para este projeto.

Esta definio serve para indicar ao compilador que este o arquivo principal. A
prxima exigncia a definio de uma instncia para a estrutura APP_CONFIG chamada
AppConfig. Esta estrutura contm as configuraes do protocolo TCP/IP do projeto.

Quadro 6.3 Definio da instncia APP_CONFIG.

#include "TCPIP Stack/TCPIP.h"


APP_CONFIG AppConfig;
static void InitAppConfig(void);

Fonte: Pilha TCP/IP 5.20 modificada para este projeto.

Esta instncia deve ser configurada com os dados necessrios a esta aplicao. Basta
para isso manter a rotina presente no arquivo main.c original, conforme cdigo a seguir.

Quadro 6.4 Configurao da instncia APP_CONFIG.

static ROM BYTE SerializedMACAddress[6] = {MY_DEFAULT_MAC_BYTE1,


MY_DEFAULT_MAC_BYTE2, MY_DEFAULT_MAC_BYTE3, MY_DEFAULT_MAC_BYTE4,
MY_DEFAULT_MAC_BYTE5, MY_DEFAULT_MAC_BYTE6};
//#pragma romdata

static void InitAppConfig(void)


{
AppConfig.Flags.bIsDHCPEnabled = FALSE;
117

AppConfig.Flags.bInConfigMode = TRUE;
memcpypgm2ram((void*)&AppConfig.MyMACAddr, (ROM void*)SerializedMACAddress,
sizeof(AppConfig.MyMACAddr));
AppConfig.MyIPAddr.Val = MY_DEFAULT_IP_ADDR_BYTE1 |
MY_DEFAULT_IP_ADDR_BYTE2<<8ul | MY_DEFAULT_IP_ADDR_BYTE3<<16ul |
MY_DEFAULT_IP_ADDR_BYTE4<<24ul;
AppConfig.DefaultIPAddr.Val = AppConfig.MyIPAddr.Val;
AppConfig.MyMask.Val = MY_DEFAULT_MASK_BYTE1 | MY_DEFAULT_MASK_BYTE2<<8ul |
MY_DEFAULT_MASK_BYTE3<<16ul | MY_DEFAULT_MASK_BYTE4<<24ul;
AppConfig.DefaultMask.Val = AppConfig.MyMask.Val;
AppConfig.MyGateway.Val = MY_DEFAULT_GATE_BYTE1 | MY_DEFAULT_GATE_BYTE2<<8ul
| MY_DEFAULT_GATE_BYTE3<<16ul | MY_DEFAULT_GATE_BYTE4<<24ul;
AppConfig.PrimaryDNSServer.Val = MY_DEFAULT_PRIMARY_DNS_BYTE1 |
MY_DEFAULT_PRIMARY_DNS_BYTE2<<8ul | MY_DEFAULT_PRIMARY_DNS_BYTE3<<16ul |
MY_DEFAULT_PRIMARY_DNS_BYTE4<<24ul;
AppConfig.SecondaryDNSServer.Val = MY_DEFAULT_SECONDARY_DNS_BYTE1 |
MY_DEFAULT_SECONDARY_DNS_BYTE2<<8ul | MY_DEFAULT_SECONDARY_DNS_BYTE3<<16ul |
MY_DEFAULT_SECONDARY_DNS_BYTE4<<24ul;
// Load the default NetBIOS Host Name
memcpypgm2ram(AppConfig.NetBIOSName, (ROM void*)MY_DEFAULT_HOST_NAME, 16);
FormatNetBIOSName(AppConfig.NetBIOSName);

#if defined(EEPROM_CS_TRIS){
BYTE c;
XEEReadArray(0x0000, &c, 1);
if(c == 0x60u)
XEEReadArray(0x0001, (BYTE*)&AppConfig, sizeof(AppConfig));
else
SaveAppConfig();
}
#elif defined(SPIFLASH_CS_TRIS){
BYTE c;

SPIFlashReadArray(0x0000, &c, 1);


if(c == 0x60u)
SPIFlashReadArray(0x0001,(BYTE*)&AppConfig, sizeof(AppConfig));
else
SaveAppConfig();
}
#endif
}
Fonte: Pilha TCP/IP 5.20 modificada para este projeto.

preciso tambm definir o tratamento da interrupo de tempo. A pilha TCP/IP da


Microchip utiliza o Timer0 para o gerador de ticks. Este tratamento realizado atravs do
cdigo abaixo:
Quadro 6.5 Tratamento interrupo Timer0.

#pragma interruptlow LowISR


void LowISR(void)
{
//Temporizador do sistema
TickUpdate();
}
#pragma code lowVector=0x18
void LowVector(void){_asm goto LowISR _endasm}
#pragma code highVector=0x8
void HighVector(void){_asm goto HighISR _endasm}
#pragma code

Fonte: Pilha TCP/IP 5.20 modificada para este projeto.


118

Para comunicao com o servidor WEB, so definidas as funes de tratamento do


mtodo GET utilizadas para atualizao das variveis no programa principal do
microcontrolador quando alterados pelo usurio atravs da aplicao rodando no navegador
web. O cdigo para a funo GET utilizada neste projeto apresentado a seguir. Esta funo
atualiza as variveis setpoint, kp, ki e kd.

Quadro 6.6 Cdigo da funo HTTPExecuteGet( ).

HTTP_IO_RESULT HTTPExecuteGet(void)
{
BYTE *ptr;
BYTE filename[20];

MPFSGetFilename(curHTTP.file, filename, 20);


// If its the index.htm page
if(!memcmppgm2ram(filename, "index.htm", 9))
{
ptr = HTTPGetROMArg(curHTTP.data, (ROM BYTE *)"setpoint");
if(ptr)
setpoint = atof(ptr);
ptr = HTTPGetROMArg(curHTTP.data, (ROM BYTE *)"kp");
if(ptr)
kp = atof(ptr);
ptr = HTTPGetROMArg(curHTTP.data, (ROM BYTE *)"ki");
if(ptr)
ki = atof(ptr);
ptr = HTTPGetROMArg(curHTTP.data, (ROM BYTE *)"kd");
if(ptr)
kd = atof(ptr);
}

return HTTP_IO_DONE;
}
Fonte: Pilha TCP/IP 5.20 modificada para este projeto.

Para que a comunicao ocorra no sentido inverso, ou seja, as variveis sejam


enviadas do programa principal para a aplicao WEB, foram criadas as funes
HTTPPrint(). Cada varivel deve possuir uma funo para esse transporte. Mais detalhes
sero mostrados durante a criao dos arquivos do servidor HTTP. A seguir o exemplo de
cdigo pra envio da varivel temperatura

Quadro 6.7 Cdigo da funo HTTPPrint.

void HTTPPrint_temp(void)
{
char tmpBuff[6];
if(temp_media>=0)
{
sprintf(tmpBuff,"%d.%d",(char)temp_media,(char)((temp_media-char)temp_media)*100));
}
else
119

{
auto float temp_media_n;
temp_media_n= temp_media* (-1);
sprintf(tmpBuff,"-%d.%d",(char)temp_media_n,(char)((temp_media_n-
(char)temp_media_n)*100));
}
TCPPutString(sktHTTP, (BYTE*)tmpBuff);
}

Fonte: Pilha TCP/IP 5.20 modificada para este projeto.

A ltima exigncia para o correto funcionamento da pilha TCP/IP que a funo


principal main( ) contenha a sequncia correta de inicializao do protocolo, caso contrrio
o servidor no funcionar.

Quadro 6.8 Sequncia de inicializao do protocolo TCP/IP.

// Funo de temporizao utilizada pela Pilha TCP/IP - Timer0


TickInit();
//Funo de inicializao dos arquivos MPFS
MPFSInit();
// Inicializao da estrutura APP_CONFIG
InitAppConfig();
// Inicializao dos mdulos (MAC, ARP, TCP, UDP, HTTP, SNMP, etc.)
StackInit();

Fonte: Pilha TCP/IP 5.20 modificada para este projeto.

Alm disso, o lao de loop principal ( while (1) ) deve executar as seguintes funes:

Quadro 6.9 Funes do protocolo TCP/IP.

StackTask();
StackApplications();

Fonte: Pilha TCP/IP 5.20 modificada para este projeto.

O contedo destas funes no foi modificado, sendo utilizadas as funes do cdigo


original.

Cumpridas as exigncias de funcionamento da pilha TCP/IP, o arquivo main.c ainda


deve conter as configuraes para configurao de funcionamento correto do
microcontrolador. Para isso foi utilizada a funo InitializeBoard( ), invocada antes da
funo main( ) e com o contedo apresentado a seguir. Neste momento so configurados o
120

clock do microcontrolador, os timers 1 e 3 utilizados pelo controle PWM e o conversor


A/D.

Quadro 6.10 Cdigo da funo InitializeBoard( ).

//Funo de configurao do Hardware utilizado


static void InitializeBoard(void)
{
// LEDs
LED0_TRIS = 0;
// Servo
SERVO_TRIS = 0;
// Referencia do Timer1
REF_TMR1_TRIS =0;
// Referencia do Timer1
REF_TMR3_TRIS =0;

// Configura Clock do sistema 4x/5x/96MHz PLL


OSCTUNE = 0x40;

// Configurao do Conversor A/D


ADCON0bits.ADCAL = 0; // A/D Calibration bit
ADCON0bits.CHS3 = 0; //<3:0>: Analog Channel Select bits
ADCON0bits.CHS2 = 0;
ADCON0bits.CHS1 = 1;
ADCON0bits.CHS0 = 0;
ADCON0bits.GO =0; //DONE: A/D Conversion Status bit
ADCON0bits.ADON = 1; //A/D On bit

ADCON1bits.VCFG1 = 0; //Voltage Reference Config bit (VREF- source)


ADCON1bits.VCFG0 = 0; //Voltage Reference Config bit (VREF+ source)
ADCON1bits.PCFG3 = 0; //<3:0>: A/D Port Configuration Control bits:
ADCON1bits.PCFG2 = 0;
ADCON1bits.PCFG1 = 0;
ADCON1bits.PCFG0 = 0;

ADCON2bits.ADFM = 1; //A/D Result Format Select bit


ADCON2bits.ACQT2 =0; //<2:0> A/D Acquisition Time Select bits
ADCON2bits.ACQT1 =0;
ADCON2bits.ACQT0 =1;
ADCON2bits.ADCS2 =0; //<2:0> A/D Conversion Clock Select bits
ADCON2bits.ADCS1 =1;
ADCON2bits.ADCS0 =0;

//Configurao dos comparadores internos


CMCONbits.C2OUT = 0; //Comparator 2 Output bit
CMCONbits.C1OUT = 0; //Comparator 1 Output bit
CMCONbits.C2INV = 0; //Comparator 2 Output Inversion bit
CMCONbits.C1INV = 0; //Comparator 1 Output Inversion bit
CMCONbits.CIS = 0; //Comparator Input Switch bit
CMCONbits.CM2 = 1; //<2:0> Comparator Mode bits
CMCONbits.CM1 = 1;
CMCONbits.CM0 = 1;

// configurao das Interrupes


RCONbits.IPEN = 1; // Habilita prioridade entre interrupes
INTCONbits.GIEH = 1;
INTCONbits.GIEL = 1;

//Configurao do Timer1
T1CONbits.RD16 =1;
T1CONbits.T1RUN = 0;
T1CONbits.T1CKPS1 = 0;
T1CONbits.T1CKPS0 = 0;
121

T1CONbits.T1OSCEN = 0;
T1CONbits.T1SYNC = 1;
T1CONbits.TMR1CS = 0;
T1CONbits.TMR1ON = 1;

PIR1bits.TMR1IF = 0; //TMR1 Overflow Interrupt Flag bit


IPR1bits.TMR1IP = 1; //TMR1 Overflow Interrupt Priority bit
PIE1bits.TMR1IE = 1; //TMR1 Overflow Interrupt Enable bit

//Configurao do Timer3
PIR2bits.TMR3IF = 0; // TMR3 Overflow Interrupt Flag bit
PIE2bits.TMR3IE = 1; //TMR3 Overflow Interrupt Enable bit
IPR2bits.TMR3IP = 0; //TMR3 Overflow Interrupt Priority bit

T3CONbits.RD16 =1; //16-Bit Read/Write Mode Enable bit


T3CONbits.T3CKPS1 = 1; //Timer3 Input Clock Prescaler Select bits
T3CONbits.T3CKPS0 = 1; //Timer3 Input Clock Prescaler Select bits
T3CONbits.T3SYNC = 1; //Timer3 External Clock Input Synchronization
T3CONbits.TMR3CS = 0; //Timer3 Clock Source Select bit
T3CONbits.TMR3ON = 1; //Timer3 On bit
}

Fonte: Pilha TCP/IP 5.20 modificada para este projeto.

Depois de realizadas todas as configuraes para correto funcionamento do


microcontrolador e da pilha TCP/IP, foram inseridas no arquivo main.c a rotinas de leitura e
tratamento da temperatura da planta, rotina para clculo da funo PID, rotina para gerao do
sinal PWM enviado ao servomotor e rotina para comunicao com o servidor web.

6.3.2 Rotina para leitura e tratamento da temperatura ambiente

Para realizar a leitura de temperatura atravs do sensor instalado na planta do


prottipo, em primeiro lugar foram configurados os registradores ADCON0, ADCON1,
ADCON2 e CMCON para utilizar o canal analgico 2, onde est conectado o circuito do
termistor NTC, as tenses de referncia foram desabilitadas e configurado o perodo de
converso. Os parmetros utilizados esto descritos no Quadro 6.10.

Em seguida foi criada a rotina de leitura do canal 2 do conversor A/D. Para isso,
atribui-se ao bit ADCON0bits.GO o nvel lgico 1 e aguarda-se que ele retorne ao nvel
lgico 0. Quando este bit colocado em nvel lgico 1 o processo de leitura do conversor
A/D iniciado. Quando a leitura termina, este bit retorna ao nvel lgico 0. O cdigo
utilizado para isso apresentado no Quadro 6.11.
122

Quadro 6.11 Cdigo para pedido de converso A/D.

//Leitura do sensor de temperatura


//Habilita converso A/D
ADCON0bits.GO = 1;
//Aguarda trmino da Converso A/D
while(ADCON0bits.GO);

Fonte: Autoria prpria.

O valor da converso A/D armazenado no registrador ADRES e foi modificado


matematicamente para representar numericamente a temperatura lida pelo termistor NTC. O
clculo utilizado foi a equao de Steinhart & Hart vista no captulo 5.

Quadro 6.12 Cdigo da equao de Steinhart & Hart para leitura de temperatura.

//Converso da leitura do sensor em temperatura


sensor =ADRES;
sensor *=3.3;
sensor/=1023;
rntc=33000/sensor; //RNTC=(Vcc*R1/Vin)-R1
rntc=rntc-10000; //
b1=log(rntc); //LN(RNTC)
b1=b1*b; //b*LN(RNTC)
c1=log(rntc); //LN(RNTC)
c1=pow(c1,3); //LN(RNTC)^3
c1=c1*c; //c*(LN(RNTC)^3)
temp=a+b1+c1; //a+b*LN(RNTC)+c*(LN(RNTC)^3)
temp=1/temp; //1/(a+b*LN(RNTC)+c*(LN(RNTC)^3))
temp=temp-273.15;

Fonte: Autoria prpria.

6.3.3 Rotina para clculo da funo PID

O valor da temperatura atual lida aplicado, ento, equao de controle PID descrita
no captulo 4 para que seja encontrada a resposta adequada a ser aplicada ao servomotor de
vlvula de gua gelada.

Neste ponto algumas ponderaes devem ser feitas.


Qualquer mnima oscilao da leitura da temperatura que ocorra devido
interferncias externas ao circuito, depois de aplicados os ganhos da equao
se transformaro em oscilao no aceitveis e prejudiciais ao controle. Pra
minimizar este efeito foi criada uma sub-rotina de estabilizao da temperatura
123

lida que consiste em realizar 20 leituras e calcular seu valor mdio. Cada nova
leitura substitui a 20 leitura mais antiga;
O resultado da equao PID deve ser delimitado entre 0 e 100, correspondendo
a abertura percentual executada pela vlvula de gua gelada;
O resultado da equao Integral deve ser congelado sempre que o resultado da
equao PID ultrapassar os limites inferior e superior para no alcanar valores
absurdos. Assim que o resultado da equao PID retornar aos valores
permitidos, o clculo Integral continuar do ponto onde parou;

Considerados estes pontos, foi escrito o cdigo abaixo para o controle PID.

Quadro 6.13 Cdigo da rotina de controle PID.

//Controle PID

//Rotina para estabilizao da leitura do Sensor de Temperatura


temp1[j]=temp;
temp1[j]*=10;
temp_arredonda = temp1[j];
temp1[j] = temp_arredonda;
temp1[j]/=10;
j++;
if(j>=20){j=0;}

temp_media=temp1[0]+temp1[1]+temp1[2]+temp1[3]+temp1[4]+temp1[5]+temp1[6]+tem
p1[7]+temp1[8]+temp1[9]+temp1[10]+temp1[11]+temp1[12]+temp1[13]+temp1[14]+temp1[15]
+temp1[16]+temp1[17]+temp1[18]+temp1[19];
temp_media/=20;
temp_media*=10;
temp_arredonda =temp_media;
temp_media = temp_arredonda;
temp_media/=10;

//Clculo erro do sistema: Erro = Sada - Entrada


erro=temp_media - setpoint;
erro_1=erro;

//Clculo do controle Proporcional


proporcional=kp*erro;

//Clculo do controle Integral


//Delimita o clculo integral em relao ao resultado final do PID
if(pid<100)
{
if(pid>0)
{
integral=integral_old+ki*(erro_1+erro)/2*periodo_t;
}
}

//Delimita o resultado integral


if(integral<0){integral=0;}
if(integral>100){integral=100;}
integral_old=integral;
124

//Clculo do controle Derivada


derivada=kd*(erro-erro_1)/periodo_t;

//Somatria das parcelas P + I + D


pid=proporcional+integral+derivada;

//Delimita o resultado final


if(pid>100){pid=100;}
if(pid<0) {pid=0;}

6.3.4 Rotina para gerao de sinal PWM para o servomotor

O microcontrolador PIC18F67J60 possui um mdulo para gerao de sinal PWM,


entretanto, fora do padro utilizado para o controle do servomotor. Ento foi criada uma
rotina de programa para gerao deste sinal PWM com os parmetros adequados.

Foram utilizadas as interrupes dos Timers 1 e 3 para gerao deste sinal PWM. A
interrupo do Timer 3 foi configurada para controlar o perodo do sinal PWM. Os
registradores T3CON, PIR2, PIE2 e IPR2 (descritos no Quadro 6.10) foram
configurados para um estouro do bit PIR2bits.TMR3IF a cada 20ms. Para isso, os
registradores TMR3L e TMR3H so carregados com os valores em hexadecimal 9Ah e
46h respectivamente.

Estes valores so encontrados atravs da frmula:

> F )F01,1 0" k () *+ !, - k ;==


D E2> ) F)GHIA 2@} ~
4 k ;) > 3 ) ! 1 A k ;) > 3 )+-"+?
Onde,

> F )F01,1 0" : o valor, em segundos do estouro desejado;


() *+ !, -: a frequncia do cristal oscilador. Neste caso 25MHz ou 25000000Hz;
2@} : o valor referente configurao do Timer3 para trabalhar em 16 bits;
;==: o valor configurado no multiplicador de clock PLL, neste caso 5x;
;) > 3 )! 1 A: o valor carregado no Prescaler do Timer3;
;) > 3 )+-"+? : o valor carregado no Prescaler de configurao do oscilador;
125

D E2> ) F)GHIA : o valor que dever ser carregado nos registradores TMR3L e
TMR3H. Este valor possui 16 bits e deve ser quebrado em 2 valores de 8 bits que
sero carregados nos registradores tambm de 8 bits.

Resolvendo a equao:
0,02 k 25000000 k 5
D E2> ) F)GHIA = 2@} y z
4 k 8 k 3

D E2> ) F)GHIA = 39494

Transformando este valor para a base hexadecimal temos o resultado em 16bits:

39494 = 9746
Este resultado de 16 bits quebrado em duas partes de 8 bits que so carregados nos
registradores TMR3L e TMR3H.

Quando ocorre este estouro do bit PIR2bits.TMR3IF, a varivel SERVO_IO


carregada com nvel lgico 1. Esta varivel, conforme configurao realizada no arquivo
HardwareProfile.h descrita no Quadro 6.1, carrega o pino de sada 3 da porta B onde est
conectado o terminal de controle do servomotor. Desta forma o perodo do sinal PWM
estabelecido em 50Hz.

Para que o controle do servomotor seja concludo, basta agora determinar o instante
correto em que a varivel SERVO_IO ser carregado com nvel lgico 0 definindo a
durao do semiciclo positivo do sinal PWM, ou seja, o Duty Cicle. A encarregada desta
funo a interrupo do Timer 1. Os registradores T1CON, PIR1, IPR1 e PIE1,
descritos no quadro 6.10, foram configurados para estouro do bit PIR1bits.TMR1IF entre
0,5ms e 2,5ms. Quando ocorre o estouro da interrupo, a varivel SERVO_IO carregada
com nvel lgico 0 e Duty Cicle definido.
126

Quadro 6.14 Tratamento dos Timers 1 e 3 para gerao de sinal PWM.

// Rotinas de interrupo

//Interrupes de baixa prioridade


#pragma interruptlow LowISR
void LowISR(void)
{

//Interrupo do Timer 3
//Determina a frequncia do PWM de controle do
//Servomotor da vlvula de gua Gelada - 50hz

if(PIR2bits.TMR3IF == 1)
{
SERVO_IO=1;
//Gera pulso de referncia para ajuste do Timer3
REF_TMR3_IO=~REF_TMR3_IO;
//Carrega no Timer3 o valor correspondente a 50hz
TMR3H = 0x9a;
TMR3L = 0x46;

//Carrega o Duty no Timer 1 sincronizado com o timer3


TMR1H = duty_high;
TMR1L = duty_low;

//Temporizador do programa
contador++;

//Reseta Timer3 para nova temporizao


PIR2bits.TMR3IF = 0;
}
//Temporizador do sistema
TickUpdate();
}

//Interrupes de alta prioridade


#pragma interruptlow HighISR
void HighISR(void)
{
//Interrupo do Timer 1
//Determina o tempo de descida do duty do PWM de controle do
//Servomotor da vlvula de gua Gelada
if(PIR1bits.TMR1IF == 1)
{
SERVO_IO=0;
//Gera pulso de referncia para ajuste do Timer1
REF_TMR1_IO=~REF_TMR1_IO;
//Reseta Timer1 para nova temporizao
PIR1bits.TMR1IF = 0;
}
}

//Redirecionamento das interrupes


#pragma code lowVector=0x18
void LowVector(void){_asm goto LowISR _endasm}
#pragma code highVector=0x8
void HighVector(void){_asm goto HighISR _endasm}
#pragma code

A determinao do instante em que o estouro da interrupo do timer1 deve ocorrer


definida atravs dos registradores TMR1L e TMR1H. Estes so carregados no inicio de
127

cada ciclo do sinal PWM (no momento em que ocorre o estouro da interrupo do Timer3)
com valor proporcional ao resultado da equao PID. Devem ser carregados neste momento
para que sejam sincronizados.

O resultado da equao PID submetido a uma interpolao dupla entre os valores


mximo e mnimo percentuais possveis (0 a 100%) e os valores mximo e mnimo de
durao do Duty Cicle.

Os valores mximo e mnimo de durao do Duty cicle so determinados atravs das


seguintes equaes:

K3L 3 MN1 k () *+ !, - k ;==


2@} y z
! "
4 k ;) > 3 ) ! 1 @ k ;) > 3 )+-"+?

K3L 3 O1+P 0 k () *+ !, - k ;==


= 2@} y z
$! " 4 k ;) > 3 )! 1 @ k ;) > 3 )+-"+?

Onde,
K3L 3 MN1 : o valor, em segundos, do perodo do Duty Cicle para que a vlvula
permanea totalmente aberta;
K3L 3 O1+P 0 : o valor, em segundos, do perodo do Duty Cicle para que a vlvula
permanea totalmente fechada;
() *+ !, -: a frequncia do cristal oscilador. Neste caso 25MHz ou 25000000Hz;
2@} : o valor referente configurao do Timer1 para trabalhar em 16 bits;
;==: o valor configurado no multiplicador de clock PLL, neste caso 5x;
;) > 3 )! 1 @: o valor carregado no Prescaler do Timer1;
;) > 3 )+-"+? : o valor carregado no Prescaler de configurao do oscilador;
! ": o valor que dever ser carregado nos registradores TMR1L e
TMR1H para manter a vlvula de gua gelada totalmente aberta. Este valor possui
16 bits e deve ser quebrado em 2 valores de 8 bits que sero carregados nos
registradores tambm de 8 bits;
$! " : o valor que dever ser carregado nos registradores TMR1L e
TMR1H para manter a vlvula de gua gelada totalmente fechada. Este valor possui
128

16 bits e deve ser quebrado em 2 valores de 8 bits que sero carregados nos
registradores tambm de 8 bits.

Resolvendo as equaes:

0,0025 k 25000000 k 5
2@} y z
! "
4 k 1 k 3

! " = 49911

0,000889 k 25000000 k 5
$! " = 2@} y z
4 k 1 k 3

$! " = 56277

Aplicando estes valores equao de interpolao dupla temos:

100% ! "
=
;: ,1 "
0% $! "

Reorganizando a equao,

;: 0% ,1 " $! "
=
100% 0% ! " $! "

Isolando ,1 " 5F>,

;:
,1 " =y z k ! " $! " + $! "
100%

Est a equao final utilizada para determinao do perodo de Duty Cicle do sinal
PWM enviado ao servomotor de comando da vlvula de gua gelada. O Quadro 6.15
apresenta esta equao e tambm a quebra deste valor de 16bits em dois de 8bits a serem
carregados nos registradores TMR1L e TMR1H.
129

Quadro 6.15 Cdigo da rotina de controle da vlvula de gua gelada.

//Controle da Vlvula de gua Gelada

//Interpolao dupla para determinao do Duty Cicle


duty_servo=((pid/100)*(duty_max - duty_min))+duty_min;
duty = duty_servo;

//Define a durao do duty, setando o timer1 e SERVO_IO

//Byte menos significativo


duty_low = 256 & duty;

//Byte mais significativo


duty_high = (65280 & duty)/256;

6.3.5 Criao dos arquivos do servidor HTTP

Para a criao do servidor Web, ou servidor HTTP, antes de tudo, foi criada uma pasta
onde todos os arquivos criados para o Web site foram salvos. As imagens utilizadas pelo Web
site tambm foram salvas nesta pasta.

O primeiro arquivo criado foi o index.htm, configurado na pilha TCP/IP como arquivo
inicial. Este o arquivo carregado quando o endereo IP ou Host Name so digitados na
barra de endereos do navegador Web.

O arquivo index.htm possui sua estrutura semelhante a um arquivo HTML padro,


contudo possui algumas particularidades: A Microchip definiu uma forma para a criao de
variveis dinmicas em pginas Web, basta colocar o nome desta varivel entre dois ~.
Entretanto, alm das variveis do processo, este mtodo pode ser utilizado para insero de
trechos de cdigo escritos em outros arquivos com a extenso .inc. A vantagem disso a
criao de partes comuns entre vrias pginas do site utilizando um nico arquivo com este
cdigo e inserido em cada uma destas pginas atravs do mtodo nome_do_arquivo.inc.
Foram criados os arquivos de cabealho e rodap comum para todas as pginas atravs deste
mtodo. Seus nomes so header.inc e footer.inc respectivamente. Os cdigos destes
arquivos esto apresentados nos Quadros 6.16 e 6.17. O arquivo header.inc apresenta a
codificao inicial de um arquivo HTML padro alm da configurao dos arquivos de estilo
e linguagem de programao utilizada.
130

Quadro 6.16 Cdigo fonte do arquivo header.inc.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"


"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>TCC - Climatiza&ccedil;&atilde;o Industrial com Controle PID e
Supervis&atilde;o Remota via Web</title>
<link href="/mchp.css" rel="stylesheet" type="text/css" />
<script src="/mchp.js" type="text/javascript"></script>
</head>

<body>
<div id="shadow-one"><div id="shadow-two"><div id="shadow-three"><div id="shadow-
four">
<div id="page">

<div style="padding:0 0 5px 5px"><img src="/unip.gif" alt="UNIP" /></div>

<div id="title"><div class="right">TCC - Climatiza&ccedil;&atilde;o Industrial com


Controle PID e Supervis&atilde;o Remota</div></div>

<div id="menu">
<table cellspacing="0" cellpadding="0" >
<tr>
<td><a href="/index.htm">Home</a></td>
<td><a href="/forms.htm">Configura&ccedil;&atilde;o</a></td>
<td><a href="/grafico.htm">Gr&aacute;fico</a></td>
</tr>
</table>
</div>

Fonte: Pilha TCP/IP 5.20 modificada para este projeto.

O arquivo footer.inc apresenta o cdigo final de um arquivo HTML padro.

Quadro 6.17 Cdigo fonte do arquivo footer.inc.

<div class="spacer">&nbsp;</div>
<div id="footer">Copyright &copy; 2012, Inc.</div>

</div></div></div></div></div>

</body>
</html>

Fonte: Pilha TCP/IP 5.20 modificada para este projeto.

A utilizao deste mtodo de incluso de trechos de cdigo padro se justificar por


diminuir o tamanho final do arquivo que ser salvo na memria do microcontrolador. Criados
estes arquivos .inc, todos os arquivos HTML foram iniciados e terminados conforme o
Quadro 6.18.
131

Quadro 6.18 Incluso de cabealho e rodap dos arquivos HTML.

~inc:header.inc~

<! Corpo do arquivo HTML -->

~inc:footer.inc~

Quando utilizado este mtodo para apresentar uma varivel existente no programa do
microcontrolador, o valor desta varivel somente atualizado no momento em que a pgina
carregada. Se o valor desta varivel sofrer alterao enquanto a pgina estiver sendo exibida,
esta alterao no ser apresentada.

Para que a atualizao destas variveis tambm seja dinmica e em tempo real, foram
utilizados comandos AJAX43. A Microchip disponibiliza dentro dos arquivos da pilha
TCP/IP uma arquivo que implementa o AJAX e fica responsvel por atualizar periodicamente
estas variveis dinmicas. O nome deste arquivo mchp.js e deve ser includo na pasta
criada para abrigar os arquivos do servidor HTTP.

Para que o cdigo AJAX funcione, foi criado um arquivo XML44 de apoio nomeado
como status.xml. Seu cdigo contm todas as variveis que sero atualizadas em tempo
real. Sua estrutura vista no Quadro 6.19.

Quadro 6.19 Estrutura do arquivo status.xml.

<response>
<temp0>~temp~</temp0>
<setpoint>~setpoint~</setpoint>
<erro>~erro~</erro>
<kp>~kp~</kp>
<ki>~ki~</ki>

43
AJAX (acrnimo em lngua inglesa de Asynchronous Javascript and XML, em portugus "Javascript e XML
Assncronos") o uso metodolgico de tecnologias como Javascript e XML, providas por navegadores, para
tornar pginas Web mais interativas com o usurio, utilizando-se de solicitaes assncronas de informaes.
44
XML (eXtensible Markup Language) uma recomendao da W3C para gerar linguagens de marcao para
necessidades especiais. um dos subtipos da SGML (acrnimo de Standard Generalized Markup
Language ou Linguagem Padronizada de Marcao Genrica) capaz de descrever diversos tipos de dados. Seu
propsito principal a facilidade de compartilhamento de informaes atravs da internet.
132

<kd>~kd~</kd>
<gkp>~gkp~</gkp>
<gki>~gki~</gki>
<gkd>~gkd~</gkd>
<pid>~pid~</pid>
</response>

O elemento raiz chamado de response e cada uma das variveis est contida dentro
de uma TAG45 como nome semelhante. No arquivo index.htm foi includo o seguinte trecho
de cdigo necessrio para implementao do AJAX.

Quadro 6.20 Estrutura do cdigo de atualizao de variveis com AJAX.

<div id="display">

<p>Temperatura:<span id="temp0">?</span>&deg;C</p>
<p>Setpoint: <span id="setpoint">?</span>&deg;C</p>
<p>Sinal Erro: <span id="erro">?</span>&deg;C</p>
<p>kP: <span id="kp">?</span></p>
<p>kI: <span id="ki">?</span></p>
<p>kD: <span id="kd">?</span></p>
<p>Ganho kP: <span id="gkp">?</span></p>
<p>Ganho kI: <span id="gki">?</span></p>
<p>Ganho kD: <span id="gkd">?</span></p>
<p>Sinal PID: <span id="pid">?</span>%</p>

</div>

<script type="text/javascript">
<!--
// Parses the xmlResponse from status.xml and updates the status box
function updateStatus(xmlData) {

document.getElementById('temp0').innerHTML=getXMLValue(xmlData, 'temp0');
document.getElementById('temp').innerHTML = getXMLValue(xmlData, 'temp0');
document.getElementById('setpoint').innerHTML=getXMLValue(xmlData, 'setpoint');
document.getElementById('erro').innerHTML = getXMLValue(xmlData, 'erro');
document.getElementById('kp').innerHTML = getXMLValue(xmlData, 'kp');
document.getElementById('ki').innerHTML = getXMLValue(xmlData, 'ki');
document.getElementById('kd').innerHTML = getXMLValue(xmlData, 'kd');
document.getElementById('gkp').innerHTML = getXMLValue(xmlData, 'gkp');
document.getElementById('gki').innerHTML = getXMLValue(xmlData, 'gki');
document.getElementById('gkd').innerHTML = getXMLValue(xmlData, 'gkd');
document.getElementById('pid').innerHTML = getXMLValue(xmlData, 'pid');

}
setTimeout("newAJAXCommand('status.xml', updateStatus, true)",500);
//-->
</script>

Fonte: Pilha TCP/IP 5.20 modificada para este projeto.

45
TAG - So estruturas de linguagem de marcao que consistem em breves instrues, tendo uma marca de
incio e outra de fim para que o navegador possa mostrar a renderizao da pgina. H uma tendncia nos dias
atuais para se usar as tags apenas como delimitadores de estilo e/ou contedo, tanto em HTML quanto em XML.
133

Cada uma das variveis est contida em um elemento SPAN. Cada elemento SPAN
contm a ID identificada como a TAG desta varivel contida. O cdigo AJAX faz o resto do
trabalho. A funo newAJAXCommand( ) busca o arquivo XML no servidor e executa a
atualizao atravs da funo updateStatus( ). Para que seja atualizado constantemente, o
parmetro true deve estar presente na funo newAJAXCommand( ).

Alm do arquivo index.htm foram criados dois outros arquivos HTML, o


forms.htm com um formulrio que utiliza o mtodo GET para atualizar as variveis de volta
para o programa do microcontrolador e o grfico.htm que apresenta um grfico de
tendncia com a variao da temperatura ao longo do tempo.

O arquivo forms.htm possui uma estrutura de formulrio utilizando o mtodo GET.


Assim que o boto salvar pressionado, as variveis so atualizadas e o navegador
direcionado para a pgina index.tm. O cdigo deste formulrio esta apresentado no Quadro
6.21. J a estrutura da funo implementado no cdigo do microcontrolado pode se analisado
no Quadro 6.6.

Quadro 6.21 Formulrio utilizando o mtodo GET.

<table>
<form method="get" action="index.htm">
<tr>
<td><p><b>Setpoint:</b></p></td>
<td><input type="text" name="setpoint" value="~setpoint~"
maxlength="4" size="4" /></td>
</tr>
<tr>
<td><p><b>kp:</b></p></td>
<td><input type="text" name="kp" value="~kp~" maxlength="4"size="4"/>
</td>
</tr>
<tr>
<td><p><b>ki:</b></p></td>
<td><input type="text" name="ki" value="~ki~" maxlength="4"size="4"/>
</td>
</tr>
<tr>
<td><p><b>kd:</b></p></td>
<td><input type="text" name="kd" value="~kd~" maxlength="4" size="4"/>
</td>
</tr><tr><td>
<input type="submit" value="Salvar" style="margin-top:5px; float:right">
</td></tr>
</form>
</table>

Fonte: Pilha TCP/IP 5.20 modificada para este projeto.


134

O arquivo grfico.htm possui uma estrutura de elementos DIV tratador por folhas
de estilo CSS. Para representar a variao da temperatura em forma de grfico, foram
criados 30 elementos que possuem como atributo height uma varivel dinmica. Quando
alinhadas lateralmente criam a visualizao de um grfico dinmico. Para criar este efeito foi
modificado a funo updateStatus( ) do cdigo AJAX como demonstrado no Quadro 6.22.

Quadro 6.22 Cdigo para criao de grfico de tendncia dinmico.

<table>
<tr valign="bottom" >
<td width="5">
.
.
.
<div id="eixo"class="eixo"><p></p></div>
<div id="eixo"class="eixo"><p></p></div>
<div id="eixo"class="eixo"><p></p></div>
.
.
.
</td>
<td><div id="barra0"class="barras"><p>&nbsp;</p></div></td>
<td><div id="barra1"class="barras"><p>&nbsp;</p></div></td>
<td><div id="barra2"class="barras"><p>&nbsp;</p></div></td>
.
.
.
<td><div id="barra28"class="barras"><p>&nbsp;</p></div></td>
<td><div id="barra29"class="barras"><p>&nbsp;</p></div></td>
<td><div id="barra30"class="barras"><p>&nbsp;</p></div></td>
</tr></table>

<script type="text/javascript">
<!--
// Parses the xmlResponse from status.xml and updates the status box
function updateStatus(xmlData) {

// Update the Barras value


document.getElementById('barra0').style.height=getXMLValue(xmlData,
'barra0');
document.getElementById('barra1').style.height = getXMLValue(xmlData,
'barra1');
document.getElementById('barra2').style.height = getXMLValue(xmlData,
'barra2');
.
.
.
document.getElementById('barra28').style.height = getXMLValue(xmlData,
'barra28');
document.getElementById('barra29').style.height = getXMLValue(xmlData,
'barra29');
document.getElementById('barra30').style.height = getXMLValue(xmlData,
'barra30');
}
setTimeout("newAJAXCommand('status.xml', updateStatus, true)",500);
//-->
</script>

Fonte: Pilha TCP/IP 5.20 modificada para este projeto.


135

Foi criado ainda um arquivo contendo as folhas estilos CSS46 mchp.css utilizadas
pelas pginas HTML.

Depois de criados todos os arquivos do servidor HTTP, o aplicativo Microchip MPFS


Generator utilizado para converter estes arquivos para o sistema MPFS que so gravados
na memria do microcontrolador.

Assim que o aplicativo executado, o arquivo HTTPPrint.h da pilha TCP/IP


Microchip atualizado com os prottipos das funes de todas as variveis criadas no
servidor HTTP.

Quadro 6.23 Estrutura dos prottipos de funo criados no arquivo HTTPPrint.h.

#ifndef __HTTPPRINT_H
#define __HTTPPRINT_H

#include "TCPIP Stack/TCPIP.h"

#if defined(STACK_USE_HTTP2_SERVER)

extern HTTP_CONN curHTTP;


extern HTTP_STUB httpStubs[MAX_HTTP_CONNECTIONS];
extern BYTE curHTTPID;

void HTTPPrint(DWORD callbackID);


void HTTPPrint_hellomsg(void);
void HTTPPrint_led(WORD);
.
.
.
void HTTPPrint_gki(void);
void HTTPPrint_gkd(void);
void HTTPPrint_barra(WORD);
void HTTPPrint_barrasetp(void);

void HTTPPrint(DWORD callbackID)


{
switch(callbackID)
{
case 0x00000000:
HTTPIncFile((ROM BYTE*)"header.inc");
break;
case 0x00000001:
.
.
.
case 0x0000003f:
HTTPPrint_kp();
break;
case 0x00000040:

46
Cascading Style Sheets (ou simplesmente CSS) uma linguagem de estilo utilizada para definir a
apresentao de documentos escritos em uma linguagem de marcao, como HTML ou XML. Seu principal
benefcio prover a separao entre o formato e o contedo de um documento.
136

HTTPPrint_ki();
break;
.
.
.
case 0x00000065:
HTTPPrint_barrasetp();
break;
default:
// Output notification for undefined values
TCPPutROMArray(sktHTTP, (ROM BYTE*)"!DEF", 4);
}
return;
}

void HTTPPrint_(void)
{
TCPPut(sktHTTP, '~');
return;
}

#endif
#endif
Fonte: Pilha TCP/IP 5.20 modificada para este projeto.

Estas funes devero ser implementadas no projeto para que as variveis dinmicas
sejam corretamente impressas na pgina do navegador. Estas funes podem ser escritas
diretamente no arquivo main.c ou no arquivo CustomHTTPApp.c didicado a declarao
das funes referentes ao servidor HTTP. A estrutura destas funes implemetadas est
apresentada nos Quadros 6.7 e 6.24.

Quadro 6.24 Estrutura destas funes HTTPPrint( ).

//Funes de comunicao com o Web Server

void HTTPPrint_setpoint(void)
{
char tmpBuff[6];
sprintf(tmpBuff,"%d.%d",(char)setpoint,(char)((setpoint-(char)setpoint)*100));
TCPPutString(sktHTTP, (BYTE*)tmpBuff);
}

6.3.6 Compilao do Projeto

Chegado a este ponto do trabalho, todos os arquivos de configurao do projeto j


esto finalizados e prontos para serem compilados. Para isso, basta selecionar a opo Build
All do menu Project da IDE MPLAB. Todos os arquivos da pilha TCP/IP, assim como
todos os arquivos do servidor HTTP so compilados em um nico arquivo hexadecimal
pronto para ser enviado ao microcontrolador.
137

Figura 6.18 IDE MPLAB com o Projeto compilado.

6.3.7 Gravao do software no microcontrolador

De posse do arquivo hexadecimal gerado pela IDE MPLAB, deve-se selecionar a


ferramenta para envio deste arquivo memria do microcontrolador. A ferramenta utilizada
neste projeto foi o programador PKBurner2 atravs do software PICkit 2 Programmer.

Assim que o aplicativo iniciado reconhece automaticamente o microcontrolador


conectado atravs da interface ICSP. Em seguida carrega-se o arquivo hexadecimal atravs da
import HEX no menu File. Depois basta pressionar o boto Write para iniciar o
processo de transferncia do arquivo para o microcontrolador. O aplicativo ento apresenta a
mensagem Programming Successful e o processo finalizado.
138

Figura 6.19 Gravao do programa hexadecimal no microcontrolador.


Fonte: Aplicativo PICkit 2 Programmer..
139

7 TESTES E RESULTADOS DE FUNCIONAMENTO DO PROJETO

Encerrada a construo do prottipo e do sistema de controle, foi iniciada a etapa de


testes e avalio do funcionamento do projeto.

Em primeiro lugar todos os componentes da maquete foram montados e instalados em


suas posies. O ventilador foi posicionado na lateral do galpo, conectado entrada de
insuflao e retorno de ar. O duto de insuflao foi posicionado no interior do galpo e
conectado entrada de insuflao de ar. A caixa plenum de retorno foi montada no piso do
galpo e conectada ao retorno de ar atravs de um duto cilndrico corrugado. O trocador de
calor foi instalado em seu compartimento no interior do duto de insuflao e s mangueiras do
sistema de gua gelada. O sensor de temperatura foi instalado no interior do galpo e seu cabo
leva at o local de fixao da placa de controle. Foram ainda instalados a janela de vidro para
inspeo visual e a cobertura do galpo.

O Sistema de gua gelada foi posicionado e abastecido com mistura de gua, lcool e
cloreto de sdio para aumentar a transferncia de calor do sistema. Foi adicionado tambm
barras de gelo para manter a temperatura da gua prxima aos 5C. Durante os testes esta
temperatura foi monitorada e o gelo reabastecido quando necessrio. Mangueiras de borracha
foram interligadas entre o reservatrio de gua gelada e o trocador de calor. A bomba de gua
gelada submersa foi instalada no interior do reservatrio e conectada mangueira de sada de
gua gelada. A vlvula de gua gelada foi instalada em srie no circuito de retorno de gua
para o reservatrio. Seu cabo de controle foi levado at o local de fixao da placa de
controle.

A placa de controle foi fixada ao lado do ventilado e recebeu os cabos do sensor de


temperatura, da vlvula de controle, de alimentao eltrica e o cabo de rede do roteador. O
roteador foi instalado logo abaixo da placa de controle.

Foi distribuda alimentao eltrica para o roteador, ventilador, bomba de gua e placa
de controle. O ventilador foi acionado e, em seguida, a bomba de gua gelada colocando os
sistemas de troca de calor em funcionamento.
140

Figura 6.20 Sistemas de controle e termodinmicos conectados.

O passo seguinte foi estabelecer a comunicao com a placa de controle via rede
Ethernet. Para evitar a utilizao de cabos e prover acesso ao sistema por dispositivos
portteis, foi instalado um roteador WIFI47 conectado placa de controle. Em seguida,
atravs de um computador conectado mesma rede WIFI, foi aberto o prompt de
comando48 e executado o comando PING para o endereo da placa de comando.

Figura 6.21 Execuo do comando PING.


Fonte: prompt de comando do Windows Seven.

47
Wi-Fi uma marca registrada da Wi-Fi Alliance, que utilizada por produtos certificados que pertencem
classe de dispositivos de rede local sem fios (WLAN) baseados no padro IEEE 802.11. Por causa do
relacionamento ntimo com seu padro de mesmo nome, o termo Wi-Fi usado frequentemente
como sinnimo para a tecnologia IEEE 802.11.
48
Prompt de Comando (cmd.exe) um interpretador de linha de comando de sistemas baseados no Windows
NT (incluindo Windows 2000, XP, Seven e Server 2008). Ele um comando anlogo ao command.com do MS-
DOS e de sistemas Windows 9x, ou de shells utilizados pelos sistemas Unix.
141

O sistema microcontrolado respondeu corretamente ao comando PING e o prximo


passo foi testar a comunicao do sistema atravs do navegador Web. Foi utilizado o
navegador Google Chrome49 para este teste. Aps a entrada do endereo IP do sistema
microcontrolado na barra de endereos do navegador, a pgina index.htm foi carregada em
instantes.

Figura 6.22 Pgina index.htm.

Observou-se a equao PID respondendo variao de temperatura lida pelo termistor


e a atuao da vlvula no controle do fluxo da gua gelada. Em seguida foi acessada a pgina
forms.htm atravs do item Configurao no menu da pgina. Foi realizada a alterao de
todos os valores aleatoriamente e confirmada esta alterao atravs do boto Salvar.
Novamente o site foi direcionado para a pgina index.htm j com os parmetros
modificados.

49
O Google Chrome o um navegador desenvolvido pelo Google e compilado com base em componentes
de cdigo aberto como o motor de renderizao o WebKit, da Apple Inc. e sua estrutura de desenvolvimento de
aplicaes (Framework).
142

Figura 6.23 Pgina de configurao dos parmetros PID.

Figura 6.24 Pgina index com parmetros modificados.

O teste seguinte foi acessar a pgina grfico.htm atravs do item Grfico do menu
da pgina. O grfico criado apresenta duas variveis, o setpoint representado por uma linha
azul e a temperatura controlada representada por uma linha vermelha. Este grfico apresenta
as 30 ltimas leituras realizadas pelo sistema de controle e as apresenta de forma de linha de
tendncia, conforme se observa na Figura 6.25.
143

Figura 6.25 Pgina do grfico de temperatura.

O funcionamento de todo o sistema ocorreu como esperado e os comentrios e


detalhes a respeito da performance esto descritos no prximo captulo, o de concluso do
trabalho.
144

8 CONCLUSO

Dispositivos e equipamentos munidos de internet embarcada se revelam uma


tendncia mundial apesar do pouco tempo de existncia desta tecnologia. Por outro lado o
mercado de sistemas de controle de processos automatizados j est consolidado h muitos
anos e dispe de centenas de fabricantes que atendem aos mais variados segmentos
produtivos. Estes sistemas apresentam tecnologias muitas vezes antigas e ultrapassadas no
ponto de vista de conectividade e acessibilidade para os dias atuais. Utilizam redes de dados
com pequeno alcance e softwares supervisrios especficos instalados em configurao
cliente-servidor. J os sistemas que possuem alta conectividade e acesso via Ethernet so, em
geral, muito caros para aplicao em pequenas plantas, inviabilizando seu uso.

Iniciar os estudos para, no futuro, preencher esta lacuna entre os robustos sistemas
supervisrios com conexo Web e as pequenas plantas industriais foi desde o incio deste
trabalho um sonho a ser conquistado.

Observando a histria, podemos constatar que grandes evolues tecnolgicas


ocorridas ao longo dos anos se originaram da observao de uma necessidade ou ainda, de
uma oportunidade de melhoria em um processo produtivo. Como visto no segundo captulo,
grandes observadores como Willis Carrier desenvolveram grandes projetos a partir de sua
observao das necessidades de um processo produtivo ignoradas pela maioria at ento.

A vivncia de trabalho na rea de climatizao de ambientes industriais e comerciais


tornou possvel para ns, atravs de problemas encontrados ao longo dos anos, questionarmos
a necessidade do desenvolvimento de um dispositivo de controle de temperatura que ao
mesmo tempo fosse compacto para ser instalado no painel do equipamento controlado e
permitisse sua superviso e controle a partir de uma sala de operao, retirando a necessidade
do responsvel pelo sistema se dirigir at o local de instalao da mquina periodicamente
para confirmar o correto funcionamento do sistema de condicionamento de ar.

Este um conceito que foge dos grandes CLPs instalados em grandes painis de
controle, que supervisionam diversos equipamentos ao mesmo tempo e se comunicam com
um robusto software supervisrio. Estes sistemas so caros e tornam muito onerosa a
145

expanso da superviso da planta produtiva. Neste conceito, cada equipamento de


climatizao possui o seu prprio dispositivo de controle instalado em seu prprio painel de
comando, inclusive podendo ser fornecido como parte integrante do equipamento pelo
fabricante. Este conceito pode atender qualquer planta de qualquer tamanho. Sua expanso
possui custo linear e pode atender ao pequeno industrial que possui uma ou duas mquinas e
deseja usufruir da superviso remota. Aprimorando o desenvolvimento deste dispositivo e
acrescentando suporte a outro protocolo de comunicao como ModBus TCP/IP ele poder
ainda se comunicar com os grandes Softwares Supervisrios utilizados nas grandes plantas
industriais da mesma maneira como os grandes CLPs, suprimindo a necessidades destes.

Este conceito foi o motivo inicial para escolha do tema deste Trabalho de Concluso
de Curso. E o objetivo foi iniciar os estudos deste dispositivo para controle de temperatura
com Internet embarcada.

Neste projeto pudemos aplicar conhecimentos adquiridos ao longo das aulas


ministradas no curso de Engenharia de Controle e Automao. Conhecimentos que tornaram
possvel a concluso do projeto. Exercer o controle sobre grandezas da natureza tarefa difcil
e o que aplicamos se mostrou satisfatrio, mas inda visualizamos possibilidade de melhorias e
estamos trabalhando com este foco.

Para o ensaio de nossos estudos necessitvamos de um ambiente estanque ao qual


pudssemos aplicar o controle da temperatura. Foram imaginadas enumeras possibilidades
para este ambiente at que se chegou concluso de que o melhor seria a construo de uma
maquete com dimenses definidas e que pudesse ser transportada ao longo do
desenvolvimento do projeto caso houvesse esta necessidade. Construmos, ento, uma
maquete cujo formato nos remete a um galpo industrial. Nela foi acoplado um ventilador tipo
siroco, que capta o ar de seu interior e o lana de volta, forando sua passagem por uma
serpentina contendo gua gelada circulando em seu interior. Esse um sistema muito
parecido com o tpico de uma planta industrial.

O maior problema encontrado no uso desta maquete que por se tratar de um caixa de
apenas 1m, sua temperatura interna fica muito suscetvel s variaes do ambiente externo
onde ela est. Isso foi percebido durante os testes realizados durante os dias de grande calor,
em que os parmetros ajustados de acordo com a carga trmica interna tiveram que ser
146

ignorados, a simples mudana de sombra para cu aberto alterava completamente a resposta


do controle PID. Com isso fica claro que para a evoluo do desenvolvimento do dispositivo
deve-se utilizar uma planta com dimenses reais para os ensaios.

Outro fator que culminou na escolha da maquete para realizao dos testes foi a
necessidade de uma potncia de refrigerao menor utilizando apenas 1m de rea a ser
climatizada. O foco do trabalho nunca foi o de refrigerar a gua para utilizao na serpentina
do conjunto Fan Coil, j que, na prtica, esta tarefa responsabilidade um sistema
independente ao da climatizao, responsabilidade do sistema de refrigerao. Entretanto a
utilizao de gua gelada imprescindvel para o funcionamento do sistema de climatizao
empregado no trabalho. Foi necessrio, nesta etapa, a pesquisa e seleo de um sistema que
fornecesse esta gua gelada.

A primeira tentativa foi usar clulas de Peltier, mas logo se chegou concluso de que
seria invivel prosseguir com essa alternativa, pois demandaria um grande conjunto desse
componente para conservar um volume de cerca de 15 litros de gua em baixa temperatura.
Em seguida cogitamos a possibilidade de compra de um pequeno chiller de potncia
compatvel com nossa maquete. E foi durante estes clculos que chegamos concluso de
que, por se tratarem apenas de ensaios de pequena durao, um simples reservatrio com gua
e gelo seria o suficiente para atender a esta funo. Bastaria monitorar a temperatura da gua
gelada e completar o reservatrio com gelo mantendo a temperatura de aproximadamente
5C.

O prximo desafio foi a escolha da vlvula de controle de fluxo de gua gelada. Ela
o principal componente de controle j que a interface entre o sistema microcontrolado e o
sistema termodinmico. Procuramos utilizar uma vlvula comercial que atendesse as
necessidades do projeto, contudo o custo destas vlvulas no se justifica para os ensaios
realizados. Passamos ento a procurar alternativas ao uso destas vlvulas e decidimos utilizar
uma vlvula esfera de volta com acionamento por alavanca de uso comum, utilizada em
tubulaes de gua. Retiramos a alavanca de comando manual e acoplamos ao eixo da vlvula
um servomotor utilizado em antenas parablicas para o posicionamento automtico do
elemento receptor de sinal. A preciso de posicionamento nos surpreendeu ficando muito
prxima a das vlvulas comerciais. O controle deste posicionamento d-se atravs de um sinal
PWM facilmente implementado em um microcontrolador.
147

Antes de partir para o desenvolvimento do sistema microcontrolado com Internet


Embarcada que era, naquele momento, desconhecida por ns, decidimos montar um sistema
microcontrolado simples (utilizando um microcontrolador modelo 18F4550) apenas para
gerao do sinal PWM de controle da vlvula de gua gelada e monitoramento da temperatura
e posio do servomotor atravs de um display LCD. Com este sistema pudemos realizar
ensaios termodinmicos para comprovar a viabilidade do projeto utilizando estes materiais.
Comprovamos a eficcia da utilizao do gelo para refrigerar a gua e do sistema de
ventilao em realizar a troca termodinmica entre o ar e a gua, alm da potncia do sistema
em atender a demanda da maquete.

Durante os testes de controle de fluxo da gua gelada atravs da vlvula esfera


observamos mais um problema em nosso sistema. Devido o propsito construtivo desta
vlvula no ser o de controlar o fluxo de gua, mas sim o de ser servir como registro de
passagem em tubulaes de gua, a curva de vazo relacionada com a movimentao
proporcional do eixo no nada linear, chegando ao ponto de alcanar 80% de vazo com
apenas 15% de abertura da esfera. Neste momento voltamos ao estudo das vlvulas
comerciais procura do diferencial construtivo delas em relao vlvula utilizada em busca
de uma soluo para este problema.

Encontramos no site do fabricante Belimo a soluo. Foi desenvolvido pela Belimo,


um elemento chamado de Disco Caracterizador de Fluxo, inserido no interior da vlvula
esfera que modifica a curva de vazo de gua, tornando-a proporcional abertura da esfera da
vlvula. Tratamos ento de utilizar um disco semelhante a este adaptado nossa vlvula
esfera. Realizando nos ensaios comprovamos a eficcia deste disco, deixando a nova curva de
vazo muito mais prxima da linearidade.

Comprovada e viabilidade de controle sobre a maquete, chegou o momento de


desenvolvimento do algoritmo de controle PID, ainda utilizando o microcontrolador 18F4550.
Muita literatura sobre o assunto foi lida e muitas equaes foram testadas para implementao
do PID. Encontramos muitas formas diferentes utilizadas para discretizar o algoritmo PID a
fim ser utilizado em um microcontrolador. A parcela Proporcional linear e no precisou de
modificaes para ser utilizada, j as parcelas Integral e Derivativa necessitaram de
148

aproximaes matemticas prvias. parcela Derivativa foi aplicada a aproximao pelo


mtodo de Euler e parcela Integral foi aplicado o mtodo de Tustin.

Com o controle PID implementado foi dado inicio sintonia de seus parmetros Kp,
Ki e Kd atravs de novos ensaios. Foram nestes ensaios que observamos a influncia da
temperatura externa sobre a maquete do galpo. Esta influncia externa fez com que no
consegussemos definir valores fixos para estes valores, j que dependem diretamente das
caractersticas termodinmicas do ambiente controlado. A variao destes parmetros entre
dias frios e quentes ficou muito clara. Entretanto o que se observa em uma planta real que
devido s grandes dimenses aplicadas, no existe esta influncia significativa da temperatura
externa, bastando sintonizar estes parmetros somente no trmino da instalao dos
equipamentos ou quando ocorrem mudanas significativas na estrutura da planta controlada.
A cada dia de experimentos, foi preciso ajustar os parmetros PID antes de iniciar os ensaios.

O prximo passo foi o desenvolvimento do sistema microcontrolado definitivo


utilizando Internet embarcada, novamente direcionamos nossos estudos para escolha da
melhor plataforma a ser utilizada. Aproveitando a familiaridade com os microcontroladores
Microchip da famlia PIC adquirida durante nosso curso, decidimos por utiliz-los em nosso
projeto. Escolhemos como base a pilha TCP/IP desenvolvida e distribuda pela Microchip
para seus microcontroladores.

Existe pouca literatura sobre assunto, provavelmente devido ao seu pouco tempo de
existncia e foi necessrio recorrer documentao do fabricante em ingls.

A idia inicial de utilizao do microntrolador PIC18F4550 em conjunto com a


interface ethernet ENC28J60 foi abandonada logo nos primeiros estudos. Embora tenha sido
apresentada por diversos autores como configurao aceitvel para este tipo de projeto, na
prtica se mostrou muito limitado pra a finalidade desejada neste trabalho.

A escolha ento recaiu sobre a famlia PIC18FX7J60, especificamente sobre o


microcontrolador PIC1867FJ60 que possui o mdulo ethernet integrado e memrias ROM e
RAM suficientes para armazenar nossa aplicao, alm de estar disponvel no mercado
nacional. Muitas outras opes de microcontroladores foram abandonadas devido
dificuldade de encontra-los para compra no Brasil.
149

De posse do microntrolador foi desenvolvido o circuito de hardware de acordo com as


especificaes do fabricante e includos os circuitos de interface do sensor de temperatura e
do servomotor. Alm dos reguladores de tenso

A pilha TCP/IP da Microchip possui diversas verses e, depois de rever algumas vezes
a documentao da verso mais atual, ficou claro que a evoluo destas verses no somente
agrega mais mdulos e dispositivos como tambm retirar outros mdulos e suporte a
dispositivos mais antigos. Com isso foi preciso estudar cada verso at encontrar a melhor
opo para nosso projeto. A verso escolhida foi a 5.20.

Depois de instalado a pilha TCP/IP, foi preciso fazer adequaes em vrios arquivos
de configurao conforme detalhado no sexto captulo. O resultado, no entanto, foi muito
gratificante. A sensao de ver o projeto que se iniciou no comeo do ano finalmente
funcionando depois de enfrentar todos os problemas surgidos ao longo do trabalho
indescritvel e nos deixou certos do objetivo alcanado.

claro que este foi apenas o incio dos estudos para o desenvolvimento de um produto
que no futuro poder vir a ser comercializvel, mas foi um grande passo para o
desenvolvimento intelectual de todos os integrantes do grupo que trabalharam arduamente
durante todos estes meses.
150

REFERNCIAS BIBLIOGRFICAS

OGATA, K. Engenharia de controle moderno. 4.ed. Sao Paulo: Editora Prentice Hall
(Pearson), 2003. 800p.

BORGNAKKE, C.; SONNTAG, R. E. Fundamentos da Termodinmica,7 ed. So Paulo:


Editora Blucher, 2009. 659p.

BRUNETTI, F. Mecnica dos Fluidos, 4.ed. So Paulo: Editora Pearson, 2005. 431p.

INCROPERA, F. P.; DEWITT, D. P.; Bergman, T.L., Lavine, A. S.: Fundamentos de


Transferncia de Calor e Massa. 6.ed. So Paulo: Editora LTC. 2008. 644 p.

DISTEFANO, J. J.; STUBBERUD, A. R.; WILLIAMS, I.J. Sistemas de Retroao e


Controle, Traduzido por CARDIM, O.A. Editora McGraw Hill do Brasil, 1972. 480p.

ALBUQUERQUE, P. U. B.; THOMAZINI, D. Sensores industriais: fundamentos e


aplicaes, 8. ed. So Paulo, : Editora rica, 2011. 224p

ADD THERM, Catlogo de termistores NTC da linha Airpoxy, 2011. Disponvel em


<http://www.addtherm.com.br/wp-content/uploads/2011/10/A75-Airpoxy-ADD.pdf > Acesso
em nov/2012.

ICTRADENET, IC PIC MCU FLASH 64KX16 64TQFP, 2009. Disponvel em


<http://www.ictradenet.com/PIC18F67J60-I_PT/ > Acesso em nov/2012.

ICEL INSTRUMENTOS DE MEDIO, Protoboard MSB-500, 2012. Disponvel em


<http://www.icel-manaus.com.br/produto_descricao.php?id=445&> Acesso em nov/2012

INTERVLVULAS, Vlvulas Borboleta de corpo bipartido: Padres de construo e


caractersticas gerais, 2012. Disponvel em
<http://www.intervalvulas.com.br/produtos/borboleta=bipartida.php> Acesso em nov/2012.
151

BELIMO, Electronic globe valves: Features and benefits, 2012a. Disponvel em <
http://www.belimo.us/belimo/media//Technical_Documents/Accessories/Globe_Valve_Acces
sory.pdf > Acesso em nov /2012a.

BELIMO, B2 series, 2-way, CCV Stainless steel ball and stem, 2012b. Disponvel em
<http://www.belimo.us/belimo/media//Technical_Documents/Characterized_Control_Valve/
B2_LRB_X_24_3_S.pdf> Acesso em nov /2012b.

MERCATO, Newsletter Mercato: Vlvulas de Controle Diferenciais tcnicos, 2012.


Disponvel em <http://www.mercatoautomacao.com.br/mercato/novo> Acesso em nov/2012.

WIKIMEDIA COMMONS, Seccion vlvula de bola, 2009. Disponvel em


<http://commons.wikimedia.org/wiki/File:Seccion_valvula_de_bola.jpg> Acesso em
nov/2012.

ACREL DISTRIBUIDORA DE MANGUEIRAS, Vlvula de esfera monobloco passagem


plena alavanca, 2012. Disponvel em
<http://www.acrelnet.com.br/index.php/produtos/12/59/valvula_de_esfera_monobloco_passa
gem_plena_alavanca> acesso em nov/2012.

MARAL, J.C.S. Projeto de um sistema microcontrolado utilizando Internet embarcada


para monitoramento remoto em tempo real de temperatura e disponibilizao dos dados
na WEB atravs de conexo de rede. 2009. 174 f.
Dissertao (Graduao em Engenharia de Computao) - Universidade Federal do Rio
Grande do Norte, Natal-RN, 2009.

DIAS, B. R.; JAREK, F. L. Sistema embarcado para processamento de imagens, 2011.42f.


Dissertao (Graduao em Engenharia Eltrica) Universidade do Paran, Curitiba-PR,
2011.

SINCERO, J.C.R. Pilha TCP/IP Adaptvel Aplicao. 2004. 49f.


Dissertao (Graduao em Cincias da Computao) Universidade Federal de Santa
Catarina, Florianpolis-SC, 2004.
152

BEZERRA, M. S. Projeto, implementao e ensaios de um controlador PID utilizando


FPGA, 1999. 130f.
Dissertao (Graduao em Engenharia Eltrica) Centro de Tecnologia da Universidade
Federal do Cerar, Fortaleza-CE, 1999.

CAON, J. R. J. Controladores PID Industriais com sintonia automtica por


realimentao a rel. 2010. 68f.
Dissertao (Mestrado em Engenharia Eltrica) Escola de Engenharia de So Carlos da
Universidade de So Paulo, So Carlos, 1999.

BEZERRA, D. C. Controlador de temperatura utilizando um PI digital aplicado a um


Nobreak de 1kVA. 2010. 66f.
Dissertao (Graduao em Engenharia Eltrica) Centro de Tecnologia da Universidade
Federal do Cerar, Fortaleza-CE, 2010.

MAKINO, V. K. G. Desenvolvimento de um controlador PID digital embarcado aplicado


no controle de um servomotor 2009. 80f.
Dissertao (Graduao em Engenharia da Computao) Instituto de Tecnologia da
Universidade Federal do Par, Belm-PA, 2009.

THERMA, Controle PID (Proporcional Integral Derivativo) So Paulo, 2005.

FREESCALE SEMICONDUCTOR, AN1215 - PID Routines for MC68HC11K4 and


MC68HC11N4 Microcontrollers, Estados Unidos, 2004.

WITTENMARK, B.; ASTROM, K. J.; ARZN, K. E. Computer Control: An Overview,


Department of Automatic Control, Lund Institute of TechnologyBox 118, S221
00 Lund, Sweden.

ASTROM, K. J., HAGGLUND, T. Automatic Tuning of PID Controllers. Estados Unidos,


1988. 141 p.

BOLTON, W. Engenharia de controle; traduo Valcere Vieira Rocha e Silva; reviso


tcnica Antnio Pertence Junior; - So Paulo: Editora Makron Books, 1995. 497 p.
153

MICROCHIP TECHNOLOGY INC, Microchip TCP/IP Stack Help, Estados Unidos, 2011.

MICROCHIP TECHNOLOGY INC, AN844 - Simplified Thermocouple Interfaces and


PICmicro MCUs, Estados Unidos, 2002.

MICROCHIP TECHNOLOGY, PIC18F97J60 Family Data Sheet, 494p., Estados Unidos,


2011a.

MICROCHIP TECHNOLOGY, AN833 The Microchip TCP/IP Stack, 44p., Estados


Unidos, 2008.

MICROCHIP TECHNOLOGY, EN543032 TCP/IP Networking: Web-Based Status


Monitoring Microchip TCP/IP Stack HTTP2 Module, 40p., Estados Unidos, 2007a.

MICROCHIP TECHNOLOGY, EN543035 TCP/IP Networking, Part 2: Web-Based


Status Monitoring Microchip TCP/IP Stack HTTP2 Module, 21p., Estados Unidos,
2007b.

MICROCHIP TECHNOLOGY, EN543038 TCP/IP Networking, Part 3: Web-Based


Status Monitoring Microchip TCP/IP Stack HTTP2 Module, 25p., Estados Unidos,
2007c.

VENCIGUERRA, A. Controlador PID de Temperatura com PIC16F877.


Plano de trabalho Universidade Metodista de Piracicaba, Santa Barbara Doeste, 2005.

PRADO, T. A. Implementao de um controlador PID embarcado para o controle em


malha fechada de um estimulador neuromuscular funcional. 2009. 78f.
Dissertao (Ps-Graduao em Engenharia Eltrica) Universidade Estadual Paulista, 2009.
154

APNDICE A DESENHOS CONSTRUTIVOS

Figura 1- Sistema de insuflao e retorno de ar.

Figura 2 - Duto de insuflao.


155

Figura 3 - Adaptador do tubo de retorno.

Figura 4 - Tubo de retorno.


156

Figura 5 - Borracha de vedao tubo/ventilador.

Figura 6 - Pleno de retorno.


157

Figura 7 - Caixa do ventilador.

Figura 8 - Vista explodida do sistema de insuflao e retorno de ar.


158

Figura 9 Conjunto ventilador.

Figura 10 Rotor do conjunto ventilador


159

Figura 11 Motor do rotor.

Figura 12 Rotor acoplado ao motor.


160

Figura 13 Suporte do motor.

Figura 13 Vista explodida do conjunto ventilador.


161

.
Figura 14 Sistema de gua gelada

Figura 15 Reservatrio de gua.


162

Figura 16 Suportes da vlvula e do reservatrio.

Figura 17 Sistema de gua gelada sem o reservatrio.


163

.
Figura 18 Vista isomtrica do trocador de calor.

Figura 19 Trocador de calor.


164

Figura 20 Bomba de gua.

Figura 21 Vlvula proporcional servomotora.


165

Figura 22 Conjunto vlvula.

Figura 23 Sistema de climatizao.


166

Figura 24 Prottipo completo.

Figura 25 Galpo.
167

Figura 26 Tampa do galpo.

Figura 27 Vista traseira do Prottipo.


168

Figura 28 Vista frontal do prottipo.

Figura 29 Vista lateral do prottipo.


169

Figura 30 Vista superior do prottipo sem a tampa.

Figura 31 Vista explodida do prottipo.


170

APNDICE B CDIGO FONTE SERVIDOR HTTP

Index.htm

<link href="mchp.css" rel="stylesheet" type="text/css" />


~inc:header.inc~

<div id="content">

<div id="status">
<div id="loading" style="display:none">Erro:<br />Conexo com a Placa foi
perdida.</div>
<div id="display">
<p>Temperatura: <span id="temp0" style="font-
weight:normal">?</span>&deg;C</p>
<p>Setpoint: <span id="setpoint" style="font-
weight:normal">?</span>&deg;C</p>
<p>Sinal Erro: <span id="erro" style="font-
weight:normal">?</span>&deg;C</p>
<p>kP: <span id="kp" style="font-weight:normal">?</span></p>
<p>kI: <span id="ki" style="font-weight:normal">?</span></p>
<p>kD: <span id="kd" style="font-weight:normal">?</span></p>
<p>Ganho kP: <span id="gkp" style="font-weight:normal">?</span></p>
<p>Ganho kI: <span id="gki" style="font-weight:normal">?</span></p>
<p>Ganho kD: <span id="gkd" style="font-weight:normal">?</span></p>
<p>Sinal PID: <span id="pid" style="font-weight:normal">?</span>%</p>
</div>

</div>
<p></p>
<h1 align="center">Planta do Sistema</h1>
<p><br /></p>
<div class="figura" style="padding:0 0 5px 5px; float:inherit; " ><img
src="/galpao.png" alt="Maquete" /></div>

<table style="padding-left: 10px;">


<div class="temperatura"><p><b>Temp: <span id="temp" style="font-
weight:normal">?</span>&deg;C</b></p></div>
</table>

<table style="padding-left: 10px;">


<div class="valvula"><p><b>Valv:<span id="valv" style="font-
weight:normal">?</span>%</b></p></div>
</table>

<table style="padding-left: 10px;">


<div class="cag"><p><b>Central de &Aacute;gua Gelada</b></p></div>
</table>

<table style="padding-left: 10px;">


<div id="ventilador">
<p>Ventilador:<span class="leds">
<a id="led7" onclick="newAJAXCommand('leds.cgi?led=7');">&bull;</a>
</span></p></div>
</table>

<table style="padding-left: 10px;">


<td ><div id="pvalv"class="pvalv"><p></p></div></td>
</table>

</div>
171

<script type="text/javascript">
<!--
// Parses the xmlResponse from status.xml and updates the status box
function updateStatus(xmlData) {

// Check if a timeout occurred


if(!xmlData)
{
document.getElementById('display').style.display = 'none';
document.getElementById('loading').style.display = 'inline';
return;
}

// Make sure we're displaying the status display


document.getElementById('loading').style.display = 'none';
document.getElementById('display').style.display = 'inline';

// Loop over all the LED

if(getXMLValue(xmlData, 'led7') == '1')


document.getElementById('led7').style.color = '#090';
else
document.getElementById('led7').style.color = '#ddd';

document.getElementById('temp0').innerHTML = getXMLValue(xmlData, 'temp0');


document.getElementById('temp').innerHTML = getXMLValue(xmlData, 'temp0');
document.getElementById('setpoint').innerHTML = getXMLValue(xmlData,
'setpoint');
document.getElementById('erro').innerHTML = getXMLValue(xmlData, 'erro');
document.getElementById('kp').innerHTML = getXMLValue(xmlData, 'kp');
document.getElementById('ki').innerHTML = getXMLValue(xmlData, 'ki');
document.getElementById('kd').innerHTML = getXMLValue(xmlData, 'kd');
document.getElementById('gkp').innerHTML = getXMLValue(xmlData, 'gkp');
document.getElementById('gki').innerHTML = getXMLValue(xmlData, 'gki');
document.getElementById('gkd').innerHTML = getXMLValue(xmlData, 'gkd');
document.getElementById('pid').innerHTML = getXMLValue(xmlData, 'pid');
document.getElementById('valv').innerHTML = getXMLValue(xmlData, 'pid');
document.getElementById('pvalv').style.width = getXMLValue(xmlData, 'pid');
}

setTimeout("newAJAXCommand('status.xml', updateStatus, true)",500);


//-->
</script>

<script type="text/javascript">
<!--
document.getElementById('hello').innerHTML = "~hellomsg~";
//-->
</script>

~inc:footer.inc~

Header.inc

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"


"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>TCC - Climatiza&ccedil;&atilde;o Industrial com Controle PID e
Supervis&atilde;o Remota via Wev</title>
<link href="/mchp.css" rel="stylesheet" type="text/css" />
<script src="/mchp.js" type="text/javascript"></script>
172

</head>

<body>
<div id="shadow-one"><div id="shadow-two"><div id="shadow-three"><div id="shadow-
four">
<div id="page">

<div style="padding:0 0 5px 5px"><img src="/unip.gif" alt="UNIP" /></div>

<div id="title"><div class="right">TCC - Climatiza&ccedil;&atilde;o Industrial com


Controle PID e Supervis&atilde;o Remota</div></div>

<div id="menu">
<table cellspacing="0" cellpadding="0" >
<tr>
<td><a href="/index.htm">Home</a></td>
<td><a href="/forms.htm">Configura&ccedil;&atilde;o</a></td>
<td><a href="/grafico.htm">Gr&aacute;fico</a></td>
</tr>
</table>
</div>

Footer.inc

<div class="spacer">&nbsp;</div>
<div id="footer">Copyright &copy; 2012 Maciel, Inc.</div>

</div></div></div></div></div>

</body>
</html>

Forms.htm

~inc:header.inc~
<div id="content">
<p></p>
<h1 align="center">Configura&ccedil;&atilde;o de par&acirc;metros</h1>
<p><br /></p>
<table width="200" height="200" border="0" cellspacing="0" cellpadding="0"
align="center">
<form method="get" action="index.htm">
<tr>
<td><p><b>Setpoint:</b></p></td>
<td><input type="text" name="setpoint" value="~setpoint~" maxlength="4"
size="4" /></td>
</tr>
<tr>
<td><p><b>kp:</b></p></td>
<td><input type="text" name="kp" value="~kp~" maxlength="4" size="4" /></td>
</tr>
<tr>
<td><p><b>ki:</b></p></td>
<td><input type="text" name="ki" value="~ki~" maxlength="4" size="4" /></td>
</tr>
<tr>
<td><p><b>kd:</b></p></td>
<td><input type="text" name="kd" value="~kd~" maxlength="4" size="4" /></td>
</tr>
<tr>
<td >
<input type="submit" value="Salvar" style="margin-top:5px; float:right">
</td>
173

</tr>
</form>
</table>

</div>

<script type="text/javascript">
<!--
document.getElementById('hello').innerHTML = "~hellomsg~";
-->
</script>
~inc:footer.inc~

Grafico.htm

<link href="mchp.css" rel="stylesheet" type="text/css" />


~inc:header.inc~
<div id="content">
<p></p>
<h1 align="center">Gr&aacute;fico de Temperatura</h1>
<p><br /></p>
<div id="grafico" style="width: 720px;height: 300px;float: right;padding:
0px;margin: 0px;border: 0px 0px 2px 0px solid #fff;font-weight: bold;background:
#fff;">

<table height="300" width="720" cellspacing="0" cellpadding="0" >


<tr valign="bottom" >
<td width="5">
<div id="eixo"class="eixo"><p></p></div>
<div id="eixo"class="eixo"><p></p></div>
<div id="eixo"class="eixo"><p></p></div>
<div id="eixo"class="eixo"><p></p></div>
<div id="eixo"class="eixo"><p></p></div>
<div id="eixo"class="eixo"><p></p></div>
<div id="eixo"class="eixo"><p></p></div>
<div id="eixo"class="eixo"><p></p></div>
<div id="eixo"class="eixo"><p></p></div>
<div id="eixo"class="eixo"><p></p></div>
<div id="eixo"class="eixo"><p></p></div>
<div id="eixo"class="eixo"><p></p></div>
<div id="eixo"class="eixo"><p></p></div>
<div id="eixo"class="eixo"><p></p></div>
<div id="eixo"class="eixo"><p></p></div>
<div id="eixo"class="eixo"><p></p></div>
<div id="eixo"class="eixo"><p></p></div>
<div id="eixo"class="eixo"><p></p></div>
<div id="eixo"class="eixo"><p></p></div>
<div id="eixo"class="eixo"><p></p></div>
<div id="eixo"class="eixo"><p></p></div>
<div id="eixo"class="eixo"><p></p></div>
<div id="eixo"class="eixo"><p></p></div>
<div id="eixo"class="eixo"><p></p></div>
<div id="eixo"class="eixo"><p></p></div>
<div id="eixo"class="eixo"><p></p></div>
<div id="eixo"class="eixo"><p></p></div>
<div id="eixo"class="eixo"><p></p></div>
<div id="eixo"class="eixo"><p></p></div>
<div id="eixo"class="eixo"><p></p></div>
</td>
<td><div id="barra0"class="barras"><p>&nbsp;</p></div></td>
<td><div id="barra1"class="barras"><p>&nbsp;</p></div></td>
<td><div id="barra2"class="barras"><p>&nbsp;</p></div></td>
<td><div id="barra3"class="barras"><p>&nbsp;</p></div></td>
<td><div id="barra4"class="barras"><p>&nbsp;</p></div></td>
<td><div id="barra5"class="barras"><p>&nbsp;</p></div></td>
<td><div id="barra6"class="barras"><p>&nbsp;</p></div></td>
174

<td><div id="barra7"class="barras"><p>&nbsp;</p></div></td>
<td><div id="barra8"class="barras"><p>&nbsp;</p></div></td>
<td><div id="barra9"class="barras"><p>&nbsp;</p></div></td>
<td><div id="barra10"class="barras"><p>&nbsp;</p></div></td>
<td><div id="barra11"class="barras"><p>&nbsp;</p></div></td>
<td><div id="barra12"class="barras"><p>&nbsp;</p></div></td>
<td><div id="barra13"class="barras"><p>&nbsp;</p></div></td>
<td><div id="barra14"class="barras"><p>&nbsp;</p></div></td>
<td><div id="barra15"class="barras"><p>&nbsp;</p></div></td>
<td><div id="barra16"class="barras"><p>&nbsp;</p></div></td>
<td><div id="barra17"class="barras"><p>&nbsp;</p></div></td>
<td><div id="barra18"class="barras"><p>&nbsp;</p></div></td>
<td><div id="barra19"class="barras"><p>&nbsp;</p></div></td>
<td><div id="barra20"class="barras"><p>&nbsp;</p></div></td>
<td><div id="barra21"class="barras"><p>&nbsp;</p></div></td>
<td><div id="barra22"class="barras"><p>&nbsp;</p></div></td>
<td><div id="barra23"class="barras"><p>&nbsp;</p></div></td>
<td><div id="barra24"class="barras"><p>&nbsp;</p></div></td>
<td><div id="barra25"class="barras"><p>&nbsp;</p></div></td>
<td><div id="barra26"class="barras"><p>&nbsp;</p></div></td>
<td><div id="barra27"class="barras"><p>&nbsp;</p></div></td>
<td><div id="barra28"class="barras"><p>&nbsp;</p></div></td>
<td><div id="barra29"class="barras"><p>&nbsp;</p></div></td>
<td><div id="barra30"class="barras"><p>&nbsp;</p></div></td>
</tr></table>

<table cellspacing="0" cellpadding="0" >


<tr><td ><div id="barrasetp"class="setpoint"><p>&nbsp;</p></div></td></tr>
</table>

<table cellspacing="0" cellpadding="0" >


<tr><td ><div id="eixox"class="eixox"><p>&nbsp;</p></div></td></tr>
</table>

<table cellspacing="0" cellpadding="0" >


<tr><td ><div id="escala"class="escala"><p>60&deg;C</p></div></td></tr>
<tr><td ><div id="escala"class="escala"><p>50&deg;C</p></div></td></tr>
<tr><td ><div id="escala"class="escala"><p>40&deg;C</p></div></td></tr>
<tr><td ><div id="escala"class="escala"><p>30&deg;C</p></div></td></tr>
<tr><td ><div id="escala"class="escala"><p>20&deg;C</p></div></td></tr>
<tr><td ><div id="escala"class="escala"><p>10&deg;C</p></div></td></tr>
<tr><td ><div id="escala"class="escala"><p>00&deg;C</p></div></td></tr>
</table>
</div>

<script type="text/javascript">
<!--
// Parses the xmlResponse from status.xml and updates the status box
function updateStatus(xmlData) {

// Update the Barras value


document.getElementById('barra0').style.height = getXMLValue(xmlData,
'barra0');
document.getElementById('barra1').style.height = getXMLValue(xmlData,
'barra1');
document.getElementById('barra2').style.height = getXMLValue(xmlData,
'barra2');
document.getElementById('barra3').style.height = getXMLValue(xmlData,
'barra3');
document.getElementById('barra4').style.height = getXMLValue(xmlData,
'barra4');
document.getElementById('barra5').style.height = getXMLValue(xmlData,
'barra5');
document.getElementById('barra6').style.height = getXMLValue(xmlData,
'barra6');
document.getElementById('barra7').style.height = getXMLValue(xmlData,
'barra7');
document.getElementById('barra8').style.height = getXMLValue(xmlData,
175

'barra8');
document.getElementById('barra9').style.height = getXMLValue(xmlData,
'barra9');
document.getElementById('barra10').style.height = getXMLValue(xmlData,
'barra10');
document.getElementById('barra11').style.height = getXMLValue(xmlData,
'barra11');
document.getElementById('barra12').style.height = getXMLValue(xmlData,
'barra12');
document.getElementById('barra13').style.height = getXMLValue(xmlData,
'barra13');
document.getElementById('barra14').style.height = getXMLValue(xmlData,
'barra14');
document.getElementById('barra15').style.height = getXMLValue(xmlData,
'barra15');
document.getElementById('barra16').style.height = getXMLValue(xmlData,
'barra16');
document.getElementById('barra17').style.height = getXMLValue(xmlData,
'barra17');
document.getElementById('barra18').style.height = getXMLValue(xmlData,
'barra18');
document.getElementById('barra19').style.height = getXMLValue(xmlData,
'barra19');
document.getElementById('barra20').style.height = getXMLValue(xmlData,
'barra20');
document.getElementById('barra21').style.height = getXMLValue(xmlData,
'barra21');
document.getElementById('barra22').style.height = getXMLValue(xmlData,
'barra22');
document.getElementById('barra23').style.height = getXMLValue(xmlData,
'barra23');
document.getElementById('barra24').style.height = getXMLValue(xmlData,
'barra24');
document.getElementById('barra25').style.height = getXMLValue(xmlData,
'barra25');
document.getElementById('barra26').style.height = getXMLValue(xmlData,
'barra26');
document.getElementById('barra27').style.height = getXMLValue(xmlData,
'barra27');
document.getElementById('barra28').style.height = getXMLValue(xmlData,
'barra28');
document.getElementById('barra29').style.height = getXMLValue(xmlData,
'barra29');
document.getElementById('barra30').style.height = getXMLValue(xmlData,
'barra30');

document.getElementById('barrasetp').style.bottom = getXMLValue(xmlData,
'barrasetp');
}
setTimeout("newAJAXCommand('status.xml', updateStatus, true)",500);
//-->
</script>

<script type="text/javascript">
<!--
document.getElementById('hello').innerHTML = "~hellomsg~";
//-->
</script>

~inc:footer.inc~
176

Mchp.css

body {
font-family: Verdana, Arial, sans-serif;
background: #5b5b5b;
margin: 0px auto;
padding: 0 0 20px 0;}

#shadow-one {
width: 800px;
border: 1px solid #555;
border-top: 0;
margin: 0px auto;}
#shadow-two {
border: 1px solid #4b4b4b;
border-top: 0;}
#shadow-three {
border: 1px solid #444;
border-top: 0;}
#shadow-four {
border: 1px solid #3a3a3a;
border-top: 0;}

#page {
border: 1px solid #333;
background: #fff;
border-top: 0;
padding: 20px;
font-size: 10pt;}

#page td {
font-size: 10pt;}

#title {
background: #cc0;
padding: 4px;
font-weight: bold;
color: #fff;
margin-bottom: 4px;
height: 16px;}

#title .right {
float: right;
width: 500px;
text-align: right;}

#menu {
width: 750px;
background: #c00;
padding: 0px;
border-bottom: 1px solid #fff;
padding-right: 0px;}

#menu a {
float:left;
display: block;
background: #c00;
color: white;
padding: 5px;
font-weight: bold;
text-decoration: none;}

#menu a:hover {
float:left;
background: #d33;
padding: 5px;
177

font-weight: bold;
text-decoration: none;}

#content {
width: 750px;
float: top;
padding-right: 10px;}

#content a {
color: #c00;
text-decoration: none;}

#content a:hover {
color: #d33;
text-decoration: underline;}

#content h1 {
margin-top: 0px;}

.spacer {
clear: both;}

#footer {
font-size: 0.8em;
color: #666;
text-align: center;
margin: 10px 50px 0 50px;
padding-top: 10px;
border-top: 1px dotted #666;}

#status {
width: 175px;
float: right;
padding: 10px;
margin: 10px;
border: 1px dotted #666;
font-weight: bold;}

#status p {
padding: 5px 0 5px 10px;
text-indent: -10px;
margin: 0;}

#status .leds {
font-size: 14pt;}

#status .leds a {
color: #ddd;
cursor: pointer;}

#status .leds a:hover {


color: #ddd;
text-decoration: none;}

#ventilador{
font-size: 10pt;

width: 400px;
position:relative;
left: 330px;
top: -220px;
padding: 10px;
margin: 10px;
font-weight: bold;}

#ventilador p {
178

padding: 5px 0 5px 10px;


text-indent: -10px;
margin: 0;}

#ventilador .leds {
font-size: 14pt;}

#ventilador .leds a {
color: #ddd;
cursor: pointer;}

#ventilador .leds a:hover {


color: #ddd;
text-decoration: none;}

.eixo{
width: 5px;
font-size: 5pt;
vertical-align:bottom;
position:relative;
left: 0px;
bottom: 0px;
height:9px;
background: #fff;
border-style: solid;
border-color: #000 #000 #fff #fff;
border-width: 1px 2px 0px 0px; }
.escala{
width: 5px;
font-size: 5pt;
vertical-align:bottom;
position:relative;
left: -20px;
bottom: 307px;
height:50px;}

.figura{
position:relative;
left: 10px;
top: 0px;}
.temperatura{
font-size: 10pt;
position:relative;
left: 50px;
top: -105px;}

.valvula{
font-size: 10pt;
position:relative;
left: 430px;
top: -305px;}

.pvalv{
height:10px;
position:relative;
left: 410px;
top: -450px;
background: #0f0;
border-style: solid;
border-color: #000;
border-width: 2px ; }

.cag{
width: 100px;
color:#FFF;
font-size: 10pt;
text-align:center;
position:relative;
179

left: 405px;
top: -250px;}

.barras{
position:relative;
left: 0px;
bottom: 0px;
background: #fff;
border-style: solid;
border-color: #f00 #fff #fff #fff;
border-width: 2px 0px 0px;}

.setpoint{
height:0px;
width: 715px;
position:relative;
left: 5px;

background: #fff;
border-style: solid;
border-color: #00f #fff #fff #fff;
border-width: 2px 0px 0px;}

.eixox{
height:0px;
width: 715px;
position:relative;
left: 5px;

background: #fff;
border-style: solid;
border-color: #000 #fff #fff #fff;
border-width: 2px 0px 0px; }

.examplebox {
margin:10px 40px 10px 40px;
padding: 8px;
border: 1px dotted #333;
text-align:center;
background:#ddd;}

.code {
font-family: Courier New, Courier, fixed-width, fixed;}

.exercise {
background: #fe9;
padding: 5px;
margin-left: 10px;
border-left: 2px solid #eb3;}

.error {
margin-left: 10px;
padding: 10px;
background: #fdd;
border-left: 2px solid #900;}

#content h6 {
border-top: 1px dashed #333;
margin: 15px;
padding: 0px;
height: 1px;}

.examplebox td {
text-align:left;
padding-right: 15px;}

fieldset {
margin:10px 40px 10px 40px;
180

padding: 8px;
border: 1px dotted #333;
background:#ddd;}

fieldset div {
padding: 2px 0px 2px 150px;}

fieldset div label {


margin-left: -140px;
padding-top: 2px;
width: 135px;
font-weight: bold;
position: absolute;}

fieldset input {
width: 250px;}

fieldset input.sm {
width: auto;}

fieldset textarea {
width: 250px;}

.result
{
margin: 10px 40px 10px 40px;
padding: 8px;
border: 1px solid #333;
text-align: center;
font-weight: bold;
background: #eee;
}

.ok {
border-color: #6b6;
background: #efe;
}

.fail {
border-color: #b66;
background: #fee;
}

.unk {
border-color: #cc6;
background: #ffd;
}

Status.xml

<response>
<led7>~led(7)~</led7>
<temp0>~temp~</temp0>
<setpoint>~setpoint~</setpoint>
<erro>~erro~</erro>
<kp>~kp~</kp>
<ki>~ki~</ki>
<kd>~kd~</kd>
<gkp>~gkp~</gkp>
<gki>~gki~</gki>
<gkd>~gkd~</gkd>
<pid>~pid~</pid>
<barra0>~barra(0)~</barra0>
<barra1>~barra(1)~</barra1>
<barra2>~barra(2)~</barra2>
181

<barra3>~barra(3)~</barra3>
<barra4>~barra(4)~</barra4>
<barra5>~barra(5)~</barra5>
<barra6>~barra(6)~</barra6>
<barra7>~barra(7)~</barra7>
<barra8>~barra(8)~</barra8>
<barra9>~barra(9)~</barra9>
<barra10>~barra(10)~</barra10>
<barra11>~barra(11)~</barra11>
<barra12>~barra(12)~</barra12>
<barra13>~barra(13)~</barra13>
<barra14>~barra(14)~</barra14>
<barra15>~barra(15)~</barra15>
<barra16>~barra(16)~</barra16>
<barra17>~barra(17)~</barra17>
<barra18>~barra(18)~</barra18>
<barra19>~barra(19)~</barra19>
<barra20>~barra(20)~</barra20>
<barra21>~barra(21)~</barra21>
<barra22>~barra(22)~</barra22>
<barra23>~barra(23)~</barra23>
<barra24>~barra(24)~</barra24>
<barra25>~barra(25)~</barra25>
<barra26>~barra(26)~</barra26>
<barra27>~barra(27)~</barra27>
<barra28>~barra(28)~</barra28>
<barra29>~barra(29)~</barra29>
<barra30>~barra(30)~</barra30>
<barrasetp>~barrasetp~</barrasetp>
</response>
182

APNCIDE C CDIGO FONTE MODIFICADO DA PILHA TCPC/IP MICROCHIP

Main.c

#define THIS_IS_STACK_APPLICATION

// Inclui os arquivos de configurao TCP/IP


#include "TCPIP Stack/TCPIP.h"
// Incli arquivos especficos para esta aplicao
#include "Main.h"
#include "Math.h"
// Define a instncia da estrutura APP_CONFIG
APP_CONFIG AppConfig;
BYTE AN0String[8];

static void InitAppConfig(void);


static void InitializeBoard(void);
static void ProcessIO(void);

//Variveis do sistema
int j=0;
int i=0;

//Variveis de converso de temperatura do Sensor NTC 10K


signed float sensor;
signed float rntc;
signed float a=0.0011303;
signed float b=0.0002339;
signed float c=0.00000008863;
signed float b1,c1;
signed float temp;

//Variveis para estabilizao da temperatura lida


signed float temp1[31];
signed float temp_media;
int temp_arredonda;

//Variveis para clculo do controle PID


signed float setpoint=30;
signed float kp=10;
signed float ki=2;
signed float kd=2;
signed float proporcional = 0;
signed float integral = 0;
signed float integral_old =0;
signed float derivada = 0;
signed float erro;
signed float erro_1;
signed float periodo_t=3;
signed float pid;

//Variveis para criao de grfico no webserver


unsigned char barra[31] = {0};
unsigned char barrasetp;
183

//Variveis para controle do servomotor da vlvula de gua Gelada

/////////////////////////////////////////////////////////////////
//
// Duty: Largura Varivel: 0,5 2,5ms
// -+---+-
// | Frequncia do sinal: 50Hz = 20ms
// -+------------------------------------+
//
// +---+ +---+
// | | | |
// | | | |
// | | | |
// | | | |
// ------------+ +--------------------------------+ +--------
//
/////////////////////////////////////////////////////////////////
//Frequnaicia do Cristal: 25MHz
//Prescaler: / 3
//PLL: X 5
//Frequancia do Oscilador: 41666666,67Hz = 41,67MHz
//FOSC/4: 10416666,67Hz = 10,41MHz
/////////////////////////////////////////////////////////////////
//Timer1 : Responsvel pela largura do duty
//Prescaler: /1
//Carga do Timer:
// TMR1H = duty_high;
// TMR1L = duty_low;
/////////////////////////////////////////////////////////////////
//Timer3 : Responsvel pela Frequncia do PWM - 50Hz
//Prescaler: /8
//Carga do Timer:
// TMR3H = 0x9a;
// TMR3L = 0x46;
/////////////////////////////////////////////////////////////////

float duty_min=56277; //0,889ms :posio da Vlvula fechada para servo de


parbola (35)
float duty_max=49911; //0,25ms :posio da Vlvula totalmente aberta (90)
float duty_servo=0;
int duty;
int duty_low;
int duty_high;
int contador=0;

//Variveis de temporizao gerais


int contador1=0;
int contador3=0;

// Rotinas de interrupo
//Interrupes de baixa prioridade
#pragma interruptlow LowISR
void LowISR(void)
{
//Interrupo do Timer 3
//Determina a frequncia do PWM de controle do
//Servomotor da vlvula de gua Gelada - 50hz

if(PIR2bits.TMR3IF == 1)
{
SERVO_IO=1;
//Gera pulso de referncia para ajuste do Timer3
REF_TMR3_IO=~REF_TMR3_IO;
//Carrega no Timer3 o valor correspondente a 50hz
TMR3H = 0x9a;
TMR3L = 0x46;
184

//Carrega o Duty no Timer 1 sincronizado com o timer3


TMR1H = duty_high;
TMR1L = duty_low;
//Temporizador do programa
contador++;
//Reseta Timer3 para nova temporizao
PIR2bits.TMR3IF = 0;
}
//Temporizador do sistema
TickUpdate();
}
//Interrupes de alta prioridade
#pragma interruptlow HighISR
void HighISR(void)
{
//Interrupo do Timer 1
//Determina o tempo de descida do duty do PWM de controle do
//Servomotor da vlvula de gua Gelada
if(PIR1bits.TMR1IF == 1)
{
SERVO_IO=0;
//Gera pulso de referncia para ajuste do Timer1
REF_TMR1_IO=~REF_TMR1_IO;
//Reseta Timer1 para nova temporizao
PIR1bits.TMR1IF = 0;
}
}
//Redirecionamento das interrupes
#pragma code lowVector=0x18
void LowVector(void){_asm goto LowISR _endasm}
#pragma code highVector=0x8
void HighVector(void){_asm goto HighISR _endasm}
#pragma code

// Programa Principal
void main(void)
{
//Variveis utilizadas pela Pilha TCP/IP
static DWORD t = 0;
static DWORD dwLastIP = 0;

//Funo para configurao de Hardware


InitializeBoard();

// Funo de temporizao utilizada pela Pilha TCP/IP - Timer0


TickInit();

//Funo de inicializao dos arquivos MPFS


MPFSInit();

// Inicializo da estrutura APP_CONFIG


InitAppConfig();

// Inicializao dos mdulos (MAC, ARP, TCP, UDP, HTTP, SNMP, etc.)
StackInit();

//Lao principal
while(1)
{
//Temporizo para intervalo entre leituras de
//temperatura da planta do sistema
if( contador>= 50)
{

//Leitura do sensor de temperatura


185

ADCON0bits.GO = 1; //Habilita converso A/D


while(ADCON0bits.GO); //Aguarda trmino da Converso
A/D

//Converso da leitura do sensor em temperatura


sensor =ADRES;
sensor *=3.3;
sensor/=1023;
rntc=33000/sensor; //RNTC=(Vcc*R1/Vin)-R1
rntc=rntc-10000; //
b1=log(rntc); //LN(RNTC)
b1=b1*b; //b*LN(RNTC)
c1=log(rntc); //LN(RNTC)
c1=pow(c1,3); //LN(RNTC)^3
c1=c1*c; //c*(LN(RNTC)^3)
temp=a+b1+c1; //a+b*LN(RNTC)+c*(LN(RNTC)^3)
temp=1/temp;
//1/(a+b*LN(RNTC)+c*(LN(RNTC)^3))
temp=temp-273.15;

//Rotina para estabilizao da leitura do Sensor de Temperatura


temp1[j]=temp;
temp1[j]*=10;
temp_arredonda = temp1[j];
temp1[j] = temp_arredonda;
temp1[j]/=10;
j++;
if(j>=20){j=0;}

temp_media=temp1[0]+temp1[1]+temp1[2]+temp1[3]+temp1[4]+temp1[5]+temp1[6]+tem
p1[7]+temp1[8]+temp1[9]+temp1[10]+temp1[11]+temp1[12]+temp1[13]+temp1[14]+temp1[15]
+temp1[16]+temp1[17]+temp1[18]+temp1[19];
temp_media/=20;
temp_media*=10;
temp_arredonda =temp_media;
temp_media = temp_arredonda;
temp_media/=10;

//Carrega variveis do grfico do WebServer


barra[30]= temp_media *5;
for(i=0;i<30;i++)
{barra[i]=barra[i+1];}
barrasetp = setpoint * 5;

//Controle PID

//Clculo erro do sistema : Erro = Sada - Entrada


erro=temp_media - setpoint;
erro_1=erro;

//Clculo do controle Proporcional


proporcional=kp*erro;

//Clculo do controle Integral


//Delimita o clculo integral em relao ao resultado final do
PID
if(pid<100)
{
if(pid>0)
{
integral=integral_old+ki*(erro_1+erro)/2*periodo_t;
}
}

//Delimita o resultado integral


if(integral<0){integral=0;}
if(integral>100){integral=100;}
integral_old=integral;
186

//Clculo do controle Derivada


derivada=kd*(erro-erro_1)/periodo_t;

//Somatria das parcelas P + I + D


pid=proporcional+integral+derivada;

//Delimita o resultado final


if(pid>100){pid=100;}
if(pid<0) {pid=0;}

//Controle da Vlvula de gua Gelada


duty_servo=((pid/100)*(duty_max - duty_min))+duty_min;
duty = duty_servo;

//Define a durao do duty, setando o timer1 e SERVO_IO

//Byte menos significativo


duty_low = 256 & duty;

//Byte mais significativo


duty_high = (65280 & duty)/256;
}

// Funes relacionadas Pilha TCP/IP


StackTask();
StackApplications();
ProcessIO();
}
}

//Funo de configurao do Hardware utilizado

static void InitializeBoard(void)


{

// LEDs
LED0_TRIS = 0;
// Servo
SERVO_TRIS = 0;
// Referencia do Timer1
REF_TMR1_TRIS =0;
// Referencia do Timer1
REF_TMR3_TRIS =0;

// Configura Clock do sistema 4x/5x/96MHz PLL


OSCTUNE = 0x40;

// Configurao do Conversor A/D


ADCON0bits.ADCAL = 0; // A/D Calibration bit
ADCON0bits.CHS3 = 0; //<3:0>: Analog Channel Select bits
ADCON0bits.CHS2 = 0;
ADCON0bits.CHS1 = 1;
ADCON0bits.CHS0 = 0;
ADCON0bits.GO =0; //DONE: A/D Conversion Status bit
ADCON0bits.ADON = 1; //A/D On bit

ADCON1bits.VCFG1 = 0; // Voltage Reference Configuration bit (VREF-


source)
ADCON1bits.VCFG0 = 0; // Voltage Reference Configuration bit (VREF+
source)
ADCON1bits.PCFG3 = 0; //<3:0>: A/D Port Configuration Control bits:
ADCON1bits.PCFG2 = 0;
ADCON1bits.PCFG1 = 0;
ADCON1bits.PCFG0 = 0;

ADCON2bits.ADFM = 1; //A/D Result Format Select bit


ADCON2bits.ACQT2 =0; //<2:0> A/D Acquisition Time Select bits
187

ADCON2bits.ACQT1 =0;
ADCON2bits.ACQT0 =1;
ADCON2bits.ADCS2 =0; //<2:0> A/D Conversion Clock Select bits
ADCON2bits.ADCS1 =1;
ADCON2bits.ADCS0 =0;

//Comfigurao dos comparadores internos


CMCONbits.C2OUT = 0; //Comparator 2 Output bit
CMCONbits.C1OUT = 0; //Comparator 1 Output bit
CMCONbits.C2INV = 0; //Comparator 2 Output Inversion bit
CMCONbits.C1INV = 0; //Comparator 1 Output Inversion bit
CMCONbits.CIS = 0; //Comparator Input Switch bit
CMCONbits.CM2 = 1; //<2:0> Comparator Mode bits
CMCONbits.CM1 = 1;
CMCONbits.CM0 = 1;

// configurao das Interrupes


RCONbits.IPEN = 1; // Habilita prioridad entre interrupes
INTCONbits.GIEH = 1;
INTCONbits.GIEL = 1;

//Configurao do Timer1
T1CONbits.RD16 =1;
T1CONbits.T1RUN = 0;
T1CONbits.T1CKPS1 = 0;
T1CONbits.T1CKPS0 = 0;
T1CONbits.T1OSCEN = 0;
T1CONbits.T1SYNC = 1;
T1CONbits.TMR1CS = 0;
T1CONbits.TMR1ON = 1;

PIR1bits.TMR1IF = 0; //TMR1 Overflow Interrupt Flag bit


IPR1bits.TMR1IP = 1; //TMR1 Overflow Interrupt Priority bit
PIE1bits.TMR1IE = 1; //TMR1 Overflow Interrupt Enable bit

//Configurao do Timer3
PIR2bits.TMR3IF = 0; // TMR3 Overflow Interrupt Flag bit
PIE2bits.TMR3IE = 1; // TMR3 Overflow Interrupt Enable bit
IPR2bits.TMR3IP = 0; // TMR3 Overflow Interrupt Priority bit

T3CONbits.RD16 =1; // 16-Bit Read/Write Mode Enable bit


T3CONbits.T3CKPS1 = 1; // Timer3 Input Clock Prescale Select bits
T3CONbits.T3CKPS0 = 1; // Timer3 Input Clock Prescale Select bits
T3CONbits.T3SYNC = 1; // Timer3 External Clock Input Synchronization
Select bit
T3CONbits.TMR3CS = 0; // Timer3 Clock Source Select bit
T3CONbits.TMR3ON = 1; // Timer3 On bit

//Configuraes relacionadas utilizao de EEPROM externa


#if defined(SPIRAM_CS_TRIS)
SPIRAMInit();
#endif
#if defined(EEPROM_CS_TRIS)
XEEInit();
#endif
#if defined(SPIFLASH_CS_TRIS)
SPIFlashInit();
#endif
}

// MAC Address Serialization using a MPLAB PM3 Programmer and


// Serialized Quick Turn Programming (SQTP).
// The advantage of using SQTP for programming the MAC Address is it
// allows you to auto-increment the MAC address without recompiling
// the code for each unit. To use SQTP, the MAC address must be fixed
// at a specific location in program memory. Uncomment these two pragmas
// that locate the MAC address at 0x1FFF0. Syntax below is for MPLAB C
188

// Compiler for PIC18 MCUs. Syntax will vary for other compilers.
//#pragma romdata MACROM=0x1FFF0
static ROM BYTE SerializedMACAddress[6] = {MY_DEFAULT_MAC_BYTE1,
MY_DEFAULT_MAC_BYTE2, MY_DEFAULT_MAC_BYTE3, MY_DEFAULT_MAC_BYTE4,
MY_DEFAULT_MAC_BYTE5, MY_DEFAULT_MAC_BYTE6};
//#pragma romdata

static void InitAppConfig(void)


{
AppConfig.Flags.bIsDHCPEnabled = FALSE;
AppConfig.Flags.bInConfigMode = TRUE;
memcpypgm2ram((void*)&AppConfig.MyMACAddr, (ROM void*)SerializedMACAddress,
sizeof(AppConfig.MyMACAddr));
AppConfig.MyIPAddr.Val = MY_DEFAULT_IP_ADDR_BYTE1 |
MY_DEFAULT_IP_ADDR_BYTE2<<8ul | MY_DEFAULT_IP_ADDR_BYTE3<<16ul |
MY_DEFAULT_IP_ADDR_BYTE4<<24ul;
AppConfig.DefaultIPAddr.Val = AppConfig.MyIPAddr.Val;
AppConfig.MyMask.Val = MY_DEFAULT_MASK_BYTE1 | MY_DEFAULT_MASK_BYTE2<<8ul |
MY_DEFAULT_MASK_BYTE3<<16ul | MY_DEFAULT_MASK_BYTE4<<24ul;
AppConfig.DefaultMask.Val = AppConfig.MyMask.Val;
AppConfig.MyGateway.Val = MY_DEFAULT_GATE_BYTE1 | MY_DEFAULT_GATE_BYTE2<<8ul
| MY_DEFAULT_GATE_BYTE3<<16ul | MY_DEFAULT_GATE_BYTE4<<24ul;
AppConfig.PrimaryDNSServer.Val = MY_DEFAULT_PRIMARY_DNS_BYTE1 |
MY_DEFAULT_PRIMARY_DNS_BYTE2<<8ul | MY_DEFAULT_PRIMARY_DNS_BYTE3<<16ul |
MY_DEFAULT_PRIMARY_DNS_BYTE4<<24ul;
AppConfig.SecondaryDNSServer.Val = MY_DEFAULT_SECONDARY_DNS_BYTE1 |
MY_DEFAULT_SECONDARY_DNS_BYTE2<<8ul | MY_DEFAULT_SECONDARY_DNS_BYTE3<<16ul |
MY_DEFAULT_SECONDARY_DNS_BYTE4<<24ul;

// Load the default NetBIOS Host Name


memcpypgm2ram(AppConfig.NetBIOSName, (ROM void*)MY_DEFAULT_HOST_NAME, 16);
FormatNetBIOSName(AppConfig.NetBIOSName);

#if defined(EEPROM_CS_TRIS)
{
BYTE c;
XEEReadArray(0x0000, &c, 1);
if(c == 0x60u)
XEEReadArray(0x0001, (BYTE*)&AppConfig, sizeof(AppConfig));
else
SaveAppConfig();
}
#elif defined(SPIFLASH_CS_TRIS)
{
BYTE c;

SPIFlashReadArray(0x0000, &c, 1);


if(c == 0x60u)
SPIFlashReadArray(0x0001, (BYTE*)&AppConfig, sizeof(AppConfig));
else
SaveAppConfig();
}
#endif

#if defined(EEPROM_CS_TRIS) || defined(SPIFLASH_CS_TRIS)


void SaveAppConfig(void)
{
// Ensure adequate space has been reserved in non-volatile storage to
// store the entire AppConfig structure. If you get stuck in this while(1)
// trap, it means you have a design time misconfiguration in TCPIPConfig.h.
// You must increase MPFS_RESERVE_BLOCK to allocate more space.
#if defined(STACK_USE_MPFS) || defined(STACK_USE_MPFS2)
if(sizeof(AppConfig) > MPFS_RESERVE_BLOCK)
while(1);
#endif
189

#if defined(EEPROM_CS_TRIS)
XEEBeginWrite(0x0000);
XEEWrite(0x60);
XEEWriteArray((BYTE*)&AppConfig, sizeof(AppConfig));
#else
SPIFlashBeginWrite(0x0000);
SPIFlashWrite(0x60);
SPIFlashWriteArray((BYTE*)&AppConfig, sizeof(AppConfig));
#endif
}
#endif

//Funes de comunicao com o Web Server

void HTTPPrint_temp(void)
{
char tmpBuff[6];
if(temp_media>=0)
{
sprintf(tmpBuff, "%d.%d",(char)temp_media,(char)((temp_media-
(char)temp_media)*100));
}
else
{
auto float temp_media_n;
temp_media_n= temp_media* (-1);
sprintf(tmpBuff, "-%d.%d",(char)temp_media_n,(char)((temp_media_n-
(char)temp_media_n)*100));
}
TCPPutString(sktHTTP, (BYTE*)tmpBuff);
}

void HTTPPrint_setpoint(void)
{
char tmpBuff[6];
sprintf(tmpBuff, "%d.%d",(char)setpoint,(char)((setpoint-(char)setpoint)*100));
TCPPutString(sktHTTP, (BYTE*)tmpBuff);
}

void HTTPPrint_erro(void)
{
char tmpBuff[6];
if(erro>=0)
{
sprintf(tmpBuff, "%d.%d",(char)erro,(char)((erro-(char)erro)*100));
}
else
{
auto float erro_n;
erro_n= erro* (-1);
sprintf(tmpBuff, "-%d.%d",(char)erro_n,(char)((erro_n-(char)erro_n)*100));
}
TCPPutString(sktHTTP, (BYTE*)tmpBuff);
}

void HTTPPrint_kp(void)
{
char tmpBuff[6];
if(kp>=0)
{
sprintf(tmpBuff, "%d.%d",(char)kp,(char)((kp-(char)kp)*100));
}
else
{
auto float kp_n;
kp_n= kp* (-1);
190

sprintf(tmpBuff, "-%d.%d",(char)kp_n,(char)((kp_n-(char)kp_n)*100));
}
TCPPutString(sktHTTP, (BYTE*)tmpBuff);
}

void HTTPPrint_ki(void)
{
char tmpBuff[6];
if(ki>=0)
{
sprintf(tmpBuff, "%d.%d",(char)ki,(char)((ki-(char)ki)*100));
}
else
{
auto float ki_n;
ki_n= ki* (-1);
sprintf(tmpBuff, "-%d.%d",(char)ki_n,(char)((ki_n-(char)ki_n)*100));
}
TCPPutString(sktHTTP, (BYTE*)tmpBuff);
}

void HTTPPrint_kd(void)
{
char tmpBuff[6];
if(kd>=0)
{
sprintf(tmpBuff, "%d.%d",(char)kd,(char)((kd-(char)kd)*100));
}
else
{
auto float kd_n;
kd_n= kd* (-1);
sprintf(tmpBuff, "-%d.%d",(char)kd_n,(char)((kd_n-(char)kd_n)*100));
}
TCPPutString(sktHTTP, (BYTE*)tmpBuff);
}

void HTTPPrint_gkp(void)
{
char tmpBuff[6];
if(proporcional>=0)
{
sprintf(tmpBuff, "%d.%d",(char)proporcional,(char)((proporcional-
(char)proporcional)*100));
}
else
{
auto float proporcional_n;
proporcional_n= proporcional* (-1);
sprintf(tmpBuff, "-%d.%d",(char)proporcional_n,(char)((proporcional_n-
(char)proporcional_n)*100));
}
TCPPutString(sktHTTP, (BYTE*)tmpBuff);
}

void HTTPPrint_gki(void)
{
char tmpBuff[6];
if(integral>=0)
{
sprintf(tmpBuff, "%d.%d",(char)integral,(char)((integral-(char)integral)*100));
}
else
{
auto float integral_n;
integral_n= integral* (-1);
sprintf(tmpBuff, "-%d.%d",(char)integral_n,(char)((integral_n-
(char)integral_n)*100));
191

}
TCPPutString(sktHTTP, (BYTE*)tmpBuff);
}

void HTTPPrint_gkd(void)
{
char tmpBuff[6];
if(derivada>=0)
{
sprintf(tmpBuff, "%d.%d",(char)derivada,(char)((derivada-(char)derivada)*100));
}
else
{
auto float derivada_n;
derivada_n= derivada* (-1);
sprintf(tmpBuff, "-%d.%d",(char)derivada_n,(char)((derivada_n-
(char)derivada_n)*100));
}
TCPPutString(sktHTTP, (BYTE*)tmpBuff);
}

void HTTPPrint_pid(void)
{
char tmpBuff[6];
sprintf(tmpBuff, "%d.%d",(char)pid,(char)((pid-(char)pid)*100));
TCPPutString(sktHTTP, (BYTE*)tmpBuff);
}

void HTTPPrint_conta(void)
{
char tmpBuff[6];
sprintf(tmpBuff, "%d",(char)contador3);
TCPPutString(sktHTTP, (BYTE*)tmpBuff);
}

void HTTPPrint_barra(WORD num)


{
char tmpBuff[6];
if(barra[num]>=0)
{
sprintf(tmpBuff, "%d.%d",(char)barra[num],(char)((barra[num]-
(char)barra[num])*100));
}
else
{
sprintf(tmpBuff, "%d",0);
}
TCPPutString(sktHTTP, (BYTE*)tmpBuff);
}

void HTTPPrint_barrasetp(void)
{
char tmpBuff[6];
if(barrasetp>=0)
{
sprintf(tmpBuff, "%d.%d",(char)barrasetp,(char)((barrasetp-(char)barrasetp)*100));
}
else
{
sprintf(tmpBuff, "%d",0);
}
TCPPutString(sktHTTP, (BYTE*)tmpBuff);
}

//Funo mtodo GET utilizado para modificao dos


//parmetros atravs do WEB server

HTTP_IO_RESULT HTTPExecuteGet(void)
192

{
BYTE *ptr;
BYTE filename[20];

// Load the file name


// Make sure BYTE filename[]
//above is large enough for your longest name
MPFSGetFilename(curHTTP.file, filename, 20);

// If its the index.htm page


if(!memcmppgm2ram(filename, "index.htm", 9))
{
ptr = HTTPGetROMArg(curHTTP.data, (ROM BYTE *)"setpoint");
if(ptr)
setpoint = atof(ptr);

ptr = HTTPGetROMArg(curHTTP.data, (ROM BYTE *)"kp");


if(ptr)
kp = atof(ptr);

ptr = HTTPGetROMArg(curHTTP.data, (ROM BYTE *)"ki");


if(ptr)
ki = atof(ptr);

ptr = HTTPGetROMArg(curHTTP.data, (ROM BYTE *)"kd");


if(ptr)
kd = atof(ptr);
}

return HTTP_IO_DONE;
}

HardwareProfile.h

#ifndef __HARDWARE_PROFILE_H
#define __HARDWARE_PROFILE_H

#include "GenericTypeDefs.h"
#include "Compiler.h"

#define TCC_BOARD

// Set configuration fuses (but only once)


#if defined(THIS_IS_STACK_APPLICATION)
#pragma config XINST=OFF
#pragma config WDT=OFF, FOSC2=ON, FOSC=HSPLL, ETHLED=ON
#endif // Prevent more than one set of config fuse definitions

// Clock frequency value.


// This value is used to calculate Tick Counter value
#define GetSystemClock() (41666667ul) // Hz
#define GetInstructionClock() (GetSystemClock()/4)
#define GetPeripheralClock() GetInstructionClock()

// Hardware mappings
// PIC18F67J60 based, microchip eeprom, 4 LED, 4 button

// I/O pins
#define SERVO_TRIS (TRISBbits.TRISB3)
//Servo M
#define SERVO_IO (LATBbits.LATB3)

#define REF_TMR1_TRIS (TRISBbits.TRISB1)


//Referencia do Timer1
#define REF_TMR1_IO (LATBbits.LATB1)
193

#define REF_TMR3_TRIS (TRISEbits.TRISE0)


//Referencia do Timer3
#define REF_TMR3_IO (LATEbits.LATE0)

#define LED0_TRIS (TRISCbits.TRISC0)


#define LED0_IO (LATCbits.LATC0)
#define LED1_TRIS (TRISCbits.TRISC1)
#define LED1_IO (LATCbits.LATC1)
#define LED2_TRIS (TRISEbits.TRISE2)
#define LED2_IO (LATEbits.LATE2)
#define LED3_TRIS (TRISEbits.TRISE3)
#define LED3_IO (LATEbits.LATE3)
#define LED4_TRIS (TRISEbits.TRISE4) // No
LED4 on this board
#define LED4_IO (LATEbits.LATE4)
#define LED5_TRIS (TRISEbits.TRISE5) // No
LED5 on this board
#define LED5_IO (LATEbits.LATE5)
#define LED6_TRIS (TRISDbits.TRISD0) // No
LED6 on this board
#define LED6_IO (LATDbits.LATD0)
#define LED7_TRIS (TRISDbits.TRISD1) // No
LED7 on this board
#define LED7_IO (LATDbits.LATD1)
#define LED_GET() (LED0_IO)
#define LED_PUT(a) (LED0_IO = (a))

#define BUTTON0_TRIS (TRISBbits.TRISB4)


#define BUTTON0_IO (PORTBbits.RB4)
#define BUTTON1_TRIS (TRISBbits.TRISB5)
#define BUTTON1_IO (PORTBbits.RB5)
#define BUTTON2_TRIS (TRISBbits.TRISB6)
#define BUTTON2_IO (PORTBbits.RB6)
#define BUTTON3_TRIS (TRISBbits.TRISB7)
#define BUTTON3_IO (PORTBbits.RB7)

// Si se usa eeprom sacar comentario a la siguiente linea...


// #define EEPROM_CS_TRIS (TRISCbits.TRISC2)
#define EEPROM_CS_IO (LATCbits.LATC2)
#define EEPROM_SCK_TRIS (TRISCbits.TRISC3)
#define EEPROM_SDI_TRIS (TRISCbits.TRISC4)
#define EEPROM_SDO_TRIS (TRISCbits.TRISC5)
#define EEPROM_SPI_IF (PIR1bits.SSPIF)
#define EEPROM_SSPBUF (SSPBUF)
#define EEPROM_SPICON1 (SSP1CON1)
#define EEPROM_SPICON1bits (SSP1CON1bits)
#define EEPROM_SPICON2 (SSP1CON2)
#define EEPROM_SPISTAT (SSP1STAT)
#define EEPROM_SPISTATbits (SSP1STATbits)

// UART mapping functions for consistent API names across 8-bit and 16 or
// 32 bit compilers. For simplicity, everything will use "UART" instead
// of USART/EUSART/etc.
#define BusyUART() BusyUSART()
#define CloseUART() CloseUSART()
#define ConfigIntUART(a) ConfigIntUSART(a)
#define DataRdyUART() DataRdyUSART()
#define OpenUART(a,b,c) OpenUSART(a,b,c)
#define ReadUART() ReadUSART()
#define WriteUART(a) WriteUSART(a)
#define getsUART(a,b,c) getsUSART(b,a)
#define putsUART(a) putsUSART(a)
#define getcUART() ReadUSART()
#define putcUART(a) WriteUSART(a)
#define putrsUART(a) putrsUSART((far rom char*)a)

#endif
194

TCPIPConfig.h

#ifndef __TCPIPCONFIG_H
#define __TCPIPCONFIG_H

#include "GenericTypeDefs.h"
#include "Compiler.h"
#define GENERATED_BY_TCPIPCONFIG "Version 1.0.3603.26345"

// =======================================================================
// Application Options
// =======================================================================

/* Application Level Module Selection


* Uncomment or comment the following lines to enable or
* disabled the following high-level application modules.
*/
//#define STACK_USE_UART // Application demo using UART
for IP address display and stack configuration
//#define STACK_USE_UART2TCP_BRIDGE // UART to TCP Bridge application
example
//#define STACK_USE_IP_GLEANING
#define STACK_USE_ICMP_SERVER // Ping query and response capability
#define STACK_USE_ICMP_CLIENT // Ping transmission capability
//#define STACK_USE_HTTP_SERVER // Old HTTP server
#define STACK_USE_HTTP2_SERVER // New HTTP server with POST, Cookies,
Authentication, etc.
//#define STACK_USE_SSL_SERVER // SSL server socket support (Requires
SW300052)
//#define STACK_USE_SSL_CLIENT // SSL client socket support (Requires
SW300052)
//#define STACK_USE_AUTO_IP // Dynamic link-layer IP address
automatic configuration protocol
//#define STACK_USE_DHCP_CLIENT // Dynamic Host Configuration Protocol
client for obtaining IP address and other parameters
//#define STACK_USE_DHCP_SERVER // Single host DHCP server
//#define STACK_USE_FTP_SERVER // File Transfer Protocol (old)
//#define STACK_USE_SMTP_CLIENT // Simple Mail Transfer Protocol for
sending email
//#define STACK_USE_SNMP_SERVER // Simple Network Management Protocol
v2C Community Agent
//#define STACK_USE_TFTP_CLIENT // Trivial File Transfer Protocol
client
//#define STACK_USE_GENERIC_TCP_CLIENT_EXAMPLE // HTTP Client example in
GenericTCPClient.c
//#define STACK_USE_GENERIC_TCP_SERVER_EXAMPLE // ToUpper server example in
GenericTCPServer.c
//#define STACK_USE_TELNET_SERVER // Telnet server
#define STACK_USE_ANNOUNCE // Microchip Embedded Ethernet Device
Discoverer server/client
//#define STACK_USE_DNS // Domain Name Service Client
for resolving hostname strings to IP addresses
#define STACK_USE_NBNS // NetBIOS Name Service Server
for repsonding to NBNS hostname broadcast queries
#define STACK_USE_REBOOT_SERVER // Module for resetting this PIC
remotely. Primarily useful for a Bootloader.
//#define STACK_USE_SNTP_CLIENT // Simple Network Time Protocol for
obtaining current date/time from Internet
//#define STACK_USE_UDP_PERFORMANCE_TEST // Module for testing UDP TX
performance characteristics. NOTE: Enabling this will cause a huge amount of UDP
broadcast packets to flood your network on the discard port. Use care when
enabling this on production networks, especially with VPNs (could tunnel broadcast
traffic across a limited bandwidth connection).
//#define STACK_USE_TCP_PERFORMANCE_TEST // Module for testing TCP TX
performance characteristics
//#define STACK_USE_DYNAMICDNS_CLIENT // Dynamic DNS client updater module
//#define STACK_USE_BERKELEY_API // Berekely Sockets APIs are available
195

// =======================================================================
// Data Storage Options
// =======================================================================

/* MPFS Configuration
* MPFS is automatically included when required for other
* applications. If your custom application requires it
* otherwise, uncomment the appropriate selection.
*/
//#define STACK_USE_MPFS
#define STACK_USE_MPFS2

/* MPFS Storage Location


* If html pages are stored in internal program memory,
* comment both MPFS_USE_EEPROM and MPFS_USE_SPI_FLASH, then
* include an MPFS image (.c or .s file) in the project.
* If html pages are stored in external memory, uncomment the
* appropriate definition.
*
* Supported serial flash parts include the SST25VFxxxB series.
*/
//#define MPFS_USE_EEPROM
//#define MPFS_USE_SPI_FLASH

/* EEPROM Addressing Selection


* If using the 1Mbit EEPROM, uncomment this line
*/
//#define USE_EEPROM_25LC1024

/* EEPROM Reserved Area


* Number of EEPROM bytes to be reserved before MPFS storage starts.
* These bytes host application configurations such as IP Address,
* MAC Address, and any other required variables.
*
* For MPFS Classic, this setting must match the Reserved setting
* on the Advanced Settings page of the MPFS2 Utility.
*/
#define MPFS_RESERVE_BLOCK (137ul)

/* MPFS File Handles


* Maximum number of simultaneously open MPFS2 files.
* For MPFS Classic, this has no effect.
*/
#define MAX_MPFS_HANDLES (7ul)

// =======================================================================
// Network Addressing Options
// =======================================================================

/* Default Network Configuration


* These settings are only used if data is not found in EEPROM.
* To clear EEPROM, hold BUTTON0, reset the board, and continue
* holding until the LEDs flash. Release, and reset again.
*/
#define MY_DEFAULT_HOST_NAME "UNIP"

#define MY_DEFAULT_MAC_BYTE1 (0x00) // Use the default of


#define MY_DEFAULT_MAC_BYTE2 (0x04) // 00-04-A3-00-00-00 if using
#define MY_DEFAULT_MAC_BYTE3 (0xA3) // an ENCX24J600 or ZeroG
ZG2100
#define MY_DEFAULT_MAC_BYTE4 (0x00) // and wish to use the internal
#define MY_DEFAULT_MAC_BYTE5 (0x00) // factory programmed MAC
#define MY_DEFAULT_MAC_BYTE6 (0x00) // address instead.

#define MY_DEFAULT_IP_ADDR_BYTE1 (192ul)


#define MY_DEFAULT_IP_ADDR_BYTE2 (168ul)
#define MY_DEFAULT_IP_ADDR_BYTE3 (1ul)
196

#define MY_DEFAULT_IP_ADDR_BYTE4 (111ul)

#define MY_DEFAULT_MASK_BYTE1 (255ul)


#define MY_DEFAULT_MASK_BYTE2 (255ul)
#define MY_DEFAULT_MASK_BYTE3 (255ul)
#define MY_DEFAULT_MASK_BYTE4 (0ul)

#define MY_DEFAULT_GATE_BYTE1 (192ul)


#define MY_DEFAULT_GATE_BYTE2 (168ul)
#define MY_DEFAULT_GATE_BYTE3 (1ul)
#define MY_DEFAULT_GATE_BYTE4 (1ul)

#define MY_DEFAULT_PRIMARY_DNS_BYTE1 (192ul)


#define MY_DEFAULT_PRIMARY_DNS_BYTE2 (168ul)
#define MY_DEFAULT_PRIMARY_DNS_BYTE3 (1ul)
#define MY_DEFAULT_PRIMARY_DNS_BYTE4 (1ul)

#define MY_DEFAULT_SECONDARY_DNS_BYTE1 (0ul)


#define MY_DEFAULT_SECONDARY_DNS_BYTE2 (0ul)
#define MY_DEFAULT_SECONDARY_DNS_BYTE3 (0ul)
#define MY_DEFAULT_SECONDARY_DNS_BYTE4 (0ul)

// =======================================================================
// ZeroG Wireless Options
// If not using a ZG2100 device, ignore this section.
// =======================================================================

//#define STACK_USE_ZG2100

#define USE_GRATUITOUS_ARP

// Default SSID or wireless network name to connect to


#define MY_DEFAULT_SSID_NAME "MicrochipDemoAP"

/*******************************************/
/* DOMAINS & CHANNEL COMPILE TIME DEFAULTS */
/*******************************************/
/* Valid domains: kZGRegDomainFCC Available Channels: 1 - 11 */
/* kZGRegDomainIC Available Channels: 1 - 11 */
/* kZGRegDomainETSI Available Channels: 1 - 13 */
/* kZGRegDomainJapanA Available Channels: 14 */
/* kZGRegDomainJapanB Available Channels: 1 - 13 */
#define MY_DEFAULT_DOMAIN kZGRegDomainFCC

// When attempting to find the wireless network, only these radio channels
// will be scanned. Channels 1, 6, and 11 are the three non-overlapping
// radio channels normally used in the FCC regulatory domain. If you add
// or subtract radio channels, be sure to also update the
// MY_DEFAULT_CHANNEL_LIST_SIZE setting.
#define MY_DEFAULT_CHANNEL_SCAN_LIST {1, 6, 11, }
#define END_OF_MY_DEFAULT_CHANNEL_SCAN_LIST

// Count of elements in the MY_DEFAULT_CHANNEL_SCAN_LIST macro


#define MY_DEFAULT_CHANNEL_LIST_SIZE (3u)

/**********************************/
/* SECURITY COMPILE TIME DEFAULTS */
/**********************************/
// Security used on WiFi network. Legal values are:
// kKeyTypeNone: No encryption/authentication
// kKeyTypeWep: Wired Equivalency Protocol (WEP) encryption
// kKeyTypePsk: WPA-PSK Personal or WPA2-PSK Personal TKIP or AES
// encryption with precalculated key (see MY_DEFAULT_PSK).
// kKeyTypeCalcPsk: WPA-PSK Personal or WPA2-PSK Personal TKIP or AES
// encryption with the hardware dynamically generating the
// needed key for the selected SSID and passphrase. This
// option requires more time to associate with the access
197

// point relative to kKeyTypePsk which has the key


// pre-calculated.
#define MY_DEFAULT_ENCRYPTION_TYPE kKeyTypeNone

// If using security type of kKeyTypePsk, then this section must be set to


// match the key for the MY_DEFAULT_SSID_NAME and MY_DEFAULT_PSK_PHRASE
// combination. The tool at http://www.wireshark.org/tools/wpa-psk.html
// can be used to generate this field.
#define MY_DEFAULT_PSK {0x86, 0xC5, 0x1D, 0x71,
0xD9, 0x1A, 0xAA, 0x49, \
0x40,
0xC8, 0x88, 0xC6, 0xE9, 0x7A, 0x4A, 0xD5, \
0xE5,
0x6D, 0xDA, 0x44, 0x8E, 0xFB, 0x9C, 0x0A, \
0xE1,
0x47, 0x81, 0x52, 0x31, 0x1C, 0x13, 0x7C, \
}
#define END_OF_MY_DEFAULT_PSK

// Default pass phrase used for kKeyTypePsk and kKeyTypeCalcPsk security modes
#define MY_DEFAULT_PSK_PHRASE "Microchip 802.11 Secret PSK Password"

#define MY_DEFAULT_WEP_KEY_LEN kZGWEPKeyLenLong


#define MY_DEFAULT_WEP_KEYS MY_DEFAULT_WEP_KEYS_LONG

// Default WEP keys used in kKeyTypeWep security mode


#define MY_DEFAULT_WEP_KEYS_LONG {
{{0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C}},\

{{0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C}},\

{{0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C}},\

{{0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C}},\
}
#define END_OF_MY_DEFAULT_WEP_KEYS_LONG
#define MY_DEFAULT_WEP_KEYS_SHORT {
{{0x00,0x01,0x02,0x03,0x04}},\

{{0x10,0x11,0x12,0x13,0x14}},\

{{0x20,0x21,0x22,0x23,0x24}},\

{{0x30,0x31,0x32,0x33,0x34}},\
}
#define END_OF_MY_DEFAULT_WEP_KEYS_SHORT

/* Valid Key Index: 0, 1, 2, 3 */


#define MY_DEFAULT_WEP_KEY_INDEX (0u)

/* Valid WEP auth: kZGAuthAlgOpen */


/* kZGAuthAlgShared */
#define MY_DEFAULT_WEP_AUTH kZGAuthAlgOpen

// These options are required for all PIC devices


#if defined(__18CXX)
#define ZG_NO_FUNC_PTRS y
#endif
#define ZG_CONFIG_LIBRARY y
#define ZG_PKG_STDIO y
#define ZG_RAW_DRIVER y

// These options are configurable


// Provides indication if AP beacons are lost
#define CONNECTION_LOST_FEATURE y

// Command line interface


//#define ZG_CONFIG_CONSOLE y
198

// Provides API to switch between static and dynamic IP addressing


#if defined ( ZG_CONFIG_CONSOLE )
//#define ZG_CONFIG_DHCP y
#endif

// WiFi (BSS), Adhoc (IBSS) connection management turn on/off


#define ZG_CONFIG_LINKMGRII y

// Default link management


/* Valid Modes: kZGLMNetworkModeIdle (Standby / neutral state) */
/* kZGLMNetworkModeAdhoc (IBSS networks) */
/* kZGLMNetworkModeInfrastructure (BSS networks) */
#define MY_DEFAULT_LINK_MGMT kZGLMNetworkModeInfrastructure

// Uncomment this line if you do NOT need IBSS "adhoc" networks.


// If uncommented, ensure that MY_DEFAULT_LINK_MGMT is not kZGLMNetworkModeAdhoc
#define ZG_CONFIG_NO_ADHOCMGRII y

// Uncomment this line if you do NOT need BSS "managed" networks.


// If uncommented, ensure that MY_DEFAULT_LINK_MGMT is not
kZGLMNetworkModeInfrastructure
//#define ZG_CONFIG_NO_WIFIMGRII y

// Enable Iperf application code. Iperf is for performance benchmarking


// and should normally be left disabled, unless you are using the TCPIP
// WiFi Iperf App project.
//#define STACK_USE_IPERF // Iperf Application

// =======================================================================
// PIC32MX7XX/6XX MAC Layer Options
// If not using a PIC32MX7XX/6XX device, ignore this section.
// =======================================================================
#define ETH_CFG_LINK 0 // set to 1 if you need to
config the link to specific following parameters
// otherwise the
default connection will be attempted
// depending on
the selected PHY
#define ETH_CFG_AUTO 1 // use auto negotiation
#define ETH_CFG_10 1 // use/advertise 10 Mbps
capability
#define ETH_CFG_100 1 // use/advertise 100
Mbps capability
#define ETH_CFG_HDUPLEX 1 // use/advertise half
duplex capability
#define ETH_CFG_FDUPLEX 1 // use/advertise full
duplex capability
#define ETH_CFG_AUTO_MDIX 1 // use/advertise auto MDIX
capability
#define ETH_CFG_SWAP_MDIX 1 // use swapped MDIX. else
normal MDIX

#define EMAC_TX_DESCRIPTORS 2 // number of the TX descriptors


to be created
#define EMAC_RX_DESCRIPTORS 8 // number of the RX descriptors
and RX buffers to be created

#define EMAC_RX_BUFF_SIZE 1536 // size of a RX buffer. should be


multiple of 16
// this is the
size of all receive buffers processed by the ETHC
// The size should
be enough to accomodate any network received packet
// If the packets
are larger, they will have to take multiple RX buffers
// The current
199

implementation does not handle this situation right now and the packet is
discarded.

// =======================================================================
// Transport Layer Options
// =======================================================================

/* Transport Layer Configuration


* The following low level modules are automatically enabled
* based on module selections above. If your custom module
* requires them otherwise, enable them here.
*/
//#define STACK_USE_TCP
//#define STACK_USE_UDP

/* Client Mode Configuration


* Uncomment following line if this stack will be used in CLIENT
* mode. In CLIENT mode, some functions specific to client operation
* are enabled.
*/
#define STACK_CLIENT_MODE

/* TCP Socket Memory Allocation


* TCP needs memory to buffer incoming and outgoing data. The
* amount and medium of storage can be allocated on a per-socket
* basis using the example below as a guide.
*/
// Allocate how much total RAM (in bytes) you want to allocate
// for use by your TCP TCBs, RX FIFOs, and TX FIFOs.
#define TCP_ETH_RAM_SIZE (2084ul)
#define TCP_PIC_RAM_SIZE (0ul)
#define TCP_SPI_RAM_SIZE (0ul)
#define TCP_SPI_RAM_BASE_ADDRESS (0x00)

// Define names of socket types


#define TCP_SOCKET_TYPES
#define TCP_PURPOSE_GENERIC_TCP_CLIENT 0
#define TCP_PURPOSE_GENERIC_TCP_SERVER 1
#define TCP_PURPOSE_TELNET 2
#define TCP_PURPOSE_FTP_COMMAND 3
#define TCP_PURPOSE_FTP_DATA 4
#define TCP_PURPOSE_TCP_PERFORMANCE_TX 5
#define TCP_PURPOSE_TCP_PERFORMANCE_RX 6
#define TCP_PURPOSE_UART_2_TCP_BRIDGE 7
#define TCP_PURPOSE_HTTP_SERVER 8
#define TCP_PURPOSE_DEFAULT 9
#define TCP_PURPOSE_BERKELEY_SERVER 10
#define TCP_PURPOSE_BERKELEY_CLIENT 11
#define END_OF_TCP_SOCKET_TYPES

#if defined(__TCP_C)
// Define what types of sockets are needed, how many of
// each to include, where their TCB, TX FIFO, and RX FIFO
// should be stored, and how big the RX and TX FIFOs should
// be. Making this initializer bigger or smaller defines
// how many total TCP sockets are available.
//
// Each socket requires up to 56 bytes of PIC RAM and
// 48+(TX FIFO size)+(RX FIFO size) bytes of TCP_*_RAM each.
//
// Note: The RX FIFO must be at least 1 byte in order to
// receive SYN and FIN messages required by TCP. The TX
// FIFO can be zero if desired.
#define TCP_CONFIGURATION
ROM struct
{
BYTE vSocketPurpose;
200

BYTE vMemoryMedium;
WORD wTXBufferSize;
WORD wRXBufferSize;
} TCPSocketInitializer[] =
{
//{TCP_PURPOSE_GENERIC_TCP_CLIENT, TCP_ETH_RAM, 125, 100},
//{TCP_PURPOSE_GENERIC_TCP_SERVER, TCP_ETH_RAM, 20, 20},
{TCP_PURPOSE_TELNET, TCP_ETH_RAM, 200, 150},
//{TCP_PURPOSE_FTP_COMMAND, TCP_ETH_RAM, 100, 40},
//{TCP_PURPOSE_FTP_DATA, TCP_ETH_RAM, 0, 128},
{TCP_PURPOSE_TCP_PERFORMANCE_TX, TCP_ETH_RAM, 200, 1},
//{TCP_PURPOSE_TCP_PERFORMANCE_RX, TCP_ETH_RAM, 40, 1500},
//{TCP_PURPOSE_UART_2_TCP_BRIDGE, TCP_ETH_RAM, 256, 256},
{TCP_PURPOSE_HTTP_SERVER, TCP_ETH_RAM, 200, 200},
{TCP_PURPOSE_HTTP_SERVER, TCP_ETH_RAM, 200, 200},
{TCP_PURPOSE_DEFAULT, TCP_ETH_RAM, 200, 200},
{TCP_PURPOSE_BERKELEY_SERVER, TCP_ETH_RAM, 25, 20},
//{TCP_PURPOSE_BERKELEY_CLIENT, TCP_ETH_RAM, 125, 100},
};
#define END_OF_TCP_CONFIGURATION
#endif

/* UDP Socket Configuration


* Define the maximum number of available UDP Sockets, and whether
* or not to include a checksum on packets being transmitted.
*/
#define MAX_UDP_SOCKETS (10u)
#define UDP_USE_TX_CHECKSUM // This slows UDP TX performance by nearly
50%, except when using the ENCX24J600, which has a super fast DMA and incurs
virtually no speed pentalty.

/* Berkeley API Sockets Configuration


* Note that each Berkeley socket internally uses one TCP or UDP socket
* defined by MAX_UDP_SOCKETS and the TCPSocketInitializer[] array.
* Therefore, this number MUST be less than or equal to MAX_UDP_SOCKETS + the
* number of TCP sockets defined by the TCPSocketInitializer[] array
* (i.e. sizeof(TCPSocketInitializer)/sizeof(TCPSocketInitializer[0])).
* This define has no effect if STACK_USE_BERKELEY_API is not defined and
* Berkeley Sockets are disabled. Set this value as low as your application
* requires to avoid waisting RAM.
*/
#define BSD_SOCKET_COUNT (5u)

// =======================================================================
// Application-Specific Options
// =======================================================================

// -- HTTP2 Server options -----------------------------------------------

// Maximum numbers of simultaneous HTTP connections allowed.


// Each connection consumes 2 bytes of RAM and a TCP socket
#define MAX_HTTP_CONNECTIONS (2u)

// Indicate what file to serve when no specific one is requested


#define HTTP_DEFAULT_FILE "index.htm"
#define HTTPS_DEFAULT_FILE "index.htm"
#define HTTP_DEFAULT_LEN (10u) // For buffer overrun
protection.
//
Set to longest length of above two strings.

// Configure MPFS over HTTP updating


// Comment this line to disable updating via HTTP
#define HTTP_MPFS_UPLOAD "mpfsupload"
//#define HTTP_MPFS_UPLOAD_REQUIRES_AUTH // Require password for MPFS
uploads
201

// Certain firewall and router combinations cause the MPFS2 Utility to


fail
// when uploading. If this happens, comment out this definition.

// Define which HTTP modules to use


// If not using a specific module, comment it to save resources
#define HTTP_USE_POST // Enable POST support
#define HTTP_USE_COOKIES // Enable cookie support
#define HTTP_USE_AUTHENTICATION // Enable basic authentication
support

//#define HTTP_NO_AUTH_WITHOUT_SSL // Uncomment to require SSL


before requesting a password
#define HTTP_SSL_ONLY_CHAR 0xFF // Files beginning with this character
will only be served over HTTPS
// Set to
0x00 to require for all files
// Set to
0xff to require for no files

#define STACK_USE_HTTP_APP_RECONFIG // Use the AppConfig web page


in the Demo App (~2.5kb ROM, ~0b RAM)
//#define STACK_USE_HTTP_MD5_DEMO // Use the MD5 Demo web
page (~5kb ROM, ~160b RAM)
//#define STACK_USE_HTTP_EMAIL_DEMO // Use the e-mail demo web page

// -- SSL Options --------------------------------------------------------

#define MAX_SSL_CONNECTIONS (2ul) // Maximum connections via SSL


#define MAX_SSL_SESSIONS (2ul) // Max # of cached SSL sessions
#define MAX_SSL_BUFFERS (4ul) // Max # of SSL buffers (2 per
socket)
#define MAX_SSL_HASHES (5ul) // Max # of SSL hashes (2 per,
plus 1 to avoid deadlock)

// Bits in SSL RSA key. This parameter is used for SSL sever
// connections only. The only valid value is 512 bits (768 and 1024
// bits do not work at this time). Note, however, that SSL client
// operations do currently work up to 1024 bit RSA key length.
#define SSL_RSA_KEY_SIZE (512ul)

// -- Telnet Options -----------------------------------------------------

// Number of simultaneously allowed Telnet sessions. Note that you


// must have an equal number of TCP_PURPOSE_TELNET type TCP sockets
// declared in the TCPSocketInitializer[] array above for multiple
// connections to work. If fewer sockets are available than this
// definition, then the the lesser of the two quantities will be the
// actual limit.
#define MAX_TELNET_CONNECTIONS (1u)

// Default local listening port for the Telnet server. Port 23 is the
// protocol default.
#define TELNET_PORT (23u)

// Default local listening port for the Telnet server when SSL secured.
// Port 992 is the telnets protocol default.
#define TELNETS_PORT 992

// Force all connecting clients to be SSL secured and connected via


// TELNETS_PORT. Connections on port TELNET_PORT will be ignored. If
// STACK_USE_SSL_SERVER is undefined, this entire setting is ignored
// (server will accept unsecured connections on TELNET_PORT and won't even
// listen on TELNETS_PORT).
//#define TELNET_REJECT_UNSECURED

// Default username and password required to login to the Telnet server.


202

#define TELNET_USERNAME "admin"


#define TELNET_PASSWORD "unip"

// -- SNMP Options -------------------------------------------------------

// Comment following line if SNMP TRAP support is needed


//#define SNMP_TRAP_DISABLED

// This is the maximum length for community string.


// Application must ensure that this length is observed.
// SNMP module adds one byte extra after SNMP_COMMUNITY_MAX_LEN
// for adding '\0' NULL character.
#define SNMP_COMMUNITY_MAX_LEN (8u)
#define SNMP_MAX_COMMUNITY_SUPPORT (3u)
#define NOTIFY_COMMUNITY_LEN (SNMP_COMMUNITY_MAX_LEN)

// Default SNMPv2C community names. These can be overridden at run time if


// alternate strings are present in external EEPROM or Flash (actual
// strings are stored in AppConfig.readCommunity[] and
// AppConfig.writeCommunity[] arrays). These strings are case sensitive.
// An empty string means disabled (not matchable).
// For application security, these default community names should not be
// used, but should all be disabled to force the end user to select unique
// community names. These defaults are provided only to make it easier to
// start development. Specifying more strings than
// SNMP_MAX_COMMUNITY_SUPPORT will result in the later strings being
// ignored (but still wasting program memory). Specifying fewer strings is
// legal, as long as at least one is present. A string larger than
// SNMP_COMMUNITY_MAX_LEN bytes will be ignored.
#define SNMP_READ_COMMUNITIES {"public", "read", ""}
#define END_OF_SNMP_READ_COMMUNITIES
#define SNMP_WRITE_COMMUNITIES {"private", "write", "public"}
#define END_OF_SNMP_WRITE_COMMUNITIES
#endif

//#define MPFS_USE_FAT

#define MDD_ROOT_DIR_PATH "\\"