Read doc.pdf text version

UNIVERSIDADE CATÓLICA DE GOIÁS DEPARTAMENTO DE COMPUTAÇÃO GRADUAÇÃO EM ENGENHARIA DE COMPUTAÇÃO

SISTEMA DE CONTROLE DIGITAL DA TEMPERATURA DA ÁGUA DO CHUVEIRO ELÉTRICO

LAURENTINO BORGES MUNIZ

JUNHO 2009

UNIVERSIDADE CATÓLICA DE GOIÁS DEPARTAMENTO DE COMPUTAÇÃO GRADUAÇÃO EM ENGENHARIA DE COMPUTAÇÃO

SISTEMA DE CONTROLE DIGITAL PARA TEMPERATURA DA ÁGUA DO CHUVEIRO ELÉTRICO

Trabalho de Conclusão de Curso apresentado por Laurentino Borges Muniz à Universidade Católica de Goiás, como requisito parcial para obtenção do título de Bacharel em Engenharia de Computação aprovado em 10/06/2009 pela Banca Examinadora: Professor Marcelo Antônio Adad de Araújo, MSc UCG ­ Orientador Professor Carlos Alexandre Ferreira de Lima, MSc UCG Professor Mirian Sandra Rosa, MSc UCG

ii

SISTEMA DE CONTROLE DIGITAL PARA TEMPERATURA DA ÁGUA DO CHUVEIRO ELÉTRICO

LAURENTINO BORGES MUNIZ

Trabalho de Conclusão de Curso apresentado por Laurentino Borges Muniz à Universidade Católica de Goiás, como parte dos requisitos para obtenção do título de Bacharel em Engenharia de Computação.

__________________________________ Professor Marcelo A. Adad de Araújo, MSc Orientador

__________________________________ Professor Jeová Martins Ribeiro, Esp. Coordenador do TCC

iii

Aos meus pais por todo amor e apoio.

iv

"Quem retribui os favores será recordado um dia; e, no momento da queda, encontrará apoio." Eclo 3,31

v

AGRADECIMENTOS

Aos meus pais por todo o apoio e incentivo durante todos os momentos da minha vida. Agradeço aos colegas, professores, amigos e parentes pelo apoio e incentivo durante todo o curso. Ao professor Marcelo Antônio Adad de Araújo, pela confiança e orientação dada a durante a realização deste trabalho. Ao professor Felippe Silva, pela ajuda e atenção na implementação do projeto. A professora Mirian, pela ajuda com o programa do microcontrolador. Agradeço a todos que contribuíram de alguma forma para a conclusão deste trabalho.

vi

RESUMO

Este trabalho apresenta um sistema de controle digital para a temperatura de aquecedores elétricos de passagem. Para a implementação desse projeto será usados vários componentes eletrônicos, entre eles o microcontrolador PIC 16F877A responsável pela programação e controle do sistema, um sensor de temperatura LM35DZ instalado dentro de um chuveiro. Será utilizado também o Circuito Integrado TCA785 utilizado no o circuito de potência para efetuar o acionamento de TRIAC, um display LCD para visualização da temperatura entre outros.

Palavras-Chave: Microcontrolador, PIC, Circuito Integrado, TCA 785, TRIAC.

vii

ABSTRACT

This work presents a digital control system for the temperature of transition of electric heaters. To implement this project will use various electronic components, including the PIC 16F877A microcontroller for programming and control system, a temperature sensor LM35DZ installed within a shower. Will be used also the Integrated Circuit TCA785 used in the circuit of power to effect the triggering of TRIAC, an LCD display for viewing the temperature among others.

Key Words: Microcontroller, PIC, Integrated Circuit, TCA 785, TRIAC.

viii

SISTEMA DE CONTROLE DIGITAL DA TEMPERATURA DA AGUA DO CHUVEIRO

SUMÁRIO

LISTA DE FIGURAS LISTA DE TABELAS LISTA DE ABREVIATURAS E SIGLAS 1. INTRODUÇÃO 2. FUNDAMENTAÇÃO TEÓRICA 2.1. Microcontrolador 2.1.1. PIC 16F877A 2.1.1.1. 2.1.1.2. 2.1.1.3. Pinagem Estrutura Interna Arquitetura e Conjunto de Instruções

xi xiii xiv 1 4 4 4 5 6 7 8 9 11 11 12 13 13 15 16 16 17 18 19 21 22 26

ix

2.1.2. Módulos CCP 2.1.2.1. Modo PWM

2.1.3. Contadores 2.1.3.1. 2.1.3.2. 2.1.3.3. Timer0 Timer1 Timer2

2.1.4. Conversor A/D 2.1.5. Linguagem de Programação 2.2. Sensor de Temperatura 2.2.1. Circuito Integrado LM35DZ 2.2.2. Diagrama de Conexão e Diagrama de Blocos 2.3. Display LCD 2.3.1. LCD Caractere 16x2 2.3.2. Programação de Caractere para LCD 2.4. Circuito de Disparo com TCA785 2.5. TRIAC

3. DESENVOLVIMENTO 3.1. Microcontrolador 3.1.1. Leitura da Temperatura 3.1.2. Controle do PWM 3.1.3. Display LCD 3.2. Filtro Elétrico 3.2.1. Filtro Butterworth 3.2.2. Montagem do Filtro 3.3. Controle de Potência 4. MONTAGEM DO PROJETO E RESULTADOS OBTIDOS 4.1. Montagem dos Circuitos 4.1.1. Circuito Microcontrolado 4.1.2. Circuito de Controle de Potência 4.2. Teste do Projeto 4.3. Finalização do Projeto 5. CONCLUSÃO 6. REFERÊNCIAS BIBLIOGRÁFICAS 7. APÊNDICE 7.1. Apêndice1 ­ Código Fonte do Projeto Desenvolvido 8. ANEXO 8.1. Anexo 1 ­ Código Fonte da Biblioteca do Display LCD

28 29 30 32 34 39 39 40 41 45 45 45 46 47 52 56 57 59 59 67 67

x

LISTA DE FIGURAS

Figura 2.1 ­ Pinagem do PIC16F877A Figura 2.2 ­ Diagrama de Blocos do PIC 16F877A Figura 2.3 ­ Diagrama de Blocos da Arquitetura Havard Figura 2.4 ­ Formas de Onda Tipo PWM, Com Largura de Pulso Diferente Figura 2.5 ­ Pulso PWM Figura 2.6 ­ Comparação Entre as Linguagens de Programação Assembler e C Figura 2.7 ­ Diagrama de conexão do LM35DZ Figura 2.8 ­ Diagrama de Blocos do LM35DZ Figura 2.9 ­ Display LCD 16x2 Figura 2.10 ­ Seqüência utilizada para efetuar escrita e leitura Figura 2.11 ­ Configuração da Pinagem do TCA 785 Figura 2.12 ­ Principais Formas de Onda do TCA 785 Figura 2.13 ­ Diagrama de Blocos do TCA 785 Figura 2.14 ­ Símbolo, Estrutura e Circuito Equivalente do TRIAC Figura 2.15 ­ Curva Característica do TRIAC Figura 3.1 ­ Esquema do Projeto Figura 3.2 ­ Circuito Microcontrolado Figura 3.3 ­ Circuito do Sensor de Temperatura Figura 3.4 ­ Circuito Gerador de Pulso PWM Figura 3.5 ­ Escopo da Função de Tratamento da Interrupção Figura 3.6 ­ Esquema de Ligação do Display LCD Figura 3.7 ­ Apresentação da Temperatura no Display LCD Figura 3.8 ­ Escala de Indicação do Nível da Temperatura

5 6 8 9 10 16 17 18 19 21 23 24 25 26 27 28 29 30 32 33 34 35 38

xi

Figura 3.9 ­ Formas de Onda de um Filtro Butterworth de 1º, 3º e 11º Ordem Figura 3.10 ­ Circuito Elétrico para Filtro Butterworth de Quarta Ordem Figura 3.11 ­ Circuito Responsável pelo Controle de Potência Figura 3.12 ­ Formas de Onda nas Saídas dos Pinos 14 e 15, para uma Determinada Entrada de Controle Figura 4.1 ­ Montagem do Circuito Microcontrolado Figura 4.2 ­ Montagem do Circuito de Controle de Potência Figura 4.3 ­ Placa Condicionadora de Sinais Figura 4.4 ­ Montagem do Circuito para Testes Figura 4.5 ­ Formas de Ondas Coletadas para PWM em 17% Figura 4.6 ­ Formas de Ondas Coletadas para PWM em 51% Figura 4.7 ­ Formas de Ondas Coletadas para PWM em 85% Figura 4.8 ­ Instalação do Sensor de Temperatura Dentro do Chuveiro Elétrico Figura 4.9 ­ Placa com circuito impresso do circuito microcontrolado Figura 4.10 ­ Placa com circuito impresso do circuito de potência e filtro butterworth de quarta ordem

39 40 41 43

45 46 47 48 50 51 52 53 55 55

xii

LISTA DE TABELAS

Tabela 1 ­ Uso conjunto para os dois módulos Tabela 2 ­ Conversor de 4bits com tensão de referência de 5V Tabela 3 ­ Descrição da pinagem do LCD Tabela 4 ­ Significado de cada nível lógico do pino RS Tabela 5 ­ Significado de cada nível lógico do pino R/W Tabela 6 ­ Desenho de um caractere criado Tabela 7 ­ Tabela de criação do primeiro caractere Tabela 8 ­ Tabela de criação do segundo caractere Tabela 9 ­ Tabela de criação do último caractere Tabela 10 ­ Tabela de endereço dos caracteres na DDRAM Tabela 11 ­ Duração dos Pulsos nas Saídas 14 e15 do TCA 785 Tabela 12 ­ Comparação entre os Valores Gerados pelo Pulso PWM e as Tensões de Entrada e Saída do Filtro Butterworth de Quarta Ordem

9 14 19 20 20 22 36 36 37 38 42 49

xiii

LISTA DE ABREVIATURAS E SIGLAS

MCU µC PIC TTL CPU PROM RAM I/O EEPROM CI ULA CCP SSP RISC PWM A/D Msb Lsb SCR TRIAC NTC PTC LCD PCM LED

Microcontrolador Microcontrolador Peripherals Integrated Controller Transistor-Transistor Logic Central Processor Unit Programmable Read Only Memory Random Access Memory Input/Output Electrically Erasable Programmable Read Only Memory Circuito Integrado Unidade Lógica e Aritmética Compare, Capture e PWM Synchronous Serial Port Reduced Instruction Set Computer Pulse Width Modulation Analógico/Digital Bit Mais Significativo Bit Menos Significativo Silicon Controlled Rectifier Triode Alternating Courrent Coeficiente de Temperatura Negativa Coeficiente de Temperatura Negativa Liquid Crystal Display Pulse Code Modulation light Emitting Diode ­ Diodo Emissor de Luz

xiv

1

SISTEMA DE CONTROLE DIGITAL PARA TEMPERATURA DA ÁGUA DO CHUVEIRO ELÉTRICO

CAPÍTULO I INTRODUÇÃO

Os equipamentos elétricos de aquecimento de água de passagem, popularmente conhecido como chuveiro ou ducha elétrica, possuem como elementos aquecedores resistências elétricas constituídas por um fio de liga metálica enrolado, geralmente fabricados em ferro-cromo-alumínio ou em níquel-cromo. O controle da temperatura da água é usualmente realizado através do controle do fluxo da água e pela mudança das derivações presentes na resistência. A simplicidade desse controle se opõe à sua falta de flexibilidade para impor um ajuste mais fino da temperatura da água. O controle eletrônico de potência em aquecedores elétricos de passagem é um item de conforto extra cada vez mais difundido, pois, com ele, é possível regular a temperatura ao gosto do usuário, sem alterar a vazão de água através do aparelho (sem um controle eletrônico de potência disponível, a alteração da vazão da água tem sido o modo mais usado para ajuste fino da temperatura da água). Na correria do dia-a-dia no mundo atual, as pessoas buscam cada vez mais a comodidade em seus poucos momentos de descanso. Tem-se utilizado a automação para alcançar essa comodidade, praticidade e diversão de forma interativa. Este projeto tem como principal objetivo desenvolver um sistema para automatizar o controle de temperatura da água em aquecedores elétricos de passagem, proporcionando ao usuário do sistema a facilidade de ajustar a temperatura da água em seu banho de forma digital. Visando diminuir a dificuldade que as crianças e pessoas de baixa estatura possuem na hora mudar a temperatura da água de seu banho é proposto um sistema de fácil uso, que possui um pequeno painel onde a temperatura pode ser ajustada em uma escala que possui dezoito níveis de temperatura, dispensando assim o trabalho de tentar ajustar a temperatura aumentando ou diminuindo a vazão de água. Para a implementação deste projeto, usa-se um sistema microcontrolado que processa e realiza as tarefas definidas pelo usuário. O sistema conta com um sensor de temperatura que

2

será implantado dentro do chuveiro, gerando assim um sinal analógico que indica a temperatura da água naquele momento. O microcontrolador recebe esse sinal através de uma porta de conversão analógica/digital, realiza cálculos necessários para a transformação desse sinal (analógico) em um sinal digital de 10 bits, e envia esse valor através de suas

portas para ser apresentado em um LCD, indicando a temperatura da água em graus Celsius para uma simples informação ao usuário. No controle da temperatura, o microcontrolador será utilizado para gerar um sinal PWM que será incrementado ou decrementado através de um toque no painel feito pelo usuário. Esse valor de PWM será variado em uma escala de dezesseis níveis possíveis, indicando ao usuário quando seu valor máximo ou mínimo for atingido. O valor gerado por esse sinal é enviado para um filtro Butterworth de quarta ordem, que filtra e elevará o valor do sinal PWM para uma faixa que varia de 0V a 10V proporcional ao valor do sinal PWM de entrada. De posse desse sinal já filtrado, ele é enviado para um circuito composto por um TCA785, que é responsável por gerar um pulso de corrente que acionará o triac. A configuração interna do TCA785 possibilita uma simplificada seleção de componentes externos para chaveamento, o que não torna muito volumoso o circuito final. Fica então o TRIAC responsável pelo chaveamento da potência fornecida à carga (chuveiro), onde a cada meio ciclo da senóide da rede, pulsos de correntes são dados (ou não) no gate, fazendo com que tal semiciclo seja (ou não) fornecido a carga. O trabalho está dividido em cinco capítulos. Neste primeiro capítulo (Introdução), é apresentado o objetivo do sistema, as motivações que levaram à escolha do tema e um breve relato de seu funcionamento. No segundo capítulo é apresentada a fundamentação teórica do projeto, onde é abordado o conceito e o funcionamento dos principais componentes eletrônicos utilizados na realização do projeto, sendo apresentado o modelo do microcontrolador utilizado e os recursos que foram usados para a implementação desse projeto. É apresentado também o funcionamento do sensor de temperatura utilizado, e os circuitos integrados utilizados para realizar o controle da potência do chuveiro elétrico. No terceiro capítulo, é apresentado como foi realizado o desenvolvimento do projeto e como os componentes foram utilizados. Este capítulo, pode ser dividido em três partes sendo a primeira responsável por mostrar como foi implementado a programação do microcontrolador para que o mesmo possa fazer a leitura da temperatura da água, gerar um

3

sinal responsável por aumentar ou diminuir a potência do chuveiro, e a apresentação dos dados ao usuário utilizando um display LCD. A segunda parte apresenta o circuito do filtro utilizado no projeto e por fim a terceira parte apresenta o circuito controlador de potência. O quarto capítulo mostra como se deu o desenvolvimento do projeto desde a montagem até a conclusão e os resultados obtidos em testes são apresentados em gráficos, tabelas, fotos e comentários do funcionamento do projeto. Para finalizar, no quinto capítulo são apresentadas as analises e conclusões obtidas sobre do funcionamento do projeto, assim como sugestões para trabalhos futuros.

4

CAPITULO II FUNDAMENTAÇÃO TEÓRICA

Este capítulo destina-se a apresentação dos principais conceitos teóricos necessários para um melhor entendimento do desenvolvimento deste trabalho.

2.1

Microcontrolador

Os microcontroladores (também denominados MCU ou µC) são dispositivos eletrônicos utilizados no controle de processos lógicos. Além dos componentes lógicos e aritméticos usuais de um microprocessador de uso geral, os microcontroladores integram elementos adicionais, tais como, memória RAM (Random Access Memory ou Memória de Acesso Aleatório), EEPROM (Electrically Erasable Programmable Read Only Memory) ou Memória flash para armazenamento de dados ou programas, dispositivos periféricos e interfaces de I/O (Input/Output) que podem ir de um simples pino digital do componente a uma interface USB ou Ethernet nos mais avançados.

2.1.1 PIC 16F877A O PIC (Peripherals Integrated Controller ­ Controlador Integrado de Periféricos) é um circuito integrado produzido pela Microchip Technology Inc., que pertence à categoria dos microcontroladores, ou seja, um componente integrado que em um único dispositivo contém todos os circuitos necessários para realizar um completo sistema digital programável. O PIC pode ser visto externamente como um circuito integrado TTL (Transistor-Transistor Logic) ou CMOS (Complementary Metal-oxide-semiconductor) normal, mas internamente dispõe de todos os dispositivos típicos de um sistema microprocessado, ou seja, uma CPU (Central Processor Unit ou Unidade de Processamento Central) cuja finalidade é interpretar as instruções de programa; Uma memória PROM (Programmable Read Only Memory ou Memória Programável Somente para Leitura) na qual serão armazenadas de maneira

5

permanente as instruções do programa; uma memória RAM utilizada para memorizar as variáveis utilizadas pelo programa; uma série de LINHAS de I/O para controlar dispositivos externos ou receber pulsos de sensores, chaves, e outros; uma série de dispositivos auxiliares ao funcionamento, como gerador de clock, bus, contador, etc. A presença de todos estes dispositivos em um espaço extremamente pequeno, dá ao projetista ampla gama de trabalho e enorme vantagem em usar um sistema microcontrolado, onde em pouco tempo e com poucos componentes externos pode-se fazer o que seria oneroso fazer com circuitos tradicionais [1]. O PIC 16F877A, é um modelo estremamente poderoso que agrupa em seu interior um número grande de recursos disponíveis.

2.1.1.1

Pinagem

O PIC 16F877A, é um CI (Circuito Integrado) que possui quarenta pinos cada um com uma ou mais funções bem definidas, e a cada um é associado um nome que lembra a função correspondente. A definição dos terminais do PIC 16F877A é apresentada na Figura 2.1:

Figura 2.1 ­ Pinagem do PICF877A [2]

6

2.1.1.2

Estrutura Interna

A estrutura interna do PIC 16F877A é detalhada através do diagrama de blocos apresentado na Figura 2.2, que mostra todos os periféricos e comunicações que compõem o mesmo.

Figura 2.2 ­ Diagrama de Blocos do PIC 16F877A [2]

7

Através do diagrama de blocos pode-se visualizar as diversas partes que compõem o microcontrolador, tais como: ULA (Unidade Lógica e Aritmética): é responsável pela execução das operações lógicas e aritméticas; Memória de Programa FLASH: é responsável pelo armazenamento do programa que será executado pelo microcontrolador; Memória de Dados RAM: utilizada para armazenar as variáveis de programa durante a sua execução; PORTs: são as portas de I/O que vão de PORTA a PORTE; Timers: são contadores que podem ser acessados diretamente na memória o PIC possui TIMER0, TIMER1 e TIMER2; A/Ds: conversores A/D (Analógico/Digital) responsáveis pela conversão de sinais analógicos em sinais digitais; CCP: é possível acessar três recursos diferentes através dos módulos CCP (Compare, Capture e PWM); Portas de comunicação serial: SSP (Synchronous Serial Port) e USART. Através delas que é possível a comunicação do PIC com um PC via padrão RS-232;

2.1.1.3

Arquitetura e Conjunto de Instruções

O microcontrolador PIC 16F877A é baseado na arquitetura Harvard que possui um barramento para dados e outro para programas, o primeiro sendo um barramento de oito bits e o segundo de quatorze bits. Esse tipo de arquitetura permite que, enquanto uma instrução é executada, outra seja "buscada" da memória, ou seja, trabalhando de forma paralela o que torna o processamento mais rápido. Como o barramento de programa é maior que o de dados, o OPCODE (Código de Operação) da instrução já inclui o dado e o local onde ele vai operar (quando necessário), isto significa que apenas uma posição de memória é utilizada por instrução, economizando muita memória de programa.

8

Figura 2.3 ­ Diagrama de blocos da arquitetura Harvard[4]

O PIC 16F877A utiliza o conjunto de instruções RISC (Reduced Instruction Set Computer ­ Computador com conjunto de instruções reduzido). No PIC 16F877A essa tecnologia RISC possui apenas 35 instruções o que é considerado pouco. Devido ao fato de implementar poucas instruções, o circuito pode ser implementado em uma área menor, com um consequente menor consumo de energia e normalmente mais rápido. Por outro lado, implica no fato de que muitas funções devem ser construídas, pois não possui a instrução equivalente. O PIC16F877A é um microcontrolador RISC que se utiliza da arquitetura Harvard, permite o pipeline das instruções (as instruções são enfileiradas de forma que num dado instante, várias instruções podem estar em estágios diferentes de execução), e o conjunto de instruções é simétrico, ou seja, uma instrução pode operar em todos os registradores ou usar qualquer modo de endereçamento [4].

2.1.2 Módulos CCP

Os módulos CCP oferecem três tipos de recursos, são eles: Capture, Compare e PWM. Cada um desses recursos é usado para uma finalidade diferente, porém a ênfase se dá apenas no recurso PWM por ser o único usado neste projeto. módulos de CCP, sendo eles CCP1 e O PIC 16F877A contém dois CCP2. Como esses três recursos

(Compare/Capture/PWM) estão relacionados ao mesmo módulo dentro do PIC, só pode ser utilizado um recurso de cada vez por módulo. Para a utilização dos dois módulos CCP em conjunto, deve-se seguir algumas recomendações encontradas na tabela 2.1.

9

Tabela 2.1 ­ Uso conjunto para os dois módulos [3] Recursos Desejados

Capture Capture

Observações

Sem conflito, entretanto, ambos utilizarão a mesma base de tempo TMR1 e, por isso, serão sincronizados. Caso o Compare esteja configurado para zerar o Timer1, isso poderá acarretar em um conflito com o outro modo. Caso o Compare esteja configurado para zerar o Timer1, isso poderá acarretar em um conflito com o outro modo. Ambos os PWM terão a mesma freqüência e serão sincronizados,

Capture

Compare

Compare

Compare

PWM

PWM

devido ao uso da mesma base de tempo. Os Duty Cycles possuem controles independentes.

PWM PWM

Capture Compare

Ambos os modos são completamente independentes. Ambos os modos são completamente independentes.

2.1.2.1

Modo PWM

O PWM (Pulse Width Modulation ou Modulação por Largura de Pulso) é o modo de funcionamento mais utilizado do módulo CCP, já que possibilita a criação de uma saída analógica após passar por um filtro externo (CAPÍTULO III) que varia de 0 a 5 VDC. O PWM é um sinal digital com freqüência fixa, mas com largura de pulso variável. Essa diferença fica bem visível na figura 2.4.

Figura 2.4 ­ Formas de onda tipo PWM, com largura de pulso diferente [3]

10

Pode-se observar que o tempo em que o sinal se mantém em nível alto em cada uma das ondas é diferente. Embora o PWM seja um sinal digital, existe um nível DC (ou valor médio) associado a ele, de modo que pode variar o seu nível DC variando assim a largura do seu ciclo ativo. Genericamente, a tensão média de uma forma de onda é dada por:

(2.1)

Onde: VDC: é a tensão média. T: é o período da forma da onda. V(t): é a função da tensão no tempo. Para o caso do PWM tem-se que:

(2.2)

Onde: tp: é a duração do pulso em nível lógico 1. Vpulso: é a tensão de pulso do sinal PWM.

Figura 2.5 ­ Pulso PWM[3]

11 Então:

(2.3)

(2.4)

A razão entre a largura de pulso e o período da forma de onda recebe o nome de duty cycle, ou em português, ciclo ativo. O pulso da onda PWM apresenta tensão fixa, porém o valor médio da tensão desta forma de onda varia em função do duty cycle. A tensão média (VDC) é diretamente proporcional ao duty cycle e como este varia entre 0 (quando tp = 0) e 1 (quando tp = T) tem-se que a tensão média de onda pode variar entre 0 e Vpulso [3].

2.1.3 Contadores

Os timers são contadores internos que possuem características próprias, como limite de contagem, tipo de incremento, entre outras. O microcontrolador PIC 16F877A possui três timers cada um com características diferentes de funcionamento, são eles: Timer0, Timer1 e Timer2.

2.1.3.1

Timer0

Timer0 ou TMR0 é um contador de 8 bits incrementado internamente pelo ciclo de máquina ou por um sinal externo. Como o contador possui 8 bits, ele pode assumir 256 valores distintos (0 até 255). Caso o ciclo de máquina seja de 1µs, cada incremento do Timer corresponderá a um intervalo de 1µs. Caso sejam necessários intervalos de tempos maiores para o mesmo ciclo de máquina, utiliza-se o recurso de prescale (PS). O prescale é um divisor de freqüência programável do sinal que incrementa o Timer0. Quando se usa um prescale de 1:1, cada ciclo de máquina corresponde a um incremento do Timer0 (unidade de Timer0). Ao se alterar o prescale para, por exemplo, 1:4 (os valores

12

possíveis são as potências de dois até 256), o Timer0 será incrementado uma vez a cada quatro ciclos de máquina. O Timer0 pode ser utilizado para duas funções básicas: Contagem de eventos externos; Temporização (contagem de tempo) quando a entrada de clock é proveniente do clock interno.

2.1.3.2

Timer1

Também conhecido como TMR1 é um módulo mais poderoso que o TMR0 pois pode ser configurado para funcionar como contador ou temporizador. É um timer de 16 bits composto de 2 registradores de 8 bits (TMR1H e TMR1L) que podem ser escritos e lidos pelo programador. De forma semelhante ao TMR0, o TMR1 também pode ser incrementado pelo clock de máquina ou por um sinal externo, mas com uma vantagem: existe um circuito interno que possibilita ligar um cristal aos pinos RC0/T1OSO e RC1T1OSI. O Timer1 pode operar de dois modos: Como timer: neste modo o Timer1 incrementa a cada ciclo de instrução; Como contador: neste modo o Timer1 incrementa a cada transição do sinal de clock externo. O modo de operação é determinado pelo bit de seleção de clock, TMR1CS (bit 1 do Reg. T1CON). O Timer 1 pode ser habilitado/desabilitado setando/resetando,

respectivamente, o bit de controle TMR1ON (bit 0 do registrador). O Timer também possui um reset interno que pode ser gerado pelos módulos "Capture/Compare/PWM - CCP". Quando o oscilador do Timer1 está habilitado (T1OSCEN setado), os pinos

RC1/T1OSI/CCP2 e RC0/T1OSO/T1CKL tornam-se entradas independente do valor dos bits 1 e 0 do registrador TRIS, que são ignorados.

13

2.1.3.3

Timer2

O Timer2 ou TMR2, por sua vez, é um registrador de 8 bits, porém relacionado somente ao clock interno, mas possui duas vantagens sobre os demais. 1. Além de possuir um prescale próprio, possui também um postscale. A diferença é que o prescale é utilizado para incrementar o TMR2, enquanto que o postscale conta a quantidade de estouros desse timer para poder gerar uma interrupção; 2. Possui um seguindo registrador o PR2 utilizado para controlar o estouro do TMR2. Ou seja, ele não conta de zero até o limite imposto pelos 8 bits. Desta forma sempre que TMR2 = PR2, o timer é "resetado", voltando a zero. Neste mesmo momento, o contador de postscale é incrementado. Quando o postscale terminar, a interrupção associada ao Timer2 é gerada. O prescale e o postscale são zerados sempre que uma operação de escrita envolvendo os registradores TMR2 ou T2CON acontecer ou quando for realizado qualquer tipo de reset do PIC.

2.1.4 Conversor A/D

Um conversor A/D (Analógico/Digital) é um circuito que converte um nível (analógico) de tensão ou corrente em um valor numérico (digital) correspondente. É através do conversor A/D que se pode trabalhar com o valor de uma tensão, de uma temperatura, de uma posição ou o sinal de um sensor qualquer. O PIC 16F877A, possui um sistema de conversão A/D denominado conversão de aproximação sucessiva. Neste tipo de conversor, a conversão é realizada do bit mais significativo (Msb) para o bit menos significativo (Lsb). Supondo-se um conversor de bits e uma tensão de referência de 5V, como mostrado na tabela 2.2, para esse caso a conversão de uma entrada de 3,65V teria a seguinte sequência de eventos:

14

1. Testa-se o Msb, verificando se tensão de entrada é maior que 2,5V? Sim, portanto, este bit vale 1; 2. Testa-se o próximo bit, verificando se tensão de entrada é maior que 3,75V (2,5V + 1,25V)? Não, portanto, este bit vale 0; 3. Testa-se o próximo bit, verificando se tensão de entrada é maior que 3,125V (2,5V + 0,625V)? Sim, portanto, este bit vale 1; 4. Testa-se o próximo bit, verificando se tensão de entrada é maior que 3,4375V (2,5V + 0,625V + 0,3125V)? Sim, portanto, este bit vale 1; Tabela 2.2 ­ Conversor de 4bits com tensão de referência de 5V. Bit 4 Msb 3 2 1 Lsb Tensão 2,5000V 1,2500V 0,6250V 0,3125V

Após a conversão tem-se que o valor analógico 3,65V é representado pelo valor binário 1011. Essa forma de conversão é muito rápida, que para um conversor de n bits são necessárias n interações, independente do valor a ser convertido [3]. Já para o processo inverso quando se tem o valor (digital) em binário e deseja achar ser valor analógico, usa se a seguinte formula.

(2.5)

Onde: bm: é o valor do bit m (0 ou 1). n: número de bits do conversor. Vref: tensão de referência. Portanto, para o exemplo acima, com o valor binário igual a 1011. Tem-se a seguinte tensão de entrada.

15

(2.6)

Nota-se que houve uma pequena diferença, pois o valor de entrada inicial era 3,65V, e após as conversões obteve-se o valor 3,4275V. Essa diferença ocorre, pois um sinal digital não é contínuo como um sinal analógico, mas essa diferença pode ser amenizada usando-se um conversor com um numero maior de bits. O conversor A/D do PIC 16F877A possui algumas características, como: conversor interno de 10 bits; até oito canais de conversão; quatro tipos de referências: VDD e VSS (internos) e VREF+ e VREF- (externos).

2.1.5 Linguagem de Programação

O microcontrolador PIC16F877A pode ser programado tanto em linguagem de baixo nível (Assembly) como em linguagem de alto nível (Pascal, C, Basic). Como a linguagem de baixo nível não possui nenhum comando, instrução ou função além daquelas definidas no conjunto de instruções do processador utilizado, o desenvolvimento deste trabalho será usando a linguagem de programação C. Evitando assim um trabalho extra de programação que seria necessário no desenvolvimento de rotinas e operações que não fazem parte do conjunto de instruções do processador, e tornando o programa mais "enxuto" e menos complexo, e com isso mais fácil de ser seguido. A utilização de uma linguagem de alto nível como C permite que o programador preocupe-se mais com a programação da aplicação em si, já que o compilador assume para si tarefas como controle e localização das variáveis, operações matemáticas e lógicas, verificação de bancos de memória. [8] Desta forma o programador dedica seu tempo basicamente à lógica do problema e não aos detalhes internos do chip. Como exemplo tem-se a seqüência de escrita na EEPROM do PIC16F877A (gravar no endereço 20H o valor 12H), conforme a figura 2.6:

16

Figura 2.6 ­ Comparação entre as linguagens de programação assembler e C

Nota-se, portanto, que a programação em alto nível como C é muito mais simplificada que em uma programação de baixo nível como Assembly.

2.2

Sensor de Temperatura

Atualmente existem diversos tipos de sensores de temperatura no mercado que vão desde NTC´s (Negative Temperature Coefficient ­ Coeficiente de Temperatura Negativa), PTC´s (Positive Temperature Coefficient ­ Coeficiente de Temperatura Negativa) e diodos até os mais variados tipos de termopares, dentre outros. Os sensores de temperatura, de um modo geral, são constituídos basicamente de um componente eletrônico capaz de converter variações de temperatura em sinais elétricos proporcionais, que, após processamento matemático adequado, geram um valor de tensão numericamente igual à temperatura medida.

2.2.1 Circuito Integrado LM35DZ

O sensor LM35DZ é um circuito integrado destinado ao preciso sensoriamento de temperatura e calibrado internamente para tensão de saída diretamente proporcional e

17

numericamente semelhante à temperatura na escala Celsius. Sendo assim, apresenta uma boa vantagem com relação aos demais sensores de temperatura calibrados em "KELVIN", não necessitando nenhuma subtração de variáveis para que se obtenha uma escala de temperatura em Graus Celsius. O sensor LM35DZ é apresentado com o encapsulamento do tipo TO-92, que se parece com um transistor, e oferece ótima relação custo benefício, por ser o mais barato dos modelos e propiciar a mesma precisão dos demais. O sensor possui três terminais, sendo dois para alimentação ( ­ cuja tensão de alimentação pode variar entre 4V e 30V ­ e comum) e o terceiro terminal para saída ( cujo o valor é de , linear em toda faixa de operação, que varia entre 0 e 100 ºC.

Assim, se a temperatura é de 25 ºC, O sensor possui uma faixa de trabalho com tensões que varia de ±0.25ºC para temperatura ambiente e de ±0.75ºC sobre toda a faixa 0 a 100 ºC. Ele drena apenas 60A para estas alimentações, sendo assim seu auto-aquecimento é de aproximadamente 0.1ºC ao ar livre.

2.2.1.1

Diagrama de Conexão e Diagrama de Blocos

As Figuras 2.7 e 2.8 a seguir apresentam o diagrama de conexão e o diagrama de blocos respectivamente.

Figura 2.7 ­ Diagrama de conexão do LM35DZ[10].

O diagrama de conexão apresentado acima mostra a forma de fazer a ligação do Circuito Integrado onde: : é a tensão de alimentação que pode variar entre 4V e 30V;

18

: é a tensão de saída, que apresenta uma tensão de 10 : é o pino comum para saída.

;

A Figura 2.8 apresenta o diagrama de blocos do sensor de temperatura LM35DZ, dando uma idéia dos componentes utilizados na fabricação deste CI para que o mesmo seja calibrado e gere uma tensão linear de 10 .

Figura 2.8 ­ Diagrama de Blocos do LM35DZ[10].

2.3

Display LCD O LCD (Liquid Crystal Display ­ Display de Cristal Líquido) é um elemento

fundamental para que os equipamentos eletrônicos tornem-se mais compactos, interativos e de fácil operação, pois pode facilitar a forma como o usuário vai interagir com o equipamento e, conseqüentemente, aumentar o valor agregado a ele. Existe uma variedade de displays LCD no mercado, desde os LCDs capazes de exibir uns poucos caracteres até LCDs gráficos, coloridos, e nos mais variados tamanhos. Os LCDs caracteres normalmente são compatíveis com o código ASCII, e podem gerar letras, números e caracteres especiais, além de caracteres Katakana, europeus e gregos. Os LCDs caracteres podem possuir ainda uma memória RAM interna que permite criar caracteres especiais ou símbolos que podem ser imprescindíveis numa determinada aplicação [9].

19

2.3.1 LCD Caractere 16 x 2

O LCD caractere 16x2, ou seja, dezesseis caracteres por duas linhas é um dos LCDs mais utilizados em equipamentos eletrônicos. A Figura 2.9 mostra um típico LCD de 16 x 2.

Figura 2.9 ­ Display LCD 16 x 2 [11]

A Tabela 3.3 mostra a função de cada um dos 16 pinos do LCD caractere 16 x 2. Os dois primeiros pinos (1 e 2) são relativos a alimentação do componente e devem ser ligados a uma tensão de alimentação, que fica compreendida entre valor ideal. Os pinos 15 e 16 acionam um conjunto de LEDs (Light Emitting Diode ­ Diodo Emissor de Luz) responsáveis pela iluminação do painel (backlight), sendo, portanto, opcional sua utilização, porém nem todos os LCDs possuem o painel luminoso. Sua alimentação é feita aplicando-se 5 nesses pinos. e , sendo 5 o

Tabela 2.3 ­ Descrição da pinagem do LCD[9] Pino 1 2 3 4 5 6 7 8 RS R/W E DB0 BD1 Símbolo Função Comum 5V Ajuste do contraste Seleção de registro Leitura/Escrita Inicia ciclo R/W Dado Dado Pino 9 10 11 12 13 14 15 16 Símbolo DB2 DB3 DB4 DB5 DB6 DB7 A K Função Dado Dado Dado Dado Dado Dado Anodo Catodo

20

O pino três ( ) é utilizado para que seja possível fazer ajuste no contraste da imagem exibida no Display. Para isso, liga-se esse pino ao centro de um potenciômetro de 10k, para que se possa obter uma tensão variável entre e .

O pino RS (Register Select) é utilizado para informar ao LCD o tipo informação que se encontra no barramento de dados (DB7:DB0), de acordo com a Tabela 2.4. Tabela 2.4 ­ Significado de cada nível lógico do pino RS[3] RS 0 1 Descrição A informação é um comando ou instrução A informação é um dado

O pino R/W muda o estado do LCD entre Leitura (Read) e Escrita (Write). Em muitos casos esse pino não é utilizado, ficando permanentemente ligado ao só opera em modo de escrita, de acordo com a Tabela 2.5. Tabela 2.5 ­ Significado de cada nível lógico do pino R/W[3] R/W 0 1 Descrição Operação de escrita Operação de leitura . Nesse caso, o LCD

Para dar início a um ciclo de leitura ou de escrita, é necessário aplicar um pulso no pino 6 (E ­ Enable). No pino E, que normalmente é mantido em nível lógico 0, deve ser aplicado nível lógico 1 e depois aplicado nível lógico 0. Quando for efetuada uma escrita no LCD caractere, é necessário que o dado se mantenha por alguns nanossegundos no barramento depois do pulso aplicado no pino E. Isso é necessário porque o LCD caractere efetua a leitura do dado na borda de descida do pulso aplicado ao pino E. No caso de leitura no LCD caractere, alguns nanossegundos após ser aplicado nível lógico um no pino E, o dado estará disponível no barramento para ser lido pelo microcontrolador. Depois do dado lido, no pino E pode ser aplicado novamente nível lógico 0 [9].

21

Figura 2.10 ­ Seqüência utilizada para efetuar escrita e leitura [9]

Os pinos de DB0 a DB7 equivalem ao barramento de dados paralelo. Este é um barramento bidirecional, pois ele pode ser efetuado tanto para a escrita quanto para leitura dos dados armazenados na memória RAM do LCD. Apesar de existirem oito vias de dados, esses displays também podem operar com quatro vias (DB4 a DB7), ficando assim as demais vias sem função. Neste caso, as informações são enviadas em dois pacotes de quatro bits cada um.

2.3.2 Programação de Caracteres para LCD

O LCD caractere possui duas memórias RAM, que são: DDRAM (Data display RAM ­ RAM de dados do display): possui uma memória de 80 bytes, sua função é armazenar os dados que são visualizados no display; CGRAM (Caracter generator RAM ­ RAM do gerador de caracteres): possui uma memória de 64 bytes, sua função é armazenar os caracteres especiais criados pelo programador; Para se programar um caractere na CGRAM, deve-se carregar o registrador AC com o endereço inicial da CGRAM, em seguida escreve-se o dado correspondente à primeira linha do caractere a ser programado. A tabela 2.6 mostra o desenho de um caractere criado na CGRAM.

22

Tabela 2.6 ­ Desenho de um caractere criado[8] RS 0 0 0 0 0 0 0 0 R/W 0 0 0 0 0 0 0 0 DADO 0x04 0x0e 0x15 0x04 0x04 0x04 0x04 0x00 D7 D6 D5 D4 D3 D2 D1 D0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0

Na Tabela 2.6 é mostrada a criação de seta para cima na primeira posição da CGRAM, sendo que um bit 1 significa pixel ligado e bit 0, pixel desligado. E que os três bits mais significativos (D7 a D5) devem ser deixados em zero, já que cada caractere pode ocupar um espaço máximo de 5x8 pixels, ou seja, cinco colunas por oito linhas. Para se criar um caractere, é necessário o envio de um comando dizendo que o RS esta configurado para recebimento de uma instrução com as informações no barramento de dados configurando o registrador AC para o endereço inicial da CGRAM, em seguida são necessários oito comandos com o pino RS setado em nível lógico 1 indicando que um dado esta sendo enviado, formando ao final o caractere criado.

2.4

Circuito de Disparo com TCA785 O TCA 785 é um CI dedicado ao controle de SCR`s (Silicon Controlled Rectifiers ­

Retificadores Controlados de Silício) e TRIACs (Triode Alternating Courrent ou Triodo de Corrente Alternada). Esse CI produz um pulso de corrente no gatilho para que ocorra o acionamento dos tiristores. Seu pulso de gatilho pode ser deslocado em uma faixa que vai de 0° a 180°. Sua configuração interna possibilita uma simplificada lista de componentes externos para chaveamento, sem tornar muito volumoso o circuito final. Devido à sua versatilidade, permite inúmeras aplicações dentro da eletrônica, apesar de ser um componente dedicado à construção de circuitos de disparos para tiristores em geral [5].

23

A Figura 2.11 mostra o esquema de pinagem do TCA 785 que possui 16 pinos disponíveis.

Figura 2.11 ­ Configuração da Pinagem do TCA 785 [12]

Por se tratar de um circuito integrado, dedicado à construção de circuitos de disparo para acionamento de tiristores em geral, a preocupação maior é a de fornecer os disparos nos instantes desejados, e posteriormente conectar os circuitos de disparo e o de potência, evitando curtos-circuitos fatais. Outra facilidade que o circuito integrado oferece é como respeitar à polarização, pois esta é obtida a partir das características do integrado, fornecidas pelo fabricante e uma vez polarizados, os componentes auxiliares se manterão em quaisquer circuitos de disparo, modificando apenas o sincronismo e o número de integrados necessários para obtenção do número de pulsos desejados [5]. A Figura 2.12 apresenta as principais formas de ondas obtidas em alguns pinos do TCA785.

24

Figura 2.12 ­ Principais formas de onda do TCA 785 [12]

O princípio básico de funcionamento do CI consiste em pegar uma amostra da tensão senoidal da rede (pino 5), detectar o seu início e então começar a gerar uma rampa que irá ser comparada com uma tensão de controle (pino 11). O comparador compara a tensão de rampa com a tensão de controle, quando estas forem iguais, envia pulsos nas saídas, via unidade lógica. Obtêm-se, então, no pino 15, pulsos positivos no semiciclo positivo da tensão de sincronismo e no pino 14, pulsos positivos no semiciclo negativo da tensão de sincronismo, defasados entre si de 180º. Esses pulsos têm suas larguras determinadas pela conexão de um capacitor externo, entre o pino 12 e o comum e amplitudes iguais à tensão de alimentação do pino 16 [6].

25

Internamente, o integrado é alimentado por uma tensão regulada de 3,1V (obtida no pino 8), assegurando assim independências das variações possíveis em sua alimentação externa que é estimada entre 8V e 18V. A sincronização é obtida através de um detector de zeros (pino 5) conectado a um registrador de sincronismo. Todo circuito de disparo em retificador controlado, deve ser sincronizado com a rede, ou ocorrera o disparo aleatório dos tiristores, uma vez que cada pulso será aplicado num instante diferente, que não está relacionado com a tensão da rede. Um ponto de referência para esse sincronismo é a passagem da rede por zero, por esse motivo o TCA785 apresenta um detector de passagem por zero ligado ao pino 5 (pode ser visto na Figura 2.13), que gera um pulso de sincronismo toda vez que a tensão da rede passa por zero.

Figura 2.13 ­ Diagrama de Blocos do TCA 785 [12]

26

2.5

TRIAC

Os TRIACs (Triode Alternating Courrent ou Triodo de Corrente Alternada) são componentes semicondutores que atua nos dois sentidos de condução da corrente elétrica (bidirecional), o pulso de disparo pode ser positivo ou negativo. O TRIAC pode ser considerado como sendo dois SCRs ligados em anti-paralelo, porém os TRIACs não possui Cátodo, mais sim Anodo1 e Anodo2. Em um TRIAC todos os terminais, inclusive o Gate estão conectados em ambos os tipos de cristais (N: material que possui muitos elétrons livres; P: material que possui muitos "buracos" por onde os elétrons livres podem passar, por isso o Gate pode ser acionado tanto por pulsos positivos quanto por pulsos negativos. Na Figura 2.14 é mostrado o TRIAC com a disposição de seus cristais e sua equivalência em SCRs

Figura 2.14 ­ Símbolo, estrutura e circuito equivalente do TRIAC [7]

Os TRIACs são projetados para fechar por meio de disparo através do Gate e abrir por meio de baixa corrente. Porém, exibe as mesmas características de corrente e tensão nas duas direções. Esse tipo de disparo é ativado quando submetido a uma corrente de suficientemente alta e é desativado pela simples redução de sua corrente anódica abaixo do valor de manutenção (Ih). A Figura 2.15 mostra a curva característica de um TRIAC.

27

Figura 2.15 ­ Curva Característica do TRIAC [7]

A curva característica mostra a corrente através do TRIAC, resultante de avalanche quando uma tensão de ruptura (VBO) é aplicada entre os terminais anodo1 e anodo2. A avalanche ocorre quando a tensão entre os terminais A1 e A2 eleva-se a ponto de desenvolver uma corrente interna suficiente alta para provocar a condução do dispositivo [7].

28

CAPITULO III DESENVOLVIMENTO

O projeto de um chuveiro elétrico com controle digital para a temperatura de sua água é visto como um único projeto. No entanto, seu desenvolvimento foi divido em três partes a fim de facilitar o entendimento do seu funcionamento, sendo elas: Microcontrolador: responsável pelo processamento das informações, como: leitura da temperatura da água no chuveiro, através do sensor de temperatura LM35DZ. Controle do pulso PWM e apresentação dos dados ao usuário; Filtro: composto por um amplificador operacional, sua função é filtrar e amplificar o sinal gerado pelo PWM do PIC; Controle de potência: possui dois componentes principais o TCA785 responsável por gerar um pulso proporcional ao sinal recebido do filtro e acionar um TRIAC que controla a tensão que será fornecida ao chuveiro elétrico. Um esquema do projeto é apresentado na Figura 3.1.

Figura 3.1 ­ Esquema do projeto.

29

3.1

Microcontrolador

O circuito de controle microprocessado foi desenvolvido utilizando-se um microcontrolador PIC16F877A, e sua programação foi feita em linguagem C, por ser um chip muito usado, de fácil aprendizagem, e por possuir muito material didático sobre ele. O microcontrolador tem as seguintes funções: Fazer a leitura da temperatura da água através de um sensor e indicar esse valor em um display LCD (Liquid Crystal Display) para informação do usuário; Gerar um pulso PWM que será responsável pelo acionamento do circuito de controle de potência; Apresentar uma escala em degraus para visualização do controle do nível da temperatura. O circuito para efetuar essas tarefas pode ser visto na Figura 3.2. Entretanto, como ocorre seu funcionamento será explicado separadamente, dependendo do trabalho realizado. O código fonte em linguagem C pode ser visto no Apêndice 1, mas trechos importantes serão citados para uma melhor explicação de como foi realizado o desenvolvimento do programa que roda no microcontrolador.

Figura 3.2 ­ Circuito Microcontrolado.

30

3.1.1 Leitura da Temperatura

Para a realização da leitura da temperatura, o sensor utilizado é o LM35DZ que mede temperaturas numa faixa de 0ºC a 100ºC (uma faixa adequada para o projeto proposto). O LM35DZ é um sensor de funcionamento bem simples que fornece 10 de tensão para cada

grau de temperatura. O circuito responsável pela leitura da temperatura é apresentado na Figura 3.3.

Figura 3.3 ­ Circuito do sensor de temperatura.

Para a leitura da temperatura utiliza-se o conversor A/D interno do microcontrolador que para seu funcionamento algumas configurações devem ser feitas. Para isso as seguintes linhas de código são inseridas no programa: #device adc=10: linha de código inserida no cabeçalho do programa cuja função é configurar o compilador para uma conversão A/D de 10 bits; setup_ADC_ports (RA0_analog): esta linha configura a entrada analógica do conversor, para essa configuração adotada utiliza-se o pino RA0 como entrada

31

do sinal analógico e as tensões de referencia adotada são as tensões de alimentação do PIC. setup_adc (ADC_CLOCK_INTERNAL): configura o conversos A/D interno para utilização do clock interno como referencia; set_adc_channel (0): como o PIC16F877A possui oito portas configuráveis para leitura A/D (sendo elas AN0 à AN7) é necessário que se indique qual a porta será utilizada, esta linha de código faz justamente isso, configura o canal zero como sendo a porta de entrada analógica. Com o microcontrolador configurado para uma conversão de 10 bits tem-se um número de passos igual a 1024, que varia de 0 a 1023. Para que a conversão seja efetuada corretamente adota-se uma tensão de referência VREF+ igual a 5 alimentação do PIC e VREF- igual a que é a tensão de

. Com isso a faixa de tensão a ser convertida será de

. Sendo assim, o valor da tensão de referencia para cada passo será de . Mas sabe-se que o LM35DZ fornece uma tensão de assim a seguinte equação foi utilizada para fazer a conversão desse valor. ,

(3.1)

Onde:

: é uma variável de 32 bits que armazena o resultado da equação, ou seja, a temperatura obtida; : é o valor recebido da conversão A/D; : é a conversão da segunda parte da equação em um valor inteiro de 32

para que o cálculo seja feito corretamente. Após a realização da conversão A/D, obtém-se um resultado em milivolts equivalente a temperatura obtida, por exemplo: para uma temperatura de 20 200 o valor obtido seria

. Com isso é necessário que fazer a divisão do valor obtido por 10 para que se obtenha

a temperatura em graus Celsius. Com o valor da temperatura já convertido em um sinal digital, a mesma será apresentada em display LCD (explicado na seção 3.1.3 deste capítulo), para informar ao usuário a temperatura exata da água.

32

3.1.2 Controle do PWM

O PWM é responsável por gerar um sinal que fará o acionamento do circuito de controle de potência. Para que o módulo PWM funcione é necessário fazer sua configuração, inserindo as seguintes linhas de código: setup_timer_2 (T2_DIV_BY_4, 248, 1): Configura o timer 2, para este caso tem-se T2_DIV_BY4, ou seja o timer 2 esta ligado com prescale dividindo por 4, essa configuração serve para fixar a velocidade do contador. Em seguida tem-se o número 248 que é um valor utilizado para ajuste. E por último tem-se o postscale um numero que determina quantas reinicializações dos timers serão necessárias antes de uma interrupção, que neste caso é igual a um. O microcontrolador trabalha internamente a 4Mhz, entretanto após essa

configuração a taxa de variação do contador será determinada por, , com isso a freqüência do PWM será de 1.008 KHz; setup_ccp1 (ccp_pwm): Configura o modulo CCP1 do PIC para trabalhar no modo PWM; set_pwm1_duty (0): Configura o ciclo ativo do PWM em zero, ou seja, desligado. O módulo PWM trabalha com 10 bits, tendo uma faixa de trabalho de 1024 pontos. Porém como o objetivo é trabalhar em uma escala de dezoito níveis possíveis de temperatura, o valor do PWM será considerado no intervalo de 0 a 986 tendo uma variação de 58 pontos para cada degrau dessa escala. O incremento e decremento do PWM serão feitos através de botões como mostrado na Figura 3.4.

33

Figura 3.4 ­ Circuito Gerador de Pulso PWM. O pulso PWM será inicializado com o valor igual a 464, ou seja, o valor médio dentro dos limites estipulados (que seria de 0 a 986). Como a realização de incremento e o decremento do valor do PWM será realizado através de botões, o recurso de interrupção externa será implementado, ou seja, uma rotina será executada sempre que um desses botões for pressionado. Para seu funcionamento será inserido a seguinte linha de código de configuração. enable_interrupts (global | int_rb): Esta linha habilita as interrupções global e interrupção de mudança na porta B (RB4 ­ RB7). Com a configuração da interrupção feita, cria-se uma função de tratamento da interrupção que deverá ter como sua linha superior o seguinte comando "#int_rb" ficando conforme visto na Figura 3.5:

Figura 3.5 ­ Escopo da função de tratamento da interrupção.

34

Dentro dessa função há duas estruturas condicionais cuja função é verificar qual o botão foi pressionado. Caso o botão conectado ao pino RB4 tenha sido pressionado, o valor do pulso PWM será incrementado respeitando o limite superior que é de 986. Caso seja o botão conectado ao pino RB5, o pressionado o valor do pulso PWM será decrementado respeitando o limite inferior que é zero. Porém, ao enviar o valor pulso PWM para a porta de saída para ser enviado ao filtro seu valor será invertido. Por exemplo, se o valor de PWM for 174 o valor real enviado será seção 3.3 deste capítulo. , o motivo dessa inversão será explicado na

3.1.3 Display LCD

O display LCD tem como principal função informar aos usuários do sistema a temperatura atual da água, e se é possível aumentar ou diminuir a temperatura da água. Para o funcionamento do LCD uma biblioteca será usada (mod_lcd.c ­ desenvolvida por Fábio Pereira em [8]). Nessa biblioteca, a comunicação com o microcontrolador é feita utilizando 4 bits, sendo as quatro linhas mais significativas de dados (D7 ­ D4), dividindo o byte em dois nibbles que são transferidos sempre do mais significativo pro menos significativo. A biblioteca utilizada define os pinos que serão utilizados para a transmissão dos dados, e possui módulos de inicialização, posicionamento, escrita e leitura do LCD (porém essa última está desabilitada). O circuito de ligação do LCD é apresentado na Figura 3.6, indicando quais os pinos estão sendo conectados de acordo com a biblioteca.

35

Figura 3.6 ­ Esquema de ligação do display LCD

O que difere a Figura 3.6 do circuito real é que, o display LCD possui 16 pinos ao invés de 14 (como indicado na Figura). Porém esses dois pinos são apenas para alimentação do backlight, que se faz necessário para a vizualização do LCD em ambiente com pouca luz. Para o funcionamento do display LCD é necessário inserir a seguinte linha de código (lcd_ini();), para realizar a inicialização do LCD. Com o LCD inicializado basta realizar chamadas as funções da biblioteca para que seja enviado as informações ao LCD. As funções utilizadas são as seguintes: lcd_escreve (" Teste do LCD "): esta função imprime uma string no LCD; lcd_pos_xy(1,1);: esta função posiciona o cursor do LCD na primeira coluna da primeira linha do LCD; printf (lcd_escreve,"TEMP = %i ßC", temp): esta função imprime string e dados contidos em uma variável; lcd_envia_byte(boolean endereco, byte dado): envia dados de configuração onde endereço configura a linha RS para configuração ou caractere, e o dado correspondente. Para a apresentação da temperatura foi utilizado a função print que envia a string "TEMP" seguido da temperatura cujo valor foi armazenado em uma variável após a realização da conversão A/D.

36

Um exemplo de como é apresentado o valor da temperatura após a conversão A/D pode ser visto na Figura 3.7.

Figura 3.7 ­ Apresentação da temperatura no display LCD

Para indicar o nível em que se encontra a temperatura uma escala em forma de degraus foi criada, sendo essa escala incrementada ou decrementada conforme o comando do usuário. Ao ser atingido o limite inferior a mensagem "MIN" será apresentada no LCD indicando que a temperatura mínima foi atingida, e que não será possível diminuir mais a temperatura da água, e ao atingir a limite superior a mensagem "MAX" será apresentada no LCD indicando que a temperatura máxima foi atingida, e que não será possível aumentar mais a temperatura da água. Como no conjunto de caracteres disponível para apresentação no LCD, não possui os caracteres necessários para a criação da escala, os mesmos tiveram que ser criados, fazendo um total de oito caracteres especiais criados. Para que sejam feitos os caracteres, primeiramente deve-se carregar o registrador AC com o endereço inicial da CGRAM (para isso utiliza-se o comando lcd_envia_byte(0,0x40);), em seguida escreve-se o dado correspondente à primeira linha do caractere a ser programado. A cada oito linhas tem-se um caractere formado, então o endereço da CGRAM é incrementado, escrevendo o próximo caractere na posição um da memória. Para programar cada caractere, utiliza-se uma seqüência de código que diz qual pixel devera estar ligado ou desligado. Com o auxilio da Tabela 3.1, ficará mais fácil demonstrar como é criado um determinado caractere.

37

Tabela 3.1 ­ Tabela de criação do primeiro caractere DADO 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x1f D7 0 0 0 0 0 0 0 0 D6 0 0 0 0 0 0 0 0 D5 0 0 0 0 0 0 0 0 D4 0 0 0 0 0 0 0 1 D3 0 0 0 0 0 0 0 1 D2 0 0 0 0 0 0 0 1 D1 0 0 0 0 0 0 0 1 D0 0 0 0 0 0 0 0 1

Tabela 3.2 ­ Tabela de criação do segundo caractere DADO 0x00 0x00 0x00 0x00 0x00 0x00 0x1f 0x1f D7 0 0 0 0 0 0 0 0 D6 0 0 0 0 0 0 0 0 D5 0 0 0 0 0 0 0 0 D4 0 0 0 0 0 0 1 1 D3 0 0 0 0 0 0 1 1 D2 0 0 0 0 0 0 1 1 D1 0 0 0 0 0 0 1 1 D0 0 0 0 0 0 0 1 1

Tabela 3.3 ­ Tabela de criação do último caractere DADO 0x1f 0x1f 0x1f 0x1f 0x1f 0x1f 0x1f 0x1f D7 0 0 0 0 0 0 0 0 D6 0 0 0 0 0 0 0 0 D5 0 0 0 0 0 0 0 0 D4 1 1 1 1 1 1 1 1 D3 1 1 1 1 1 1 1 1 D2 1 1 1 1 1 1 1 1 D1 1 1 1 1 1 1 1 1 D0 1 1 1 1 1 1 1 1

38

Nas tabelas, os três bits mais significativos devem ser deixados em zero, já que cada caractere do display LCD é formado por uma matriz de 5x8 pixels. O campo dado indica o valor a ser enviado em hexadecimal. No exemplo citado na Tabela 3.1, tem-se o primeiro caractere formado, no qual serão ligados somente os pixels da última linha, formando uma "barrinha". Na Tabela 3.2, tem-se o segundo caractere formado, e na Tabela 3.3, mostra os bits necessários para formar o último caractere. Nota-se que para cada caractere formado será necessárias oito linhas de código, cada um com o seguinte modelo (lcd_envia_byte(boolean endereco, byte dado);) onde o campo endereço indica que está sendo enviado um caractere e o campo dado indica os pixels a ser ligado. Apesar da escala em degraus possuir dezesseis níveis, é necessário criar apenas 8 caracteres pois os mesmos se repetem a partir da nona coluna do LCD. Com os caracteres já definidos, duas tabelas de posição, será criada uma para a primeira linha do LCD e a outra para a segunda linha do LCD. Essas tabelas são criadas definindo-se constantes de bytes, cuja função é cria um vetor de bytes onde a cada célula desse vetor é atribuído um valor hexadecimal. O posicionamento é feito seguindo a seguinte tabela de endereços de caracteres, essa tabela já é definida da DDRAM. Para a construção da escala em degraus a tabela de posições criada para a primeira linha do LCD possui os endereços que vão de 88 a 8f, pois somente essas posições serão usadas, e para a segunda linha utilizam-se todos os endereços. Por fim a Tabela 3.4 criada contém as posições de memória na qual se encontra os caracteres criados. Como o oitavo caractere criado será utilizado oito vezes na segunda linha seu endereço foi inserido nas ultimas nove posições dessa tabela. Tabela 3.4 ­ Tabela de endereço dos caracteres na DDRAM [13] LCD 16x2 Linha1 Linha2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 8a 8b 8c 8d ca cb cc cd 8e ce 8f cf

80 81 82 83 84 85 86 87 88 89 c0 c1 c2 c3 c4 c5 c6 c7 c8 c9

Após todas essas configurações, uma estrutura de repetição será utilizada para que os caracteres possam ser escritos no LCD, para isso o valor do PWM será passado via parâmetro, esse valor será dividido por cinqüenta e oito, pois é o menor incremento possível, após esse calculo tem-se a quantidade de degraus que deve ser impressa no LCD.

39

Por exemplo, se o valor d PWM for 464 têm-se oito caracteres impressos no LCD, pois: , com isso a estrutura de repetição será executada oito vezes imprimindo

um caractere a cada execução. A Figura 3.8 mostra como fica a visualização no LCD após a implementação. Nesta figura têm-se alguns estágios da escala criada.

Figura 3.8 ­ Escala de indicação do nível da temperatura

3.2

Filtro Elétrico

Um filtro elétrico é um quadripolo capaz de atenuar determinadas freqüências de espectro do sinal de entrada e permite a passagem das demais [10]. Como o sinal PWM fornecido pelo PIC possui um nível de corrente baixa, faz-se necessário a utilização de um filtro elétrico. Para o projeto será utilizado um filtro butterworth de quarta ordem.

40

3.2.1 Filtro Butterworth

Os filtros de butterworth são desenvolvidos de modo a ter uma resposta em freqüência o mais plena quanto for matematicamente possível na banda passante, ou seja, sua função de transferência possui o mínimo de oscilação tanto na banda passante quanto na banda de corte. O butterworth é o único filtro que mantém o mesmo formato para ordens mais elevadas, porém com uma inclinação mais íngreme na banda atenuada [11]. Como pode ser visto na Figura 3.9.

Figura 3.9 ­ Formas de onda de um filtro butterworth de 1º, 3º e 11º ordem [12].

Matematicamente, os filtros butterworth possuem a seguinte magnitude da resposta em freqüência de um filtro passa-baixo de ordem n. (3.2)

Onde:

: é a função de transferência; : é o ganho do filtro passa-baixo quando a freqüência é nula; : é a ordem do filtro; : é a freqüência de corte; : é a freqüência angular do sinal.

41

A ordem de um filtro é, por definição, o número de pólos existentes na função de transferência no mesmo. Em termos físicos, quer dizer que a ordem de um filtro é dada pelo número de redes de atraso presentes em sua estrutura [10].

3.2.2 Montagem do Filtro

Neste projeto foi utilizado um filtro butterworth de quarta ordem, cujo circuito elétrico é apresentado da Figura 3.10.

Figura 3.10 ­ Circuito elétrico para filtro butterworth de quarta ordem

O circuito é composto por um amplificador operacional LM324n, que filtra e amplifica o sinal recebido do pulso PWM do PIC. Um filtro butterworth de quarta ordem foi montado colocando-se dois filtros butterworth de segunda ordem em cascata. Na saída do filtro foi colocado um potenciômetro para ajustar a amplitude do ganho de tensão, que para este caso deve ser ajustado para um ganho máximo de 10V.

42

3.3

Controle de Potência

Este circuito controlador de potência destina-se, a controlar a tensão fornecida ao chuveiro elétrico, controlando desta forma, sua potência e conseqüentemente controlando o aquecimento da água. O circuito de potência envolve a utilização de um TCA785 (é dedicado à aplicação de

controle de ângulo de disparo de tiristores continuamente de 0º a 180º) eu um TRIAC (uma

chave electrónica bidirecional que pode conduzir a corrente elétrica nos dois sentidos). A Figura 3.11 mostra o circuito de controle de potência.

Figura 3.11 ­ Circuito responsável pelo controle de potência

Nesse circuito os pinos 1 e 16 estão ligados respectivamente ao comum e a uma fonte de 12 , realizando a alimentação do circuito. Ao pino 5 liga-se a fase da rede para que o TCA785 possa realizar o sincronismo com a rede, esse sincronismo é feito pois o TCA785 possui um detector de zeros ligado ao pino 5 que gera um pulso de sincronismo toda vez que a tensão da rede passa por zero. Esse

43

sincronismo é necessário para que não ocorra o disparo aleatório do TRAC, já que sem esse sincronismo cada pulso será aplicado num instante diferente, que não esta relacionada com a tensão da rede. O pino 6 tem a função de inibir todas as saídas quando aterrado, como este não é o propósito neste circuito, este pino é mantido ligado em 12 .

Os pinos 9 e 10, são responsáveis por gerar um pulso em rampa. Ao pino 9 está ligado um potenciômetro, cuja finalidade é ajustar a amplitude da rampa, que vai a zero sempre que a tensão de sincronismo passa por zero. No Pino 10 tem um capacitor que combinado com o potenciômetro ligado ao pino 9 determinam o tempo de subida da rampa. Ao Pino 11 tem-se ligado a tensão de controle (gerada pelo pulso PWM do PIC), que será comparada com a tensão de rampa e quando essas forem iguais envia pulsos nas saídas via unidade lógica do TCA785. O pino 12 determina a largura do pulso de saída dos pinos 14 e 15, que é determinada pela conexão de um capacitor externo ligado entre o pino 12 e o comum, essa largura é determinada em milissegundos de acordo com a Tabela 3.5. No entanto, como o pino 12 esta ligado diretamente ao comum, a largura dos pulsos será fixa, estendendo-se do instante do disparo até o início do próximo semiciclo. Tabela 3.5 ­ Duração dos pulsos nas saídas 14 e 15 do TCA785[6] Capacitor Pino 12 Duração do pulso 0 30 150 80 220 130 330 200 680 370 1 550

Os pinos 14 e 15 são responsáveis pelo pulso de saída que são defasados em 180º, ou seja, enquanto o pino 14 é responsável por disparar o TRIAC no semiciclo positivo, o pino 15 é usado para disparar o TRIAC no semiciclo negativo. As tensões de controle são fornecidas pelo valor de PWM do PIC, porém não se pode conectá-lo diretamente ao TCA785, pois o nível de corrente drenado pelo TCA785 é muito maior que o nível de corrente fornecida pelo sinal PWM do PIC, por isso faz-se necessário a utilização do filtro. A Figura 3.12 mostra a tensão de rampa, tensão da rede, tensão de controle e os pulsos de saída dos pinos 14 e 15.

44

Figura 3.12 ­ Formas de onda nas saídas dos pinos 14 e 15, para uma determinada entrada de controle A parte "1" da figura é a onda de sincronismo gerada pela rede. A parte "2" é formada pela tensão de rampa que foi ajustada para uma amplitude de 10V, ou seja, a cada semiciclo da rede tem-se uma rampa que vai de 0 a 10V, e duas tensões de controle uma cujos valor são 2V e 8V. Nota-se que se a tensão de controle for baixa, tem-se um sinal maior gerado nos pinos de saída, e se a tensão de controle for alta o sinal gerado nos pinos de saída será menor. Portanto, é necessária uma inversão do valor do sinal do pulso PWM gerado pelo PIC para

que o usuário não se confunda ao ajustar a temperatura, pois afinal quanto menor o valor do

45

pulso PWM mais alta será a temperatura da água, e quanto maior for esse pulso mais baixa será a temperatura da água. Esse efeito ficou bem demonstrado na Figura 3.12.

46

CAPITULO IV MONTAGEM DO PROJETO E RESULTADOS OBTIDOS

4.1

Montagem dos Circuitos

A montagem para testes foi dividida em duas partes que mostra a montagem dos circuitos em protoboards, que são: circuito do microcontrolador e circuito controlador de potência.

4.1.1 Circuito Microcontrolado

A primeira parte a ser montada e testada foi o circuito microcontrolado. Que é responsável por fazer a leitura da temperatura, o controle do pulso PWM e a apresentação de dados no display LCD. A Figura 4.1 mostra o circuito montado no protoboard.

Figura 4.1 ­ Montagem do Circuito Microcontrolado

47

No circuito o sensor de temperatura foi colocado de modo a medir a temperatura ambiente, para testar seu funcionamento. Para o controle do pulso PWM foi utilizado um LED que aumenta ou diminui sua intensidade proporcional ao valor do pulso PWM, mostrando assim se o circuito esta funcionando corretamente. Para a realização do controle do pulso PWM é utilizado botões do tipo push button que possui circuito normalmente aberto e fecha o circuito ao ser pressionado, sendo um para aumentar o valor do pulso e o outro para diminuir esse valor. Para a apresentação dos dados, que são a temperatura e escala em degraus que indica o nível do pulso PWM, foi utilizado um display LCD que se comunica com quatro vias de dados com o PIC e mais duas vias de configuração.

4.1.2 Circuito do Controle de Potência

Após ter concluído a montagem do circuito microcontrolado e realizado seus devidos testes, foi realizado a montagem do circuito de controle de potência, que é apresentado na Figura 4.2.

Figura 4.2 ­ Montagem do Circuito de controle de potência No circuito de controle de potência a alimentação do circuito é feita com tensão de 12V, para o circuito integrado TCA785, mas também é ligado ao circuito a tensão de 220V

48

para que se possa fazer o sincronismo dos pulsos de disparo de TRIAC com a tensão da rede. O circuito recebe um sinal externo que vem do filtro e foi ligado no conector do protoboard

(conector verde), que esta ligada ao pino 11 do TCA785, esse pulso é responsável pelo controle do ângulo de disparo do TRIAC. Esse circuito diferentemente do circuito microcontrolado só pode ser testado com conjunto todo montado (circuito microcontrolado + filtro + controle de potência + carga).

4.2

Testes do projeto

Com a montagem do circuito de controle de potência e do circuito microcontrolado, foi realizado o primeiro teste do projeto. Para esse teste foi utilizado um módulo contendo um filtro butterworth de quarta ordem, apresentado na Figura 4.3.

Figura 4.3 ­ Placa Condicionadora de Sinais

Para a realização do teste de funcionamento foi utilizado como carga uma lâmpada de 100W, que por ser uma carga puramente resistiva simula proporcionalmente um chuveiro elétrico.

49

Para a alimentação do circuito foi utilizado uma fonte simétrica ajustada para gerar uma tensão de +12V e -12V e que possui uma saída regulada em 5V. Foi utilizado um osciloscópio para auxiliar nos ajustes dos potenciômetros que controla o ganho do filtro e a rampa de comparação de tensão para controle do ângulo de disparo gerado pelo circuito integrado TCA785. A Figura 4.4 mostra o ligamento dos circuitos, que no momento da foto estava em funcionamento

Figura 4.4 ­ Montagem do circuito para testes

Com a montagem do circuito foi comprovado o seu funcionamento, pois a lâmpada aumentava e diminuía sua intensidade de acordo com o comando dado através dos botões, esse resultado ilustra o que ocorreria com a resistência presente no chuveiro elétrico. Com a confirmação de seu funcionamento alguns dados foram coletados, como as formas de onda geradas pelo pulso PWM do PIC, o sinal de saída do filtro, o pulso disparado pelo TCA785 para acionamento do TRIAC e tensão na carga. Os valores de entrada e saída do filtro foram coletados e é apresentado na Tabela 4.1.

50

Tabela 4.1 ­ Comparação entre os valores gerados pelo pulso PWM e as tensões de entrada e saída do filtro butterworth de quarta ordem Valor PWM 986 928 870 812 754 696 638 580 522 Vin Filtro 2,82 2,66 2,49 2,33 2,16 2,00 1,83 1,66 1,50 Vout Filtro 10 9,42 8,84 8,25 7,67 7,08 6,50 5,91 5,33 Valor PWM 464 406 348 290 232 174 116 58 0 Vin Filtro 1,34 1,17 1,00 0,84 0,67 0,51 0,34 0,18 0,01 Vout Filtro 4,74 4,15 3,56 2,98 2,39 1,81 1,22 0,64 0,05

O pulso PWM é um número de 10 bits gerado pelo PIC, possuindo assim um valor máximo igual 1023. Porém, observa-se na tabela 4.1 que o valor máximo gerado e de 986, isso ocorre, pois como o display LCD escolhido para o para a implementação do projeto é de 16 colunas x 2 linhas, o que possibilita um número máximo de dezoito níveis possíveis sendo 16 degraus formando a escala mais duas mensagem (MIN e MAX) que indica os extremos foram atingidos, mas como o número zero esta deve estar incluído para que a temperatura mínima seja atingida tem-se uma escala que varia de 0 a 17. Como durante testes efetuados no sistema microcontrolado o sinal de PWM só funcionou perfeitamente para valores até 996, e como o número para cada incremento deve ser 58, o que em 17

incrementos tem-se um total de 986. As Figuras 4.5, 4.6 e 4.7 a seguir, possuem quatro gráficos cada uma e apresentam as formas de ondas coletadas onde o gráfico A mostra o pulso PWM, o gráfico B mostra a tensão de saída do filtro, o gráfico C mostra o pulso de saída do TCA785 para o acionamento do TRIAC e por final o gráfico D mostra a tensão na carga.

51

Figura 4.5 ­ Formas de ondas coletadas para

Na Figura 4.5 tem-se um pulso PWM com 17% do seu valor, ou seja, um valor igual a 174, com isso tem-se uma tensão de saída do filtro igual a 1,81V, o que quando comparado com tensão de rampa configurada no TCA785, corta a mesma próximo ao seu inicio. Gerando assim um grande pulso nos pinos 14 e 15 do TCA785, com isso cortando apenas o inicio da onda formada pela tensão da rede e deixando que uma grande parte passe pelo TRIAC.

52

Figura 4.6 ­ Formas de ondas coletadas para

Na Figura 4.6 tem-se um pulso PWM com 51% do seu valor, ou seja, um valor igual a 522, sendo esse o valor que mais se aproxima da metade do valor máximo gerado pelo pulso PWM. Para a tensão de saída do filtro tem-se um valor igual a 5,33V, o que quando comparado com tensão de rampa configurada no TCA785, corta a mesma bem próxima ao seu centro. Gerando assim um pulso nos pinos 14 e 15 do TCA785 que equivaleria a 50%, com isso a onda formada pela tensão da rede seria cortada pela metade.

53

Figura 4.7 ­ Formas de ondas coletadas para

Na Figura 4.7 tem-se um pulso PWM com 85% do seu valor, ou seja, um valor igual a 870, com isso tem-se uma tensão de saída do filtro igual a 8,84V, o que quando comparado com tensão de rampa configurada no TCA785, corta a mesma próximo de seu fim. Gerando assim um pequeno pulso nos pinos 14 e 15 do TCA785, com isso cortando a onda formada pela tensão da rede quase toda deixando apenas o seu final passe pelo TRIAC.

4.3

Finalização do Projeto

Após a montagem dos circuitos e testes e com a certeza de seu funcionamento, foi feito a montagem do sensor de temperatura dentro do chuveiro elétrico, como mostra a Figura 4.8. Os circuitos desenvolvidos foram confeccionados em placas de circuito impresso, para uma melhor organização do projeto. E por final todas as partes foram instaladas em uma placa

54

de acrílico com as devidas ligações entre as placas, botões, display de LCD e Bornes para a ligação de fontes.

Figura 4.8 ­ Instalação do sensor de temperatura dentro do chuveiro elétrico

O sensor de temperatura foi inserido dentro do chuveiro elétrico através do orifício utilizado para a passagem do fio terra existente no chuveiro. Para que o sensor possa ficar dentro do chuveiro é necessário fazer seu isolamento elétrico. Para isso foi utilizado um cabo termo retrátil (cabo verde) como encapsulamento dos terminais do sensor. As Figuras 4.9 e 4.10 mostram os circuitos desenvolvidos em placas com o circuito impresso. A Figura 4.9 mostra o circuito impresso do sistema microcontrolado, a figura"a" apresenta a parte inferior da placa que mostra as trilhas de ligação dos componentes e a figura" b" mostra a parte superior onde ficam os componentes.

55

Figura 4.9 ­ Placa com o circuito impresso do circuito microcontrolador.

A Figura 4.10 mostra o circuito impresso contendo o circuito de potência e o filtro butterworth de quarta ordem, a figura"a" apresenta a parte inferior da placa que mostra as trilhas de ligação dos componentes e a figura"b" mostra a parte superior onde ficam os componentes.

Figura 4.10 ­ Placa com o circuito impresso do circuito de potência e filtro butterworth de quarta ordem.

56

CAPITULO V CONCLUSÃO

O controle eletrônico de potência em aquecedores elétricos de passagem é um item de conforto que se torna essencial para quem deseja obter uma melhor precisão na temperatura da água na hora de seu banho. A solução apresentada neste trabalho propõe um controle eletrônico de potência para uso em aquecedores elétricos de passagem, utilizando-se de tecnologias disponíveis para tornar esse controle de forma agradável e mais preciso que os disponíveis atualmente no mercado. Os resultados mostraram que o sistema é viável, pois seu funcionamento ocorreu de forma desejada, levando-se em conta uma instalação feita de forma adequada. Com a mudança da temperatura sendo feita através de equipamentos eletrônicos torna-se possível a mudança de temperatura varias vezes durante o banho. Com o auxilio do microcontrolador a mudança de temperatura ocorre de forma fácil e amigável para o usuário, além de apresentar informações de interesse do usuário no display LCD. Para trabalhos futuros sugere-se que seja implementado o sistema de controle da temperatura com realimentação, onde o usuário poderia escolher a temperatura de saída da água, fornecendo como parâmetro de entrada a temperatura desejada. Pode se incluir também a válvula de acionamento de fluxo d'água de forma digital onde com apenas um toque o usuário abriria ou fecharia a fluxo de água.

57

CAPÍTULO VI REFERÊNCIAS BIBLIOGRÁFICAS

[1] TREVISAN, Pedro V. T. http://www.radioamadores.net/files/microcontroladores_pic.pdf (Acesso em 25 de novembro de 2008) [2] MICROCHIP PIC16F877A ­ Datasheet. Disponível em: www.microchip.com (acesso em 28 de novembro de 2008)

[3] SOUZA, David José; LAVINIA, Nicolás César. Conectando o PIC 16F877A: Recursos Avançados. São Paulo: Érica, 2007, 4. ed.

[4] Considerações Básicas sobre o PIC16F877. Campinas: 2007. Disponível em: http://www.solbet.com/downloads/notas_aplicacao/001_TUTPRO_BASICO.pdf. (acesso em 28 de novembro de 2008)

[5] ANTUNES, Fernando Luiz Marcelo, Circuito de Disparo Baseado no Integrado TCA785. Fortaleza, UFC: 2007. Disponível em: http://www.dee.ufc.br/~fantunes/ (Acesso em 7 de

Elet_Potencia/Projetos/Explicacao%20sobre%20TCA%20785.pdf. dezembro de 2008)

[6] Circuito Integrado TCA ­ 785, Laboratório de Eletrônica Industrial. Goiânia, UCG:

[7] ALMEIDA, Antônio. Apostila Básica: funcionamento, polarização e aplicação dos Tiristores - SCR, DIAC e TRIAC. 2007. Disponível em: http://www.almhpg.com/public/ apostilas/tiristor/tiristor.htm#ind5 (Acesso em 10 de dezembro de 2008)

[8] PEREIRA, Fábio. PIC: Programação em C. São Paulo: Érica, 2003, 6. ed.

58

[9] ZANCO, Wagner da Silva. Microcontroladores PIC® - Técnicas de Software e Hardware para Projetos de Circuitos Eletrônicos Com Base no PIC16F877A. São Paulo: Érica, 2006, 1.ª ed.

[10] NATIONAL SEMICONDUCTOR. LM35DZ Datasheet. Disponível em: www.national.com/ds/LM/LM35.pdf (Acesso em 15 de abril de 2009).

[11] VISWAY LCD-016M002B Datasheet. Disponível em: www.datasheetarchive.com (Acesso em 03 de dezembro de 2008).

[12] SIEMENS. TCA 785 Datasheet. Disponível em: www.datasheetcatalog.com. (Acesso em 21 de maio de 2009).

[13] BARBACENA, Ilton L; FLEURY, Claudio Afonso. Display LCD. São Paulo, Intech, 1996.

[14] STMICROELECTRONICS. BTA40 and BTA/BTB41 Series Datasheet. Disponível em: www.st.com. (Acesso em 03 de dezembro de 2008).

59

APÊNDICE

Apêndice 1 ­ Código Fonte do Projeto Desenvolvido

//*************************************************************************// // // // Desenvolvido por: Laurentino Borges Muniz Programa termometro.c // // //

//*************************************************************************// //*************************************************************************// // ARQUIVOS INCLUIDOS, CABEÇALHO //

//*************************************************************************// #include <16f877A.h> #device adc=10 //configura o compilador para conversor A/D de 10 bits #use delay(clock=4000000) #fuses HS,NOWDT,PUT,NOBROWNOUT,NOLVP #include <mod_lcd.c> // Biblioteca de Funções do LCD

//*************************************************************************// // DECLARAÇÃO DA VARIAVEL GLOBAL //

//*************************************************************************// long int ciclo=464; //variavel ciclo responsavel pelo valor do //pwm com inicio em 50%

//*************************************************************************// // TABELA COM ESDEREÇOO DAS POSICOES DOS CARACTERES PERSONALIZADOS DA LINHA 1 //*************************************************************************// byte const tabela_posicao_linha1[]={ 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, //

60

0x8F, };

//*************************************************************************// // TABELA COM ESDEREÇOO DAS POSICOES DOS CARACTERES PERSONALIZADOS DA LINHA 2 //*************************************************************************// byte const tabela_posicao_linha2[]={ 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, }; //

//*************************************************************************// // TABELA COM ESDEREÇOO DOS CARACTERES PERSONALIZADOS //*************************************************************************// byte const tabela_caracter[]={ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, //

61

0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, };

//*************************************************************************// // FUNÇÃO IMPRIME // IMPRIME ESCALA DE 16 CASAS NP LCD //*************************************************************************// void imprime (long int ciclo){ // //

int i; int j;

// configura registrador AC para o endereço inicial da CGRAM lcd_envia_byte(0,0x40);

lcd_envia_byte(1,0x00); // primeira linha do primeiro caractere lcd_envia_byte(1,0x00); // segunda linha do primeiro caractere lcd_envia_byte(1,0x00); // terceira linha do primeiro caractere lcd_envia_byte(1,0x00); // quarta linha do primeiro caractere lcd_envia_byte(1,0x00); // quinta linha do primeiro caractere lcd_envia_byte(1,0x00); // sexta linha do primeiro caractere lcd_envia_byte(1,0x00); // sétima linha do primeiro caractere lcd_envia_byte(1,0x1f); // oitava linha do primeiro caractere

lcd_envia_byte(1,0x00); // primeira linha do segundo caractere lcd_envia_byte(1,0x00); // segunda linha do segundo caractere lcd_envia_byte(1,0x00); // terceira linha do segundo caractere lcd_envia_byte(1,0x00); // quarta linha do segundo caractere lcd_envia_byte(1,0x00); // quinta linha do segundo caractere

62

lcd_envia_byte(1,0x00); // sexta linha do segundo caractere lcd_envia_byte(1,0x1f); // sétima linha do segundo caractere lcd_envia_byte(1,0x1f); // oitava linha do segundo caractere

lcd_envia_byte(1,0x00); // primeira linha do terceiro caractere lcd_envia_byte(1,0x00); // segunda linha do terceiro caractere lcd_envia_byte(1,0x00); // terceira linha do terceiro caractere lcd_envia_byte(1,0x00); // quarta linha do terceiro caractere lcd_envia_byte(1,0x00); // quinta linha do terceiro caractere lcd_envia_byte(1,0x1f); // sexta linha do terceiro caractere lcd_envia_byte(1,0x1f); // sétima linha do terceiro caractere lcd_envia_byte(1,0x1f); // oitava linha do terceiro caractere

lcd_envia_byte(1,0x00); // primeira linha do quarto caractere lcd_envia_byte(1,0x00); // segunda linha do quarto caractere lcd_envia_byte(1,0x00); // terceira linha do quarto caractere lcd_envia_byte(1,0x00); // quarta linha do quarto caractere lcd_envia_byte(1,0x1f); // quinta linha do quarto caractere lcd_envia_byte(1,0x1f); // sexta linha do quarto caractere lcd_envia_byte(1,0x1f); // sétima linha do quarto caractere lcd_envia_byte(1,0x1f); // oitava linha do quarto caractere

lcd_envia_byte(1,0x00); // primeira linha do quinto caractere lcd_envia_byte(1,0x00); // segunda linha do quinto caractere lcd_envia_byte(1,0x00); // terceira linha do quinto caractere lcd_envia_byte(1,0x1f); // quarta linha do quinto caractere lcd_envia_byte(1,0x1f); // quinta linha do quinto caractere lcd_envia_byte(1,0x1f); // sexta linha do quinto caractere lcd_envia_byte(1,0x1f); // sétima linha do quinto caractere lcd_envia_byte(1,0x1f); // oitava linha do quinto caractere

lcd_envia_byte(1,0x00); // primeira linha do sexto caractere lcd_envia_byte(1,0x00); // segunda linha do sexto caractere lcd_envia_byte(1,0x1f); // terceira linha do sexto caractere lcd_envia_byte(1,0x1f); // quarta linha do sexto caractere lcd_envia_byte(1,0x1f); // quinta linha do sexto caractere lcd_envia_byte(1,0x1f); // sexta linha do sexto caractere

63

lcd_envia_byte(1,0x1f); // sétima linha do sexto caractere lcd_envia_byte(1,0x1f); // oitava linha do sexto caractere

lcd_envia_byte(1,0x00); // primeira linha do setimo caractere lcd_envia_byte(1,0x1f); // segunda linha do setimo caractere lcd_envia_byte(1,0x1f); // terceira linha do setimo caractere lcd_envia_byte(1,0x1f); // quarta linha do setimo caractere lcd_envia_byte(1,0x1f); // quinta linha do setimo caractere lcd_envia_byte(1,0x1f); // sexta linha do setimo caractere lcd_envia_byte(1,0x1f); // sétima linha do setimo caractere lcd_envia_byte(1,0x1f); // oitava linha do setimo caractere

lcd_envia_byte(1,0x1f); // primeira linha do oitavo caractere lcd_envia_byte(1,0x1f); // segunda linha do oitavo caractere lcd_envia_byte(1,0x1f); // terceira linha do oitavo caractere lcd_envia_byte(1,0x1f); // quarta linha do oitavo caractere lcd_envia_byte(1,0x1f); // quinta linha do oitavo caractere lcd_envia_byte(1,0x1f); // sexta linha do oitavo caractere lcd_envia_byte(1,0x1f); // sétima linha do oitavo caractere lcd_envia_byte(1,0x1f); // oitava linha do oitavo caractere

lcd_escreve ('\f');

lcd_envia_byte(0,0x0C);

for(i=0, j=0; i<(ciclo/58); i++){

// registrador AC aponta para a primeira coluna da segunda linha lcd_envia_byte(0,tabela_posicao_linha2[i]); // imprime o caractere do usuário lcd_envia_byte(1,tabela_caracter[i]); //delay_ms(1000);

if(i>=8){ // registrador AC aponta para a primeira coluna da segunda linha lcd_envia_byte(0,tabela_posicao_linha1[j]); // imprime o caractere do usuário

64

lcd_envia_byte(1,tabela_caracter[j]); //delay_ms(1000); j++; } } }

//*************************************************************************// // FUNÇÃO LÊ TEMPERATURA //*************************************************************************// void temperatura (){ //

long int valor=0; int32 val32; int temp=0; int i;

//realiza duzentas leituras no sensor de temperatura para obter uma media //das temperaturas obtidas for(i=0;i<=250;i++){ valor += read_adc(); }

valor = (valor/250);

if (valor) valor +=1;

val32 = valor * 4 + ((int32)valor *113)/128;

temp = val32/10;

lcd_escreve ('\f'); // apaga o display lcd_pos_xy(1,1); printf (lcd_escreve,"TEMP = %i ßC", temp); //delay_ms(250); }

65

//*************************************************************************// // FUNÇÃO DE INTERRUPÇÃO EXTERNA //*************************************************************************// #int_rb void trata_int(){ if(input(PIN_B4)){ if(ciclo<986){ ciclo+=58; set_pwm1_duty ((986-ciclo)); // configura o ciclo ativo imprime(ciclo); delay_ms(500); } //

if(ciclo == 986){ lcd_escreve ('\f'); // apaga o display lcd_pos_xy(1,1); printf (lcd_escreve," delay_ms(1500); } } if(input(PIN_B5)){ if(ciclo>0){ ciclo-=58; set_pwm1_duty ((986-ciclo)); // configura o ciclo ativo imprime(ciclo); delay_ms(500); } MAX ");

if (ciclo == 0){ lcd_escreve ('\f'); // apaga o display lcd_pos_xy(1,1); printf (lcd_escreve," delay_ms(1500); } } } MIN ");

66

//*************************************************************************// // FUNÇÃO PRINCIPAL //*************************************************************************// void main() { //configura a interrupcao do tipo externa RBx enable_interrupts (global | int_rb); //

//configuração de portas set_tris_a(0x0f);

//inicia o LCD lcd_ini(); // Inicializa LCD

//configura o modulo pwm setup_timer_2 (T2_DIV_BY_4, 248, 1); setup_ccp1 (ccp_pwm); set_pwm1_duty (0);

//configuração do conversor A/D setup_ADC_ports (RA0_analog); setup_adc (ADC_CLOCK_INTERNAL); set_adc_channel (0);

//LCD intro lcd_escreve('\f'); lcd_pos_xy(1,1); lcd_escreve (" Teste do LCD "); lcd_pos_xy(1,2); lcd_escreve ("PROJETO FINAL II"); delay_ms(2000);

while (true){ set_pwm1_duty (986-ciclo); // configura o ciclo ativo lcd_envia_byte(0,0x0C);//desliga o pisca do LCD temperatura(); } }

67

ANEXOS

Anexo 1 ­ Código Fonte da Biblioteca do Display LCD

/************************************************************************/ /* MOD_LCD.C - Biblioteca de manipulação de módulo LCD /* Autor: Fábio Pereira /************************************************************************/ */ */

// As definições a seguir são utilizadas para acesso aos pinos do display // caso o pino RW não seja utilizado, comente a definição lcd_rw #ifndef lcd_enable #define lcd_enable #define lcd_rs //#define lcd_rw #define lcd_d4 #define lcd_d5 #define lcd_d6 #define lcd_d7 #endif pin_d3 pin_d2 pin_e2 pin_d4 pin_d5 pin_d6 pin_d7 // pino enable do LCD e1 e0

// pino rs do LCD // pino rw do LCD

// pino de dados d4 do LCD // pino de dados d5 do LCD // pino de dados d6 do LCD // pino de dados d7 do LCD

#define lcd_type 2

// 0=5x7, 1=5x10, 2=2 linhas

#define lcd_seg_lin 0x40 // Endereço da segunda linha na RAM do LCD

// a constante abaixo define a seqüência de inicialização do módulo LCD byte CONST INI_LCD[4] = {0x20 | (lcd_type << 2), 0xf, 1, 6};

byte lcd_le_byte() // lê um byte do LCD (somente com pino RW) { byte dado; // configura os pinos de dados como entradas input(lcd_d4); input(lcd_d5); input(lcd_d6);

68

input(lcd_d7); // se o pino rw for utilizado, coloca em 1 #ifdef lcd_rw output_high(lcd_rw); #endif output_high(lcd_enable); // habilita display dado = 0; // zera a variável de leitura // lê os quatro bits mais significativos if (input(lcd_d7)) bit_set(dado,7); if (input(lcd_d6)) bit_set(dado,6); if (input(lcd_d5)) bit_set(dado,5); if (input(lcd_d4)) bit_set(dado,4); // dá um pulso na linha enable output_low(lcd_enable); output_high(lcd_enable); // lê os quatro bits menos significativos if (input(lcd_d7)) bit_set(dado,3); if (input(lcd_d6)) bit_set(dado,2); if (input(lcd_d5)) bit_set(dado,1); if (input(lcd_d4)) bit_set(dado,0); output_low(lcd_enable); // desabilita o display return dado; // retorna o byte lido }

void lcd_envia_nibble( byte dado ) // envia um dado de quatro bits para o display { // coloca os quatro bits nas saidas output_bit(lcd_d4,bit_test(dado,0)); output_bit(lcd_d5,bit_test(dado,1)); output_bit(lcd_d6,bit_test(dado,2)); output_bit(lcd_d7,bit_test(dado,3)); // dá um pulso na linha enable output_high(lcd_enable); output_low(lcd_enable); }

69

void lcd_envia_byte( boolean endereco, byte dado ) { // coloca a linha rs em 0 output_low(lcd_rs); // aguarda o display ficar desocupado //while ( bit_test(lcd_le_byte(),7) ) ; // configura a linha rs dependendo do modo selecionado output_bit(lcd_rs,endereco); delay_us(100); // aguarda 100 us // caso a linha rw esteja definida, coloca em 0 #ifdef lcd_rw output_low(lcd_rw); #endif // desativa linha enable output_low(lcd_enable); // envia a primeira parte do byte lcd_envia_nibble(dado >> 4); // envia a segunda parte do byte lcd_envia_nibble(dado & 0x0f); }

void lcd_ini() // rotina de inicialização do display { byte conta; output_low(lcd_d4); output_low(lcd_d5); output_low(lcd_d6); output_low(lcd_d7); output_low(lcd_rs); #ifdef lcd_rw output_high(lcd_rw); #endif output_low(lcd_enable); delay_ms(15); // envia uma seqüência de 3 vezes 0x03

70

// e depois 0x02 para configurar o módulo // para modo de 4 bits for(conta=1;conta<=3;++conta) { lcd_envia_nibble(3); delay_ms(5); } lcd_envia_nibble(2); // envia string de inicialização do display for(conta=0;conta<=3;++conta) lcd_envia_byte(0,INI_LCD[conta]); }

void lcd_pos_xy( byte x, byte y) { byte endereco; if(y!=1) endereco = lcd_seg_lin; else endereco = 0; endereco += x-1; lcd_envia_byte(0,0x80|endereco); }

void lcd_escreve( char c) // envia caractere para o display { switch (c) { case '\f' : lcd_envia_byte(0,1); delay_ms(2); break; case '\n' : case '\r' : lcd_pos_xy(1,2); break; case '\b' : lcd_envia_byte(0,0x10); break; default : lcd_envia_byte(1,c);

71

break; } }

char lcd_le( byte x, byte y) // le caractere do display { char valor; // seleciona a posição do caractere lcd_pos_xy(x,y); // ativa rs output_high(lcd_rs); // lê o caractere valor = lcd_le_byte(); // desativa rs output_low(lcd_rs); // retorna o valor do caractere return valor; }

Information

85 pages

Find more like this

Report File (DMCA)

Our content is added by our users. We aim to remove reported files within 1 working day. Please use this link to notify us:

Report this file as copyright or inappropriate

306503