Vous êtes sur la page 1sur 12

|OBJETIVO| Visando a utilizar os conhecimentos adquiridos nas disciplinas de Arquitetura de Microprocessadores e Teoria de Comunicaes III, do Curso de Engenharia Eltrica

da PUCPR, esse projeto buscou prover uma aplicao que contemplasse os assuntos estudados ao longo dos cursos. |WARM-UP| Sendo assim, o objetivo desse projeto foi montar o prottipo um carrinho controlado distncia por meio de rdio-freqncia capaz de fornecer sua velocidade instantnea para a base controladora.

O prottipo consiste em uma carcaa de um carrinho equipada com dois motores CC, um mdulo de comunicao por rdio freqncia e um sensor ptico capaz de obter informaes para o clculo da velocidade instantnea do veculo. O controle desses dispositivos feito por um microcontrolador PIC16F877, o qual controla o movimento dos motores bem como a transmisso dos dados entre a base controladora e o carrinho.

O projeto foi divido em cinco etapas: - Utilizao do kit RF; - Sensor de Velocidade; - Controle dos Motores; - Desenvolvimento do Hardware ; - Desenvolvimento do Software.

|DIAGRAMA DE BLOCOS|

No veculo, existem dois mdulos bsicos; um deles o de aquisio dos sinais pulsados (desenvolvido com fotodiodos e fototransistores)e clculo da velocidade para transmitir base controladora. Outro mdulo o de controle dos motores, o qual consiste em dois sinais PWM, providos pelo PIC, e uma ponte H para cada um dos dois motores, circuito que fornece a corrente suficiente para os motores e permite a inverso do sentido do giro. Os dados so transmitidos de forma assncrona entre o controle e o prottipo, utilizando a interface serial do PIC e Kits de RF. No controle, ocorre a aquisio dos sinais de controle do carrinho, vindo de quatro chaves normalmente abertas, e feito tambm o registro da velocidade em displays de sete segmentos. |CONTROLE REMOTO|

Para a utilizao do kit RF foi projetado um controle remoto. O controle formado por duas placas fenolite, a primeira contm: 2 displays de 7 segmentos, 2 CI`s e resistores de 330 ohm, esta placa responsvel por mostrar a velocidade do carrinho. Esta placa mostrada abaixo. A Segunda placa contm: 1 PIC16F876, 1 radio receptor , 1 radio transmissor, 1 oscilador de 20MHz , 1 capacitor de 22pF e quatro botes. O controle funciona da seguinte forma: O PIC16F876 responsvel pelo comando das aes sobre o carrinho atravs dos 4 botes: acelerar para frente, acelerar para trs, virar para esquerda e virar para direita. Estas aes so representadas por palavra binrias que so enviadas para o carrinho atravs do radio transmissor. O radio transmissor situado no controle responsvel por receber a informao da velocidade do carrinho , transmitir tal informao para o PIC16F876 que por sua vez transmite a informao para o CI 4511 que faz a codificao de BCD para 7 segmentos, sendo assim possvel visualizar a velocidade do carrinho no display.

|MOTORES CC| O hardware desenvolvido para os motores tem a funo de direcionar a rotao dos motores CC ligados ao carrinho. Ele constitudo de duas pontes-H, como as da figura abaixo, cada qual ligada a um motor. No entanto, alguns problemas foram encontrados durante o desenrolar do projeto e solues foram adotadas. Alimentao utilizada para um perfeito funcionamento dos motores CC era de 9 V. J a alimentao requerida para o CI 7408 era de 5 V. Para isto foi adicionado ao circuito um regulador de tenso de 5 V.Problemas relacionados polarizao dos transistores tambm foram vistos. Para isto, foram ligados ao circuito uma combinao de resistores e transistores para conseguir polarizar corretamente os transistores BC516 e BC517. Abaixo segue a listagem dos componentes utilizados para a montagem do driver.

R11=R13=150; R15=R16=10K; R12=R17=330 DIODOS 1N4007; TRANSISTORES NPN BC517; TRANSISTORES PNP BC516; TRANSISTORES BC548; CIRCUITO INTEGRADO 7408.

|SENSOR DE VELOCIDADE|

O sensor de Velocidade foi implementado com dois pares de fotodiodo (TIL32) e fototransistor (TIL78), os quais capturam sinais pulsados das rodas traseiras. Estes sinais so utilizados para fornecer a freqncia angular a partir da qual calculada a velocidade de cada roda, fornecendo um valor intermedirio como instantnea do veculo |SOFTWARE|

/* Prototipo.c */ #include<pic.h> #include "usart.h" typedef struct{ char dir1,dir2,dc2,dc1; }dado; #define M1T RA0 #define M1F RA1 #define M2T RA2 #define M2F RA3 void Protocolo(char sData,dado *Data); void FormataDados(char sData,dado *Data); void iniciaPWM(void); void setDir(char dir1, char dir2); void setDuty(int dutyc01,int dutyc02); void main(void) { unsigned char sData; dado cData; init_comms(); INTCON=0; PORTA=0; ADCON1=ADCON1|0x06; TRISA=0; TRISC=0xF0; TRISB=0x00; CCP1CON=0; CCP2CON=0; iniciaPWM(); while(1){

void FormataDados(char sData, dado *Data) { Data->dir1=sData&3; Data->dir2=(sData>>2)&3; Data->dc2=(sData>>4)&3; Data->dc1=(sData>>6)&3; } void putch(unsigned char byte) { while(!TXIF); TXREG = byte; } unsigned char getch() { while(!RCIF); return RCREG; }

/*usart.h*/ #ifndef _SERIAL_H_ #define _SERIAL_H_ #define BAUD 9600 #define FOSC 20000000L #define AUX ((int)(FOSC/(16UL * BAUD) -1)) #define RX_PIN TRISC7 #define TX_PIN TRISC6

sData=getch(); if(sData==0xAA) RC0=1; else RC0=0; PORTB=sData; FormataDados(sData,&cData); setDir(cData.dir1,cData.dir2); setDuty(cData.dc1,cData.dc2); CCP1CON=12; CCP2CON=12; T2CON=T2CON|7; while(!PIR1); PIR1=0; }} void setDuty(int dutyc01,int dutyc02){ if(dutyc01==0) CCPR1L=0x00; else if(dutyc01==1) CCPR1L=0xFA; else if(dutyc01==2) CCPR1L=0x80; else if(dutyc01==3) CCPR1L=0xFF; if(dutyc02==0) CCPR2L=0x00; else if(dutyc02==1) CCPR2L=0xFA; else if(dutyc02==2) CCPR2L=0x80; else if(dutyc02==3) CCPR2L=0xFF; } void iniciaPWM(void){ T2CON=2; TMR2=0; PR2=0xFF;

#define init_comms() RX_PIN = 1; TX_PIN = 1; SPBRG = AUX; RCSTA = (0x90); TXSTA = (0x20) void putch(unsigned char); unsigned char getch(void); #endif

/*Controle.c*/ #include <pic.h> #include "usart.h" void main(void){ unsigned char frt,trs,tData; PORTA=0; ADCON1=ADCON1|0x06; TRISA=0; TRISB=0xFF; INTCON=0; init_comms(); frt=0; trs=0; while(1){ tData=0; if(RB7==1){ frt++; if(frt==1) tData=tData|0x40;

CCPR1L=0x00; CCPR2L=0x00; INTCON=0; PIE1=0; CCP1CON=12; CCP2CON=12; T2CON=7; while(!PIR1); PIR1=0; } void setDir(char dir1, char dir2) { if(dir1==0x00){ M1F=0; M1T=1; M2F=1; M2T=1; }else if(dir1==0x01){ M2F=0; M2T=1; M1F=1; M1T=1; }else if(dir1==0x02){ M1F=0; M1T=1; M2F=0; M2T=1; }else if(dir2==0x00){ M1F=1; M1T=0; M2F=1; M2T=1; }else if(dir2==0x01){ M2F=1; M2T=0; M1F=1; M1T=1;

else if(frt==2) tData=tData|0x80; else if(frt==3) tData=tData|0xC0; }else if(RB6==1){ trs++; if(trs==1) tData=tData|0x10; else if(trs==2) tData=tData|0x20; else if(trs==3) tData=tData|0x30; } if(RB5==1){ if(RB7==1) tData=tData|0x00; else if(RB6==1) tData=tData|0x03; else tData=tData|0x02; } if(RB4==1){ if(RB7==1) tData=tData|0x01; else if(RB6==1) tData=tData|0x07; else tData=tData|0x0B; } putch(tData); if(trs==3) trs=0; if(frt==3) frt=0; } }

}else if(dir2==0x02){ M1F=1; M1T=0; M2F=1; M2T=0; } }

|DIFICULDADES| A maior dificuldade encontrada no projeto foi o desenvolvimento do hardware, principalmente da placa do driver, formada basicamente por duas pontes H ( uma para cada motor DC) e um CI 7408. Inicialmente os valores dos resistores da ponte H foram calculados para uma alimentao de +5V, mas com essa alimentao os motores no possuam torque suficiente para movimentar o carrinho. Ento foi necessrio aumentar a alimentao da placa, regulando a tenso em 5V para o CI 7408 e o PIC e colocando amplificadores nas sadas digitais. Outro ponto importante foi a utilizao de um cristal oscilador de 20Mhz, com o qual o PIC no funcionava. O problema foi identificado na gravao do microcontrolador, que apesar de estar sendo utilizado um cristal, a configurao do endereo 2007h para no a XT, para cristais, mas sim HS, pois com 20MHz o PIC opera em modo de alta velocidade. |RESULTADO FINAL|

|LISTA de MATERIAIS|

| |FONTES de CONSULTA|

Motores CC Carrinho Microcontrolador PIC Display de 7 segmentos KIT RF TIL 32 e TIL 78 Transistores BC516, BC517, BC548 Placas de Fenolite Resistores Capacitores Software de programao gratuito (PICCLITE) Software de Cad gratuito (Eagle)