Buscar

Gerador de funções usando PIC 16F873A

Prévia do material em texto

Universidade Tecnológica Federal do Paraná 
 
Departamento de Engenharia Elétrica 
 
Engenharia Elétrica 
 
 
 
 
 
 
 
 
 
 
 
 
GERSON KERECTH 
MARCOS ROGÉRIO FERNANDES 
 
 
 
 
 
 
 
 
Relatório apresentado na disciplina 
de microcontrolados do curso de 
Engenharia Elétrica. 
 
Professor: Marcos José da Silva 
 
 
 
 
 
 
 
 
Curitiba 
2015 
Introdução 
2 
 
 
O objetivo do projeto é utilizar os conhecimentos adquiridos na disciplina 
de microcontrolados e aplica-lo de forma pratica, para isto iremos criar um 
gerador de ondas que é um instrumento fundamental na área da Engenharia 
Elétrica. Trata-se de um gerador de três sinais básicos, que são usados 
frequentemente. Sendo, o de uso mais comum na engenharia o sinal senoidal, 
que é utilizado na rede elétrica. Podendo também ser representado por sinais 
quadrados, sendo sua aplicação na área da eletrônica digital. Outra aplicação é 
a onda triangular, sendo usada na resposta de circuitos que necessitem de 
excitação de sinais lineares. 
 
Proposta de projeto (Gerador de Funções) 
 
A proposta é a montagem de um gerador de funções usando o PIC 
16F873A para gerar 3 tipos de sinais, que são onda senoidal, onda quadrada e 
onda triangular. Sendo possível variar a amplitude, a frequência e o duty clycle 
(no caso da onda quadrada). 
Para o projeto, serão utilizados: modulo PWM, Timer, EEPROM e 
display LCD. Abaixo segue a descrição do uso de cada modulo: 
 - Modulo PWM: Será utilizado junto com um filtro RC para gerar uma 
saída de tensão variável correspondendo à amplitude do sinal gerado. 
 - EEPROM: Será utilizado para guardar as ultimas configurações do 
gerador de funções. 
 - Display LCD: Será utilizado para mostrar os parâmetros atuais do 
gerador de sinal como a frequência, amplitude e tipo de sinal. Para alterar os 
parâmetros do sistema, será utilizado botões do tipo push button. 
Diagrama de Blocos 
 
 
Figura 1 – Diagrama em blocos 
 
Diagrama em blocos: Todos os parâmetros ficaram salvos na EEPROM. 
Através do controle implementado usando push button, será possível alterar a 
3 
 
frequência, amplitude e o tipo de onda na saída. Os valores salvos na 
EEPROM serão exibidos no display LCD. 
Circuito 
 
Simulação: 
 
Figura 2 – Circuito para simulação no PROTEUS®. 
 
Circuito elétrico: 
 
Figura 3 – Circuito elétrico feito no EAGLE® 
 
 
4 
 
 
PCB: 
 
Figura 4 - PCB feito no EAGLE® 
 
 
ETAPAS DO PROJETO 
O projeto foi implementado em duas etapas, sendo a primeira a 
prototipagem, ou seja, a montagem em uma protoboard para testes e ensaios 
de todos as funções do gerador. 
 
5 
 
MONTAGEM EM PROTOBOARD 
 
 
Figura 5 – Montagem na protoboard. 
 
PROCEDIMENTOS 
 
Com o circuito montado na protoboard, foi ligado a uma fonte CC de 
9V e com o auxílio de um osciloscópio digital foi verificado as formas de 
ondas e seus devidos parâmetros. 
 
ONDA SENOIDAL 
 
Figura 6 – Onda senoidal gerada 
6 
 
ONDA QUADRADA 
 
 
ONDA DENTE DE SERRA 
Figura 7 – Onda quadrada gerada. 
Figura 8 – Onda dente de serra gerada. 
7 
 
CONFECÇÃO DO PCB: 
 
Na segunda parte do projeto, foi confeccionada a placa PCB para 
soldagem dos componentes. 
Segue lista de componentes utilizados no circuito: 
 
*1 PIC 16F873A 
* 3 capacitores cerâmicos 22pF 25V 
* 1 capacitor cerâmico 100 nF 50V 
* 1 Cristais de 20MHz 
* 1 diodo 1n4004 
* 1 LED verde 5mm. 
* 4 chaves push button 
* 1 chave três posições 
* 6 resistores 10KΩ 1/4W 
* 1 resistor 330Ω 
* 1 Placa de fenolite 10x10cm 
* 1 Soquete para CI de 28 pinos 
 
Resultado final da corrosão PCB: 
 
 
Figura 9 – PCB corroído. 
 
 
 
8 
 
Placa com os componentes soldados: 
 
 
Figura 10 – Placa soldada 
 
Resultado final, placa pronta: 
 
 
Figura 11 – Placa pronta. 
 
9 
 
 
Testando a placa: 
 
Com o circuito já confeccionado, foi ligado a uma fonte CC de 9 V e 
com o auxílio de um osciloscópio digital foi as formas de ondas e seus 
parâmetros novamente. 
 
ONDA SENOIDAL 
 
Figura 12 – Onda senoidal gerador final. 
 
 
 
 
 
 
 
 
 
 
10 
 
 
ONDA QUADRADA 
 
 
Figura 13 – Onda quadrada gerador final. 
 
11 
 
ONDA DENTE DE SERRA 
 
 
Figura 14 – Onda dente de serra gerador final. 
 
Código fonte do projeto (usando MikroC): 
 
/// LCD module connections 
sbit LCD_RS at RB1_bit; 
sbit LCD_EN at RB2_bit; 
sbit LCD_D4 at RC2_bit; 
sbit LCD_D5 at RC3_bit; 
sbit LCD_D6 at RC4_bit; 
sbit LCD_D7 at RC5_bit; 
 
sbit LCD_RS_Direction at TRISB1_bit; 
sbit LCD_EN_Direction at TRISB2_bit; 
sbit LCD_D4_Direction at TRISC2_bit; 
sbit LCD_D5_Direction at TRISC3_bit; 
sbit LCD_D6_Direction at TRISC4_bit; 
sbit LCD_D7_Direction at TRISC5_bit; 
 
char setFreq = 0; 
char flagDisplay=1; 
char flagFreq=1; 
char type=1; 
char duty=127; 
char temp; 
char poweron=0; 
char str[]=" "; 
char amp=255; 
 
void updateDisplay() { 
 
 Lcd_Cmd(_LCD_CLEAR); // Limpa display 
 switch(flagFreq) { 
 case 0: 
 str[0]=(setFreq+1)+'0'; 
 str[1]=' '; 
 str[2]=' '; 
12 
 
 str[3]=' '; 
 str[4]=' '; 
 Lcd_Out(2, 1,"Freq=mod"); 
 Lcd_Out(2, 9,str); 
 break; 
 case 1: 
 temp = (256-duty)*100/256; 
 str[0]=temp/10+'0'; 
 str[1]=temp%10+'0'; 
 str[2]='%'; 
 str[3]=' '; 
 str[4]=' '; 
 Lcd_Out(2, 1,"Duty="); 
 Lcd_Out(2, 6,str); 
 break; 
 case 2: 
 temp = amp*100/256; 
 str[0]=temp/10+'0'; 
 str[1]=temp%10+'0'; 
 str[2]='%'; 
 str[3]=' '; 
 str[4]=' '; 
 Lcd_Out(2, 1,"Amp="); 
 Lcd_Out(2, 6,str); 
 break; 
 } 
 
 switch(type) 
 { 
 case 0: 
 Lcd_Out(1, 1, "SINE WAVE"); // Imprime text no display iniciando na linha 1, coluna 
 break; 
 
 case 1: 
 Lcd_Out(1, 1, "DENTE SERRA"); // Imprime text no display iniciando na linha 1, coluna 
 break; 
 
 case 2: 
 Lcd_Out(1, 1, "SQUARE WAVE"); // Imprime text no display iniciando na linha 1, coluna 
 } 
 
 flagDisplay=0; 
} 
 
void main() { 
int i=0; 
char j=0; 
double SIN[]={2.5000,3.4567,4.2678,4.8097,5.0000,4.8097,4.2678,3.4567,2.5000,1.5433,0.7322,0.1903,0,0.1903,0.7322,1.5433,2.5000}; 
 
TRISB=0xFFF; ///PORT B COMO ENTRADA 
 
Pwm2_Init(5000); 
Pwm2_Start(); 
Pwm2_Set_Duty(0); 
 
 
Lcd_Init(); // Inicializa display segundo conexoes acima 
Lcd_Cmd(_LCD_CURSOR_OFF); // Desliga cursor 
 
INTCON.GIE=1; ///ATIVA INTERRUPCAO 
INTCON.INTE=1; ///ATIVA INTERRUPCAO EXTERNA NO PINO RB0 
INTCON.INTF=0; ///SET FLAG INTERRUPCAO EXTERNA COMO ZERO 
INTCON.RBIE=1; 
INTCON.RBIF=0; 
TRISC=0; ///SET PORTA C COMO SAIDA 
TMR2=0; ///ZERA TIMER DO PWM 
 
setFreq = EEPROM_read(0x00); 
duty = EEPROM_read(0x01); 
type = EEPROM_read(0x02); 
flagFreq = EEPROM_read(0x03); 
amp = EEPROM_read(0x04); 
 
while(1) 
{ 
 if (flagDisplay) updateDisplay(); 
 if (type==0){////gera seno 
 Pwm2_Set_Duty(SIN[i]*amp/5); 
 i++; 
 if (i==16) i=0; 
 }else 
 if (type==1) { ////gera onda dente de serra 
 
 j=j+16; 
 Pwm2_Set_Duty(j); 
 TMR2=0; 
 if(j>amp) j=0; 
 
 }else 
 if (type==2){ ///gera onda quadrada 
 j=j+16; 
 if (j<duty) 
 Pwm2_Set_Duty(0); 
 else 
 Pwm2_Set_Duty(amp); 
 TMR2=0; 
 } 
 switch(setFreq) { 
 case 0: 
 delay_us(500); 
 break; 
 case 1: 
 delay_ms(1); 
 break; 
 case 2: 
 delay_ms(5); 
 break; 
 case 3: 
 delay_ms(10); 
 break; 
 case 4: 
 delay_ms(15); 
 break; 
 } 
} 
} 
 
 
void interrupt(void){ 
 if (INTCON.RBIF){ 
 if (RB5_bit) 
 if (flagFreq==0) { 
 setFreq++;if (setFreq > 4) 
 setFreq=0; 
 EEPROM_write(0x00,setFreq); 
 } else if (flagFreq==1){ 
 duty=duty-5; 
13 
 
 EEPROM_write(0x01,duty); 
 }else if (flagFreq==2){ 
 amp=amp+5; 
 EEPROM_write(0x04,amp); 
 } 
 if (RB4_bit) 
 if (flagFreq==0) { 
 setFreq--; 
 if (setFreq<0) setFreq=2; 
 EEPROM_write(0x00,setFreq); 
 } else if (flagFreq==1){ 
 duty=duty+5; 
 EEPROM_write(0x01,duty); 
 }else if (flagFreq==2) { 
 amp=amp-5; 
 EEPROM_write(0x04,amp); 
 } 
 if (RB7_bit) { 
 type++; 
 if (type<0) type=2; 
 if (type>2) type=0; 
 EEPROM_write(0x02,type); 
 } 
 if (RB6_bit) { 
 flagFreq++; 
 if(flagFreq>2) flagFreq=0; 
 EEPROM_write(0x03,flagFreq); 
 } 
 flagDisplay=1; 
 INTCON.RBIF=0; 
} 
} 
 
Conclusão 
 Com o desenvolvimento do projeto proposto, foi adquirido grande 
experiência com o microcontrolador PIC. Concluímos que com o uso de 
microcontroladores podemos realizar diversas tarefas com um custo baixo e 
alta precisão, uma vez que com o microcontrolador temos todos os recursos 
necessários já integrados em um único componente. Não necessitando 
portanto de circuitos grandes, ou de vários componentes externos para 
execução de tarefas como geração de ondas, relógios, teclados, controladores 
etc. Além disso verificamos a facilidade pela qual é possível armazenar 
informações de forma permanente na memória do microcontrolador. 
 
Referências Bibliográficas 
Datasheet PIC 16F873A. Microchip Technology Inc. disponível em: 
<http://ww1.microchip.com/downloads/en/devicedoc/39582b.pdf> acesso em: 03 fev.2015. 
 
LIMA, J. A. de. Modulador e Demodulador por Largura de Pulsos PWM. 
Faculdade de Engenharia Elétrica Guaratinguetá – UNESP , disponível em 
<http://www.feg.unesp.br/~lvdi/data/PWM.pdf> acesso em 03 fev 2015. 
 
PEREIRA, Fábio. Microcontroladores Pic Técnicas Avançadas. 7 Ed. São Paulo:Érica,2002. 
 
PEREIRA, Fábio. PIC Programação em C. 7 Ed. São Paulo: Érica,2007. 
 
SOUZA, David J. de. Desbravando o PIC. 12. Ed. São Paulo: Érica, 2010. 
 
SOUZA, David J.;LAVINIA, Nicolas C. Conectando o PIC. 3 Ed. São Paulo: Érica,2007. 
 
TOCCI, R. J.; WIDMER, N. S.; MOSS, G. L. Sistemas Digitais: Princípios e 
Aplicações. 10. ed. São Paulo: Prentice Hall, 2007.

Outros materiais

Materiais relacionados

Perguntas relacionadas

Perguntas Recentes