Modelo de Trabalho de SDM

20
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

description

Trabalho de microprocessadores

Transcript of Modelo de Trabalho de SDM

Page 1: Modelo de Trabalho de SDM

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

Page 2: Modelo de Trabalho de SDM

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

Page 3: Modelo de Trabalho de SDM

ÍNDICE INTRODUÇÃO.........................................................................................................................2

DEFINIÇÃO E CARACTERISTICAS DO PROJETO..............................................................3 HARDWARE..................................................................................................................…......5 SOFTWARE........................................................................................................................... 6 FLUXOGRAMA ...................................................................................................................... 7 PROGRAMA EM ASSEMBLY................................................................................................ 8 CONCLUSÃO...................................................................................................................... 18

Page 4: Modelo de Trabalho de SDM

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.

Page 5: Modelo de Trabalho de SDM

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:’

Page 6: Modelo de Trabalho de SDM

‘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,

PTB3, PTB4 e PTB5

Portas digitais em geral, basicamente são responsáveis pelo

controle de envio de dados para o LCD.

Page 7: Modelo de Trabalho de SDM

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:

Page 8: Modelo de Trabalho de SDM

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.

Page 9: Modelo de Trabalho de SDM

FLUXOGRAMA

Page 10: Modelo de Trabalho de SDM

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áveisData_Sect: SECTIONtemperatura_pot: DS.W 1temperatura_real: DS.W 1temporario: DS.W 1

; Àrea de constantesConstSect: SECTION ; seções de constantesdefinida: DC.B "Definida:"definida_l: DC.B $00 ;NECESSARIO PARA FINALIZAR O STRINGreal: DC.B "Real:"real_1: DC.B $00

; variable/data sectionMY_ZEROPAGE: SECTION SHORT

;*****==== C Ó D I G O ===*****

MyCode: SECTION

asm_main:

;=== CONFIGURACAO HCS ===

config:

LDA SOPT1 ;desabilita COP

Page 11: Modelo de Trabalho de SDM

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, APCTL1 ;configurando entradas analogicas MOV #%10001000, ADCCFG ;modo 10 bits, busclock/1, e outras configurações... MOV #%00000000, ADCSC2 ;sem comparacação, e outras configurações... MOV #%00111111, ADCSC1 ;conversao continua, conversor primeiramente desativado... ;config interrupcao externa MOV #%00010010,IRQSC ;IRQ acionado em transição para baixo ;config interrupcao timer LDA #%01010110 ;configura interrupcao de timer a cada 512ms STA SRTISC ; tempo de amostragem da temperatura CLI ;habilita interrupções

;=== PRINCIPAL ===

principal:

Page 12: Modelo de Trabalho de SDM

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

Page 13: Modelo de Trabalho de SDM

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 ;define posicao no LCD LDX #14 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 LSRA ;desloca A 4 bits para direita, e coloca 0 nos bits deslocados LSRA ; 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 ;define posicao no LCD LDX #13 JSR lcd_pos_xy

Page 14: Modelo de Trabalho de SDM

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 ;define posicao no LCD LDX #15 JSR lcd_pos_xy 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 ;define posicao no LCD LDX #14 JSR lcd_pos_xy LDHX temperatura_real ;carrega temperatura_real em H:X STX temporario ;joga valor de X para 'temporario'

Page 15: Modelo de Trabalho de SDM

LDA temporario ;carrega valor de 'temporario' em A LSRA ;desloca A 4 bits para direita, e coloca 0 nos bits deslocados LSRA ; essa funcao se torna necessaria, para pegar a parte mais STA temporario LDA temporario LSRA ; significativa do registrador A. 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 do LM35 LDA #2 ;define posicao no LCD LDX #13 JSR lcd_pos_xy 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 ;filtra nibble menos significativo JSR lcd_escreve_num ;escreve valor no LDC RTS

seleciona_adc1: ;label responsavel pela selecao do canal adc1 BSET 0, ADCSC1 BCLR 1, ADCSC1 BCLR 2, ADCSC1 BCLR 3, ADCSC1 BCLR 4, ADCSC1 RTS

Page 16: Modelo de Trabalho de SDM

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: ;label responsavel por desligar os canais ad BSET 0, ADCSC1 BSET 1, ADCSC1 BSET 2, ADCSC1 BSET 3, ADCSC1 BSET 4, ADCSC1 RTS

aquece: ;label responsavel por ligar a lampada

BSET 2, PTAD ;liga lamp BCLR 4, PTAD ;desliga ventilador BRA volta

resfria: ;label responsavel por desligar a lampada

BCLR 2, PTAD ;desliga lamp BSET 4, PTAD ;liga ventilador BRA volta

verifica_coco: ;label resposavel pela verificacao do COCO, so deixa o programa ir em frente ; se o coco terminar de fazer a conversao AD BRCLR 7, ADCSC1, verifica_coco RTS ;=== INTERRUPCAO ===

Page 17: Modelo de Trabalho de SDM

interrupcao_timer: ;label responsavel pelo tratamente da interrupcao

LDA SRTISC ;apaga ACK da interrupcao ORA #%01000000 STA SRTISC JSR seleciona_adc1 ;seleciona canal adc1 BSR verifica_coco ;espera bit coco setar. LDHX ADCRH ;le a temperatura, e joga para 'temperatura_real' STHX temperatura_real

JSR seleciona_adc3 ;seleciona canal adc3 BSR verifica_coco ;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 ;se a temperatura do potenciometro for maior, aquece, BLS resfria ; caso for menor, resfria volta: ;label para volta das funcoes 'liga_lamp' e 'desliga_lamp' RTI

interrupcao_IRQ:

BSET 2, IRQSC ;apaga ack do IRQ BCLR 2, PTAD ;desliga lampada BSET 4, PTAD ;liga ventilador

Page 18: Modelo de Trabalho de SDM

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

Page 19: Modelo de Trabalho de SDM

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.

Page 20: Modelo de Trabalho de SDM

BIBLIOGRAFIA

1. Microcontroladores HC908Q - Fábio Pereira - Editora Érica

2. Microcontroladores HCS08 - Fábio Pereira - Editora Érica