PROJETO DE UM
CONTROLADOR DE TEMPERATURA
CONTROLADO POR MICROCONTROLADOR
Estudo
dirigido
a
disciplina
“Sistemas
Digitais Microprocessados”, com enfoque
em uma aplicação prática do conteúdo
programático do semestre para realização
do projeto final.
Novembro de 2011
UNIVERSIDADE ESTADUAL DE SANTA CATARINA
- UDESC CENTRO DE CIÊNCIAS TECNOLÓGICAS
- CCT -
PROJETO DE UM
CONTROLADOR DE TEMPERATURA
CONTROLADO POR MICROCONTROLADOR
Disciplina:
Sistemas Digitais Microprocessados
Professora:
Ana Teruko Watanabe
Acadêmicos:
Everton Peres Correa
Pyter Ely da Silva
ÍNDICE
INTRODUÇÃO.........................................................................................................................2
DEFINIÇÃO E CARACTERISTICAS DO PROJETO..............................................................3
HARDWARE..................................................................................................................…......5
SOFTWARE........................................................................................................................... 6
FLUXOGRAMA ...................................................................................................................... 7
PROGRAMA EM ASSEMBLY................................................................................................ 8
CONCLUSÃO...................................................................................................................... 18
INTRODUÇÃO
Muitas vezes, em diversas situações, temos um ambiente ou até um espaço mais
confinado, em que nos interessa não só em saber a temperatura, mas também que esta seja
controlada nesse determinado espaço. Seja por uma preferência nossa, ou por definições pré
estabelecidas.
Tendo essa situação e vista, o projeto ‘controlador de temperatura’ vem oferecer uma
solução para tal problema, através de componentes simples e de fácil aquisição. Enfocando a
utilização do microcontrolador de arquitetura HCS08, desenvolvido pela Motorola®, que é o
principal objeto de estudos da displina “Sistemas Digitais Microprocessados” (SDM).
Nesse estudo de caso, veremos uma aplicação simples, mas que mostra o poder do
microcontrolador em questão. Utilizando algumas de suas funções mais básicas como entradas
digitas/analógicas e interrupções, vemos que soluções para diversos casos - não somente o
visto nesse documento - dos mais simples ao mais complexos, podem ser facilmente
desenvolvidas para todos os âmbitos, seja industrial, residencial ou comercial. Cuja alguns
exemplos podem ser citados como:
○
Chocadeiras elétricas de granja de frango;
○
Câmaras de fusão em maquinas injectoras;
○
Chuveiros elétricos;
○
Aquecedores de ambientes;
○
Entre outros.
Nota se que apesar de uma controlador de temperatura ser uma ideia bastante simples,
podemos encontras uma grande diversidade de aplicações em setores bem distintos, dando a
ele utilidades eficazes.
DEFINIÇÕES E CARACTERISCAS DO PROJETO
Se trata de um controlador de temperatura, onde a temperatura a ser controlada é
definida pelo usuário através de um potenciômetro ligado diretamente a um pino do HCS08.
O programa conta com uma lógica relativamente simples, mas eficaz. A cada 512 ms, é
coletado o valor
da temperatura real medida no ambiente de interesse, e a temperatura
selecionada pelo usuário através do potenciômetro, compara as duas, e decide se esfria ou
aquece o ambiente.
Para aquecer o ambiente o projeto conta com uma lâmpada incandescente, que é
ativada através de um mecanismo com trasistores e relés. Já para esfriar, além de desligar a
lâmpada, o programa ativa um cooler, para o processo se completar mais rapidamente.
Um delay de 4 segundos também foi implementado como item de segurança, já que
pode haver o risco do relé ficar chaveando a cada meio segundo, compromentendo o filamento
da lâmpada. Esse delay entra em ação no exato momento que o programa percebe que a
temperatura do potenciômetro é igual a do ambiente, esperando assim a temperatura
estabilizar.
Outro item de segurança que foi implementado, foi o ‘botão de emergência’, cujo
principal objetivo é desligar a lâmpada e ligar o cooler. Esse mecanismo é ativado através de
uma simples interrupção IRQ.
Completando o projeto, foi adicionado um display LCD, que mostra em tempo real a
temperatura selecionada e a ambiente. Por motivos de praticida e didádica, foi optado por
mostrar o valor real lido pelo conversor AD em hexadecimal.
Para a concepção do projeto, foram utilizados algumas constantes e variáveis que
podem ser vistas em mais detalhes nas tabelas a seguir.
Tabela 1:
Variável:
Definição:
temperatura_pot
Variável que armazena o valor da tensão enviado pelo potenciômetro.
temperatura_real
Variável que armazena o valor da tensão enviado pelo sensor LM35
temporario
Variável necessária para manipulação do bit antes de envia-lo para o
lcd, já que há a necessidade enviar algarismo por algarismo.
Tabela 2:
Constante:
Definição:
‘Definida:’
Constante reponsável por imprimir no LCD a palavra ‘Definida:’
‘Real:’
Constante reponsável por imprimir no LCD a palavra ‘Real:’
O projeto precisou de uma quantidade grande de portas digitais, tendo em vista que foi
utilizado um módulo LCD para visualização da temperatura em tempo real, e a temperatura
definida pelo usuário. Detalhes de todas as portas utilizadas no projeto, podem ser vistas na
tabela 3:
Tabela 3:
Porta:
Definição:
PTA1
Porta analógica, responsável pela aquisição da temperatura
ambiente enviado pelo sensor LM35
PTA2
Porta digital, reponsável pelo controle de liga/desliga da lâmpada
incandescente.
PTA3
Porta análogica, responsável pela aquisição de dados vindo do
potenciômetro (temperatura definida pelo usuário).
PTA4
Porta digital, responsável pelo controle liga/desliga do cooler
resfriador.
PTB0, PTB1, PTB2,
Portas digitais em geral, basicamente são responsáveis pelo
PTB3, PTB4 e PTB5
controle de envio de dados para o LCD.
HARDWARE
O hardware do projeto pode ser dividido em duas partes. A interface de entrada, e a
interface de saída.
Na interface de entrada, se encontrar um potenciômetro de 5 Kohms no qual é setado a
temperatura a ser mantida, e um sensor de temperatura LM35, que manda um sinal de tensão
proporcional a temperatura, mais precisamente 10mV a cada grau celcius. O LM35 tem opera
no máximo com 150 graus celcius.
Na interface de saída, temos dois trasistores que atuão como chave, já que a tensão de
saída do HCS08 é na faixa de 3.3V, o que impossibilitaria de ligar um relé com valores
comerciais, bem como ligar o cooler diretamente na saída do pino. Outro ponto a ser
observado, é o diodo ligado em paralelo com o relé. Esse díodo tem a função de dissipar a
corrente em forma de calor quando o relé é desligado. Os resistores da saída podem ser
considerados como 1Kohm.
Todo o esquemático do projeto, pode ser visto com detalhes na figura 1.
Figura 1:
SOFTWARE
O software do projeto, foi escrito em linguagem assembly, com uma biblioteca
em C que era responsável pelo controle do LCD. Então as funções para escrita do LCD foram
chamadas dentro do assembly. Porém ainda foi necessário desenvolver uma sub-rotina na qual
era tratado o dado antes de envia-lo ao lcd, essa função - lcd_mostra_valores - separa o bit
principal em nibbles, depois filtra, e chama a função para envia-lo ao LCD. A bliblioteca em C,
foi desenvolvida a partir da que se encontra no livro ‘Microcontroladores HC908Q’, do autor
Fábio Pereira.
Dentro do software foram usados alguns dos módulos mais básicos no HCS08,
tais como interrupções de timer, interrupções IRQ, pinos no formato analógico e digitais.
Foi utilizado interrupção de timer, para coleta dos dados das entradas analógicas
a cada 512ms, fazer a comparação e decidir o que deve ser feito. A interrupção IRQ foi utilizada
para um botão de emergência, como item complementar de segurança. Entradas analógicas
foram necessárias para aquisição dos dados provenientes do potenciômetro e do sensor de
temperatura, um artifício interessante que foi usado no software, foi a utilização de sub-rotinas
específicas para seleção do canal AD antes da coleta dos dados. Outra sub-rotina a ser
comentada, é a que confere se a conversão AD foi efetuada antes de adquirir os dados das
entradas. E por último, foram utilizados pinos configurados como entradas digitais, para fazer o
controle dos componentes de hardware que possuaim apenas 2 estados.
O fluxograma e o programa escrito em assembly podem ser vistos nas páginas
seguintes.
FLUXOGRAMA
Programa escrito em assembly:
; export symbols
XDEF asm_main
XREF lcd_envia_byte
XREF lcd_escreve_char
XREF lcd_escreve_string
XREF lcd_escreve_num
XREF lcd_pos_xy
XREF delay_ms
; Include derivative-specific definitions
INCLUDE 'derivative.inc'
; Àrea de dados variáveis
Data_Sect: SECTION
temperatura_pot: DS.W 1
temperatura_real: DS.W 1
temporario:
DS.W 1
; Àrea de constantes
ConstSect: SECTION ; seções de constantes
definida: DC.B "Definida:"
definida_l: DC.B $00
;NECESSARIO PARA FINALIZAR O STRING
real: DC.B "Real:"
real_1: DC.B $00
; variable/data section
MY_ZEROPAGE: SECTION SHORT
;*****==== C Ó D I G O ===*****
MyCode:
SECTION
asm_main:
;=== CONFIGURACAO HCS ===
config:
LDA SOPT1
;desabilita COP
AND #127
STA SOPT1
LDHX #0
;zera variaveis
STHX temperatura_real
LDHX #0
STHX temperatura_pot
LDHX #0
STHX temporario
;config E/S
MOV #%00000000, PTAD ;zerando saida PTA2 E PTA4
MOV #%00010100, PTADD ;setando como saida PTA2
;config analogico
MOV #%00001010,
MOV #%10001000,
MOV #%00000000,
MOV #%00111111,
desativado...
APCTL1 ;configurando entradas analogicas
ADCCFG ;modo 10 bits, busclock/1, e outras configurações...
ADCSC2 ;sem comparacação, e outras configurações...
ADCSC1 ;conversao continua, conversor primeiramente
;config interrupcao externa
MOV #%00010010,IRQSC
;IRQ acionado em transição para baixo
;config interrupcao timer
LDA #%01010110
STA SRTISC
CLI
;configura interrupcao de timer a cada 512ms
; tempo de amostragem da temperatura
;habilita interrupções
;=== PRINCIPAL ===
principal:
BSR lcd_mostra_valores ;chama label responsavel pelo controle do LCD
LDHX temperatura_real ;aqui compara se a temperatura ja está igual
CPHX temperatura_pot
BEQ delay_4s ;label para esperar a temperatura estabilizar um pouco,
; util para o relé nao ficar chaveando, evitando uma possivel
; queima da lampada
BRA principal
;volta para principal, caracterizando loop infinito
;=== SUB-ROTINAS ===
delay_4s:
;label responsavel por fazer um delay de 4 segundos.
LDHX #1000
JSR delay_ms
LDHX #1000
JSR delay_ms
LDHX #1000
JSR delay_ms
LDHX #1000
JSR delay_ms
RTS
lcd_mostra_valores:
;///*** PARTE RESPONSAVEL PELA TEMPERATURA DO POTENCIOMENTRO ***///
;escreve 'Definida:' no LCD
LDA #1
;define posicao no LCD
LDX #2
JSR lcd_pos_xy
LDHX #definida
JSR lcd_escreve_string
;BIT --X da temperatura definida pelo usuario
LDA #1
;define posicao no LCD
LDX #15
JSR lcd_pos_xy
LDHX temperatura_pot ;carrega temperatura_pot em H:X
STX temporario
;joga valor de X para 'temporario'
LDA temporario
;carrega valor de 'temporario' em A
AND #%00001111
;faz um AND bit a bit, para pegar somente o valor
; menos significativo do acumulador
JSR lcd_escreve_num
;chama funcao 'lcd_escreve_num' da biblioteca,
; e escreve o valor de A no LCD
;BIT -X- da temperatura definida pelo usuario
LDA #1
LDX #14
JSR lcd_pos_xy
;define posicao no LCD
LDHX temperatura_pot ;carrega temperatura_pot em H:X
STX temporario
;joga valor de X para 'temporario'
LDA temporario
;carrega valor de 'temporario' em A
LSRA
LSRA
;desloca A 4 bits para direita, e coloca 0 nos bits deslocados
; essa funcao se torna necessaria, para pegar a parte mais
; significativa do registrador A.
STA temporario ;necessario, se não ocorre ERRO no LCD
LDA temporario
LSRA
LSRA
AND #%00001111
;faz um AND bit a bit, para pegar somente o valor
; menos significativo do acumulador
JSR lcd_escreve_num
;chama funcao 'lcd_escreve_num' da biblioteca,
; e escreve o valor de A no LCD
;BIT X-- da temperatura definida pelo usuario
LDA #1
LDX #13
JSR lcd_pos_xy
;define posicao no LCD
LDHX temperatura_pot ;carrega temperatura_pot em H:X
PSHH
;armazena conteudo de H na pilha
PULA
;carrega conteudo da pilha (H) em A
AND #%00001111
;filtra nibble menos significativo
JSR lcd_escreve_num
;escreve valor no LDC
;///*** PARTE RESPONSAVEL PELA TEMPERATURA DO LM35 ***///
;escreve 'Real:' no LCD
LDA #2
;define posicao no LCD
LDX #2
JSR lcd_pos_xy
LDHX #real
JSR lcd_escreve_string
;BIT --X da temperatura do LM35
LDA #2
LDX #15
JSR lcd_pos_xy
;define posicao no LCD
LDHX temperatura_real ;carrega temperatura_real em H:X
STX temporario
;joga valor de X para 'temporario'
LDA temporario
;carrega valor de 'temporario' em A
AND #%00001111
;faz um AND bit a bit, para pegar somente o valor
; menos significativo do acumulador
JSR lcd_escreve_num
;chama funcao 'lcd_escreve_num' da biblioteca,
; e escreve o valor de A no LCD
;BIT -X- da temperatura do LM35
LDA #2
LDX #14
JSR lcd_pos_xy
;define posicao no LCD
LDHX temperatura_real ;carrega temperatura_real em H:X
STX temporario
;joga valor de X para 'temporario'
LDA temporario
LSRA
LSRA
;carrega valor de 'temporario' em A
;desloca A 4 bits para direita, e coloca 0 nos bits deslocados
; essa funcao se torna necessaria, para pegar a parte mais
STA temporario
LDA temporario
LSRA
LSRA
; significativa do registrador A.
AND #%00001111
;faz um AND bit a bit, para pegar somente o valor
; menos significativo do acumulador
JSR lcd_escreve_num
;chama funcao 'lcd_escreve_num' da biblioteca,
; e escreve o valor de A no LCD
;BIT X-- da temperatura do LM35
LDA #2
LDX #13
JSR lcd_pos_xy
;define posicao no LCD
LDHX temperatura_real ;carrega temperatura_real em H:X
PSHH
;armazena conteudo de H na pilha
PULA
;carrega conteudo da pilha (H) em A
AND #%00001111
JSR lcd_escreve_num
;filtra nibble menos significativo
;escreve valor no LDC
RTS
seleciona_adc1:
BSET 0, ADCSC1
BCLR 1, ADCSC1
BCLR 2, ADCSC1
BCLR 3, ADCSC1
BCLR 4, ADCSC1
RTS
;label responsavel pela selecao do canal adc1
seleciona_adc3:
;label responsavel pela selecao do canal adc3
BSET 0, ADCSC1
BSET 1, ADCSC1
BCLR 2, ADCSC1
BCLR 3, ADCSC1
BCLR 4, ADCSC1
RTS
desliga_adc:
BSET
BSET
BSET
BSET
BSET
0,
1,
2,
3,
4,
;label responsavel por desligar os canais ad
ADCSC1
ADCSC1
ADCSC1
ADCSC1
ADCSC1
RTS
aquece:
;label responsavel por ligar a lampada
BSET 2, PTAD
BCLR 4, PTAD
;liga lamp
;desliga ventilador
BRA volta
resfria:
;label responsavel por desligar a lampada
BCLR 2, PTAD
BSET 4, PTAD
;desliga lamp
;liga ventilador
BRA volta
verifica_coco:
ir em frente
;label resposavel pela verificacao do COCO, so deixa o programa
; se o coco terminar de fazer a conversao AD
BRCLR 7, ADCSC1, verifica_coco
RTS
;=== INTERRUPCAO ===
interrupcao_timer:
;label responsavel pelo tratamente da interrupcao
LDA SRTISC
;apaga ACK da interrupcao
ORA #%01000000
STA SRTISC
JSR seleciona_adc1
BSR verifica_coco
;seleciona canal adc1
;espera bit coco setar.
LDHX ADCRH
;le a temperatura, e joga para 'temperatura_real'
STHX temperatura_real
JSR seleciona_adc3
BSR verifica_coco
;seleciona canal adc3
;espera bit coco setar
LDHX ADCRH
;le a valor do potenciometro e grava em 'temperatura_pot'
STHX temperatura_pot
JSR desliga_adc
;desativa as entradas analogicas.
LDHX temperatura_pot ;carrega 'temperatura_pot' no H:X
CPHX temperatura_real ;comapra com temperatura real
BHI aquece
BLS resfria
volta:
;se a temperatura do potenciometro for maior, aquece,
; caso for menor, resfria
;label para volta das funcoes 'liga_lamp' e 'desliga_lamp'
RTI
interrupcao_IRQ:
BSET 2, IRQSC
;apaga ack do IRQ
BCLR 2, PTAD
BSET 4, PTAD
;desliga lampada
;liga ventilador
loop:
BRA loop ;loop infinito, até o botão RESET for apertado.
RTI
;**************************************************************
;*
Vetor de interrupcoes
*
;**************************************************************
ORG $FFD0
DC.W interrupcao_timer
ORG
$FFFA
DC.W interrupcao_IRQ
CONCLUSÃO
O controlador de temperatura, apesar de ser um projeto simples, demostrou uma grande
eficiência no esduto do microcontrolado HCS08. Procurando visar algumas das demais funções
que o microcontrolador tem a oferecer. Fica visível o beneficio que de pode ser extraido de sua
utilização, onde podemos ver em areas de industriais, assim como residenciais e entre outra.
O projeto não só contribui para o estudo do microcontrolador HCS08 , como também oferece
uma visão ampla da aplicação em termos profissionalizante da disciplina de “ Sistemas Digitais
Microprocessados”, algo que é muito importante para uma futura carreira na engenharia.
BIBLIOGRAFIA
1.
Microcontroladores HC908Q - Fábio Pereira - Editora Érica
2.
Microcontroladores HCS08 - Fábio Pereira - Editora Érica
Download

PROJETO DE UM CONTROLADOR DE TEMPERATURA