placa de controle de robôs móveis com comunicação por rádio
Transcrição
placa de controle de robôs móveis com comunicação por rádio
UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO CENTRO TECNOLÓGICO DEPARTAMENTO DE ENGENHARIA ELÉTRICA PLACA DE CONTROLE DE ROBÔS MÓVEIS COM COMUNICAÇÃO POR RÁDIO FREQÜÊNCIA EDUARDO HOFFMANN REIS PROJETO DE GRADUAÇÃO VITÓRIA – ES AGOSTO/2006 EDUARDO HOFFMANN REIS PLACA DE CONTROLE DE ROBÔS MÓVEIS COM COMUNICAÇÃO POR RÁDIO FREQÜÊNCIA Parte manuscrita do Projeto de Graduação de Eduardo Hoffmann Reis, apresentado ao Departamento de Engenharia Elétrica do Centro Tecnológico da Universidade Federal do Espírito Santo, para obtenção do grau de Engenheiro Eletricista. VITÓRIA – ES AGOSTO/2006 EDUARDO HOFFMANN REIS PLACA DE CONTROLE DE ROBÔS MÓVEIS COM COMUNICAÇÃO POR RÁDIO FREQÜÊNCIA COMISSÃO EXAMINADORA: ____________________________________ Prof. Dr. Hans-jorg schneebeli Orientador ____________________________________ Profª. Drª. Raquel Frizera Vassallo Examinadora ____________________________________ Prof. Dr. Edson de Paula Ferreira Examinador Vitória - ES, 29 de Agosto de 2006 AGRADECIMENTOS Agradeço em especial ao professor Hans-Jorg Schneebeli por ter sido um orientador prestativo em todas as fases do projeto. Agradeço a minha família, aos meus amigos e aos colegas do curso de Engenharia Elétrica. Agradeço aos professores do Departamento de Engenharia Elétrica da UFES que fazem com dedicação a honrosa profissão de transmitir o conhecimento. i LISTA DE FIGURAS Figura 1.1 - Diagrama de blocos simplificado...........................................................10 Figura 3.1 - Diagrama de blocos do hardware...........................................................13 Figura 3.2 - Sistema de alimentação .........................................................................14 Figura 3.3 - Interface JTAG.......................................................................................15 Figura 3.4 - Interface RS232......................................................................................16 Figura 3.5 - Diagrama de ligação do circuito de controle dos motores.....................17 Figura 3.6 - Esquemático do circuito de controle dos motores..................................18 Figura 3.7 - Detalhes internos do TPIC0108B...........................................................18 Figura 3.8 - Conexão microcontrolador/módulo Xm1201A......................................19 Figura 3.9 - Arquitetura interna do MSP430F149.....................................................20 Figura 3.10 - Visão geral da placa de comunicação RF.............................................21 Figura 3.11 - Arquitetura interna do XE1201A.........................................................22 Figura 3.12 - Antena tipo loop retangular..................................................................22 Figura 3.13 - Transmissão de bits "0"........................................................................23 Figura 3.14 - Transmissão de bits "1"........................................................................23 Figura 4.1 - Diagrama de configuração do transceiver.............................................24 Figura 4.2 - Fluxograma da configuração do transceiver..........................................26 Figura 4.3 - Fluxograma da transmissão de dados.....................................................27 Figura 5.1 - Recepção dos bits "0".............................................................................28 Figura 5.2 - Recepção dos bits "1".............................................................................29 Figura 5.3 - Recepção da seqüência alternada de bits "0" e "1"................................29 Figura 6.1 - Ligações para teste da transmissão de dados..........................................30 Figura 6.2 - Ligação entre a placa PROTO430 e o módulo XM1201A.....................30 ii LISTA DE TABELAS Tabela 3.1 - Modos de alimentação...........................................................................15 Tabela 3.2 - Modos de operação dos motores...........................................................16 iii GLOSSÁRIO RF – RADIO FREQUENCY (RÁDIO FREQÜÊNCIA). DC – DIRECT CURRENT (CORRENTE DIRETA). FSK – FREQUENCY SHIFT KEYING (CHAVEAMENTO POR DESLOCAMENTO DE FREQÜÊNCIA). PWM – PULSE WIDTH MODULATION (MODULAÇÃO POR LARGURA DE PULSO). CI – CIRCUITO INTEGRADO. iv SUMÁRIO AGRADECIMENTOS ................................................................................................ I LISTA DE FIGURAS ................................................................................................ II LISTA DE TABELA ............................................................................................. IIIII GLOSSÁRIO ............................................................................................................IIV SUMÁRIO ................................................................................................................... V RESUMO ..................................................................................................................VII 1 INTRODUÇÃO.......................................................................................................8 1.1 Motivação....................................................................................................... ..8 1.2 Descrição do Problema.....................................................................................8 1.3 Metodologia......................................................................................................8 1.4 Estrutura do Trabalho..................................................................................... ..9 2 DESCRIÇÃO DO SISTEMA PROPOSTO .........................................................10 2.1 Escolha dos Componentes ..............................................................................110 2.1.1 Microcontrolador .........................................................................................11 2.1.2 Reguladores de Voltagem ......................................................................... 11 2.1.3 Controle dos Motores ................................................................................ 11 2.1.4 Comunicação por Rádio Freqüência ...................................................... 12 3 DESCRIÇÃO DO HARDWARE ..........................................................................13 3.1 Placa de controle ...............................................................................................14 3.1.1 Reguladores de voltagem...........................................................................14 3.1.2 Sistema de relógio........................................................................................15 3.1.3 Interfaces JTAG, RS232 e BSL...................................................................15 3.1.4 Ponte-H .......................................................................................................16 3.1.5 Microcontrolador.........................................................................................19 3.2 Placa de comunicação RF.................................................................................20 3.2.1 Transmissão/Recepção dos dados por rádio freqüência..............................20 3.2.2 Antena..........................................................................................................22 3.2.3 Espectro do sinal FSK.................................................................................23 v 4 DESCRIÇÃO DO SOFTWARE ...........................................................................24 4.1 Configuração do transceiver ( 3-Wire Bus ).....................................................24 4.2 Transmissão de dados .......................................................................................25 4.3 Recepção de dados ............................................................................................27 5 RESULTADOS .......................................................................................................28 6 CONCLUSÃO .........................................................................................................30 APÊNDICE A .............................................................................................................31 APÊNDICE B .............................................................................................................32 APÊNDICE C .............................................................................................................33 APÊNDICE D .............................................................................................................34 APÊNDICE E .............................................................................................................35 REFERÊNCIAS BIBLIOGRÁFICAS.....................................................................45 vi RESUMO O presente trabalho consiste no desenvolvimento de um sistema eletrônico para comunicação em rádio frequência e controle de dois motores DC, possibilitando o movimento e a troca de informações entre robôs móveis microcontrolados. O movimento dos robos é feito utilizando o controle PWM e um circuito Ponte H, que permitem o controle de velocidade e direção dos motores. O enlace RF é conseguido através da montagem de uma placa de circuito impresso - o módulo XM1201A - que possui transceiver, antena e demais componemtes necessários para o estabelecimento do enlace RF e disponibilização de dados para a comunicação com o microcontrolador. Este encontra-se em outra placa de circuito impresso junto com outros dispositivos como fontes, reguladores, conectores, e demais circuitos integrados e componentes discretos transmissão/recepção de dados e controle dos motores DC. vii necessários para 8 1 INTRODUÇÃO 1.1 Motivação O projeto “Robôs Cooperativos”, que trata de robôs trabalhando em conjunto para realizar determinadas tarefas, atualmente em desenvolvimento no DEL (Departamento de Engenharia Elétrica), necessita que haja comunicação sem fio entre os robôs para que possam ser trocadas informações úteis para a cooperação entre eles. A comunicação por rádio freqüência apresenta vantagens em relação a outras formas de comunicação sem fio (por ex. via sinais infra-vermelho ou ultra-som), como maior largura de banda, maior alcance e menor interferência, sendo assim a solução mais indicada para esta aplicação. Cada robô móvel possui dois motores que possibilitam sua movimentação. O acionamento de cada motor será feito por um sinal PWM, gerado pelo microcontrolador e enviado ao motor através de um circuito Ponte-H, permitindo assim, o controle de velocidade e direção dos robôs. 1.2 Descrição do Problema Desenvolver o hardware de um sistema de controle de um robô móvel com as seguintes características: 1- Processador de 16 bits; 2- Controle de dois motores de corrente contínua com PWM e com possibilidade de reversão de movimento, sendo que a corrente máxima deve ser de 2A; 3- Um canal de comunicação usando rádio freqüência com taxas de dados da ordem de 19200 bps; 4- Baixo consumo. A placa de controle será projetada, porém, tendo em vista que já foi montada com sucesso em um projeto anterior [1], não será montada neste projeto. Será usada para testes, a placa de prototipagem PROTO430, desenvolvida pelo LAI (Laboratório de Automação Inteligente - UFES) que utiliza o microcontrolador MSP430F149. 9 1.3 Metodologia Este projeto está relacionado ao trabalho desenvolvido por Ronald van Gorcum chamado “Cooperative Robot project – The building of the robot ”[1], projeto de graduação – Universidade de Leeuwarden, Holanda – 2004. Neste projeto foi construída a estrutura do robô e foram propostas soluções para o controle e para a comunicação em rádio freqüência, esta porém, não implementada. O hardware será dividido em duas placas de circuito impresso. Assim, torna-se possível minimizar a interferência do circuito de acionamento dos motores sobre o circuito de rádio freqüência. Sendo alimentado por baterias, o hardware deverá também apresentar baixo consumo de corrente. Sendo esta, portanto, uma premissa fundamental na escolha dos componentes que constituirão o hardware do projeto. 1.4 Estrutura do trabalho No Capítulo 2, será feita uma descrição do sistema contendo a solução proposta, bem como a escolha dos principais componentes utilizados. No Capítulo 3, será apresentada uma discussão sobre o projeto do hardware, com o esquemático do circuito e o layout da placa de circuito impresso. O Capítulo 4, trata do software utilizado no projeto. Os resultados obtidos serão mostrados no Capítulo 5 e, finalmente, no Capítulo 6, serão apresentadas as conclusões do projeto. 10 2 DESCRIÇÃO DO SISTEMA PROPOSTO 2.1 Descrição da Solução Para a realização do projeto, torna-se necessário desenvolver um hardware contendo um microcontrolador, reguladores de voltagem, circuito para controle dos motores e Transmissão/Recepção de dados por rádio freqüência. O hardware será composto de duas placas: A placa 1 (placa de controle) deverá conter um microcontrolador, interface para acionamento de dois motores DC, reguladores de voltagem, interfaces BSL, JTAG e RS232 para programação, depuração e para que possa ser usado como modem de RF e demais componentes discretos e integrados necessários. A placa 2 (placa de comunicação RF) deverá conter um transceiver, antena e os componentes discretos necessários para o envio e recebimento de dados em rádio freqüência. A figura seguinte mostra o diagrama de blocos simplificado do projeto. Placa 2 ANTENA Placa 1 ALIMENTAÇÃO TRANSCEIVER PONTE H µC RS 232 BSL JTAG M2 Figura 1.1 – Diagrama de Blocos Simplificado PC 11 2.2 Escolha dos Componentes Para o projeto do hardware, devemos escolher os componentes a serem utilizados em cada um dos blocos do diagrama que melhor atendem as premissas do projeto. 2.2.1 Microcontrolador O MSP430F149–Texas Instruments– possui arquitetura de 16 bits, canais PWM e apresenta baixo consumo de corrente, atendento portanto, as premissas do projeto. Devido à disponibilidade, será utilizada a placa de prototipagem (PROTO430), já desenvolvida pelo LAI (Laboratório de Automação Inteligente - UFES) que utiliza o microcontrolador MSP430F149. 2.2.2 Alimentação Para alimentar o circuito são necessárias uma fonte de 3.6V e uma de 5V que serão obtidas a partir de uma bateria de 6V. Os reguladores TPS76901-Texas Instruments- possuem saídas que podem variar de 1.2V a 5.5V, ajustadas a partir de resistores externos, e garantem boa estabilidade na voltagem de saída. Além disso, estes reguladores apresentam baixa corrente quiescente (17uA a uma carga de 100mA), tornando-os ideais para aplicações em sistemas alimentados a bateria e que requerem baixo consumo de corrente, como neste projeto. Uma outra bateria de 12V será a fonte de potência para os motores. 2.2.3 Controle dos Motores Para o controle dos motores serão usados circuitos Ponte-H e sinais PWM. Existem circuitos integrados que implementam completamente a função Ponte–H. Os motores precisam de uma corrente elétrica de aproximadamente 2A, assim, o CI escolhido foi o TPIC0108B-Texas Instruments- que permite uma corrente de até 3A, apresenta corrente quiescente de 20uA e proteção contra falhas como sobrecorrente, sobretensão e sobretemperatura, diagnosticadas através dos pinos STATUS1 e STATUS2. 12 2.2.4 Comunicação por rádio freqüência Para a comunicação RF foi escolhido o módulo XM1201A-Xemics- que contém o transceiver XE1201A, o ressonador RO2101A-RFM, antena impressa e demais componentes necessários, e, apresenta as seguintes características: • Opera na banda de 433MHz; • Usa modulação FSK Half-duplex; • Taxa de dados de até 64Kbps; • Apresenta baixo consumo de corrente (8mA máx.); • Possui um canal de configuração; • Disponibilidade de informações de projeto; • Protocolo não definido, possibilitando diversas aplicações. 13 3 DESCRIÇÃO DO HARDWARE Neste Capítulo será descrita toda parte de hardware do projeto, bem como a construção do esquemático e layout das placas. Serão descritos cada um dos blocos que constituem o hardware. A Figura 3.1 apresenta o diagrama de blocos do hardware desenvolvido. A seguir, cada um deles será mostrado detalhadamente. ANTENA M2 BATERIA REG3.6V TRANSCEIVER REG 5V PONTE H BAT 12V 7 4 H C T 1 2 5 µC M A X 3 2 4 3 PONTE H M1 Figura 3.1 – Diagrama de Blocos do Hardware RS 232 BSL JTAG 14 3.1 PLACA 1 - Placa de Controle 3.1.1 Reguladores de Voltagem Para que o microcontrolador MSP430F149 opere a 8MHz (máximo desempenho), é necessário que o mesmo seja alimentado com uma voltagem de 3.6V. O transceiver pode ser alimentado com voltagens entre 2.4V e 5.5V, portanto também será alimentado com os mesmos 3.6V, aproveitando assim o mesmo regulador de voltagem usado para alimentar o MSP. Para que seja alimentado o circuito de comunicação entre a Ponte-H e o microcontrolador, é necessário de uma voltagem de 5V. Para que sejam disponibilizadas estas voltagens, serão usados dois reguladores TPS76901-Texas Instruments, cujas saídas podem ser ajustadas a partir de resistores externos da seguinte maneira: R1 = [(V0/Vref ) – 1] * R2 , onde Vref = 1.224V Portanto para V0=3.6V, temos: R1= 330KΩ e R2= 170KΩ E para 5V, temos: R1= 520KΩ e R2=170KΩ Figura 3.2 - Sistema de Alimentação 15 O conector JP2 é feito de maneira que não há a possibilidade de ligação invertida da fonte externa. Os conectores JP1 e JP3 são utilizados para escolha do modo de alimentação por Bateria ou por fonte externa, de acordo com a tabela abaixo. A fonte externa deve ser conectada no conector JP2. Jumper 1-2 2-3 Modos de alimentação Fonte externa Bateria Tabela 3.1 – modos de alimentação 3.1.2 Sistema de relógio O sistema de clock do MSP430F149 permite o uso de um DCO (DigitallyControled Oscillator) interno e dois cristais externos: um cristal de relógio de 32.768 KHz e um cristal de alta freqüência. Essas diferentes fontes de clock podem ser alternadas, conforme a necessidade, e utilizadas nos periféricos do microcontrolador (Timer, UART, etc.). Nesse projeto foi utilizado um cristal externo de 8MHz. O transceiver XE1201 utiliza um oscilador externo de 4MHz. 3.1.3 Interfaces JTAG, RS232 e BSL A interface JTAG permite a programação da memória flash do microcontrolador MSP e a depuração do programa gravado no hardware. Este padrão define um protocolo serial que utiliza cinco pinos (TDO,TDI, TMS, TCK e RST) para a programação e depuração e estão disponíveis em um conector de 14 pinos. A Figura 3.3 mostra essa configuração. Figura 3.3 – Interface JTAG 16 A placa disponibiliza interfaces BSL e RS232 que permitem estabelecer uma conexão com um PC e a programação do MSP com uso de softwares apropriados. Para tanto é necessária uma conversão de níveis de tensão entre o MSP e porta serial. O dispositivo usado para interface foi o MAX3243- Texas Instruments, cuja tensão de alimentação é de 3.6V. A figura 3.3b mostra a interface serial BSL e RS232. Figura 3.4 – Interface RS 232 e BSL 3.1.4 Ponte-H Esta parte do Hardware controla os motores. No circuito integrado TPIC0108B, existem duas entradas IN1 e IN2 que recebem o sinal PWM. Usando estas entradas, o microcontrolador pode controlar o modo de operação dos motores, como ilustra a Tabela 3.2. As duas saídas STATUS1 e STATUS2, indicam o estado das saídas. Para alimentar os motores, O Circuito Ponte-H precisa de uma fonte de potência com voltagem de 12V que pode vir diretamente de uma bateria. IN1 0 0 IN2 0 1 OUT1 Z LS OUT2 Z HS 1 1 0 1 HS HS LS HS MODO DE OPERAÇÃO Modo de consumo quiescente O motor gira no sentido horário O motor gira no sentido anti-horário Freio Tabela 3.2 – Modos de operação dos motores [5] 17 Figura 3.5 – Diagrama de ligação do circuito de controle dos motores [5] Existe ainda a necessidade de um conversor de nível para que seja possível a comunicação entre o microcontrolador e o TPIC, uma vez que, este utiliza sinais em nível TTL e o MSP utiliza sinais de 3.6V. Esta conversão é conseguida com a utilização do CI 74HCT125-Texas Instruments- que possui quatro chaves internas controladas por sinais enviados pelo microcontrolador e pelo TPIC0108B. Quando este sinal está em nível lógico zero, a chave está fechada deixando passar o sinal conectado em sua entrada que neste caso é zero volt. Se o sinal de controle estiver em nível lógico alto, a chave fecha fazendo com que a voltagem conectada ao resistor de pull-up em sua saída, seja aplicada no microcontrolador (3.6V), ou no TPIC (5V), permitindo assim que os dois dispositivos se comuniquem. Este circuito está mostrado na Figura 3.6. 18 Figura 3.6 – Esquemático do circuito de controle dos motores Figura 3.7 – Detalhes internos do TPIC0108B [5] 19 3.1.5 Microcontrolador O MSP430F149 é um microcontrolador de arquitetura RISC 16bits, de baixo consumo e apresenta periféricos como conversor A/D, temporizadores e interfaces de comunicação. Os sinais do transceiver são diretamente ligados ao microcontrolador. Todas as portas do MSP podem ser configuradas via software como entradas ou saídas. Será escolhida a porta 1, pois permite uso de interrupções, que facilitam a programação para o recebimento de dados do transceiver. Figura 3.8 – Conexão MSP/móduloXm1201A A porta serial não pode ser conectada diretamente ao PC pois os sinais estão em diferentes níveis de voltagem. É necessário então o uso de um conversor de níveis. Para tanto será utilizado o MAX3243–Maxim. O MSP possui um módulo de hardware que permite a geração de um sinal PWM a partir da utilização de um temporizador interno. O temporizador B da porta P4 está disponível e será portanto o utilizado. São necessárias duas portas para cada ponte-H (IN1 e IN2), totalizando quatro sinais PWM, que são enviados ao circuito Ponte-H pelos pinos P4.4, P4.5, P4.6 e P4.7 do MSP. Para receber os dados de Status do TPIC0108B, são utilizados os pinos P5.6, P5.7, P4.2 e P4.3 configurados como entradas do MSP. 20 Figura 3.9 - Arquitetura interrna do MSP430F149 [2] 3.2 Placa de comunicação RF 3.2.1 Transmissão / Recepção dos dados por rádio freqüência O módulo XM1201A-Xemics- é composto pelo CI XE1201A, antena, ressonador, oscilador, componentes discretos utilizados como filtros de banda e é alimentado pelo regulador de 3.6V. Trabalha com taxa de dados de até 64Kbits/s, modulação CPFSK – Continuous Phase, 2 level Frequency Shift Keying - e opera na banda de 433MHz. O Circuito integrado XE1201A, tem 8 linhas para comunicação com o microcontrolador. EN: Chip enable. O software do microcontrolador pode desabilitar (EN=0) o transceiver para reduzir o consumo da bateria. RX/TX: Receive/Transmit. O módulo pode ser “setado” como receptor (1) ou transmissor (0). TXD: Transmit Data. Entrada para os dados vindos do microcontrolador que serão modulados e transmitidos em RF. RXD: Receive Data. Saída para o microcontrolador, dos dados recebidos pela antena. CLK: Clock Data. Clock gerado para envio de dados para o microcontrolador. SD: Serial Data. SC: Serial Clock. DE: Data Enable. Este três últimos formam o 3wire bus e configuram as principais funções do CI XE1201A, como a taxa de dados e modo de funcionamento, através de três registradores internos A, B e C, de 16 bits, acessados por um registrador de deslocamento que amostra os bits de dados na borda de subida do sinal de clock SC. Os dois bits nais significativos indicam qual registrador será acessado. 21 Figura 3.10 – Visão geral da placa de comunicação RF [6] No modo de transmissão, os dados vindos do microcontrolador pelo pino TXD, são enviados para o modulador, onde são modulados em um sinal FSK. A freqüência deste sinal é gerada internamente. O sinal é convertido para um sinal analógico, passa por um filtro passa-baixa e é então somado ao sinal de 433.92MHZ para em seguida ser amplificado e aplicado à antena RF. No modo de recepção, o sinal RF vindo da antena passa por um amplificador de baixo ruído, é enviado para o quadrature down converter, passa pelo bloco de cancelamento de auto recepção, que atenua sinais DC e baixas freqüências, segue para o filtro de banda base passa-baixa, de freqüência de corte de 330KHz, segue para o amplificador de banda base de 50db de ganho de voltagem, vai para o limitador e segue para o demodulador FSK, onde é gerada a seqüencia de bits recebidos. O bloco sincronizador de bit provê o sinal de relógio sincronizado com o sinal recebido para serem diretamente lidos pelo microcontrolador. 22 Figura 3.11 – Arquitetura interna do XE1201A [6] 3.2.2 Antena A antena utilizada na placa RF é do tipo loop, retangular e impressa na própria placa, proporcionando praticidade e baixo custo. Porém, este tipo de antena apresenta um ganho ruim (entre -20db e -5db) e um largura de banda muito estreita. Isto torna crítica a sintonia, que deve ser feita através dos capacitores C-Loop1 e C-Loop2, como mostrado na figura abaixo. Figura 3.12 – Antena tipo Loop Impressa [7] 23 3.2.3 Espectro do sinal FSK As Figuras 3.13 e 3.14 mostram, respectivamente, o espectro do sinal FSK para a transmissão dos bits zero, transmitidos a 433.92MHZ - Fdev (freqüência de desvio configurada a 125KHz), e para a transmissão dos bits 1, na freqüência de 433.92MHz + Fdev. Estas devem ser as formas de ondas medidas na saída do transmissor RF do transceiver, e devem ser comparadas com as formas de ondas recebidas pelo analizador de espectro para se verificar a realização da transmissão dos bits. Figura 3.13 – transmissão de bits 0 [6] Figura 3.14 – Transmissão de bits 1 [6] 24 4 DESCRIÇÃO DO SOFTWARE DE TESTE O software utilizado foi feito para o teste da trasmissão e recepção de dados através dos módulos XM1201A. A idéia é construir o software em combinação com as ISR (rotinas de interrupção) disponíveis no microcontrolador, assim o programa principal pode ser simples. O software está escrito em linguagem C e foi construido baseado no programa escrito no projeto “Cooperative Robot Project – The building of the robot”[1] e encontra-se no Apêndice E do Projeto. Para que sejam testadas a transmissão e a recepção dos dados pelos módulos XM1201A, o software configura além de um módulo como transmissor, também um módulo como receptor. Para a configuração do microcontrolador, algumas rotinas básicas são necessárias, onde são definidas as portas de entrada e de saída e os modos de operação. 4.1 Configuração do Transceiver ( 3-Wire Bus ) A configuração do transceiver é feita atrvavés dos pinos SC, SD, DE (3-wire bus). DE diz ao transceiver que há dados sendo transmitidos. Ele fica normalmente alto. Durante a tranferência destes dados ele deve estar em nível lógico baixo. SC é o sinal de clock de dados. A cada pulso de clock, na borda de subida, o transceiver lê o dado no pino SD. A cada transferência, 16 bits são transmitidos, como ilustra a figura abaixo. Os primeiros dois bits informam em qual registrador estão sendo escritos os dados relativos à configuração do transceiver: A, B ou C. Os bit seguintes configuram os modos de operação do transceiver, taxa de recebimento de dados, freqüência de desvio, potência de saída, freqüência de offset do transmissor, entre outros. Figura 4.1 – Diagrama de configuração do transceiver [6] 25 A Figura 4.2 mostra o fluxograma da rotina de programação que configura o transceiver. Quando é gerada uma interrupção, é verificado se existem dados relativos à configuração a serem enviados ao transceiver. Caso existam, e se for verificado que este é o primeiro estágio, os dados são lidos do buffer e é habilitada a transmissão colocando o pino DE em nível lógico zero. Em seguida, enquanto não é atingido o último estágio (último bit transmitido), os bits são enviados serialmente, colocando-os no pino SD e elevando o sinal de clock SC. Quando for atingido o último estágio o pino DE é colocado em nível lógico alto, interrompendo a transmissão, o contador é zerado e os dados são removidos do buffer. 4.2 Transmissão de Dados A transmissão dos dados assim como na configuração é feita por interrupção e utiliza os pinos RX/TX que coloca o transceiver nos modos transmissor(0) ou receptor(1) e o pino TXD, por onde os dados são serialmente enviados do microcontrolador ao transceiver. A Figura 4.3 mostra o fluxograma da rotina de programação que permite o envio de dados do MSP para o transceiver. Quando é gerada uma interrupção, é verificado se existem dados a serem transmitidos. Caso existam e se for o primeiro bit a ser enviado, o transceiver é colocado no modo de transmissão e o dado é lido do buffer. Em seguida, enquanto não é atingido o último estágio (último bit transmitido), os bits são enviados serialmente, através do pino TXD. Quando for atingido o último estágio, o contador é zerado e os dados são removidos do buffer e o transceiver é colocado no modo de recepção. 26 ISR Timer_A Data in Buffer? no yes First stage? no yes Get data from buffer Give Data enable Last stage reached? yes no Send bit? yes Make Data Enable HIGH no Put next bit on Next stage Rise clock Signal Reset stage counter Remove sent Byte from Buffer End ISR Figura 4.2 – Fluxograma para configuração do transceiver [1] 27 ISR Timer_A no Data in Buffer? yes Last stage? yes no No First stage? Remove sent byte from buffer yes Set toTransmitter mode Reset Stage Couter Get byte from buffer Set to Receiver mode Put next bit on TX Next stage End ISR Figura 4.3 – Fluxograma de transmissão se dados [1] 4.3 Recepção de dados Para receber os dados enviados pelo módulo XM1201A, um segundo módulo XM1201A, foi, através da inclusão no programa de uma rotina, configurado como receptor. Para a confirmação do recebimento dos dados enviados, um osciloscópio foi ligado aos pinos RXD e CLKD do módulo receptor, onde foi possível observar os bits recebidos, sincronizados com o sinal de clock, gerado internamente. 28 5 RESULTADOS Foram realizados testes para o envio de seqüências de bits “1”, seqüências de bits “0” e seqüências de bits alternados, através do módulo XM1201A, conectado à placa PROTO430. Os dados foram recebidos diretamente pelo analizador de espectro (HP-8593A) através de uma antena (um fio de aproximadamente 10cm) conectado na entrada “IMPUT 50Ω” e através de um segundo módulo XM1201A, configurado como receptor. O programa foi carregado no MSP430F149 pela interface BSL da placa PROTO430, através de um microcomputador no laboratório LAI-2, onde o software foi compilado. A placa do microcontrolador MSP (placa de prototipagem PROTO430) e a placa de comunicação RF foram conectadas no LABTEL-2. Através do analizador de espectro, mostrado nas Figuras 5.1 e 5.2, foi possível observar o deslocamento do sinal na freqüência de 433.92 MHz – 125 KHz (quando se transmitem os bits “0”), e 433.92 MHz + 125 KHz (quando se transmitem os bits “1”). Para observar os dados recebidos pelo módulo XM1201A, configurado como receptor, um osciloscópio foi ligado aos pinos CLKD e RXD, onde foi possível confirmar a recepção dos bits, sincronizados com o sinal de clock. Figura 5.1 – Recepção dos bits “0” 29 Figura 5.2 – Recepção dos bits “1” Figura 5.3 – Recepção da seqüência alternada de bits “0” e “1” 30 6 CONCLUSÃO A transmissão e recepção dos bits foi realizada com sucesso, ficando como sugestão para um futuro projeto, o aperfeiçoamento do software e o detalhamento do protocolo de comunicação. Tem-se agora um sistema capaz de controar um robô móvel que permite que haja comunicação RF entre robôs, posibilitando a realização de tarefas em cooperação a partir de informações trocadas entre si e/ou entre os robôs e uma central de processamento. Este sistema pode também ser utilizado como modem de rádio freqüência, além de outras aplicações que utilizem RF. As Figuras 6.1 e 6.2 ilustram o sistema desenvolvido. Figura 6.1 - Ligações para teste da transmissão dados Figura 6.2 – Ligação entre a placa PROTO430 e o módulo XM1201A 31 APÊNDICE A – ESQUEMÁTICO DA PLACA 1 32 APÊNDICE B – LISTA DE COMPONENTES DA PLACA 1 Nome C C C C C Q1 Q2 U1 U2 U3 U4 U5 DZ1,DZ2 D3,D4 R1 R2 R R R Tipo Cap cerâmica Cap eletrolitico Cap eletrolitico Cap eletrolitico Cap eletrolítico Cristal Cristal MSP430F149 TPIC0108b MAX3243 TPS76901 CD74HCT125 Diodo Zenner Diodo Resistor Resistor Resistor Resistor Resistor Valor 0.1 UF 1 UF 4.7 UF 47 UF 100 nF 8 MHz 32768 KHz 1N4148 330K 150K 20K 10K 523K Encapsulamento XT49U PQFP64 SOIC 20 SOIC (DW) 28 5-Pin SOT 23(DBV) DIL 14 0309 0411 0309 0309 0309 0309 0309 QTD 5 2 2 2 4 1 1 1 2 1 2 2 2 2 1 2 10 2 1 33 APÊNDICE C – ESQUEMÁTICO DA PLACA 2 34 APÊNDICE D - LISTA DE COMPONENTES DA PLACA 2 Nome U1 Q1 T1 T2 SAW1 C2 C1,C3,C5,C6, C9,C14,C19 C26 C7, C16 C4,C11,C13,C17, C8,C18, C12,C20 C15 C10 C23, CSant1 Csant2 CPant1 CPant2 L1,L2,L3, L4,L5,L7 L6,L8,L9 Tipo Transceiver XTAL Quartz NPN Transistor PNP Transistor SAW Ressonator Capac. Acoplam. Capacitor 0805 L10 R6 R1,R7 Indutor 0805 Resistor Resistor Capacitor 0805 Capacitor 0805 Capacitor 0805 Capacitor 0805 Capacitor 0805 Capacitor 0805 Trim-capacitor Capacitor 0805 Capacitor 0805 Capacitor 0805 Capacitor 0805 Indutor 0805 Indutor 0805 Referência XE 1201A S0409745 BFQ67 BC808 RO-2101A 805NPO Ni 805NPO Ni 805NPO Ni 805NPO Ni 805NPO Ni 805NPO Ni 805NPO Ni TZC03Z060A110 805NPO Ni 805NPO Ni 805NPO Ni 805NPO Ni 0805CS120-X JBX 5% 0805CS180-X JBX 5% 0805CS560-X Valor Encapsulam. TQFP32 4MHz SOT 23 SOT 23 SM-2 QTD 1 1 1 1 1 1 7 433,92MHz 10uF 10nF Smd0805 0,68pF 470pF 1.5pF 2.2pF 4.7pF 100nF 2-6 pF 2.7pF 33pF 22pF 10pF 12nH SMD0805 SMD0805 SMD0805 SMD0805 SMD0805 SMD0805 SMD0805 SMD0805 SMD0805 SMD0805 SMD0805 SMD0805 4 2 2 1 1 2 1 1 1 6 18nH SMD0805 3 56nH 43KΩ 110KΩ SMD0805 SMD1206 SMD1206 1 1 2 1 35 APÊNDICE E – SOFTWARE DE TESTES PARA A COMUNICAÇÃO RF /* * Arquivo: xemics_init.c * Data: 29-08-2006 * * Programa principal * */ #include <msp430x14x.h> #include "xemics_functions.c" void main(void){ init_xemics1201(); //Initialize Xemics transceiver and timer-A for the communication _EINT(); //Enable interrupts, necessary for 3-wire bus wait_on_3wire(); //If buffer is empty, the transceiver is initialized wait_on_3wire_1(); //If buffer is empty, the transceiver is initialized while(1){ //Send continues the data to the transceiver } } send_by_rf(0xffff); //Send 16-bits high send_by_rf(0x0000); //Send 16-bits low send_by_rf(0xf0f0); //Send bits high and low wait_on_rf(); //Wait till the data is sent by the transceiver 36 /* * Arquivo: xemics_functions.c * Data: 29-08-2006 * * Arquivo com funções para um microcontrolador MSP430F149 controlar um transceiver Xemics 1201A. * Este arquivo inclui uma inicialização para as IOs do microcontrolador, as rotinas para a transmissão de dados * e configura um transceiver como transmissor e um outro como receptor. * Uma rotina de interrupção baseada no timer-A controla a comunicação com o transceiver. */ #include <msp430x14x.h> #include "xemics_functions.h" //Used variables unsigned int w3_tx_buffer[W3_BUFFER_SIZE]; unsigned char w3_p_tx_buffer_rd; unsigned char w3_p_tx_buffer_wr; unsigned char w3_bit_counter; unsigned int w3_int_to_send; unsigned int w3_1_tx_buffer[W3_1_BUFFER_SIZE]; unsigned char w3_1_p_tx_buffer_rd; unsigned char w3_1_p_tx_buffer_wr; unsigned char w3_1_bit_counter; unsigned int w3_1_int_to_send; unsigned int rf_tx_buffer[RF_TX_BUFF_SIZE]; unsigned char rf_p_tx_buffer_rd; unsigned char rf_p_tx_buffer_wr; unsigned char rf_bit_counter; unsigned int rf_int_to_send; 37 void init_xemics1201(void){ P1DIR |= XE_TXD | XE_RXTX | XE_SD | XE_SC | XE_EN; //Choose on witch pins of P1 is a output P1DIR &=~ XE_RXD | XE_CLKD; //Choose on witch pins of P1 is a input P5DIR |= XE_DE | XE_DE1 | XE_SC1 | XE_SD1; //Choose on witch pins of P5 is a output P1OUT &=~ XE_TXD | XE_SD | XE_SC; //Lower 3-wire bus. No data to transceiver P1OUT |= XE_EN | XE_RXTX; //Enable transceiver in receiver mode P5OUT &=~ XE_DE | XE_DE1 | XE_SC1 | XE_SD1; //No data on 3-wire bus. w3_p_tx_buffer_rd = 0; //Reset read pointer of buffer w3_p_tx_buffer_wr = 0; //Reset write pointer of buffer w3_bit_counter = 0; //Reset bit pointer in value to send w3_1_p_tx_buffer_rd = 0; //Reset read pointer of buffer w3_1_p_tx_buffer_wr = 0; //Reset write pointer of buffer w3_1_bit_counter = 0; //Reset bit pointer in value to send rf_p_tx_buffer_wr = 0; //Reset the TX write pointer rf_p_tx_buffer_rd = 0; //Reset the TX read pointer rf_bit_counter = 0; WDTCTL = WDTPW + WDTHOLD; //Stop WDT TACTL = TASSEL1 + TACLR; //SMCLK, clear TAR CCTL0 = CCIE; //CCR0 interrupt enabled CCR0 = 200; //Timer value P1DIR |= 0x01; //P1.0 output TACTL |= MC0; //Start Timer-A in up-mode 38 //Send by 3-wirebus the configuration of the transceiver send_by_3wire(INIT_REG_A); //Change this setting in xemics_functions.h send_by_3wire(INIT_REG_B); //Change this setting in xemics_functions.h send_by_3wire(INIT_REG_C); //Change this setting in xemics_functions.h //Send by 3-wire bus the configuration of the transceiver for reception send_by_3wire_1(INIT_REG_A1); send_by_3wire_1(INIT_REG_B1); send_by_3wire_1(INIT_REG_C1); } void send_by_3wire(unsigned int value){ w3_tx_buffer[w3_p_tx_buffer_wr] = value; //Write value in buffer w3_p_tx_buffer_wr = (++w3_p_tx_buffer_wr & W3_BUFFER_MASK); //Move the write pointer to the next position } void send_by_3wire_1(unsigned int value){ w3_1_tx_buffer[w3_1_p_tx_buffer_wr] = value; //Write value in buffer w3_1_p_tx_buffer_wr = (++w3_1_p_tx_buffer_wr & W3_1_BUFFER_MASK); //Move the write pointer to the next position } void send_by_rf(unsigned int value){ rf_tx_buffer[rf_p_tx_buffer_wr] = value; //Write value in buffer rf_p_tx_buffer_wr = (++rf_p_tx_buffer_wr & RF_TX_BUFF_MASK); //Move the write pointer to the next position } void wait_on_3wire(void){ while(w3_p_tx_buffer_rd != w3_p_tx_buffer_wr); //Wait till the pointers are the same, on that moment the buffer is empty } void wait_on_3wire_1(void){ while(w3_1_p_tx_buffer_rd != w3_1_p_tx_buffer_wr); //Wait till the pointers are the same, on that moment the buffer is empty } void wait_on_rf(void){ while(rf_p_tx_buffer_rd != rf_p_tx_buffer_wr); } //Wait till the pointers are the same, on that moment the buffer is empty 39 // Timer A0 interrupt service routine for clocking the data to the Xemics transceiver #pragma vector=TIMERA0_VECTOR __interrupt void Timer_A (void){ if(rf_p_tx_buffer_wr != rf_p_tx_buffer_rd){ if(rf_bit_counter<=15){ if(rf_bit_counter==0){ //Look if there is data to send //Look if all the data is send //Is it the first bit? P1OUT = P1IN &~ XE_RXTX; //Set transceiver in transmitting mode rf_int_to_send = rf_tx_buffer[rf_p_tx_buffer_rd ]; //Read integer from buffer } if((rf_int_to_send&0x8000)==0x0000){ P1OUT = P1IN &~ XE_TXD; //Look at the MSB of the integer //MSB was a 0, send a 0 } else{ P1OUT = P1IN | XE_TXD; //MSB was a 1, send a 1 } rf_int_to_send = rf_int_to_send<<1; //Rotate next bit to MSB rf_bit_counter++; //Higher the bit counter } else{ rf_p_tx_buffer_rd = (++rf_p_tx_buffer_rd & RF_TX_BUFF_MASK); //Higher the read-pointer rf_bit_counter=0; //Reset bit counter if(rf_p_tx_buffer_rd == rf_p_tx_buffer_wr){ P1OUT = P1IN | XE_RXTX; } } } //No bits more of this integer to send //Look if there is no more data in the buffer //No more data in buffer so set transceiver in receiver mode again 40 // 3-wire configuration for transmission if(w3_p_tx_buffer_wr != w3_p_tx_buffer_rd){ if(w3_bit_counter==0){ //Look if there is data to send //Look if it is a new byte to send //New integer to send, get this one and make the bus ready P5OUT = P5IN &~ XE_DE; //Start 3-wire bus communication w3_int_to_send = w3_tx_buffer[w3_p_tx_buffer_rd]; //Get the integer } if(w3_bit_counter < 32){ if(w3_bit_counter & 0x01){ //By an odd number we put a clock pulse on the bus P1OUT |= XE_SC; //Give a clock signal } else{ //By an even number we put a bit of the data on the bus P1OUT = P1IN &~ XE_SC; //Make clock signal low if((w3_int_to_send&0x8000)==0){ //Place the MSB of the value on the 3-wire bus P1OUT = P1IN &~ XE_SD; //MSB was a 0, make SD low } else{ P1OUT = P1IN | XE_SD; //MSB was a 1, make SD high } w3_int_to_send = w3_int_to_send<<1; //Set new bit ready } w3_bit_counter++; } else{ } } P1OUT = P1IN &~ XE_SC; //Make the clock line low P5OUT |= XE_DE; //Stop 3-wire bus communication w3_bit_counter=0; //Reset the bit counter w3_p_tx_buffer_rd = (++w3_p_tx_buffer_rd & W3_BUFFER_MASK); //Move the read pointer to the next position 41 // 3-wire configuration for reception if(w3_1_p_tx_buffer_wr != w3_1_p_tx_buffer_rd){ if(w3_1_bit_counter==0){ //Look if there is data to send //Look if it is a new byte to send //New integer to send, get this one and make the bus ready P5OUT = P5IN &~ XE_DE1; //Start 3-wire bus communication w3_1_int_to_send = w3_1_tx_buffer[w3_1_p_tx_buffer_rd]; //Get the integer } if(w3_1_bit_counter < 32){ if(w3_1_bit_counter & 0x01){ //By an odd number we put a clock pulse on the bus P5OUT |= XE_SC1; //Give a clock signal } else{ P5OUT = P5IN &~ XE_SC1; if((w3_1_int_to_send&0x8000)==0){ P5OUT = P5IN &~ XE_SD1; //By an even number we put a bit of the data on the bus //Make clock signal low //Place the MSB of the value on the 3-wire bus //MSB was a 0, make SD low } else{ P5OUT = P5IN | XE_SD1; //MSB was a 1, make SD high } w3_1_int_to_send = w3_1_int_to_send<<1; //Set new bit ready } w3_1_bit_counter++; } else{ } } } P5OUT = P5IN &~ XE_SC1; //Make the clock line low P5OUT |= XE_DE1; //Stop 3-wire bus communication w3_1_bit_counter=0; //Reset the bit counter w3_1_p_tx_buffer_rd = (++w3_1_p_tx_buffer_rd & W3_1_BUFFER_MASK); //Move the read pointer to the next position 42 /* * Arquivo: xemics_functions.h * Data: 29-08-2006 * * Definição das constantes e funções utilizadas. * Cabeçalho de xemics_functions.c * */ //Defines for chip I/O and buffer sizes #define XE_EN 0x01 //P1.0 Chip enable #define XE_SC 0x04 //P1.2 3-wire bus clock #define XE_SD 0x08 //P1.3 3-wire bus data #define XE_SC1 0x08 //P5.3 3-wire bus clock #define XE_SD1 0x04 //P5.4 3-wire bus data #define XE_RXTX 0x10 //P1.4 Transceiver in Receiver of transmitter mode #define XE_TXD 0x20 //P1.5 Data transmit pin #define XE_CLKD 0x40 //P1.6 Receiver data clock #define XE_RXD 0x80 //P1.7 Data receive pin #define XE_DE 0x02 //P5.1 Bus data enable #define XE_DE1 0x10 //P5.2 Bus data enable #define W3_BUFFER_SIZE 4 //Buffer size for 3-wire bus #define W3_BUFFER_MASK W3_BUFFER_SIZE-1 //Buffer mask for 3-wire bus #define W3_1_BUFFER_SIZE 4 //Buffer size for 3-wire bus #define W3_1_BUFFER_MASK W3_1_BUFFER_SIZE-1 //Buffer mask for 3-wire bus #define RF_TX_BUFF_SIZE 4 //Buffer size for transmit buffer of transceiver #define RF_TX_BUFF_MASK RF_TX_BUFF_SIZE-1 //Buffer mask for transmit buffer of transceiver //Defines for configuring register A of the Xemics transceiver chip 43 #define REG_A 0x0000 //A15, A14: Select register A #define CM 0x2000 //A13: Control mode bit #define CC 0x1000 //A12: Internal clock start-up #define CE 0x0800 //A11: Chip enable #define TRM 0x0400 //A10: Transmit/Receive mode #define A9 0x0200 //A9: Demodulator and bit synchronize bypassing #define A8 0x0100 //A8: Demodulator and bit synchronize bypassing #define A7 0x0080 //A7: Demodulator and bit synchronize bypassing #define A6 0x0040 //A6: Demodulator and bit synchronize bypassing #define A5 0x0020 //A5: Receiver data rate #define A4 0x0010 //A4: Receiver data rate #define A3 0x0008 //A3: Receiver data rate #define A2 0x0004 //A2: Receiver data rate #define A1 0x0002 //A1: Receiver data rate #define A0 0x0001 //A0: Receiver data rate //Defines for configuring register B of the Xemics transceiver chip #define REG_B 0x4000 //A15, 14: Select register B #define B13 0x2000 //B13: Offset frequency of the resonator #define B12 0x1000 //B12: Offset frequency of the resonator #define B11 0x08004 //B11: Offset frequency of the resonator #define B10 0x0400 //B10: Offset frequency of the resonator #define B9 0x0200 //B9: Offset frequency of the resonator #define B8 0x0100 //B8: Offset frequency of the resonator #define B7 0x0080 //B7: Offset frequency of the resonator //No defines for B6-B0 because these bits have always to be zero 44 //Defines for configuring register C of the Xemics transceiver chip #define REG_C 0x8000 //A15, 14: Select register C #define C13 0x2000 //C13: Output power #define C12 0x1000 //C12: Output power #define DI 0x0800 //C11: Data inversion bit of the received stream //No defines for C9 because this bit must be zero. #define C10 0x0400 //C10: test bit #define TAE 0x0100 //C8: Transmitted output amplifies enable #define C7 0x0080 //C7: TXD via 3-wire bus #define C6 0x0040 //C6: Modulator frequency deviation #define C5 0x0020 //C5: Modulator frequency deviation #define C4 0x0010 //C4: Modulator frequency deviation - FDEV = 3906.25 * n [Hz] #define C3 0x0008 //C3: Modulator frequency deviation #define C2 0x0004 //C2: Modulator frequency deviation - FDEV>DR FDEV<BW #define C1 0x0002 //C1: Modulator frequency deviation #define C0 0x0001 //C0: Modulator frequency deviation #define INIT_REG_A REG_A | CC | CE | A8 //Always clock, Chip enabled, transmitter mode, demodulator bypassed #define INIT_REG_B REG_B //No offset #define INIT_REG_C REG_C | C13 | C12 | TAE | C5 | C10 //+5dBm, amplifier enabled, FDEV = 125 kHz. #define INIT_REG_A1 REG_A | CM | CC | CE | TRM | A4 //control mode, Always clock, Chip enabled, Receiver mode, data rate #define INIT_REG_B1 REG_B //No offset #define INIT_REG_C1 REG_C | C13 | C12 | TAE | C5 | C10 //+5dBm, amplifier enabled, FDEV = 125 kHz //Prototypes from functions void send_by_3wire(unsigned int value); void send_by_3wire_1(unsigned int value); void init_xemics1201(void); void send_by_rf(unsigned int value); void wait_on_3wire(void); void wait_on_3wire_1(void); void wait_on_rf(void); 45 7 REFERÊNCIAS BIBLIOGRÁFICAS [1] Ronald van Gorkum. Cooperative Robot Project – The building of the robot. Projeto de Graduação – Universidade de Leeuwarden, Holanda – 2004. [2] SLAS272F. MSP430F149 Mixed Signal Microcontroller. Texas Instruments – 2004. Disponível em www.ti.com. [3] SLAU049F. MSP430x1xx Family User´s Guide. Texas Instruments - 2006. [4] SLVS203E. TPS76901 Ultra Low Power 100mA Low Dropout Linear Regulator. Texas Instruments – 2001. [5] SLIS068A. TPIC0108B PWM Control intelligent H-Bridge. Texas Instruments 2002. [6] XE1201A Transceiver Databook. Xemics - 2003. Disponível em www.xemics.com. [7] Low Power UHF Transceiver XE1201A Datasheet. Xemics - 2002. [8] Application Note. The XM1201. A module Reference Board for XE1201A. Xemics – 2003. [9] SCHS143C. CD74HCT125 High Speed CMOS Logic Quad Buffer, Three State. Texas Intruments – 2003. [10] SLLS350L. MAX3243 Multichannel R232 Line Driver/Receiver. Texas Instruments - 2004.