SlideShare une entreprise Scribd logo
1  sur  18
Télécharger pour lire hors ligne
Instituto Federal Sul-rio-grandense
Curso de Eletrônica
Disciplinas de Instrumentação Industrial, Microcontroladores e Programação III.
Professores Ulisses Lyra dos Santos, Rafael Galli e Norberto de Castro Peil.

Desenvolvimento de um kit didático para trabalhos práticos nas disciplinas de
Instrumentação Industrial e Sistemas de Controle

Gustavo dos Santos Fernandes
Rodrian Garcia Radmann
Tro7ni
1 - Introdução
Tornar o conhecimento teórico e prático um único saber é o objetivo de todos os
cursos técnicos e a maior parte dos cursos superiores. O problema surge quando devido
a deficiências financeiras e estruturais dos cursos não é possível reproduzir para o aluno
a situação real em que se aplica determinado conteúdo. Nestas situações, apela-se para
os kits didáticos, estes embora não apresentem a situação real de aplicação dos
conteúdos vistos nas disciplinas, podem simular algo em que seja necessário aplicar
parte dos conhecimentos adquiridos em sala de aula.
O objetivo deste trabalho foi desenvolver um kit didático para trabalhos práticos
nas disciplinas de Instrumentação Industrial e Sistemas de Controle. O kit oferece
elementos que podem simular um sistema termodinâmico, um sistema de sensoriamento
e um sistema de atuação. A aquisição, registro de dados e lógica de controle deste
sistema deve ser feita pela interface serial RS232 de um microcomputador de uso geral.
Através da programação em ambiente Delphi, pode-se facilmente implementar uma
lógica de controle para o sistema termodinâmico oferecido pelo kit.
2 - Desenvolvimento
2.1 – Descrição geral do projeto
O kit desenvolvido pode ser usado para simular o controle de dois sistemas
termodinâmicos diferentes:
- um forno controlado;
- uma carga que precise ter a sua temperatura máxima limitada.
Ex: processador.
O sistema termodinâmico oferecido pelo kit é composto por um resistor de
68 ohms / 10 W. Utiliza-se o efeito joule da corrente para aquecê-lo e tornar possível o
controle de temperatura tanto por controle de aquecimento quanto por controle de
resfriamento. Este resistor também pode se comportar como um atuador, como no caso
da simulação do forno controlado.
O sistema de sensoriamento é composto por um CI LM35, sensor de temperatura
de precisão que é capaz de variar a sua saída em 10 mV a cada variação de um grau
Celsius. A partir deste, é possível saber qual é a temperatura do resistor.
O sistema de atuação é composto por uma ventoinha que pode ter a sua rotação
controlada a partir de um sinal PWM – Pusle Width Modulation. No caso do forno
controlado, o resistor também pode se comportar como um atuador e também tem o seu
aquecimento controlado por um sinal PWM.
O sistema possui um microcontrolador PIC16F877A para fazer a interface entre
o kit e a porta serial RS232 do microcomputador.

2.2 – Hardware
O hardware do kit é uma placa de interface entre os dispositivos que compõem o
kit e o microcomputador.
Este kit foi desenvolvido para tornar possível a implementação de lógicas de
controle a partir da programação em alto nível por meio de plataformas de
desenvolvimento que rodam em microcomputadores de uso geral. Logo se fez
necessário desenvolver uma placa microcontrolada que fizesse a interface entre a porta
serial RS232 do microcomputador e periféricos do kit. A partir desta placa, tornou-se
possível acionar cargas de potência e fazer leituras analógicas de tensão, o que é de
extrema importância para o bom funcionamento do kit.

2.2.1 – Microcontrolador
O microcontrolador utilizada para a interface foi o PIC16F877A, fabricado pela
Microchip. Este microcontrolador foi escolhido pois possui 2 módulos para controle de
pwm, suporte para comunicação uart e canais de conversão analógico-digital, e
principalmente, por se ter várias peças disponíveis no curso.
2.2.2 – Comunicação serial
Conforme já dito, o microcontrolador PIC16F877A possui uma USART
integrada. Esta USART é responsável pela serialização e temporização da transferência
dos dados que são enviados e paralelização e temporização dos dados que são recebidos.
Através deste periférico integrado ao chip, não é necessário usar o processador para
fazer o trabalho de transmissão ou recepção serial, bastando apenas enviar o dado de
forma paralela e recebê-lo de forma paralela.
O microcontrolador trabalha com o protocolo UART com níveis TTL: 0 V –
“0”, 5 V – “1”. Entretanto a porta serial dos microcomputadores utiliza os níveis
RS232: +3 a +15 V – “0”, -3 a -15 V - “1”. Para fazer o interface entre a comunicação
do microcontrolador com a do microcomputador foi necessário utilizar um conversor de
níveis também conhecido como transceptor TTL-RS232, o CI MAX232.
O MAX232 é um CI que possui dois tranceptores TTL-RS232 integrados.
Através de quatro capacitores externos este consegue gerar as tensões do padrão RS232
sendo alimentado por uma única fonte de 5 V.
Para a comunicação com o computador foram usados apenas 3 fios: TX, RX e
GND. Não foi necessário utilizar os outros sinais disponíveis na porta. Foi montado um
cabo específico para o kit, com um DB9 fêmea em uma das pontas e um conector spox
de 3 vias para ser conectado em uma barra de pinos, na outra.

2.2.3 – Alimentação
A alimentação do kit é feita por uma fonte linear de aproximadamente
44 V - 800 mA. A tensão de 44 V é resultado da retificação e filtragem da tensão de
saída do secundário de um transformador de 30 Vac. Esta tensão está sendo aplicada no
ramo do resistor e na entrada de um regulador de 24 V. A tensão de saída do regulador
de 24 V está sendo aplicada no ramo da ventoinha e na entrada de um regulador de 5 V.
A tensão de saída do regulador de 5 V está alimentando todos os circuitos integrados do
kit.
Caso haja uma revisão do projeto, procurará reduzir-se a tensão entre os
terminais dos reguladores ou montá-los de forma que seja possível a fixação de um
dissipador de calor.

2.2.1 – Acionamento de cargas de potência
As cargas de potência acionadas pelo microcontrolador são duas: uma ventoinha
de 24 V - 300 mA e um resistor de 68 ohms - 10 W. Ambas estão conectadas às saídas
de sinal PWM do microcontrolador.
A ventoinha está sendo acionada por um transistor NPN BC337 que liga o seu
terminal negativo ao GND, quando acionado. Colocou-se um diodo em antiparalelo
com a bobina da ventoinha para evitar o golpe indutivo ao desligar o transistor. Este
golpe indutivo em casos extremos pode danificar o transistor ou até mesmo o
microcontrolador.
O resistor está sendo acionado por um transistor MOSFET N IRF3205. Este
transistor liga o negativo da fonte ao resistor quando acionado. Sabe-se que aplicando
45 V em um resistor de 68 ohms tem-se uma potência dissipada de aproximadamente 30
W. O resistor usado é de 10 W. Porém o kit possui um sistema de proteção que bloqueia
o uso do usuário quando a temperatura do resistor ultrapassar 100 º C, forçando-o a
baixar a temperatura para no mínimo 50 º C antes de desligar o sistema de proteção.
Esta proteção foi implementada no firmware do microcontrolador.

2.2.4 – Indicação
O kit possui dois leds: um vermelho e um laranja.
O led vermelho serve para indicar se a fonte de 5 V está ligada.
O led laranja indica o estado do microcontrolador. Aceso indica funcionamento
normal. Piscando indica proteção de sobre temperatura e apagado indica que o
microcontrolador está inativo.

2.2.5 – Leitura de temperatura
O microcontrolador PIC16F877A possui um conversor AD por aproximação
sucessiva integrado ao chip. Este tipo de conversor é muito vantajoso quando se
necessita de um equivalente binário de uma determinada tensão analógica a partir de
uma tensão de referência. Para realizar a leitura de temperatura foi necessário converter
de um sinal analógico para digital a saída do sensor de temperatura LM35. Para isso,
ligou-se a saída do sensor a uma dos canais de conversão AD do microcontrolador,
utilizando um filtro passa-baixas composto por um resistor de 1k2 e um capacitor de
100 nF para estabilizar o sinal. Mesmo realizando uma filtragem analógica ainda foi
necessário implementar um filtro digital no firmware do microcontrolador.

2.2.6 – Layout da placa de circuito impresso
O layout da placa de circuito impresso foi desenhado no EAGLE v 5.6, da
CadSoft.

2.3 – Firmware
As pessoas confundem bastante o conceito de “software” e “firmware” e
chamam muitas vezes um firmware de software ou um software de firmware.
O firmware pode ser definido como um software embarcado. Um software para
um hardware específico que vem gravado de fábrica na memória de programa de um
sistema microprocessado. Pode-se dizer que o firmware esta “preso” à sua placa de
aplicação.
Quando se desenvolve um programa para rodar em um hardware específico, este
é chamado de firmware. Entretanto ao se desenvolver um programa para funcionar
independente do hardware utilizado, desenvolve-se um software.
Exemplos de equipamentos que utilizam firmwares: celulares mais antigos,
controles remotos, cafeteiras, relógios, BIOS, estações meteorológicas, multímetros, etc.
Exemplos de equipamentos que utilizam softwares: microcomputadores da
família PC, MAC, IBM, celulares mais modernos, televisões mais modernas, etc.
Exemplos de softwares que parecem firmwares: programa para kits de didáticos,
programas para kits de desenvolvimento.

2.3.1 – Compilador
O desenvolvimento do firmware gravado no microcontrolador foi feito usandose o CCS C Compiler versão 4.074. Este compilador, apesar de ser muito bom para fins
didático e para desenvolvimento rápido é muito deficiente em relação à otimização de
código assembly gerado e acesso direto aos registradores do microcontrolador. Optou-se
por usar este compilador devido às ferramentas para comunicação serial e a
transparência do código escrito.

2.3.2 – Metodologia de desenvolvimento
A forma de programar um sistema embarcado é diferente de programar um
computador de uso geral. Na programação de um computador têm-se um fim de
execução do programa, em um sistema embarcado não.
Em um sistema embarcado existem basicamente duas etapas em sua
programação: a inicialização e o laço principal.
Na inicialização são feitos todos os tipos de configurações e inicializações de
variáveis e periféricos. Já no laço principal é feita a execução de rotinas que só cessará
quando o dispositivo for desligado, ou seja, um laço é infinito.
Um firmware eficiente é um firmware desenvolvido com um único laço (sem for
ou while): o laço principal. Todos os outros laços devem ser feitos com estruturas de
seleção (if-else switch-case) dentro do laço principal. Deve-se passar pelo início do laço
o mais freqüente possível para que se possa realizar comandos de varredura ou testes
que dependem de respostas rápidas o mais rápido possível sem deixar o
microcontrolador esperando estes resultados. O microcontrolador deve saber qual
instrução executar em uma passagem pelo laço com base na instrução executada na
ultima passagem pelo laço e nas variáveis de controle que podem direcionar para a
execução de uma instrução específica.
Um código eficiente tem o menor número de delays possível. Ao invés de usar
delays, pode-se ter um timer rodando paralelo ao programa que dita quando um led deve
piscar, por exemplo.
2.4 – Software
O software desenvolvido não acompanha o kit didático tendo em vista que o
objetivo do kit é justamente possibilitar o usuário desenvolver um software para o
sistema de controle. Entretanto, criou-se um software exemplo, para mostrar o
funcionamento do kit.

2.4.1 - Interface com a placa
A interface com a placa é feita com a porta serial RS232 do microcomputador. O
programa pode ser desenvolvido em alguma plataforma de desenvolvimento Delphi, C+
+ Builder, Visual Basic, Visual Studio, Eclipse ou em compiladores convencionais.
Cabe ao desenvolvedor de compiladores convencionais desenvolverem o código para
acessar a porta serial do microcomputador.
A placa desenvolvida é uma placa escrava, ou seja, ela só faz o que mandam
fazer e só responde o que perguntam. Ocorre uma exceção quando a temperatura do
resistor ultrapassa 105 º C, nesta situação a placa encarrega-se de rebaixar a temperatura
do resistor e envia um alerta para o microcomputador.
Existem basicamente 13 comandos que a placa pode responder:
‘i’
‘d’
‘I’
‘D’
‘c’
‘C’
‘l’
‘L’
‘t’
‘r’
‘p’
‘P’
‘h’

Incrementar o PWM da ventoinha
Decrementar o PWM da ventoinha
Incrementar o PWM do resistor
Decrementar o PWM do resistor
Zerar o PWM da ventoinha
Põe o PWM da ventoinha no máximo
Zerar o PWM do resistor
Põe o PWM do resistor no máximo
Pede o envio do valor da temperatura
Pede o envio do valor da rotação
//
valor do PWM da ventoinha
//
valor do PWM do resistor
Reconhecimento da placa

Da mesma forma, a placa responde o caracter enviado acompanhado de um
numero inteiro de 5 casas preenchidas com 0.
Ex: recebe ‘t’ envia “t00048”
2.4.2 – Software de demonstração

Imagem do software de interface
O software foi desenvolvido na plataforma Delphi 7 da antiga Borland, hoje
Embarcadero. Abaixo estão as descrições de cada componente da imagem.
O plano cartesiano, representado pelo componente “TChart” no canto inferior
direito mostra a variação de temperatura em função do tempo do sistema.
O groupbox intitulado “Comunicação com a placa” indica o estado da porta
COM do computador e se a placa foi reconhecida pelo sistema.
O radiogroup “Métodos de Controle” possui dois radiobuttons que permitem o
usuário escolher se deseja que o sistema controle a placa ou se deseja fazer o controle
manual dos parâmetros.
O groupbox “Interface” permite iniciar o teste e escrever qual é a temperatura
desejada do sistema.
O radiogroup “Seleção do sistema” permite o usuário escolher se quer simular
um forno controlado ou uma carga que deve ser resfriada. Em uma situação pode-se
variar o pwm do resistor, na outra o do cooler.
O groupbox “PWM Controle” é habilitado apenas no controle manual e serve
para o usuário definir o valor de pwm do resistor e pwm do cooler.
O groupbox “Informações do sistema” indica o estado do pwm do resistor, do
cooler e a temperatura do resistor.
O checkbox “Salvar em arquivo”, se selecionado no início do teste guarda as
informações em um arquivo de texto.
O botão sair serve para sair desligando todos os periféricos da placa antes.
3 - Conclusão
Desenvolver um kit didático representa desenvolver uma ferramenta de
aprendizado. Por este motivo torna-se muito mais trabalhoso pois deve-se prever todas
as ações de uma pessoa que está em treinamento,é diferente de desenvolver um produto
comum.
Ao mesmo tempo em que se deve dar liberdade para o sistema fazer o que a
pessoa quiser, deve-se ter a segurança de monitorar o estado do sistema e entrar em
alerta caso algo dê errado. Sem dúvidas, o desenvolvimento deste projeto trouxe
conhecimentos não só do conteúdo que deveria ser visto em sala de aula, mas da área
didática e da área de desenvolvimento de produto.
Apêndice A – Diagrama esquemático da placa
Apêndice B – Firmware do mircrocontrolador
//inclusão de bibliotecas
#include <16F877A.h>
//configurações do dispositivo
#device adc = 10
#fuses HS, WDT
#use delay(clock = 4000000)
#use rs232 (baud = 9600, xmit = PIN_C6, rcv=PIN_C7)
//Endereçamento de resgistradores
#byte PORTA = 0x05
#byte PORTB = 0x06
#byte PORTC = 0x07
#byte PORTD = 0x08
#byte PORTE = 0X09
#byte TRISA = 0x85
#byte TRISB = 0x86
#byte TRISC = 0x87
#byte TRISD = 0x88
#byte TRISE = 0x89
#byte OPTION_REG = 0x81
#byte CCPR1L = 0x15
#byte CCPR1H = 0x16
#byte CCP1CON = 0x17
#byte CCPR2L = 0x1b
#byte CCPR2H = 0x1c
#byte CCP2CON = 0x1d
#bit RB0 = PORTB.0
#bit RB4 = PORTB.4
#bit RC1 = PORTC.1
#bit RC2 = PORTC.2
#bit T0CS = OPTION_REG.5
#bit PSA = OPTION_REG.3
#bit PS2 = OPTION_REG.2
#bit PS1 = OPTION_REG.1
#bit PS0 = OPTION_REG.0
#bit TRISC1 = TRISC.1
#bit TRISB4 = TRISC.4
#define pwm_c_reg CCPR1L
#define pwm_r_reg CCPR2L
#define sentido_pino_led TRISB4
//Definições de pinos
#define ft
#define led

RB0
RB4

//Definições dos estados de máquina e valores constantes
#define EST_LE_TEMP 0
#define EST_PRC_ERR 1
#define EST_PWMC_INC 'i'
#define EST_PWMC_DEC 'd'
#define EST_PWMR_INC 'I'
#define EST_PWMR_DEC 'D'
#define EST_PWMC_MIN 'c'
#define EST_PWMC_MAX 'C'
#define EST_PWMR_MIN 'l'
#define EST_PWMR_MAX 'L'
#define EST_ENV_TEMP 't'
#define EST_ENV_ROT 'r'
#define EST_ENV_PWMC 'p'
#define EST_ENV_PWMR 'P'
#define EST_HND_SHKN 'h'
#define TEMP_MAX 210
#define TEMP_MIN 100

//para o valor real, dividir por 2

//variáveis globais
short erro = 0;
char buffer[8];
unsigned int sm = 0,sma = 0, pwm_c = 0, pwm_r = 0;
unsigned long int temp = 0, np = 0, rpm = 0;
//protótipos de subrotinas
void inicializa();
void processo();
void config_ad();
void config_pwm();
void comunica();
void config_io();
void reset_wdt();
void config_wdt();
void le_temp();
void config_timer1();
void config_interrupts();
void procura_erro();
void init_signal();
//interrupções
#INT_EXT
void trata_ext0()
{
np++;
}
#INT_TIMER1
void trata_timer1()
{
static unsigned int cont = 0;
if(cont<20)
{
cont++;
} else
{
//efetua o cálculo a cada 1 s
cont = 0;
rpm = np * 60;
np = 0;
if(erro)
{
sentido_pino_led = 1; //configura o pino do led como entrada
led = !led;
//coloca no buffer de saída o inverso do estado do buffer
de entrada
sentido_pino_led = 0; //configura o pino como saída
putc(‘a’);
}
}
set_timer1(15536); //time out após 50 ms
}
//main
void main()
{
inicializa();
while(1)
{
comunica();
processo();
reset_wdt();
}
}

void inicializa()
{
config_wdt();
config_io();
init_signal();
config_ad();
config_pwm();
config_timer1();
config_interrupts();
init_signal();
}
void comunica()
{
if(kbhit()) //se houver algo no buffer de recepção,executa
{
sma = sm; //armazena o valor do estado de máquina atual
sm = getc(); //pula para o estado indicado pelo caracter recebido
}
}
void processo()
{
switch(sm)
{
//estados de execução normal do programa
case EST_LE_TEMP: le_temp();
sm = EST_PRC_ERR; //pula para o estado "procura erro"
break;
case EST_PRC_ERR: procura_erro();
sm = EST_LE_TEMP; //pula para o estado "lê temperatura"
break;
//estados de tratamento de interrupção
case EST_ENV_TEMP: sprintf(buffer,"t%5lu", temp); //imprime o valor
medido de temperatura em uma string
puts(buffer); //envia a string pelo dispositivo de saída padrão, o
periférico USART
sm = sma; //retorna para o estado anterior antes da "interrupção"
break;
case EST_ENV_ROT: sprintf(buffer,"r%5lu", rpm);
puts(buffer);
sm = sma;
break;
case EST_ENV_PWMC: pwm_c = pwm_c_reg;
sprintf(buffer,"p%5u", pwm_c);
puts(buffer);
sm = sma;
break;
case EST_ENV_PWMR: pwm_r = pwm_r_reg;
sprintf(buffer,"P%5u", pwm_r);
puts(buffer);
sm = sma;
break;
case EST_PWMC_INC: if(pwm_c<255)
pwm_c++;
pwm_c_reg = pwm_c;
sm = sma;
break;
case EST_PWMC_DEC: if(pwm_c>0)
pwm_c--;
pwm_c_reg = pwm_c;
sm = sma;
break;
case EST_PWMC_MIN: pwm_c = 0;
pwm_c_reg = pwm_c;
sm = sma;
break;
case EST_PWMC_MAX: pwm_c = 255;
pwm_c_reg = pwm_c;
sm = sma;
break;
case EST_PWMR_INC: if(pwm_r<255)
pwm_r++;
pwm_r_reg = pwm_r;
sm = sma;
break;
case EST_PWMR_DEC: if(pwm_r>0)
pwm_r--;
pwm_r_reg = pwm_r;
sm = sma;
break;
case EST_PWMR_MIN: pwm_r = 0;
pwm_r_reg = pwm_r;
sm = sma;
break;
case EST_PWMR_MAX: pwm_r = 255;
pwm_r_reg = pwm_r;
sm = sma;
break;
case EST_HND_SHKN: sprintf(buffer,"HS_OK"); //HANDSHAKING
puts(buffer);
sm = sma;
break;
default: sm = sma;
estado de máquina anterior

//caso receba algum caracter inválido, retorna para o

}
}
void config_ad() //configura o periférico adc
{
setup_ADC_ports(RA0_analog);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
}
void config_pwm() //configura os dois módulos ccp como geradores de sinal
pwm
{
setup_timer_2(T2_DIV_BY_1,255,1);
setup_ccp1(ccp_pwm);
set_pwm1_duty(0);
setup_ccp2(ccp_pwm);
set_pwm2_duty(0);
}
void config_io() //configura a direção dos pinos(entrada ou saída)
{
TRISA = 0xff;
TRISB = 0b11101111;
TRISC = 0b11111001;
TRISD = 0xff;
TRISE = 0xff;
pwm_c = 0;
pwm_r = 0;
led = 1;
}
void config_wdt() //configura o watch dog timer
{
PSA = 1; //preescaler para o watch dog timer não para o timer 0
PS2 = 1; //preescaler de 1:128
PS1 = 1;
PS0 = 1;
}
void reset_wdt() //chama uma instrução assembly para resetar o wdt
{
#asm
CLRWDT
#endasm
}
void le_temp() //realiza a leitura do pino analógico ligado ao sensor de
temperatura
{
//soma as leituras a cada passada. Quando passa pela oitava vez
//obtêm a média dos valores e atualiza o variável global que indica a
//temperatura
static int cont = 0;
static unsigned long int buffer_ad = 0;
if(cont<8) //lê e soma 8 amostras
{
buffer_ad = buffer_ad + read_adc();
cont++;
} else
{
cont = 0;
temp = buffer_ad >> 3; //divide por 8
buffer_ad = 0;
}
}
void config_timer1() //configura o timer 1
{
setup_timer_1(T1_INTERNAL | T1_DIV_BY_1); // clock interno de 1 MHz
set_timer1(15536); //time out após 50 ms
}
void config_interrupts() //configura as fontes de interrupção
{
enable_interrupts(GLOBAL);
enable_interrupts(INT_EXT);
enable_interrupts(INT_TIMER1);
ext_int_edge(0,H_TO_L);
}
void procura_erro() //verifica se a temperatura do resistor está muito alta
{
//e entra em estado de alerta caso esteja
static short flag = 0;
if(temp>TEMP_MAX)
{
pwm_r = 0;
pwm_r_reg = pwm_r;
pwm_c = 255;
pwm_c_reg = pwm_c;
erro = 1;
flag = 1;
}
if(temp<TEMP_MIN && flag)
{
erro = 0;
pwm_c = 0;
pwm_c_reg = pwm_c;
led = 1;
flag = 0;
}
}
void init_signal() //piscada inicial do led
{
led = 0;
delay_ms(200);
led = 1;
delay_ms(200);
}

Contenu connexe

Tendances

1 história e características dos microcontroladores pic
1 história e características dos microcontroladores pic1 história e características dos microcontroladores pic
1 história e características dos microcontroladores picAnderson Inácio Morais
 
Dolsmc sg001 -pt-p
Dolsmc sg001 -pt-pDolsmc sg001 -pt-p
Dolsmc sg001 -pt-pMiguel Silva
 
Modernização da cogeração - Reguladores de velocidade, Automação e proteção e...
Modernização da cogeração - Reguladores de velocidade, Automação e proteção e...Modernização da cogeração - Reguladores de velocidade, Automação e proteção e...
Modernização da cogeração - Reguladores de velocidade, Automação e proteção e...Marcelo Balbino
 
Controladores Lógicos Programáveis parte-1
Controladores Lógicos Programáveis parte-1Controladores Lógicos Programáveis parte-1
Controladores Lógicos Programáveis parte-1andydurdem
 
Controladores Lógicos Programáveis - CLP
Controladores Lógicos Programáveis - CLPControladores Lógicos Programáveis - CLP
Controladores Lógicos Programáveis - CLPFabiano Sales
 
Webinar: Hardware para Manutenção Preditiva
Webinar: Hardware para Manutenção PreditivaWebinar: Hardware para Manutenção Preditiva
Webinar: Hardware para Manutenção PreditivaEmbarcados
 
Manual do inversor de frequência danfoss
Manual do inversor de frequência danfossManual do inversor de frequência danfoss
Manual do inversor de frequência danfossClaudio Arkan
 
Manual asd 250 sinal e voz
Manual asd 250 sinal e vozManual asd 250 sinal e voz
Manual asd 250 sinal e vozeuromaxsecurity
 
Manual vlt2800 portugues
Manual vlt2800 portuguesManual vlt2800 portugues
Manual vlt2800 portuguesJorge Campos
 
Fc51 guia de programação inversores danfoss
Fc51 guia de programação inversores danfossFc51 guia de programação inversores danfoss
Fc51 guia de programação inversores danfossClaudio Arkan
 
Webinar: Projeto de Hardware: ASIC e FPGA
Webinar: Projeto de Hardware: ASIC e FPGAWebinar: Projeto de Hardware: ASIC e FPGA
Webinar: Projeto de Hardware: ASIC e FPGAEmbarcados
 
Manual Inversor FC 300
Manual Inversor FC 300Manual Inversor FC 300
Manual Inversor FC 300Luizb13775
 
Aplicação dos microcontroladores no dia a dia
Aplicação dos microcontroladores no dia a diaAplicação dos microcontroladores no dia a dia
Aplicação dos microcontroladores no dia a diaDaniel Rodrigues de Sousa
 
Apresentação ACS-580 - Inversor de Freqüência - Eficiência Energetica
Apresentação ACS-580 - Inversor de Freqüência - Eficiência EnergeticaApresentação ACS-580 - Inversor de Freqüência - Eficiência Energetica
Apresentação ACS-580 - Inversor de Freqüência - Eficiência Energeticasafetycontrol
 

Tendances (20)

Artigo inovarhte
Artigo inovarhte  Artigo inovarhte
Artigo inovarhte
 
1 história e características dos microcontroladores pic
1 história e características dos microcontroladores pic1 história e características dos microcontroladores pic
1 história e características dos microcontroladores pic
 
Energia - MSP430
Energia - MSP430Energia - MSP430
Energia - MSP430
 
Corpo relatorio
Corpo relatorioCorpo relatorio
Corpo relatorio
 
Dolsmc sg001 -pt-p
Dolsmc sg001 -pt-pDolsmc sg001 -pt-p
Dolsmc sg001 -pt-p
 
Modernização da cogeração - Reguladores de velocidade, Automação e proteção e...
Modernização da cogeração - Reguladores de velocidade, Automação e proteção e...Modernização da cogeração - Reguladores de velocidade, Automação e proteção e...
Modernização da cogeração - Reguladores de velocidade, Automação e proteção e...
 
Controladores Lógicos Programáveis parte-1
Controladores Lógicos Programáveis parte-1Controladores Lógicos Programáveis parte-1
Controladores Lógicos Programáveis parte-1
 
Controladores Lógicos Programáveis - CLP
Controladores Lógicos Programáveis - CLPControladores Lógicos Programáveis - CLP
Controladores Lógicos Programáveis - CLP
 
Webinar: Hardware para Manutenção Preditiva
Webinar: Hardware para Manutenção PreditivaWebinar: Hardware para Manutenção Preditiva
Webinar: Hardware para Manutenção Preditiva
 
Manual do inversor de frequência danfoss
Manual do inversor de frequência danfossManual do inversor de frequência danfoss
Manual do inversor de frequência danfoss
 
Manual asd 250 sinal e voz
Manual asd 250 sinal e vozManual asd 250 sinal e voz
Manual asd 250 sinal e voz
 
Manual vlt2800 portugues
Manual vlt2800 portuguesManual vlt2800 portugues
Manual vlt2800 portugues
 
Fc51 guia de programação inversores danfoss
Fc51 guia de programação inversores danfossFc51 guia de programação inversores danfoss
Fc51 guia de programação inversores danfoss
 
Cd pt01+product news11_lr
Cd pt01+product news11_lrCd pt01+product news11_lr
Cd pt01+product news11_lr
 
Clp
ClpClp
Clp
 
Novos produtos delta
Novos produtos deltaNovos produtos delta
Novos produtos delta
 
Webinar: Projeto de Hardware: ASIC e FPGA
Webinar: Projeto de Hardware: ASIC e FPGAWebinar: Projeto de Hardware: ASIC e FPGA
Webinar: Projeto de Hardware: ASIC e FPGA
 
Manual Inversor FC 300
Manual Inversor FC 300Manual Inversor FC 300
Manual Inversor FC 300
 
Aplicação dos microcontroladores no dia a dia
Aplicação dos microcontroladores no dia a diaAplicação dos microcontroladores no dia a dia
Aplicação dos microcontroladores no dia a dia
 
Apresentação ACS-580 - Inversor de Freqüência - Eficiência Energetica
Apresentação ACS-580 - Inversor de Freqüência - Eficiência EnergeticaApresentação ACS-580 - Inversor de Freqüência - Eficiência Energetica
Apresentação ACS-580 - Inversor de Freqüência - Eficiência Energetica
 

Similaire à Relatório de Projeto - Desenvolvimento de um kit didático para disciplinas de Instrumentação e Sistemas de Controle

175 A 185 Material Auxiliar Para Curso AvançAdo I Msp430
175 A 185   Material Auxiliar Para Curso AvançAdo I Msp430175 A 185   Material Auxiliar Para Curso AvançAdo I Msp430
175 A 185 Material Auxiliar Para Curso AvançAdo I Msp430Texas Instruments
 
Curso clp siemens
Curso clp siemensCurso clp siemens
Curso clp siemensSENAI SP
 
Mini curso microcontrolador
Mini curso microcontroladorMini curso microcontrolador
Mini curso microcontroladorfabriciosfreitas
 
Relatório de Projeto - Desenvolvimento de um Controlador de Rotação para Moto...
Relatório de Projeto - Desenvolvimento de um Controlador de Rotação para Moto...Relatório de Projeto - Desenvolvimento de um Controlador de Rotação para Moto...
Relatório de Projeto - Desenvolvimento de um Controlador de Rotação para Moto...Gustavo Fernandes
 
Aula 2 - Introdução aos Miconcontroladores.pptx
Aula 2 - Introdução aos Miconcontroladores.pptxAula 2 - Introdução aos Miconcontroladores.pptx
Aula 2 - Introdução aos Miconcontroladores.pptxAntonioCarlos349007
 
Zero Grid - Instalação Smart Energy Manager.pdf
Zero Grid - Instalação Smart Energy Manager.pdfZero Grid - Instalação Smart Energy Manager.pdf
Zero Grid - Instalação Smart Energy Manager.pdfFabrcioCosta29
 
Montagem e Manutenção
Montagem e ManutençãoMontagem e Manutenção
Montagem e ManutençãoThompson Lima
 
Projeto baja ifpb (1) pronto
Projeto baja ifpb (1) prontoProjeto baja ifpb (1) pronto
Projeto baja ifpb (1) prontoNando Mathias
 
Sistema de Monitoramento de Temperatura para Transporte de Cargas Perecíveis
Sistema de Monitoramento de Temperatura para Transporte de Cargas PerecíveisSistema de Monitoramento de Temperatura para Transporte de Cargas Perecíveis
Sistema de Monitoramento de Temperatura para Transporte de Cargas PerecíveisZeca Leite
 
Dispositivo de controle automático
Dispositivo de controle automáticoDispositivo de controle automático
Dispositivo de controle automáticoCamila Mairinques
 
Manual 1 dmy2030
Manual 1 dmy2030Manual 1 dmy2030
Manual 1 dmy2030pmsc5
 

Similaire à Relatório de Projeto - Desenvolvimento de um kit didático para disciplinas de Instrumentação e Sistemas de Controle (20)

175 A 185 Material Auxiliar Para Curso AvançAdo I Msp430
175 A 185   Material Auxiliar Para Curso AvançAdo I Msp430175 A 185   Material Auxiliar Para Curso AvançAdo I Msp430
175 A 185 Material Auxiliar Para Curso AvançAdo I Msp430
 
Curso clp siemens
Curso clp siemensCurso clp siemens
Curso clp siemens
 
Curso clp siemens
Curso clp siemensCurso clp siemens
Curso clp siemens
 
Smart cap200 manual_p
Smart cap200 manual_pSmart cap200 manual_p
Smart cap200 manual_p
 
Tut arduino
Tut arduinoTut arduino
Tut arduino
 
Tut arduino
Tut arduinoTut arduino
Tut arduino
 
Mini curso microcontrolador
Mini curso microcontroladorMini curso microcontrolador
Mini curso microcontrolador
 
Telenergia
TelenergiaTelenergia
Telenergia
 
Relatório de Projeto - Desenvolvimento de um Controlador de Rotação para Moto...
Relatório de Projeto - Desenvolvimento de um Controlador de Rotação para Moto...Relatório de Projeto - Desenvolvimento de um Controlador de Rotação para Moto...
Relatório de Projeto - Desenvolvimento de um Controlador de Rotação para Moto...
 
Aula 2 - Introdução aos Miconcontroladores.pptx
Aula 2 - Introdução aos Miconcontroladores.pptxAula 2 - Introdução aos Miconcontroladores.pptx
Aula 2 - Introdução aos Miconcontroladores.pptx
 
Zero Grid - Instalação Smart Energy Manager.pdf
Zero Grid - Instalação Smart Energy Manager.pdfZero Grid - Instalação Smart Energy Manager.pdf
Zero Grid - Instalação Smart Energy Manager.pdf
 
Montagem e Manutenção
Montagem e ManutençãoMontagem e Manutenção
Montagem e Manutenção
 
Projeto baja ifpb (1) pronto
Projeto baja ifpb (1) prontoProjeto baja ifpb (1) pronto
Projeto baja ifpb (1) pronto
 
Projeto BUS-BUS
Projeto BUS-BUSProjeto BUS-BUS
Projeto BUS-BUS
 
Chiller
ChillerChiller
Chiller
 
Ri a9
Ri a9Ri a9
Ri a9
 
Sistema de Monitoramento de Temperatura para Transporte de Cargas Perecíveis
Sistema de Monitoramento de Temperatura para Transporte de Cargas PerecíveisSistema de Monitoramento de Temperatura para Transporte de Cargas Perecíveis
Sistema de Monitoramento de Temperatura para Transporte de Cargas Perecíveis
 
Mini curso arduino
Mini curso arduinoMini curso arduino
Mini curso arduino
 
Dispositivo de controle automático
Dispositivo de controle automáticoDispositivo de controle automático
Dispositivo de controle automático
 
Manual 1 dmy2030
Manual 1 dmy2030Manual 1 dmy2030
Manual 1 dmy2030
 

Relatório de Projeto - Desenvolvimento de um kit didático para disciplinas de Instrumentação e Sistemas de Controle

  • 1. Instituto Federal Sul-rio-grandense Curso de Eletrônica Disciplinas de Instrumentação Industrial, Microcontroladores e Programação III. Professores Ulisses Lyra dos Santos, Rafael Galli e Norberto de Castro Peil. Desenvolvimento de um kit didático para trabalhos práticos nas disciplinas de Instrumentação Industrial e Sistemas de Controle Gustavo dos Santos Fernandes Rodrian Garcia Radmann Tro7ni
  • 2. 1 - Introdução Tornar o conhecimento teórico e prático um único saber é o objetivo de todos os cursos técnicos e a maior parte dos cursos superiores. O problema surge quando devido a deficiências financeiras e estruturais dos cursos não é possível reproduzir para o aluno a situação real em que se aplica determinado conteúdo. Nestas situações, apela-se para os kits didáticos, estes embora não apresentem a situação real de aplicação dos conteúdos vistos nas disciplinas, podem simular algo em que seja necessário aplicar parte dos conhecimentos adquiridos em sala de aula. O objetivo deste trabalho foi desenvolver um kit didático para trabalhos práticos nas disciplinas de Instrumentação Industrial e Sistemas de Controle. O kit oferece elementos que podem simular um sistema termodinâmico, um sistema de sensoriamento e um sistema de atuação. A aquisição, registro de dados e lógica de controle deste sistema deve ser feita pela interface serial RS232 de um microcomputador de uso geral. Através da programação em ambiente Delphi, pode-se facilmente implementar uma lógica de controle para o sistema termodinâmico oferecido pelo kit.
  • 3. 2 - Desenvolvimento 2.1 – Descrição geral do projeto O kit desenvolvido pode ser usado para simular o controle de dois sistemas termodinâmicos diferentes: - um forno controlado; - uma carga que precise ter a sua temperatura máxima limitada. Ex: processador. O sistema termodinâmico oferecido pelo kit é composto por um resistor de 68 ohms / 10 W. Utiliza-se o efeito joule da corrente para aquecê-lo e tornar possível o controle de temperatura tanto por controle de aquecimento quanto por controle de resfriamento. Este resistor também pode se comportar como um atuador, como no caso da simulação do forno controlado. O sistema de sensoriamento é composto por um CI LM35, sensor de temperatura de precisão que é capaz de variar a sua saída em 10 mV a cada variação de um grau Celsius. A partir deste, é possível saber qual é a temperatura do resistor. O sistema de atuação é composto por uma ventoinha que pode ter a sua rotação controlada a partir de um sinal PWM – Pusle Width Modulation. No caso do forno controlado, o resistor também pode se comportar como um atuador e também tem o seu aquecimento controlado por um sinal PWM. O sistema possui um microcontrolador PIC16F877A para fazer a interface entre o kit e a porta serial RS232 do microcomputador. 2.2 – Hardware O hardware do kit é uma placa de interface entre os dispositivos que compõem o kit e o microcomputador. Este kit foi desenvolvido para tornar possível a implementação de lógicas de controle a partir da programação em alto nível por meio de plataformas de desenvolvimento que rodam em microcomputadores de uso geral. Logo se fez necessário desenvolver uma placa microcontrolada que fizesse a interface entre a porta serial RS232 do microcomputador e periféricos do kit. A partir desta placa, tornou-se possível acionar cargas de potência e fazer leituras analógicas de tensão, o que é de extrema importância para o bom funcionamento do kit. 2.2.1 – Microcontrolador O microcontrolador utilizada para a interface foi o PIC16F877A, fabricado pela Microchip. Este microcontrolador foi escolhido pois possui 2 módulos para controle de pwm, suporte para comunicação uart e canais de conversão analógico-digital, e principalmente, por se ter várias peças disponíveis no curso.
  • 4. 2.2.2 – Comunicação serial Conforme já dito, o microcontrolador PIC16F877A possui uma USART integrada. Esta USART é responsável pela serialização e temporização da transferência dos dados que são enviados e paralelização e temporização dos dados que são recebidos. Através deste periférico integrado ao chip, não é necessário usar o processador para fazer o trabalho de transmissão ou recepção serial, bastando apenas enviar o dado de forma paralela e recebê-lo de forma paralela. O microcontrolador trabalha com o protocolo UART com níveis TTL: 0 V – “0”, 5 V – “1”. Entretanto a porta serial dos microcomputadores utiliza os níveis RS232: +3 a +15 V – “0”, -3 a -15 V - “1”. Para fazer o interface entre a comunicação do microcontrolador com a do microcomputador foi necessário utilizar um conversor de níveis também conhecido como transceptor TTL-RS232, o CI MAX232. O MAX232 é um CI que possui dois tranceptores TTL-RS232 integrados. Através de quatro capacitores externos este consegue gerar as tensões do padrão RS232 sendo alimentado por uma única fonte de 5 V. Para a comunicação com o computador foram usados apenas 3 fios: TX, RX e GND. Não foi necessário utilizar os outros sinais disponíveis na porta. Foi montado um cabo específico para o kit, com um DB9 fêmea em uma das pontas e um conector spox de 3 vias para ser conectado em uma barra de pinos, na outra. 2.2.3 – Alimentação A alimentação do kit é feita por uma fonte linear de aproximadamente 44 V - 800 mA. A tensão de 44 V é resultado da retificação e filtragem da tensão de saída do secundário de um transformador de 30 Vac. Esta tensão está sendo aplicada no ramo do resistor e na entrada de um regulador de 24 V. A tensão de saída do regulador de 24 V está sendo aplicada no ramo da ventoinha e na entrada de um regulador de 5 V. A tensão de saída do regulador de 5 V está alimentando todos os circuitos integrados do kit. Caso haja uma revisão do projeto, procurará reduzir-se a tensão entre os terminais dos reguladores ou montá-los de forma que seja possível a fixação de um dissipador de calor. 2.2.1 – Acionamento de cargas de potência As cargas de potência acionadas pelo microcontrolador são duas: uma ventoinha de 24 V - 300 mA e um resistor de 68 ohms - 10 W. Ambas estão conectadas às saídas de sinal PWM do microcontrolador. A ventoinha está sendo acionada por um transistor NPN BC337 que liga o seu terminal negativo ao GND, quando acionado. Colocou-se um diodo em antiparalelo com a bobina da ventoinha para evitar o golpe indutivo ao desligar o transistor. Este golpe indutivo em casos extremos pode danificar o transistor ou até mesmo o microcontrolador. O resistor está sendo acionado por um transistor MOSFET N IRF3205. Este transistor liga o negativo da fonte ao resistor quando acionado. Sabe-se que aplicando
  • 5. 45 V em um resistor de 68 ohms tem-se uma potência dissipada de aproximadamente 30 W. O resistor usado é de 10 W. Porém o kit possui um sistema de proteção que bloqueia o uso do usuário quando a temperatura do resistor ultrapassar 100 º C, forçando-o a baixar a temperatura para no mínimo 50 º C antes de desligar o sistema de proteção. Esta proteção foi implementada no firmware do microcontrolador. 2.2.4 – Indicação O kit possui dois leds: um vermelho e um laranja. O led vermelho serve para indicar se a fonte de 5 V está ligada. O led laranja indica o estado do microcontrolador. Aceso indica funcionamento normal. Piscando indica proteção de sobre temperatura e apagado indica que o microcontrolador está inativo. 2.2.5 – Leitura de temperatura O microcontrolador PIC16F877A possui um conversor AD por aproximação sucessiva integrado ao chip. Este tipo de conversor é muito vantajoso quando se necessita de um equivalente binário de uma determinada tensão analógica a partir de uma tensão de referência. Para realizar a leitura de temperatura foi necessário converter de um sinal analógico para digital a saída do sensor de temperatura LM35. Para isso, ligou-se a saída do sensor a uma dos canais de conversão AD do microcontrolador, utilizando um filtro passa-baixas composto por um resistor de 1k2 e um capacitor de 100 nF para estabilizar o sinal. Mesmo realizando uma filtragem analógica ainda foi necessário implementar um filtro digital no firmware do microcontrolador. 2.2.6 – Layout da placa de circuito impresso O layout da placa de circuito impresso foi desenhado no EAGLE v 5.6, da CadSoft. 2.3 – Firmware As pessoas confundem bastante o conceito de “software” e “firmware” e chamam muitas vezes um firmware de software ou um software de firmware. O firmware pode ser definido como um software embarcado. Um software para um hardware específico que vem gravado de fábrica na memória de programa de um sistema microprocessado. Pode-se dizer que o firmware esta “preso” à sua placa de aplicação. Quando se desenvolve um programa para rodar em um hardware específico, este é chamado de firmware. Entretanto ao se desenvolver um programa para funcionar independente do hardware utilizado, desenvolve-se um software.
  • 6. Exemplos de equipamentos que utilizam firmwares: celulares mais antigos, controles remotos, cafeteiras, relógios, BIOS, estações meteorológicas, multímetros, etc. Exemplos de equipamentos que utilizam softwares: microcomputadores da família PC, MAC, IBM, celulares mais modernos, televisões mais modernas, etc. Exemplos de softwares que parecem firmwares: programa para kits de didáticos, programas para kits de desenvolvimento. 2.3.1 – Compilador O desenvolvimento do firmware gravado no microcontrolador foi feito usandose o CCS C Compiler versão 4.074. Este compilador, apesar de ser muito bom para fins didático e para desenvolvimento rápido é muito deficiente em relação à otimização de código assembly gerado e acesso direto aos registradores do microcontrolador. Optou-se por usar este compilador devido às ferramentas para comunicação serial e a transparência do código escrito. 2.3.2 – Metodologia de desenvolvimento A forma de programar um sistema embarcado é diferente de programar um computador de uso geral. Na programação de um computador têm-se um fim de execução do programa, em um sistema embarcado não. Em um sistema embarcado existem basicamente duas etapas em sua programação: a inicialização e o laço principal. Na inicialização são feitos todos os tipos de configurações e inicializações de variáveis e periféricos. Já no laço principal é feita a execução de rotinas que só cessará quando o dispositivo for desligado, ou seja, um laço é infinito. Um firmware eficiente é um firmware desenvolvido com um único laço (sem for ou while): o laço principal. Todos os outros laços devem ser feitos com estruturas de seleção (if-else switch-case) dentro do laço principal. Deve-se passar pelo início do laço o mais freqüente possível para que se possa realizar comandos de varredura ou testes que dependem de respostas rápidas o mais rápido possível sem deixar o microcontrolador esperando estes resultados. O microcontrolador deve saber qual instrução executar em uma passagem pelo laço com base na instrução executada na ultima passagem pelo laço e nas variáveis de controle que podem direcionar para a execução de uma instrução específica. Um código eficiente tem o menor número de delays possível. Ao invés de usar delays, pode-se ter um timer rodando paralelo ao programa que dita quando um led deve piscar, por exemplo.
  • 7. 2.4 – Software O software desenvolvido não acompanha o kit didático tendo em vista que o objetivo do kit é justamente possibilitar o usuário desenvolver um software para o sistema de controle. Entretanto, criou-se um software exemplo, para mostrar o funcionamento do kit. 2.4.1 - Interface com a placa A interface com a placa é feita com a porta serial RS232 do microcomputador. O programa pode ser desenvolvido em alguma plataforma de desenvolvimento Delphi, C+ + Builder, Visual Basic, Visual Studio, Eclipse ou em compiladores convencionais. Cabe ao desenvolvedor de compiladores convencionais desenvolverem o código para acessar a porta serial do microcomputador. A placa desenvolvida é uma placa escrava, ou seja, ela só faz o que mandam fazer e só responde o que perguntam. Ocorre uma exceção quando a temperatura do resistor ultrapassa 105 º C, nesta situação a placa encarrega-se de rebaixar a temperatura do resistor e envia um alerta para o microcomputador. Existem basicamente 13 comandos que a placa pode responder: ‘i’ ‘d’ ‘I’ ‘D’ ‘c’ ‘C’ ‘l’ ‘L’ ‘t’ ‘r’ ‘p’ ‘P’ ‘h’ Incrementar o PWM da ventoinha Decrementar o PWM da ventoinha Incrementar o PWM do resistor Decrementar o PWM do resistor Zerar o PWM da ventoinha Põe o PWM da ventoinha no máximo Zerar o PWM do resistor Põe o PWM do resistor no máximo Pede o envio do valor da temperatura Pede o envio do valor da rotação // valor do PWM da ventoinha // valor do PWM do resistor Reconhecimento da placa Da mesma forma, a placa responde o caracter enviado acompanhado de um numero inteiro de 5 casas preenchidas com 0. Ex: recebe ‘t’ envia “t00048”
  • 8. 2.4.2 – Software de demonstração Imagem do software de interface O software foi desenvolvido na plataforma Delphi 7 da antiga Borland, hoje Embarcadero. Abaixo estão as descrições de cada componente da imagem. O plano cartesiano, representado pelo componente “TChart” no canto inferior direito mostra a variação de temperatura em função do tempo do sistema. O groupbox intitulado “Comunicação com a placa” indica o estado da porta COM do computador e se a placa foi reconhecida pelo sistema. O radiogroup “Métodos de Controle” possui dois radiobuttons que permitem o usuário escolher se deseja que o sistema controle a placa ou se deseja fazer o controle manual dos parâmetros. O groupbox “Interface” permite iniciar o teste e escrever qual é a temperatura desejada do sistema. O radiogroup “Seleção do sistema” permite o usuário escolher se quer simular um forno controlado ou uma carga que deve ser resfriada. Em uma situação pode-se variar o pwm do resistor, na outra o do cooler. O groupbox “PWM Controle” é habilitado apenas no controle manual e serve para o usuário definir o valor de pwm do resistor e pwm do cooler. O groupbox “Informações do sistema” indica o estado do pwm do resistor, do cooler e a temperatura do resistor. O checkbox “Salvar em arquivo”, se selecionado no início do teste guarda as informações em um arquivo de texto. O botão sair serve para sair desligando todos os periféricos da placa antes.
  • 9. 3 - Conclusão Desenvolver um kit didático representa desenvolver uma ferramenta de aprendizado. Por este motivo torna-se muito mais trabalhoso pois deve-se prever todas as ações de uma pessoa que está em treinamento,é diferente de desenvolver um produto comum. Ao mesmo tempo em que se deve dar liberdade para o sistema fazer o que a pessoa quiser, deve-se ter a segurança de monitorar o estado do sistema e entrar em alerta caso algo dê errado. Sem dúvidas, o desenvolvimento deste projeto trouxe conhecimentos não só do conteúdo que deveria ser visto em sala de aula, mas da área didática e da área de desenvolvimento de produto.
  • 10. Apêndice A – Diagrama esquemático da placa
  • 11. Apêndice B – Firmware do mircrocontrolador //inclusão de bibliotecas #include <16F877A.h> //configurações do dispositivo #device adc = 10 #fuses HS, WDT #use delay(clock = 4000000) #use rs232 (baud = 9600, xmit = PIN_C6, rcv=PIN_C7) //Endereçamento de resgistradores #byte PORTA = 0x05 #byte PORTB = 0x06 #byte PORTC = 0x07 #byte PORTD = 0x08 #byte PORTE = 0X09 #byte TRISA = 0x85 #byte TRISB = 0x86 #byte TRISC = 0x87 #byte TRISD = 0x88 #byte TRISE = 0x89 #byte OPTION_REG = 0x81 #byte CCPR1L = 0x15 #byte CCPR1H = 0x16 #byte CCP1CON = 0x17 #byte CCPR2L = 0x1b #byte CCPR2H = 0x1c #byte CCP2CON = 0x1d #bit RB0 = PORTB.0 #bit RB4 = PORTB.4 #bit RC1 = PORTC.1 #bit RC2 = PORTC.2 #bit T0CS = OPTION_REG.5 #bit PSA = OPTION_REG.3 #bit PS2 = OPTION_REG.2 #bit PS1 = OPTION_REG.1 #bit PS0 = OPTION_REG.0 #bit TRISC1 = TRISC.1 #bit TRISB4 = TRISC.4 #define pwm_c_reg CCPR1L #define pwm_r_reg CCPR2L #define sentido_pino_led TRISB4 //Definições de pinos
  • 12. #define ft #define led RB0 RB4 //Definições dos estados de máquina e valores constantes #define EST_LE_TEMP 0 #define EST_PRC_ERR 1 #define EST_PWMC_INC 'i' #define EST_PWMC_DEC 'd' #define EST_PWMR_INC 'I' #define EST_PWMR_DEC 'D' #define EST_PWMC_MIN 'c' #define EST_PWMC_MAX 'C' #define EST_PWMR_MIN 'l' #define EST_PWMR_MAX 'L' #define EST_ENV_TEMP 't' #define EST_ENV_ROT 'r' #define EST_ENV_PWMC 'p' #define EST_ENV_PWMR 'P' #define EST_HND_SHKN 'h' #define TEMP_MAX 210 #define TEMP_MIN 100 //para o valor real, dividir por 2 //variáveis globais short erro = 0; char buffer[8]; unsigned int sm = 0,sma = 0, pwm_c = 0, pwm_r = 0; unsigned long int temp = 0, np = 0, rpm = 0; //protótipos de subrotinas void inicializa(); void processo(); void config_ad(); void config_pwm(); void comunica(); void config_io(); void reset_wdt(); void config_wdt(); void le_temp(); void config_timer1(); void config_interrupts(); void procura_erro(); void init_signal(); //interrupções #INT_EXT void trata_ext0()
  • 13. { np++; } #INT_TIMER1 void trata_timer1() { static unsigned int cont = 0; if(cont<20) { cont++; } else { //efetua o cálculo a cada 1 s cont = 0; rpm = np * 60; np = 0; if(erro) { sentido_pino_led = 1; //configura o pino do led como entrada led = !led; //coloca no buffer de saída o inverso do estado do buffer de entrada sentido_pino_led = 0; //configura o pino como saída putc(‘a’); } } set_timer1(15536); //time out após 50 ms } //main void main() { inicializa(); while(1) { comunica(); processo(); reset_wdt(); } } void inicializa() { config_wdt(); config_io(); init_signal(); config_ad();
  • 14. config_pwm(); config_timer1(); config_interrupts(); init_signal(); } void comunica() { if(kbhit()) //se houver algo no buffer de recepção,executa { sma = sm; //armazena o valor do estado de máquina atual sm = getc(); //pula para o estado indicado pelo caracter recebido } } void processo() { switch(sm) { //estados de execução normal do programa case EST_LE_TEMP: le_temp(); sm = EST_PRC_ERR; //pula para o estado "procura erro" break; case EST_PRC_ERR: procura_erro(); sm = EST_LE_TEMP; //pula para o estado "lê temperatura" break; //estados de tratamento de interrupção case EST_ENV_TEMP: sprintf(buffer,"t%5lu", temp); //imprime o valor medido de temperatura em uma string puts(buffer); //envia a string pelo dispositivo de saída padrão, o periférico USART sm = sma; //retorna para o estado anterior antes da "interrupção" break; case EST_ENV_ROT: sprintf(buffer,"r%5lu", rpm); puts(buffer); sm = sma; break; case EST_ENV_PWMC: pwm_c = pwm_c_reg; sprintf(buffer,"p%5u", pwm_c); puts(buffer); sm = sma; break;
  • 15. case EST_ENV_PWMR: pwm_r = pwm_r_reg; sprintf(buffer,"P%5u", pwm_r); puts(buffer); sm = sma; break; case EST_PWMC_INC: if(pwm_c<255) pwm_c++; pwm_c_reg = pwm_c; sm = sma; break; case EST_PWMC_DEC: if(pwm_c>0) pwm_c--; pwm_c_reg = pwm_c; sm = sma; break; case EST_PWMC_MIN: pwm_c = 0; pwm_c_reg = pwm_c; sm = sma; break; case EST_PWMC_MAX: pwm_c = 255; pwm_c_reg = pwm_c; sm = sma; break; case EST_PWMR_INC: if(pwm_r<255) pwm_r++; pwm_r_reg = pwm_r; sm = sma; break; case EST_PWMR_DEC: if(pwm_r>0) pwm_r--; pwm_r_reg = pwm_r; sm = sma; break; case EST_PWMR_MIN: pwm_r = 0; pwm_r_reg = pwm_r; sm = sma; break; case EST_PWMR_MAX: pwm_r = 255; pwm_r_reg = pwm_r; sm = sma; break;
  • 16. case EST_HND_SHKN: sprintf(buffer,"HS_OK"); //HANDSHAKING puts(buffer); sm = sma; break; default: sm = sma; estado de máquina anterior //caso receba algum caracter inválido, retorna para o } } void config_ad() //configura o periférico adc { setup_ADC_ports(RA0_analog); setup_adc(ADC_CLOCK_INTERNAL); set_adc_channel(0); } void config_pwm() //configura os dois módulos ccp como geradores de sinal pwm { setup_timer_2(T2_DIV_BY_1,255,1); setup_ccp1(ccp_pwm); set_pwm1_duty(0); setup_ccp2(ccp_pwm); set_pwm2_duty(0); } void config_io() //configura a direção dos pinos(entrada ou saída) { TRISA = 0xff; TRISB = 0b11101111; TRISC = 0b11111001; TRISD = 0xff; TRISE = 0xff; pwm_c = 0; pwm_r = 0; led = 1; } void config_wdt() //configura o watch dog timer { PSA = 1; //preescaler para o watch dog timer não para o timer 0 PS2 = 1; //preescaler de 1:128 PS1 = 1;
  • 17. PS0 = 1; } void reset_wdt() //chama uma instrução assembly para resetar o wdt { #asm CLRWDT #endasm } void le_temp() //realiza a leitura do pino analógico ligado ao sensor de temperatura { //soma as leituras a cada passada. Quando passa pela oitava vez //obtêm a média dos valores e atualiza o variável global que indica a //temperatura static int cont = 0; static unsigned long int buffer_ad = 0; if(cont<8) //lê e soma 8 amostras { buffer_ad = buffer_ad + read_adc(); cont++; } else { cont = 0; temp = buffer_ad >> 3; //divide por 8 buffer_ad = 0; } } void config_timer1() //configura o timer 1 { setup_timer_1(T1_INTERNAL | T1_DIV_BY_1); // clock interno de 1 MHz set_timer1(15536); //time out após 50 ms } void config_interrupts() //configura as fontes de interrupção { enable_interrupts(GLOBAL); enable_interrupts(INT_EXT); enable_interrupts(INT_TIMER1); ext_int_edge(0,H_TO_L); } void procura_erro() //verifica se a temperatura do resistor está muito alta { //e entra em estado de alerta caso esteja static short flag = 0; if(temp>TEMP_MAX)
  • 18. { pwm_r = 0; pwm_r_reg = pwm_r; pwm_c = 255; pwm_c_reg = pwm_c; erro = 1; flag = 1; } if(temp<TEMP_MIN && flag) { erro = 0; pwm_c = 0; pwm_c_reg = pwm_c; led = 1; flag = 0; } } void init_signal() //piscada inicial do led { led = 0; delay_ms(200); led = 1; delay_ms(200); }