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
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
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
Sra. Cristiane Scerni por haver cedido espao em sua residncia para guarda,
montagem de projetos e reunies do grupo.
EPGRAFE
(Albert Einstein)
RESUMO
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 3.10 - reservatrio de gua gelada instalado no lado externo da maquete. ................... 39
Figura 3.14 Detalhe da vlvula motorizada fixada na parede traseira da maquete. .............. 42
Figura 5.7 - Circuito divisor de tenso para aplicao do NTC 10K ....................................... 60
Figura 5.13 - Vlvula esfera em corte, detalhe para o disco caracterizador de fluxo............... 66
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.20 - Sinal de controle PWM (Modulao por largura de pulso). ............................... 71
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.37 - Componentes externos requeridos pelo mdulo ethernet segundo a Microchip.93
Figura 5.47 - Foto do prottipo montado na placa matriz de contatos. .................................. 100
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.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
Tabela 3.2 Vazo de gua atravs do disco caracterizado instalado na vlvula. ................... 41
Quadro 6.12 Cdigo da equao de Steinhart & Hart para leitura de temperatura. ............ 122
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.18 Incluso de cabealho e rodap dos arquivos HTML. ................................... 131
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
: Resistncia hmica
: Grau clsius
: Calor especfico do ar
! ": 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
56 : Vazo mssica do ar
SUMRIO
EPGRAFE ................................................................................................................................. 6
RESUMO ................................................................................................................................... 7
ABSTRACT ............................................................................................................................... 8
SUMRIO ................................................................................................................................ 19
1 INTRODUO ................................................................................................................ 23
4 CONTROLE...................................................................................................................... 45
20
6.3.4 Rotina para gerao de sinal PWM para o servomotor ........................................ 124
1 INTRODUO
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
1.1 Contextualizao
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
1.3 Justificativa
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
2 CLIMATIZAO INDUSTRIAL
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.
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.
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
2.3 Chiller
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.
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
3.1.1 Maquete
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.
ventilador
duto de insuflao
duto de retorno
captao do ar
para o plenum
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
B6 = 56 . . & &>
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
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.
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@
Nestas condies, o fluxo de calor desse fluido pode ser calculado por:
B6 = 56 . . &
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).
3F) 2 F 3F ) = 3F) ) 2 F 3 E
= 0,24 3. Ed@ . d@
= 1,0056 %i. %Ed@ . d@
44
B6+10!0" = B6 1+1N!0"
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.
4 CONTROLE
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.
14
Setpoint o valor-alvo que um sistema de controle automtico, por exemplo controlador PID, alcanar.
49
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.
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.
= .
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
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.
= 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).
= .
= . + 2. t + .
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:
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:
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.1.1 Termistores
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
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
60
50
Temperatura (C)
40
30
20
10
0
0 5 10 15 20 25
Resistncia (K)
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.
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
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&
K D1
KF
D1 u DJ&
K u D1
DJ& y z ' D1
K24 ;:
62
100
90
80
Temperatura (C)
70
60
50
40
30 temp (C)
20
10
0
Resistncia ()
A relao entre resistncia e temperatura no NTC dada pela equao de Steinhart & Hart:
1
&
u ln DJ& u ln A DJ&
a = 0,0011303
b = 0,0002339
c = 0,00000008863
63
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.
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.13 - Vlvula esfera em corte, detalhe para o disco caracterizador de fluxo.
Fonte: Mercato, 2012
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:
18
Transdutor um dispositivo que transforma um tipo de energia em outro, utilizando para isso um elemento
sensor.
67
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
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.
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
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
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).
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
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.
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
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
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
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
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;
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;
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
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.
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.
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.
5.5.7 Temporizadores
5.5.7.1 Timer0
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
5.5.7.2 Timer1
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.
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.
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.
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+/-.
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.
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
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.
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
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.
LM3940 que baixa a tenso da fonte de 5Vcc para 3,3Vcc e dois capacitores, de 0,47uF e
47uF, utilizados como filtro.
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
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.
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
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.
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 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.
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.
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
#ifndef __HARDWARE_PROFILE_H
#define __HARDWARE_PROFILE_H
#include "GenericTypeDefs.h"
#include "Compiler.h"
#define TCC_BOARD
// I/O pins
#define SERVO_TRIS (TRISBbits.TRISB3)//Servo Motor
#define SERVO_IO (LATBbits.LATB3)
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
39
Gateway, ou ponte de ligao, uma mquina intermediria geralmente destinada a interligar redes,
separar domnios de coliso, ou mesmo traduzir protocolos.
113
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.
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.16 Configurao das conexes TCP, 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
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.
#define THIS_IS_STACK_APPLICATION
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.
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.
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;
HTTP_IO_RESULT HTTPExecuteGet(void)
{
BYTE *ptr;
BYTE filename[20];
return HTTP_IO_DONE;
}
Fonte: Pilha TCP/IP 5.20 modificada para este projeto.
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);
}
Alm disso, o lao de loop principal ( while (1) ) deve executar as seguintes funes:
StackTask();
StackApplications();
//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;
//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
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.12 Cdigo da equao de Steinhart & Hart para leitura de temperatura.
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.
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.
//Controle PID
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;
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.
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
39494 = 9746
Este resultado de 16 bits quebrado em duas partes de 8 bits que so carregados nos
registradores TMR3L e TMR3H.
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
// Rotinas de interrupo
//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;
//Temporizador do programa
contador++;
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.
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
100% ! "
=
;: ,1 "
0% $! "
Reorganizando a equao,
;: 0% ,1 " $! "
=
100% 0% ! " $! "
;:
,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
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.
<body>
<div id="shadow-one"><div id="shadow-two"><div id="shadow-three"><div id="shadow-
four">
<div id="page">
<div id="menu">
<table cellspacing="0" cellpadding="0" >
<tr>
<td><a href="/index.htm">Home</a></td>
<td><a href="/forms.htm">Configuração</a></td>
<td><a href="/grafico.htm">Gráfico</a></td>
</tr>
</table>
</div>
<div class="spacer"> </div>
<div id="footer">Copyright © 2012, Inc.</div>
</div></div></div></div></div>
</body>
</html>
~inc:header.inc~
~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.
<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.
<div id="display">
<p>Temperatura:<span id="temp0">?</span>°C</p>
<p>Setpoint: <span id="setpoint">?</span>°C</p>
<p>Sinal Erro: <span id="erro">?</span>°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>
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( ).
<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>
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.
<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> </p></div></td>
<td><div id="barra1"class="barras"><p> </p></div></td>
<td><div id="barra2"class="barras"><p> </p></div></td>
.
.
.
<td><div id="barra28"class="barras"><p> </p></div></td>
<td><div id="barra29"class="barras"><p> </p></div></td>
<td><div id="barra30"class="barras"><p> </p></div></td>
</tr></table>
<script type="text/javascript">
<!--
// Parses the xmlResponse from status.xml and updates the status box
function updateStatus(xmlData) {
Foi criado ainda um arquivo contendo as folhas estilos CSS46 mchp.css utilizadas
pelas pginas HTML.
#ifndef __HTTPPRINT_H
#define __HTTPPRINT_H
#if defined(STACK_USE_HTTP2_SERVER)
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.
void HTTPPrint_setpoint(void)
{
char tmpBuff[6];
sprintf(tmpBuff,"%d.%d",(char)setpoint,(char)((setpoint-(char)setpoint)*100));
TCPPutString(sktHTTP, (BYTE*)tmpBuff);
}
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.
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
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.
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
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
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
8 CONCLUSO
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.
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
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.
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
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
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.
Existe pouca literatura sobre assunto, provavelmente devido ao seu pouco tempo de
existncia e foi necessrio recorrer documentao do fabricante em ingls.
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.
BRUNETTI, F. Mecnica dos Fluidos, 4.ed. So Paulo: Editora Pearson, 2005. 431p.
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.
MICROCHIP TECHNOLOGY INC, Microchip TCP/IP Stack Help, Estados Unidos, 2011.
.
Figura 14 Sistema de gua gelada
.
Figura 18 Vista isomtrica do trocador de calor.
Figura 25 Galpo.
167
Index.htm
<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>°C</p>
<p>Setpoint: <span id="setpoint" style="font-
weight:normal">?</span>°C</p>
<p>Sinal Erro: <span id="erro" style="font-
weight:normal">?</span>°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>
</div>
171
<script type="text/javascript">
<!--
// Parses the xmlResponse from status.xml and updates the status box
function updateStatus(xmlData) {
<script type="text/javascript">
<!--
document.getElementById('hello').innerHTML = "~hellomsg~";
//-->
</script>
~inc:footer.inc~
Header.inc
</head>
<body>
<div id="shadow-one"><div id="shadow-two"><div id="shadow-three"><div id="shadow-
four">
<div id="page">
<div id="menu">
<table cellspacing="0" cellpadding="0" >
<tr>
<td><a href="/index.htm">Home</a></td>
<td><a href="/forms.htm">Configuração</a></td>
<td><a href="/grafico.htm">Gráfico</a></td>
</tr>
</table>
</div>
Footer.inc
<div class="spacer"> </div>
<div id="footer">Copyright © 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ção de parâ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
<td><div id="barra7"class="barras"><p> </p></div></td>
<td><div id="barra8"class="barras"><p> </p></div></td>
<td><div id="barra9"class="barras"><p> </p></div></td>
<td><div id="barra10"class="barras"><p> </p></div></td>
<td><div id="barra11"class="barras"><p> </p></div></td>
<td><div id="barra12"class="barras"><p> </p></div></td>
<td><div id="barra13"class="barras"><p> </p></div></td>
<td><div id="barra14"class="barras"><p> </p></div></td>
<td><div id="barra15"class="barras"><p> </p></div></td>
<td><div id="barra16"class="barras"><p> </p></div></td>
<td><div id="barra17"class="barras"><p> </p></div></td>
<td><div id="barra18"class="barras"><p> </p></div></td>
<td><div id="barra19"class="barras"><p> </p></div></td>
<td><div id="barra20"class="barras"><p> </p></div></td>
<td><div id="barra21"class="barras"><p> </p></div></td>
<td><div id="barra22"class="barras"><p> </p></div></td>
<td><div id="barra23"class="barras"><p> </p></div></td>
<td><div id="barra24"class="barras"><p> </p></div></td>
<td><div id="barra25"class="barras"><p> </p></div></td>
<td><div id="barra26"class="barras"><p> </p></div></td>
<td><div id="barra27"class="barras"><p> </p></div></td>
<td><div id="barra28"class="barras"><p> </p></div></td>
<td><div id="barra29"class="barras"><p> </p></div></td>
<td><div id="barra30"class="barras"><p> </p></div></td>
</tr></table>
<script type="text/javascript">
<!--
// Parses the xmlResponse from status.xml and updates the status box
function updateStatus(xmlData) {
'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;}
#ventilador{
font-size: 10pt;
width: 400px;
position:relative;
left: 330px;
top: -220px;
padding: 10px;
margin: 10px;
font-weight: bold;}
#ventilador p {
178
#ventilador .leds {
font-size: 14pt;}
#ventilador .leds a {
color: #ddd;
cursor: pointer;}
.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 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
Main.c
#define THIS_IS_STACK_APPLICATION
//Variveis do sistema
int j=0;
int i=0;
/////////////////////////////////////////////////////////////////
//
// 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;
/////////////////////////////////////////////////////////////////
// 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
// Programa Principal
void main(void)
{
//Variveis utilizadas pela Pilha TCP/IP
static DWORD t = 0;
static DWORD dwLastIP = 0;
// 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)
{
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;
//Controle PID
// LEDs
LED0_TRIS = 0;
// Servo
SERVO_TRIS = 0;
// Referencia do Timer1
REF_TMR1_TRIS =0;
// Referencia do Timer1
REF_TMR3_TRIS =0;
ADCON2bits.ACQT1 =0;
ADCON2bits.ACQT0 =1;
ADCON2bits.ADCS2 =0; //<2:0> A/D Conversion Clock Select bits
ADCON2bits.ADCS1 =1;
ADCON2bits.ADCS0 =0;
//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;
//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
// 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
#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;
#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
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_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);
}
HTTP_IO_RESULT HTTPExecuteGet(void)
192
{
BYTE *ptr;
BYTE filename[20];
return HTTP_IO_DONE;
}
HardwareProfile.h
#ifndef __HARDWARE_PROFILE_H
#define __HARDWARE_PROFILE_H
#include "GenericTypeDefs.h"
#include "Compiler.h"
#define TCC_BOARD
// 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)
// 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
// =======================================================================
// =======================================================================
// 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
// =======================================================================
// Network Addressing Options
// =======================================================================
// =======================================================================
// ZeroG Wireless Options
// If not using a ZG2100 device, ignore this section.
// =======================================================================
//#define STACK_USE_ZG2100
#define USE_GRATUITOUS_ARP
/*******************************************/
/* 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
/**********************************/
/* 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
// Default pass phrase used for kKeyTypePsk and kKeyTypeCalcPsk security modes
#define MY_DEFAULT_PSK_PHRASE "Microchip 802.11 Secret PSK Password"
{{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
// =======================================================================
// 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
implementation does not handle this situation right now and the packet is
discarded.
// =======================================================================
// Transport Layer Options
// =======================================================================
#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
// =======================================================================
// Application-Specific Options
// =======================================================================
// 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)
// 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
//#define MPFS_USE_FAT