universidade federal do cearÁ centro de … luiz wattes oliveira junior... · para solicitar a...
TRANSCRIPT
UNIVERSIDADE FEDERAL DO CEARÁ
CENTRO DE TECNOLOGIA
DEPARTAMENTO DE ENGENHARIA ELÉTRICA
CURSO DE ENGENHARIA ELÉTRICA
JORGE LUIZ WATTES OLIVEIRA JUNIOR
APLICAÇÃO DE REGISTRO DE DADOS DE UM ACELEROMETRO DIGITAL DE
3 EIXOS BASEADO EM FPGA
FORTALEZA
2013
JORGE LUIZ WATTES OLIVEIRA JUNIOR
APLICAÇÃO DE REGISTRO DE DADOS DE UM ACELEROMETRO DIGITAL DE
3 EIXOS BASEADO EM FPGA
Monografia apresentada ao Curso de
Engenharia Elétrica do Departamento de
Engenharia Elétrica da Universidade Federal do
Ceará, como parte dos requisito para obtenção
do título de Engenheiro Eletricista. Área de
concentração: Controle e dispositivos digitais.
Orientador: Prof. Dr. Paulo Peixoto Praça
FORTALEZA
2013
___________________________________________________________________________
Página reservada para ficha catalográfica que deve ser confeccionada após apresentação e
alterações sugeridas pela banca examinadora.
Para solicitar a ficha catalográfica de seu trabalho, acesse o site: www.biblioteca.ufc.br, clique
no banner Catalogação na Publicação (Solicitação de ficha catalográfica)
___________________________________________________________________________
JORGE LUIZ WATTES OLIVEIRA JUNIOR
APLICAÇÃO DE REGISTRO DE DADOS DE UM ACELEROMETRO DIGITAL DE
3 EIXOS BASEADO EM FPGA
Monografia apresentada ao Curso de
Engenharia Elétrica do Departamento de
Engenharia Elétrica da Universidade Federal do
Ceará, como parte dos requisito para obtenção
do título de Engenheiro Eletricista. Área de
concentração: Controle e dispositivos digitais.
Aprovada em: ___/___/______.
BANCA EXAMINADORA
________________________________________
Prof. Dr. Paulo Peixoto Praça (Orientador)
Universidade Federal do Ceará (UFC)
_________________________________________
Prof. Dr. Arthur Plinio De Souza Braga
Universidade Federal do Ceará (UFC)
_________________________________________
Ms. Samuel Jó Mesquita
Universidade Federal do Ceará (UFC)
A Deus.
Aos meus pais, Jorge e Ruth.
A minha namorada, Lais
Aos meus amigos
AGRADECIMENTO
Primeiramente a Deus, pela grande dadiva da vida e por me dar saúde e forças para
alcançar meus objetivos.
À minha mãe, Ruth Cavalcanti Nunes, que sempre acreditou que um dia eu seria
um “grande homem”, por todo o carinho e dedicação que me trouxeram até aqui.
Ao meu pai, Jorge Luiz Wattes Oliveira, pela amizade e suporte, especialmente em
momentos difíceis, e por ser um motivador para minhas superações.
À minha namorada, Lais Policarpo Bomfim, pelo amor, carinho e apoio, sem os
quais a vida perderia o brilho.
Aos meus familiares, Tia Mazé, Tio Frota, Tia Mariazinha, Tia Auristecília e meus
primos, Lucianinho, Betinha, Camila, Alex e João Victor.
Aos meus amigos, em especial os Engenheiros Aloísio Fernandes e Diego Aguiar
e os companheiros de classe, Antônio Dias Junior, Elcid Filho, Marcus Anderson e Thais
Fernanda, por todas as horas infindáveis de estudos e aprendizados.
Ao professor Paulo Peixoto Praça pela grande disponibilidade e ótima orientação
realizada.
Ao professor Alexandre Rocha Filgueiras, pelas várias noites de trabalho passadas
no escritório, e por todo apoio e amizade durante minha graduação.
Às professoras Heloísa Helena e Noêmia Guimarães, da escola Waldorf Micael,
pelas chuveiradas e broncas, e por terem sido parte fundamental na formação do meu caráter.
Ao professor David Herman, do colégio Master, por ter conseguido me ensinar a
amar a física.
Aos professores, Fernando Antunes, Laurinda Lúcia, Sergio Daher, Luiz Henrique,
Arthur Plinio, José Almeida, aos servidores José Mário, Seu Jorge, Vasco e a todos os demais
professores, servidores e estudantes da engenharia elétrica da Universidade Federal do Ceará,
que de uma forma ou de outra, marcaram minha graduação.
“Valeu a pena? Tudo vale a pena
Se a alma não é pequena.
Quem quer passar além do Bojador
Tem que passar além da dor.”
Fernando Pessoa
RESUMO
Este trabalho visa apresentar um sistema de aquisição de dados de sensor acelerômetro do
modelo ADXL345, através de comunicação do tipo Serial Protocol Interface (SPI) de três
pinos. Os dados são tratados e posteriormente armazenados em uma memória Electrically
Erasable Programmable Read Only Memory (EEPROM) tipo Flash, interna a um cartão SD. A
metodologia de acesso aos endereços físicos do cartão SD é feita através do software HxD, e a
análise dos dados através do software MATLAB. O sistema é baseado em Field Programmable
Gate Array (FPGA), família Cyclone IV, da empresa Altera. São utilizados o kit de
desenvolvimento DE0-nano e um módulo de cartão SD. A programação é feita por meio de um
único código em linguagem VHDL. A partir de ensaios de rotação do acelerômetro, obtiveram-
se resultados experimentais que demonstram o correto funcionamento da aplicação, bem como
a melhora de dados coletados a partir de algoritmos de tratamento de dados. Parte da aplicação
proposta foi utilizada como projeto de monitoria da disciplina de Técnicas Avançadas em
Eletrônica Digital, da Engenharia Elétrica da Universidade Federal do Ceará, relativo ao
aprimoramento do roteiro de práticas, onde foi desenvolvido uma prática de comunicação com
o referido acelerômetro.
Palavras-chave: FPGA. Acelerômetro de 3 eixos. Cartão SD.
ABSTRACT
This work aims to present clearly, a system of data acquisition of an accelerometer sensor model
ADXL345, through three-pin Serial Protocol Interface (SPI) communication. The data is treated
and then, stored in a Flash Electrically Erasable Programmable Read Only Memory (EEPROM)
memory, inside a SD card. The methodology to access the physical addresses of the SD card is
done through the software HxD, and the data analysis is done by MATLAB software. The
system is based on the Altera’s Cyclone IV FPGA family. The DE0-nano development kit and
a module SD card for the purpose of practical implementation of design are used. All
programming is done through a unique code in VHDL language. By means of experiments of
rotation of the accelerometer, the results obtained shown the correct functioning of the
application, as well as the improvement of the collected data through the treatment algorithm.
Part of the proposed application was also utilized as project of the tutorial program of the course
of Tecnicas Avanças em Eletrônica Digital, of the Electric Engineering of the Universidade
Federal do Ceará, conserning to the improvement of the practical script, by the addition of a
practical class of communication to the referred accelerometer.
Keywords: FPGA. 3-axes Accelerometer. SD Card.
LISTA DE ILUSTRAÇÕES
Figura 1 - Diagrama de blocos da aplicação proposta. ............................................................. 15
Figura 2 - Diagrama lógico dos dispositivos PAL, a esquerda, e PLA, a direita. .................... 18
Figura 3 - Diagrama lógico dos dispositivos macro célula, a esquerda, e LE, a direita. .......... 19
Figura 4 - Estrutura interna básica do CLPD, a esquerda, e dos FPGA, a direita. ................... 20
Figura 5 - Percentuais de mercado dominado pelos maiores fabricantes de FPGA em 2010 .. 21
Figura 6 - Fotografia do dispositivo PAL EP300 da Altera Corporation ................................. 22
Figura 7 - kit de desenvolvimento e estudo DE0-nano da Terasic Technologies. ................... 24
Figura 8 - Esquemático de um acelerômetro ............................................................................ 28
Figura 9 – Diagrama dos blocos internos do acelerômetro ADXL345 .................................... 29
Figura 10 - Diagrama de comunicações SPI de 3 e 4 pinos do ADXL345 .............................. 31
Figura 11 - Diagrama de tempo do protocolo de comunicação SPI de 3 pinos do ADXL345 31
Figura 12 - Estrutura da palavra de comando de 6 bytes.......................................................... 34
Figura 13 - Diagrama de tempo de comando simples ao SDMC. ............................................ 35
Figura 14 - Diagrama de tempo de comando de leitura ao SDMC .......................................... 36
Figura 15 - Diagrama de tempo de comando de escrita ao SDMC .......................................... 36
Figura 16 - Módulo adaptativo de cartão SD ........................................................................... 36
Figura 17 - Interface do software HxD para leitura de endereços físicos de discos................. 37
Figura 18 - Código em MATLAB para leitura e plotagem de dados ....................................... 38
Figura 19 - Estrutura do comando Process ............................................................................... 41
Figura 20 - Estrutura do comando Case ................................................................................... 41
Figura 21 - Estrutura do código em blocos de Process ............................................................ 42
Figura 22 - Fluxograma do protocolo de comunicação SPI do acelerômetro ADXL345 ........ 43
Figura 23 - Fluxograma do código de escrita do SDMC .......................................................... 45
Figura 24 - Algoritmo em linguagem VHDL para tratamento por média ................................ 47
Figura 25 - Gráfico 3D do posicionamento do ADXL345 durante ensaios ............................. 49
Figura 25 - Gráfico dos dados de aceleração sem tratamento .................................................. 50
Figura 26 - Gráfico de dados de aceleração com tratamento por média .................................. 50
LISTA DE TABELAS
Tabela 1 - Dispositivos CPLD da Xilinx .................................................................................. 22
Tabela 2 - Dispositivos CPLD da Altera .................................................................................. 23
Tabela 3 - Características dos FPGAs de última geração das fabricantes Altera e Xilinx ....... 23
Tabela 4 - Tipos de acelerômetros ............................................................................................ 27
Tabela 5 - Tabela de registradores do ADXL345..................................................................... 30
Tabela 6 - Descrição dos pinos de SDMCs .............................................................................. 34
Tabela 7 - Conjunto de comandos de protocolo SPI de SDMCs.............................................. 35
LISTA DE ABREVIATURAS E SIGLAS
EDA Eletronic Design Automation
PLD Programmable Logic Device
ASIC Application Specific Integrated Circuit.
FPGA Field Programable Gate Array
SDRAM Syncronous Dinamic Random Access Memory
SPLD Simple Programable Logic Devic
PAL Programmable Array Logic
PLA Programmable Logic Array
GAL Generic Array Logic
FET Feild-Effect Transistors
CI Circuitos Integrados
CPLD Complex Programmable Logic Device
LAB Logic Array Block
PIA Programmable Interconectect Array
LE Logic Element
LUT Look-Up Table
ALM Adaptative Logic Modules
XDE Xilinx Device Editor
SRAM Synchronous Random Acess Memory
DSP Digital Signal Processor
PLL Phased- Lock Loop
DLL Delay-Locked Loop
SPI Serial Interface Protocol
SDMC Secure Digital Memory Card
ROM Read-Only Memory
EPROM Electrically Programmable Read-Only Memory
EEPROM Electrically Erasable Programmable Read-Only Memory
SRAMs Static Randon Access Memory
DRAM Dynamic Random Access Memory
SDRAMs Synchronous Dynamic Randon Access Memory
CAM Content-Addressable Memory
SUMÁRIO
1 INTRODUÇÃO ............................................................................................................. 13
1.1 Objetivo .......................................................................................................................... 14
1.2 Motivação ....................................................................................................................... 14
1.3 Proposta de aplicação ................................................................................................... 14
1.4 Estruturação do trabalho ............................................................................................. 15
2 REFERÊNCIAS HISTÓRICAS E O DISPOSITIVO ESCOLHIDO .................... 17
2.1 Dispositivos Lógicos Programáveis ............................................................................. 18
2.2 Maiores fabricantes de CPLD e FPGA da atualidade ............................................... 21
2.3 Kit de desenvolvimento DE0-nano da TERASIC ...................................................... 24
3 PERIFÉRICOS, PROTOCOLOS E SOFTWARES ................................................. 26
3.1 Acelerômetro digital (ADXL345)................................................................................. 26
3.2 Cartão de Memória SD (SDMC) ................................................................................. 32
3.3 Softwares utilizados ...................................................................................................... 37
4 APLICAÇÃO PRÁTICA ............................................................................................. 40
4.1 Algoritmo geral.............................................................................................................. 40
4.2 Algoritmo Acelerômetro ............................................................................................... 42
4.3 Algoritmo do cartão SD ................................................................................................ 44
4.4 Algoritmo de tratamento e amostragem ..................................................................... 45
4.5 Análise dos resultados ................................................................................................... 48
5 CONCLUSÃO ............................................................................................................... 51
13
1 INTRODUÇÃO
A evolução da sociedade é diretamente vinculada à evolução da tecnologia, do
conhecimento que a mesma desenvolve para melhorar as relações entre as pessoas e o meio em
que vivem. Sistemas de controle de tráfego urbano, computadores portáteis, veículos
automatizados, além de uma infinidade de aplicações podem ser desenvolvidas a partir das
plataformas que a cada dia se apresentam mais robustas e velozes, fazendo com que o pleno
desenvolvimento da tecnologia dependa quase que exclusivamente da criatividade daqueles que
a implementam.
Dentro do desenvolvimento da tecnologia, há um destaque significativo para os
projetos que utilizam princípios de lógica digital. Para se ter uma ideia, no início da década de
80 a indústria eletrônica começou a utilizar dispositivos programáveis que possuíam cerca de
alguns milhares de transistores na implementação de circuitos lógicos discretos, já nos dias
atuais, os novos Programmable Logic Devices (PLD) do tipo Field Programmable Gate Array
(FPGA) podem integrar em um único chip mais de 5 bilhões de transistores, formando uma
grande quantidade de blocos lógicos com diversas funções especificas.
Avaliando a tecnologia no que tange os dispositivos de maneira geral, a utilização
de ferramentas de sínteses denominadas Eletronic Design Automation (EDA) e o
aperfeiçoamento dos dispositivos de lógica programável Programmable Logic Device (PLD)
tem simplificado e acelerado todo o ciclo de projeto.
Os PLDs são dispositivos comercializados na forma de circuitos integrados, e que
permitem ao usuário definir, através da programação, a forma de conexão entre sua estrutura
física interna, dessa forma, montando o circuito previamente sintetizado pelo software dedicado
de programação. Tais dispositivos possuem como principal característica a capacidade de
reprogramação das funções lógicas pelo usuário, facilitando assim, a implementação das
mudanças que surgem no decorrer do projeto. Em comparação com outras tecnologias de
circuitos integrados digitais os PLDs apresentam um ciclo de projeto curto e custos
competitivos, sendo a escolha entre uma ou outra tecnologia, em função da aplicação desejada.
Esse mercado encontra-se em expansão, existindo diversos fabricantes de
equipamentos de comunicação de dados, filtros eletrônicos, placas de vídeo, entre outros,
optando pelos PLDs, em vez dos tradicionais chips customizados Application-specific
Integrated Circuits (ASIC). A crescente demanda de mercado pelos PLDs tem reduzido seu
14
custo por unidade de produzida. Um fator que tem contribuído com sua acessibilidade, é o uso
de novas tecnologias no seu processo de fabricação.
Partindo deste contexto, este trabalho visa demonstrar através de fluxogramas,
diagramas de tempo e trechos de códigos comentados, uma aplicação baseada em FPGA,
referente ao registro de dados obtidos de um acelerômetro digital de 3 eixos, a serem salvas em
um Secure Digital Memory Card (SDMC), comumente conhecido como cartão SD, do qual
serão extraídos os dados, via software, para tratamento e aferição dos resultados.
1.1 Objetivo
O objetivo deste trabalho é implementar um sistema de aquisição de dados,
realizando comunicação com um acelerômetro para o tratamento dos dados e posterior
armazenamento em memória não volátil. Todo o controle será feito em dispositivo do tipo
FPGA, utilizando como linguagem de programação de hardware o VHDL (D’AMORE, 2012).
Entretanto, busca-se não somente a implementação da aplicação em questão, mas também, o
desenvolvimento dos conhecimentos referentes aos métodos de comunicações utilizados entre
os dispositivos, que podem ser aplicados em diversos outros projetos.
1.2 Motivação
A tecnologia de dispositivos programados em hardware como FPGAs, apresenta-
se promissora, na relação custo benefício, uma vez que embora apresente preços superiores,
possui uma superioridade intrínseca em sua capacidade de processamento. A partir disso, nota-
se que é fundamental o desenvolvimentos de estudos voltados para esta área, visando adquirir
subsídios para o desenvolvimento de projetos mais complexos.
1.3 Proposta de aplicação
Para demonstrar uma aplicação prática que utilizasse acelerômetro com registro,
propõe-se o sistema apresentado na Figura 1, onde é explicitado o diagrama de blocos do
mesmo. Na Figura 1 o bloco ADXL345, é referente ao dispositivo medidor de aceleração, o
bloco MÓDULO SD representa um módulo externo ao kit didático que possui um soquete para
cartão SD, bem como um cartão SD de 2 GB da SanDisk. O bloco FPGA, por sua vez, indica
o dispositivo de FPGA da família Cyclone IV, presente no kit didático DE0-nano. São
15
representados também os três processos internos a este, referentes a recepção dos dados do
ADXL345, amostragem desses dados, e envio do comando de escrita desses dados ao
MÓDULO SD.
Figura 1 - Diagrama de blocos da aplicação proposta.
Controlador de
comunicação do
acelerômetro
Aceleração
dinâmica e estática
Bloco de comunicação
serial SPI de 3 pinos
Bloco Administrador
de amostras do
sistema
Bloco de
comunicação
com o Cartão
SD
ADXL345 FPGA
Cartão SD SanDisk
2 Gb
(Modo SPI)
MODULO SD
Dados Analógicos
(3 Sinais)
SPI
(3 bits)
Ace
lera
ção
X (
13
bit
s)
Ace
lera
ção
Y (1
3 b
its)
Ace
lera
ção
Z (1
3 b
its)
SPI
(4 bits)
Amostra
(512 bytes)
Fonte: Elaborado pelo autor.
A aplicação prática proposta consiste no registro dos valores de aceleração lidas
pelo três eixos do sensor, durante um tempo fixo. A partir dos valores lidos, é realizado um
tratamento de dados, e então, os valores de aceleração de cada eixo são registrados a uma taxa
de 0,1 segundos, e em pacotes de 512 bytes em um cartão SD de 2 GB.
1.4 Estruturação do trabalho
A temática do trabalho e a estruturação do mesmo são apresentadas no capítulo 1.
No capítulo 2 é apresentado o contexto histórico dos dispositivos eletrônicos
digitais, bem como um breve resumo da trajetória dos fabricantes de FPGA que atualmente se
destacam no mercado. Além disso, é apresentado o kit de desenvolvimento utilizado na
aplicação prática, e a motivação para a escolha de tal dispositivo.
No capítulo 3 serão abordados os dispositivos periféricos e os protocolos,
destacando a importância destes protocolos de interfaceamento e informações importantes ao
se utilizar dispositivos do tipo FPGA. Será também descrito o princípio de funcionamento do
acelerômetro, bem como o seu comportamento via protocolo de comunicação SPI, o protocolo
SPI do cartão SD, e seu funcionamento básico. Ainda no capítulo 3 é implementada, uma
interface feita em ambiente MATLAB, para a visualização dos dados.
16
No capítulo 4 será apresentada a implementação da aplicação proposta,
descrevendo como foram feitas as aquisições da massa de dados a ser observada no computador.
Serão apresentadas as plotagens e a interpretação dos dados de velocidade, aceleração e
distância percorrida. É realizada uma comparação entre os dados sem e com tratamento, obtidos
experimentalmente.
No capítulo 5 são apresentadas conclusões a respeito do projeto proposto, visando
avaliar de forma objetiva o funcionamento e a aplicabilidade do FPGA como sistema de registro
dos valores de aceleração.
17
2 REFERÊNCIAS HISTÓRICAS E O DISPOSITIVO ESCOLHIDO
Inicialmente, a pouca transmissão de informações feita por meio de sinais elétricos
se dava por meio de sinais analógicos. Tal método, embora eficaz, apresentava grande
sensibilidade a interferências externas. Em 1947, a empresa Bell Laboratories, desenvolvia uma
pesquisa chefiada pelo físico americano William Bradford Shockley Junior. O objetivo de tal
pesquisa era desenvolver um dispositivo com características similares aos Field-Effect
Transistors (FET), entretanto, o que ocorreu foi a criação acidental do transistor, que foi o
grande responsável pelo salto na evolução eletrônica após essa data. Com o desenvolvimento
de diversos tipos de circuitos baseados em transistores, foi possível a criação da teoria de
eletrônica digital, sendo esta, baseada na lógica booleana. Com a grande capacidade de
miniaturização dos transistores, facilmente desenvolveram-se as pastilhas de circuitos
integrados (CI) digitais, que foram progressivamente contando com quantidades maiores de
transistores, permitindo uma maior complexidade dos CIs. (COSTA, 2011).
Sendo assim, é possível afirmar que com a invenção do transistor os projetistas
puderam produzir equipamentos eletrônicos menores, mais versáteis e de maior confiabilidade.
Porém o transistor foi apenas o primeiro passo para um avanço tecnológico ainda maior, a
implementação do circuito integrado monolítico. Os circuitos integrados, com as funções
próprias de um circuito completo, em um espaço comparável ao que antes era ocupado por um
único transistor, estavam convertendo-se nos componentes básicos dos equipamentos
eletrônicos.
Em 1969 outra descoberta importante foi feita, quando a recém criada Intel
Corporation foi chamada para desenvolver um chip dedicado para calculadoras, para a empresa
Busicon. Em resposta, a Intel Corporation desenvolveu um CI genérico, que a partir de uma
sequência de códigos a serem programados, poderia funcionar como uma calculadora, tal
dispositivo ficou conhecido como 4004, e foi o precursor dos microprocessadores atuais. O
4004, embora com um baixo processamento quando comparado com os atuais dispositivos, já
superava o computador eletrônico da época o ENIAC, tendo a grande vantagem de possuir
características ínfimas quando comparado aos aproximadamente 85.000 metros cúbicos de
espaço e as 3 toneladas do ENIAC (ZELENOVSKY, 2006). Mas a versatilidade sofreu um
significativo desenvolvimento com a evolução dos dispositivos lógicos programáveis.
18
Este capitulo segue a seguinte ordem: o tópico 2.1 apresenta o desenvolvimento
tecnológico dos dispositivos lógicos programáveis, o tópico 2.2 faz referência aos fabricantes
de FPGAs e suas histórias e o tópico 2.3 apresenta o kit de desenvolvimento utilizado.
2.1 Dispositivos Lógicos Programáveis
Pouco depois da criação do microprocessador, outra vertente de pesquisa iniciou-
se, a dos Programable Logic Devices (PLD). Diferente dos processadores, que eram
programados com códigos, e realizavam a leitura deles através de um hardware fixo, o PLD se
propunha a realizar uma reconfiguração do hardware.
Os primeiros modelos desses dispositivos são classificados hoje, como Simple
Programable Logic Devices (SPLD). Dentro dessa categoria, se encaixam a Programmable
Array Logic (PAL), a Programmable Logic Array (PLA) e a Generic Array Logic (GAL). Os
dois primeiros dispositivos são os mais simples, constando apenas de matrizes de
interconexões, referente às entradas de portas “E” (AND), conectadas a portas “OU” (OR)
(PEDRONI, 2010).
Figura 2 - Diagrama lógico dos dispositivos PAL, a esquerda, e PLA, a direita.
Fonte: Livro Eletrônica Digital Moderna e VHDL (PEDRONI, 2010)
A diferença básica entre os dois modelos são as interconexões entre a saídas das
portas AND com as entradas das portas OR, que nos PAL são fixas e nos PLA podem ser
19
programadas, como é mostrado na Figura 2. Como é possível constatar, tais dispositivos não
apresentam elementos de lógica sequencial como Flip-Flops (PEDRONI, 2010).
Já os dispositivos GALs, apresentaram uma grande inovação em relação aos seus
antecessores, eles se baseiam na a utilização de macro células, que são blocos formados pela
combinação de outros componentes, como portas “E” (AND), “OU Exclusiva” (XOR),
multiplexadores e Flip-Flops. A Figura 3 expõe o diagrama de blocos das macro células
utilizadas nos dispositivos tipo GAL.
Figura 3 - Diagrama lógico dos dispositivos macro célula, a esquerda, e LE, a direita.
Fonte: Livro Eletrônica Digital Moderna e VHDL (PEDRONI, 2010)
A fim de aumentar o número de macro células dos dispositivos, começou-se a juntar
dispositivos SPLD, através de barramentos que os conectavam a drivers de entrada e saída mais
robustos. Tais dispositivos ficaram conhecidos como Complex Programmable Logic Device
(CPLD). Em alguns fabricantes, diferentes nomenclaturas são dadas aos componentes internos
dos seus dispositivos, como por exemplo na empresa Altera Corporation que nomeia os blocos
de SPLD internos de blocos de matrizes lógicas, do inglês Logic Array Block (LAB), e o arranjo
de interconexões dos LAB de Programmable Interconected Array (PIA). Com o
desenvolvimento dessa tecnologia, passou-se a substituir os LAB constituídos de SPLD do tipo
GAL por um novo componente chamado de elemento lógico, do inglês Logic Element (LE). A
maior diferença entre o LE e seu antecessor é a utilização de uma Look-Up Table (LUT),
diferente do padrão de interconexões utilizado desde as PAL. A LUT padrão utilizava 4
entradas, o que permitia qualquer combinação lógica baseada em 4 sinais, para cada um dos
20
LE, além de possuir alguns elementos básicos como Flip-Flop, portas “OU Exclusivo” (XOR)
e entrada de “vai um” (carry in) utilizadas em operações de soma e subtração. A Figura 3
apresenta um diagrama dos blocos lógicos internos as LEs. Já a Figura 4 apresenta o digrama
da dos dispositivos CPLD que usam tecnologia de LABs baseadas em LEs (PEDRONI, 2010).
Figura 4 - Estrutura interna básica do CLPD, a esquerda, e dos FPGA, a direita.
Fonte: Livro Eletrônica Digital Moderna e VHDL (PEDRONI, 2010)
Com a continua pesquisa nessa área, a empresa Xilinx Incorporated surge com a
tecnologia da Field Programmable Gate Array (FPGA), diferente dos CPLDs desde a sua
estrutura, que se assemelha mais com uma matriz do que o padrão de pilhas utilizados nos
CPLD, como mostrado na Figura 4. Além disso, os blocos são menores, embora mais
sofisticados, e se encontram em maior quantidade. Outra diferença marcante, é a eficiência
relativa dos materiais utilizados na fabricação dos FPGAs, que permitiu uma grande elevação
na frequência de operação destes, sem que houvesse redução na eficiência quando comparado
com o CPLD.
Os componentes da LAB dos FPGAs deixam de ser os LE comuns, observados nos
CPLDs, e passam a ser os módulos lógicos adaptativos, do ingles Adaptative Logic Modules
(ALM), que possuem uma maior quantidade de elementos internos do que as LE. Além disso,
outros blocos são adicionados à arquitetura de FPGA, como o de memória acessada
randomicamente de forma síncrona, do inglês Synchronous Random Acess Memory (SRAM),
para alocação de variáveis; blocos de processadores digitais de sinais, do inglês Digital Signal
Processor (DSP), para a realização de funções de multiplicação referente ao tratamento de
sinais; e os circuitos de controle de clock, o Phased-Lock Loop (PLL) utilizados no
21
gerenciamento do sinal de clock, podendo aumentar ou diminuir sua frequência (PEDRONI,
2010).
2.2 Maiores fabricantes de CPLD e FPGA da atualidade
A empresa Altera Corporation foi fundada na primeira metade da década de 1980,
juntamente com a empresa Xilinx Incorporated. Segundo Pedroni, atualmente, ambas são
responsáveis pela maior parte do mercado de FPGA, mantendo juntas, cerca de 90% do
mercado, embora algumas empresas como a Actel, a Vantils e Lattice, também produzam
dispositivos desse tipo. A Figura 5 apresenta o gráfico dos percentuais de mercado dominado
pelos maiores fabricantes de FPGA em 2010 (JOHNSON, 2011).
Figura 5 - Percentuais de mercado dominado pelos maiores fabricantes de
FPGA em 2010
Fonte: site http://www.fpgadeveloper.com/2011/07/list-and-comparison-of-
fpga-companies.html, acessado em 05 de nov. de2013
Embora tenha sido criada em 1980, apenas em 1984 foi que a empresa Altera
Corporation lançou seu primeiro dispositivo, o EP300, uma PAL simples, mas que oferecia a
característica de reprogramação, o que se mostrou uma vantagem grande para o mercado
(ALTERA, 2011). Uma foto deste dispositivo é apresentada na Figura 6.
22
Figura 6 - Fotografia do dispositivo PAL EP300
da Altera Corporation
Fonte: site da Altera Corporation
Na mesma época em que a Altera Corporation desenvolveu o EP300, a Xilinx
Incorporated lançava, junto com o dispositivo XC2000, uma matriz de elementos lógicos
programáveis, uma ferramenta física de programação inovadora, que permitia ao usuário uma
programação mais simplificada, esta ferramenta ficou conhecida como Xilinx Device Editor
(XDE). Ambas as empresas ainda desenvolveram diversos dispositivos do tipo CPLD. A Tabela
1 e a Tabela 2 apresenta os CPLD da Xilinx e da Altera.
Tabela 1 - Dispositivos CPLD da Xilinx
Características XC9500 CoolRunner XPLA3 CoolRunner II
Nº de pinos de I/O 36 – 192 36 – 260 33 – 270
Bloco básico GAL PLA PLA
Nº de macro células 36 – 288 32 – 512 32 – 512
Nº de Flip-Flops 1 p/ macro célula 1 p/ macro célula 1 p/ macro célula
Frequência de operação 56MHz – 222MHz 135MHz – 213MHz 179MHz – 323MHz
Fonte: Livro Eletrônica Digital Moderna e VHDL (PEDRONI, 2010)
23
Tabela 2 - Dispositivos CPLD da Altera
Características MAX 7000 MAX 3000 MAX II
Nº de pinos de I/O 36 – 212 34 – 208 80 - 272
Bloco básico GAL GAL LAB (10 LE)
Nº de Macro células 32 – 256 32 – 512 192 - 1700
Nº de LE --- --- 240 - 2210
Nº de Flip-Flops 1 p/ macro célula 1 p/ macro célula 1 p/ LE
Frequência de operação 91MHz – 175MHz 116MHz – 227MHz 304MHz
Fonte: Livro Eletrônica Digital Moderna e VHDL (PEDRONI, 2010)
Após a criação do FPGA pela empresa Xilinx Incorporated, a tecnologia de tais
dispositivos se desenvolveu bastante, parte desse desenvolvimento se deu pela grande
concorrência entre as empresas Altera e Xilinx. Atualmente ambas possuem dispositivos de
diversos níveis, desde os CPLD, até FPGA de última geração, como o Virtex 7 da Xilinx e o
Stratix V. A Tabela 3 apresenta a última geração de FPGA produzidos por ambas as empresas,
de acordo com o mercado a que eles são voltados.
Tabela 3 - Características dos FPGAs de última geração das fabricantes Altera e Xilinx
Características Altera Corporation Xilinx Incorporated
Modelo Cyclone V Arria V Stratix V Artix 7 Kintex 7 Virtex 7
Porte das aplicações Pequeno Médio Grande Pequeno Médio Grande
Células lógicas 301.000 504.000 952.000 215.000 480.000 2.000.000
Blocos de memória 12Mb 24Mb 52Mb 13Mb 34Mb 68Mb
Nº de pinos de I/O 480 704 840 500 500 1,200
(1): blocos lógicos configuráveis (Configurable Logic Block – CLB)
Fonte: Catálogos digitais das empresas Altera Corporation e Xilinx Incorporated.
Percebe-se pela Tabela 3 que ambas as empresas apresentam dispositivos para
aplicações de pequeno e médio porte competitivos, havendo diferenciação sensível apenas nos
dispositivos mais avançados, onde percebe-se grande desenvolvimento por parte da empresa
Xilinx.
24
2.3 Kit de desenvolvimento DE0-nano da TERASIC
Dada a forma de encapsulamento comum dos FPGAs, o desenvolvimento de
circuitos embarcados utilizando apenas a pastilha do FPGA, torna-se complexo no que diz
respeito à fabricação da placa de circuito impressa. Por esse motivo, é comum a fabricação de
kits de desenvolvimento baseados em FPGA, que além de conjuntos de pinos, apresentam
diversos periféricos uteis para diversos circuitos. Neste projeto, utilizou-se o kit de
desenvolvimento e educacional DE0-nano fabricado pela empresa Terasic Technologies
Incorporated. A escolha deste modelo de kit foi feita primeiramente por se tratar do mesmo
fabricante de FPGAs adotados pelo departamento de engenharia elétrica da Universidade
Federal do Ceará, além de possui um baixo custo quando comparado com os demais kits de
desenvolvimentos com FPGA da empresa Altera. Além disso, o kit apresenta um CI de
acelerômetro embutido, parte essencial no desenvolvimento do projeto. Uma foto do kit DE0-
nano é mostrada na Figura 7.
Figura 7 - kit de desenvolvimento e estudo DE0-nano da Terasic
Technologies.
Fonte: Site da Terasic Technologies Incorporated (www.terasic.com)
Este kit apresenta características, que permitem sua utilização tanto no
desenvolvimento de protótipos de projetos comerciais baseados em FPGA, quanto para servir
de instrumento de prática em cursos voltados ao ensino das técnicas de utilização de FPGA. Os
componentes deste kit são:
25
Uma FPGA da família Cyclone IV, modelo EP4CE22F17C6N, com 76032 bytes de RAM
interna, 1395 CLBs, 22320 LE e um total de 153 pinos de entrada/saída.
Uma memória do tipo para gravação de códigos permanentes (EPCS64), bem como o chip
USB-Blaster para programação dos componentes da Altera.
Memória SDRAM de 32 MB (IS42S16160D)
Memória EEPROM de 2 KB com comunicação I2C (24LC02B)
Dois conjuntos de 40 pinos, um para cada lado do kit, contendo 2 pinos conectados ao GND,
um à tensão de 3,3 V e um de 5 V.
Acelerômetro de 3 (três) eixos com precisão de 13 bits (ADXL345)
Conversor analógicos digital com 8 (oito) canais de entrada e 12 bits de precisão, com
frequência de conversão entre 50 Ksps e 200 Ksps (ADC128S022)
Um oscilador embutido na placa com frequência de 50 MHz
Sistema de alimentação via USB do tipo mini-AB (5V) e através de 2 pinos de alimentação
externa com nível de tensão entre 3,6 V a 5,7 V.
A escolha pelo fabricante Altera Corporation deve-se ao fato de que as pesquisas
desenvolvidas na Universidade Federal do Ceará, Departamento de Engenharia Elétrica, serem
feitas em FPGAs deste fabricante, o que facilita sua utilização. Já a escolha do kit DE0-nano
não se restringiu apenas por possuir os componentes buscados no projeto, mas pela sua vasta
aplicação em circuitos embarcados. Embora aplicações em FPGA tornarem a fabricação de
placas de circuito impresso mais complexas, elas possuem grande potencial de aplicação dada
a grande variedade e quantidade de componentes internos disponíveis.
26
3 PERIFÉRICOS, PROTOCOLOS E SOFTWARES
Apesar da grande versatilidade dos FPGAs, em quase todos eles a estrutura interna
possui apenas dispositivos digitais. Isto é, todos os blocos passíveis de interconexões que estão
presentes dentro do circuito integrado de um FPGA operam no mesmo nível de tensão lógica,
que podem assumir valores discretos entre 0,9 V e 3,3 V (ALTERA, 2008).
Esta característica dos FPGAs gera uma problemática: quando o circuito baseado
em FPGA tem que interagir com outros sistemas digitais ou mesmo sistemas analógicos, há a
necessidade de utilização de circuitos integrados, que realizem uma interface entre eles.
Existem diversos circuitos integrados para tais finalidades: circuito de ajuste de tensões de
níveis lógicos para interação entre dois dispositivos de tensões diferentes; conversores
analógicos digitais, que realizam a conversão de um sinal de tensão no domínio continuo, para
um conjunto de sinais (bits) em níveis de tensão discreta; dispositivos que fazem a conversão
de variáveis não elétricas (pressão, temperatura, humidade, velocidade de vento, aceleração
estática e dinâmica, dentre outros) em sinais eletrônicos, digitais ou analógicos (barômetro,
termômetro, anemômetro, acelerômetro).
É necessário que sistemas de sensoriamento e controle de processos acessem e
interpretem as variáveis que os cercam. Assim, será apresentado no tópico 3.1 deste capítulo a
forma de implementação, via FPGA, de utilização de um acelerômetro do tipo ADXL345, cujo
protocolo de comunicação é o Serial Interface Protocol (SPI). Já no tópico 3.2 é apresentada a
forma de utilização de Secure Digital Memory Card (SDMC) para o armazenamento dos dados,
sem formatação, via comunicação SPI, e no tópico 3.3 os softwares a serem utilizados na
observação e análise dos dados gravado.
3.1 Acelerômetro digital (ADXL345)
Os dispositivos de medição de aceleração, comumente referenciados como
acelerômetros, podem trabalhar com dois tipos de aceleração: a aceleração estática é referente
à aceleração imposta pela força gravitacional da terra, já a aceleração dinâmica corresponde a
aceleração imposta ao sensor, quando sua estrutura é posta em movimento ou haja um choque
mecânico.
27
Existem vários modelos de acelerômetros, sendo a diferença básica entre estes
dispositivos a forma de operação e o elemento de sensoriamento. A Tabela 4apresenta alguns
modelos de acelerômetros e sua forma de operação.
Tabela 4 - Tipos de acelerômetros
Tipo de
acelerômetro Característica
Capacitivo Possui um sensor capacitivo, que apresentam um valor de tensão
que varia de acordo com a aceleração a ele imposta.
Piezo elétrico Baseado em cristal, e o efeito Piezo elétrico, que consiste na
variação de sua tensão de acordo com a aceleração a que é
submetido
Piezo resistivo Realiza a medição de tensão um material, quando submetido a uma
aceleração.
Efeito Hall A medição da aceleração é baseada na mudança do campo
magnético ao redor do acelerômetro.
Magneto resistivo Mensura variações resistivas devido a variações do campo
magnético ao redor do acelerômetro.
Transferência de
Calor
Baseia-se no gradiente de transferência de calor, e requer
calibragem para o local específico onde será utilizado.
Fonte: Guia prático de acelerômetro (SENSR, 2013).
O modelo de acelerômetro utilizado é do tipo Capacitivo, e sua estrutura básica e
seu princípio de funcionamento são explicados por Sree (2013). O conceito utilizado neste
acelerômetro é baseado em uma massa de prova (m), confinada de forma a possuir liberdade
em apenas um eixo, fisicamente conectada a uma espira com função de amortecimento (k), para
equilibrar parcialmente forças externas, e um sensor capacitivo (c), que registra o deslocamento
da massa de prova em forma de sinal eletrônico. A Figura 8 apresenta um modelo conceitual
da estrutura de um acelerômetro.
28
Figura 8 - Esquemático de um acelerômetro
M
CK
Fonte: Fonte: Elaborado pelo autor.
Quando a força gravitacional, ou uma variação de movimento possuem sentido
paralelo ao eixo livre da massa de prova, haverá um deslocamento, que implicará na variação
do valor da tensão do capacitor piezo cerâmico. Tendo conhecimento do valor de tensão do
capacitor, do peso da massa de prova, da constante de elasticidade da espira, e de atritos
mecânicos, é possível calcular-se os valores da aceleração imposta à massa de prova através
dos demais valores medidos, ao que é dado o nome de acelerômetro.
O acelerômetro a ser utilizado no projeto apresentado neste documento é do
fabricante Analog Devices, modelo ADXL345 (ANALOG, 2010). O encapsulamento deste
dispositivo é do tipo Terminal LGA com 14 pinos, ele é estruturado em 8 bits, mas possui
precisão máxima de 13 bits, com escala de leituras que podem ser de 2, 4, 8, ou 16 vezes o valor
da aceleração da gravidade na terra (g). A estrutura deles é composta por: sensor físico de
aceleração; sensores eletrônicos; conversor analógico digital; filtro digital; sistema de
alimentação, sistema de controle, sistema de armazenagem, sistema de comunicação. A
29
Figura 9 apresenta um diagrama simplificado demonstrando as interconexões
internas do dispositivo (ANALOG, 2010).
30
Figura 9 – Diagrama dos blocos internos do acelerômetro ADXL345
Fonte: Folha de dados do ADXL345
Este acelerômetro, assim como outros sensores no mercado, apresenta uma
estrutura voltada a dispositivos microprocessados, já que utiliza as estruturas de interrupção e
um sistema de armazenamento de dados, elementos característicos de microprocessadores, que
realizam acesso ao dispositivo intercalando-o com outras operações. O ADXL345 é estruturado
por meio de 58 registradores, dos quais 28 são reservados, 6 para a leitura dos dados de
aceleração, os demais servem para o acionamento do dispositivo, configuração do formato de
dados, e ajuste das interrupções configuráveis. A Tabela 5 apresenta os principais registradores
desse dispositivo.
Embora os dados da aceleração de cada um dos três eixos sejam obtidos pela leitura
de dois bytes, apenas parte desses bytes contém dados válidos. A forma como os dados serão
posicionados nesses registradores, bem como a quantidade de bits validos, é definida pelo
registrador DATA_FORMAT.
31
Tabela 5 - Tabela de registradores do ADXL345
Nome Endereço
Tipo Descrição Decimal Hexadecimal
POWER_CTL 45 0x2D Leitura/Escrita Controle de energia
DATA_FORMAT 49 0x31 Leitura/Escrita Formato de dados
DATAX0 50 0x32 Leitura LSB do eixo X
DATAX1 51 0x33 Leitura MSB do eixo X
DATAY0 52 0x34 Leitura LSB do eixo Y
DATAY1 53 0x35 Leitura MSB do eixo Y
DATAZ0 54 0x36 Leitura LSB do eixo Z
DATAZ1 55 0x37 Leitura MSB do eixo Z
LSB: Lower Significative Byte – Byte menos significativo
MSB: Most Significative Byte – Byte mais significativo
Fonte: Folha de dados do ADXL345
Os dispositivos do tipo FPGA possuem uma quantidade bastante elevada de pinos,
o que permitiria facilmente uma comunicação com grande nível de paralelismo com o
acelerômetro. Todavia, como já foi dito, este dispositivo é projetado para interagir com
microprocessadores, de tal forma que a quantidade de pinos necessárias a esta comunicação é
reduzida, a fim de poupar os pinos do microprocessador, que são comumente em menor número
que os pinos dos FPGAs. Desta forma, o ADXL345 apresenta duas classes de comunicações: a
comunicação do tipo Inter-Integrated Circuit (I2C), que possui barramento com apenas dois
pinos, que podem ser conectados a diversos dispositivos, e a comunicação do tipo Serial
Protocol Interface (SPI), este tipo de comunicação possui necessariamente um pino de seleção
do dispositivos, um pino para o clock de referência, e um ou dois pinos para dados. É possível
que apenas um único pino realize a função de transmissão de dados, de tal forma que ele realize
tanto a recepção quanto o envio de dados. Quando os dados de entrada e saída são transmitidos
por pinos diferentes, são necessários 4 pinos para a transmissão. A Figura 10 apresenta um
diagrama simples, indicando o sentido dos dados, das comunicações SPI de 3 e 4 pinos.
(ANALOG, 2010).
32
Figura 10 - Diagrama de comunicações SPI de 3 e
4 pinos do ADXL345
Fonte: Folha de dados do ADXL345
No kit didático utilizado neste trabalho, o DE0-nano produzido pela Terasic, as
conexões fisicas na placa permitem apenas a comunicação do tipo SPI de 3 pinos, uma vez que
apenas os sinais de seleção, clock e entrada de dados são conectados. O protocolo de
comunicação SPI do acelerometro em questão é de 16 bits, e segue o padrão apresentado pelo
diagrama de tempo mostrado na Figura 11 (ANALOG, 2010).
Figura 11 - Diagrama de tempo do protocolo de comunicação SPI de 3 pinos do ADXL345
Fonte: Folha de dados do ADXL345
Neste diagrama o bit R/W refere-se à ação de leitura (W/R=1) ou escrita (W/R=0).
Já os bits A5 à A0 referem-se ao endereço do registrador a ser lido ou escrito, os valores
utilizados para esta variavel são mostrados na Tabela 4. Os bits D7 à D0, são referêntes ao dado,
seja aquele lido do registrador, ou aquele a ser escrito nele. O bit MB indica o acesso de
33
multiplos registradores consecutivos (MB=1), ou não (MB=0). Observando a Figura 11, nota-
se que a comunicação é feita no momento em que há borda de subida no sinal SCLK.
Ao utilizar a função de acesso de multiplos endereços (MB=1), enquanto o sinal
seletor de chip (CS) estiver em nivel lógico zero, serão lidos consecutivamente os 8 bits de cada
registrador, partindo do registrador definido pelos dados de endereço (A5-A0) (ANALOG,
2010).
O acesso implementado ao acelerômetro ADXL345 utiliza a comunicação SPI de
3 pinos com um clock de 5 MHz, a frequência máxima suportada, não utilizando a função
disponibilizada pelo bit MB, sem perda significativa da frequência de aquisição de dados. Mais
a frente, no item 4.23.1, é apresentado mais detalhadamente a forma de utilização do ADXL345.
3.2 Cartão de Memória SD (SDMC)
Outra grande vantagem dos sistemas digitais são os circuitos de armazenamento de
informação, normalmente conhecidas como memória. Em elementos puramente analógicos,
como indutores a capacitores, a energia armazenada tem grande tendência a se dissipar. Já em
elementos digitais, a forma de armazenagem, é feita de forma a reduzir, através de elementos
discretos como chaves, as perdas dos dados de memória. A taxa de dissipação da energia de
memória armazenada é tão pequena, que para a grande maioria das aplicações ela é
desconsiderada (ZELENOVSKY, 2006).
Dentro do universo das memórias digitais, existem duas subdivisões: as memórias
voláteis e as não voláteis. As memórias voláteis são normalmente de maior velocidade, e maior
custo, tais memórias perdem os valores registrados toda vez que são desligadas e, por isso, são
utilizadas apenas para armazenagem de grandes quantidade de dados a serem imediatamente
processados. Exemplos de memórias voláteis são as Static Randon Access Memory (SRAM),
Dynamic Random Access Memory (DRAM), Synchronous Dynamic Randon Access Memory
(SDRAM) e Content-Addressable Memory (CAM) (PEDRONI, 2010).
Já as memórias não voláteis, embora mais lentas, são mais baratas e possuem a
características de manter os dados registrados, mesmo na falta de alimentação. Desta forma,
são comumente utilizadas para aquisição de dados importantes que não podem ser perdidos em
caso de interrupção de energia. Os modelos mais comuns são as Read-Only Memory (ROM),
Electrically Programmable Read-Only Memory (EPROM) e Electrically Erasable
Programmable Read-Only Memory (EEPROM) (PEDRONI, 2010).
34
O número de dispositivos portáteis para armazenamento de dados digitais aumentou
bastante nos últimos anos. Exemplos desses dispositivos são os pendrives e os cartões de
memória. No primeiro caso, há uma maior utilização no transporte de dados entre dispositivos.
Já os cartões de memória são muito utilizados em dispositivos portáteis, como uma fonte extra
de memória. Tais dispositivos são baseados em memória flash, um tipo específico de memória
EEPROM que possui estrutura de acesso em blocos, o que aumenta sua velocidade em
comparação às demais EEPROMs.
Uma vez que tem-se neste trabalho o objetivo de aquisição e registro dos dados
advindos de um acelerômetro digital de 3 eixos, optou-se pela utilização de um cartão de
memória do tipo SDMC (Security Digital Memory Card). O modelo utilizado é da SanDisk e
possui 2GB.
O SDMC da SanDisk apresenta dois protocolos básicos de comunicação. Um
próprio de cartões SD, com um pino de comando (CMD), um de clock (CLK) e quatro de entrada
e saída de dados (DAT0-3). Já o protocolo utilizado neste projeto é um tipo SPI com 3 pinos,
sendo um de seleção de chip (CS), um de clock (CLK), um de entrada de dados (MOSI) e um
de saída de dados (MISO). A Tabela 6 apresenta os pinos do SDMC e suas funções em ambos
os protocolos de comunicação (SANDISK, 2004).
Ao ser energizado, o SDMC opera através do protocolo SD. Portanto, para que ele
opere através do protocolo SPI é necessário configurá-lo, fazendo o sinal CS igual a zero no
momento de envio do primeiro comando (SANDISK, 2004).
O protocolo SPI é mais lento que o protocolo SD, uma vez que este último tem a
capacidade de envio de 4 bits por ciclo de clock, enquanto o SPI só enviará um único sinal de
dados por ciclo. Todavia, a velocidade de comunicação SPI é suficientemente rápida para a
grande maioria das aplicações de registro de dados.
Em ambos os protocolos existem conjuntos de comandos genéricos e específicos
para o interfaceamento com a memória EEPROM. No protocolo SD, a comunicação é feita
através de comandos de início de comunicação e fim de comunicação. Já no SPI, a estrutura de
comunicação se dá da seguinte forma: os comandos são organizadas na forma de 6 bytes que
são enviados ao SDMC, que retorna um toquem de resposta com informações do SDMC e, em
caso de leitura ou escrita de dados, um terceiro conjunto, que pode ter de 4 a 515 bytes, é
transmitido.
35
Tabela 6 - Descrição dos pinos de SDMCs
Pino Protocolo SD Protocolo SPI
Função Tipo Função Tipo
1 DAT3 Entrada/Saída CS Entrada
2 CMD Entrada/Saída MOSI* Entrada
3 GND Alimentação GND Alimentação
4 VCC Alimentação VCC Alimentação
5 CLK Entrada CLK Entrada
6 GND Alimentação GND Alimentação
7 DAT0 Entrada/Saída MISO* Saída
8 DAT1 Entrada/Saída Reservado Entrada
9 DAT2 Entrada/Saída Reservado Entrada
MOSI: Master Output Slave Input – Saída do mestre, entrada do escravo
MISO: Master Input Slave Output – Entrada do mestre, saída do escravo
Fonte: Folha de dados da SanDisk (SANDISK, 2004).
Figura 12 - Estrutura da palavra de comando de 6 bytes
1º Byte 2º ao 5º Byte 6º byte
7 6 5 0 31 0 7 0
L H Comando Argumento do comando Byte de CRC H
CRC: Checagem de Redundância Cíclica
Fonte: Adaptado da folha de dados da SanDisk (SANDISK, 2004).
Seguindo o padrão dos cartões de memória SD, a lista de comandos permitidos ao
protocolo SPI do SDMC de 2GB da SanDisk tem 29 elementos, sendo 23 destes comandos
simples, e 6 de aplicações específicas, os quais devem sempre ser precedidos do comando
CMD55 (SANDISK, 2004). Destes comandos, apenas cinco são minimamente necessários ao
acesso à memória. A Tabela 7 apresenta estes cinco comandos.
36
Tabela 7 - Conjunto de comandos de protocolo SPI de SDMCs
Comand
o
Código Argument
o Abreviação Descrição
CMD0 000000 Nenhum GO_IDLE_
STATE Reinicia o SDMC
CMD17 010001
Endereço
do dado
(32)
READ_SINGLE
_BLOCK
Realiza a leitura de um bloco de
dados*
CMD24 011000
Endereço
do dado
(32)
WRITE_
BLOCK
Realiza a escrita de um bloco de
dados*
CMD55 110111 Nenhum APP_CMD Aviso de comando de aplicação
específica
ACMD41 101001 Nenhum SEND_OP_
COND
Aciona o processo de
inicialização do cartão SD
(*): é possível alterar o tamanho do bloco entre valores que vão de 1 a 512 bytes, todavia,
apenas o comando de leitura interpreta corretamente essa modificação, que ao ser utilizada
para escrita de dados, acarretará em erro de escrita.
Fonte: Adaptado da folha de dados da SanDisk (SANDISK, 2004).
A Figura 13 apresenta um diagrama de tempo do envio de comando simples, e a
respectiva resposta obtida.
Figura 13 - Diagrama de tempo de comando simples ao SDMC.
Fonte: Folha de dados da SanDisk (SANDISK, 2004).
A Figura 14 apresenta o diagrama de tempo do envio de comando de leitura, a
resposta correspondente e o bloco de dados obtidos na leitura. Já a Figura 15 mostra o diagrama
de tempo do comando de escrita, respostas correspondente e envio dos dados a serem escritos.
37
Figura 14 - Diagrama de tempo de comando de leitura ao SDMC
Fonte: Folha de dados da SanDisk (SANDISK, 2004).
Figura 15 - Diagrama de tempo de comando de escrita ao SDMC
Fonte: Folha de dados do SanDisk (SANDISK, 2004).
Através do protocolo de comunicação SPI o acesso ao SDMC torna-se uma parte
simples do projeto, e por isso é comum a sua utilização, mesmo em sistemas cuja a velocidade
de aquisição não é requer um acesso tão rápido à memória.
Uma vez que o kit DE0-nano não apresenta soquete para SDMC, foi necessária a
utilização de um módulo de cartão SD, para realizar os contatos entre os terminais do SDMC e
os pinos do kit de FPGA. A Figura 16 apresenta o módulo utilizado.
Figura 16 - Módulo adaptativo de cartão SD
Fonte: Site do vendedor: http://www.msseletronica.com/.
Acessado em 12/10/2013
38
3.3 Softwares utilizados
Em alguns sistemas o processamento de dados ocorre diretamente no dispositivo
embarcado, todavia em muitos a complexidade, ou mesmo a finalidade proposta do sistema,
requer uma análise em outros dispositivos, exemplo: computadores. Desta forma, além da
aquisição dos dados do sensor no cartão de memória SD, são necessárias ferramentas que
permitam tal análise.
A grande maioria dos dispositivos portáteis que usam cartões de memória SD utiliza
formato FAT32, isto permite que os arquivos gravados pelos dispositivos no cartão, sejam
reconhecidos por outros, em especial micro computadores, onde esses arquivos podem ser
melhor observados. Todavia, dado que a forma de programação proposta neste documento
baseia-se exclusivamente em programação de hardware, utilizar tal formatação na escrita de
dados no SDMC tornar-se-ia mais complexo. Desta forma, opta-se pela gravação direta, isto é,
os dados são armazenados nos endereços físicos da memória, o que não permite uma correta
interpretação desses dados por um micro computador.
Figura 17 - Interface do software HxD para leitura de endereços físicos de discos
Fonte: Capturado pelo autor
39
Buscando contornar esta problemática, opta-se pela utilização do Software livre
HxD – Freeware Hex Editor and Disk Editor. Este software de fácil utilização, permite ao
usuário acessar os endereços físicos de dispositivos de memórias de um computador, como
discos rígidos e pendrives. A Figura 17 apresenta a janela do software HxD, onde estão
apresentados os valores de endereços físicos de um disco removível formato FAT32
Figura 18 - Código em MATLAB para leitura e plotagem de dados
clear all; close all; clc;
% ETAPA 01 - LEITURA DO ARQUIVO .txt.
celula = importdata('09-11-2013-003 - com media.txt');
texto = char(celula);
tamanho = length(texto);
n = tamanho/(5*4)
% ETAPA 02 - DEFINIÇÃO DE VARIAVEIS
g=9.80665; t=0:0.1:n/10;
acc_x=zeros(n,1); acc_y=zeros(n,1); acc_z=zeros(n,1); sum=zeros(n,1);
word = 1; data = 1; index=1;
% ETAPA 03 - CONVERSÃO, ORGANIZAÇÃO E ESCALONAGEM DE DADOS
while word <= tamanho;
valor = texto(word:word+3);
valor = hex2dec(valor);
if valor>=2^15
valor=valor-2^16;
end
if data==1
acc_x(index) = valor*(g/(2^8));
elseif data==2
acc_y(index) = valor*(g/(2^8));
elseif data==3
acc_z(index) = valor*(g/(2^8));
elseif data==4
sum(index) = 100*((acc_x(index)^2 + acc_y(index)^2 + acc_z(index,1)^2)^(1/2))/g;
data=0;
index=index+1;
end
data=data+1;
word = word + 5;
end
% ETAPA 04 - PLOTAGEM DOS GRÁFICOS DOS DADOS DE ACELERAÇÃO
figure(1)
subplot(2,1,1) plot(t,acc_x,'red')title('Aceleração nos eixos X, Y e Z')
hold onsubplot(2,1,1) plot(t,acc_y,'blue')
hold on subplot(2,1,1) plot(t,acc_z,'green')
xlabel('tempo (s)') ylabel('aceleração(m/s²)')
legend('Eixo X','Eixo Y','Eixo Z')
subplot(2,1,2) plot(t,sum,'black')xlabel('tempo(s)')ylabel('%')
title('Soma das acelerações em X, Y e Z')
Fonte: Elaborado pelo autor
40
Através deste software é possível obter os bytes de cada endereço de memória física
e a partir deles, formar um arquivo de texto no formato .txt. A partir destes arquivos é possível
realizar a análise dos dados. Para isso, propõe-se o desenvolvimento de uma aplicação em
software MATLAB, que permita uma fácil compreensão dos resultados. O código apresentado
na Figura 18 realiza a leitura do arquivo de texto com extensão do tipo .txt, dividindo-o em 3
variáveis: acc_x, acc_y e acc_x, referentes à aceleração de cada um dos três eixos. O 4º par de
byte lido no txt é sempre descartado, devido ao protocolo de gravação do SDMC, onde é
acrescido um par de byte, para que o conjunto de dados gravados seja divisor dos 512 bytes,
referentes ao número de pares de byte dos blocos de escrita do SDMC.
A partir da utilização dos protocolos de comunicação do acelerômetro e do cartão
SD, e do código em MATLAB apresentados neste Capitulo é realizada a implementação da
aplicação proposta, que é apresentada a seguir no Capitulo 4.
41
4 APLICAÇÃO PRÁTICA
Para demonstrar, um modelo para futuras reproduções, este trabalho apresenta um
código em linguagem VHDL cuja a finalidade é realizar a aquisição de dados de um sensor
acelerômetro e em seguida registrar os valores lidos, a uma taxa de amostragem genérica, em
uma memória flash, não volátil.
A transcrição direta do código, fornecido no Apêndice, já torna possível a
reprodução da aplicação, todavia, vislumbrando um melhor entendimento, são apresentados
nesta seção, breves explicações do código, através de trechos de códigos e fluxogramas.
O Capitulo 4 é estruturado da seguinte maneira: no tópico 4.1 é apresentado o
algoritmo geral, referente à junção dos algoritmos de comunicação com o cartão SD e com o
acelerômetro e o tratamento dos dados. O tópico 4.2 apresenta o algoritmo implementado para
a comunicação com o acelerômetro. O tópico 4.3 o algoritmo de comunicação com o cartão
SD, e o 4.4 o algoritmo para amostragem de dados. Por fim, no tópico 4.5 são apresentados os
resultados obtidos.
4.1 Algoritmo geral
Uma vez que a linguagem VHDL define programação de hardware, sua estrutura é
concorrente, isto é, cada linha de instrução é “executada” ao mesmo tempo, já que na prática o
que cada linha de código representa, são as conexões físicas entre os dispositivos, e não uma
linha de código a ser executado. Devido a peculiaridade desta linguagem, faz-se necessário a
utilização do comando Process para permitir a implementação de protocolos de comunicação
serial.
O comando Process é um comando paralelo que cria uma área de código sequencial.
Este comando utiliza dispositivos do tipo Flip-Flop, para sintetizar circuitos lógicos
sequenciais, isto é, que possuem memória. Através de um circuito sequencial é possível
implementar circuitos que realizem envios de dados de acordo com os protocolos a serem
utilizados. A Figura 19 apresenta a estrutura do comando Process, na qual as variáveis da lista
de sensibilidade são as responsáveis pela execução do comando Process e seus sub comandos,
similar à finalidade de um sinal de clock em um dispositivo Flip-Flop (D’AMORE, 2012).
42
Figura 19 - Estrutura do comando Process
Abc: PROCESS (lista de sensibilidade)
-- parte_de_declaração_do_process
-- declaração_de_tipo_e_subtipo;
-- declaração_de_constante;
-- declaração_de_variável;
-- declaração_de_pseudônimo;
-- não é permitido: declaração_de_sinal e declaração_de_variável_compartilhada
BEGIN
--parte_de_comandos_sequenciais
-- comando_sequencial;
-- comando_sequencial;
. .
-- comando_sequencial;
END PROCESS abc;
Fonte: Reprodução do livro VHDL – Descrição e síntese de circuitos digitais d’Amore (2012)
Outro comando básico recorrente no código de aplicação proposto é o Case. Este
tipo de comando é exclusivo de regiões de código sequencial, ou seja, interno a comandos do
tipo Process. Ele se assemelha bastante com o comando If, que já é utilizado em várias
linguagens de programações, diferenciando-se no uso obrigatório da declaração de ação para
cada um dos possíveis casos da variável de controle. O comando Case é a forma mais utilizada
para circuitos baseadas em maquinas de estados. A Figura 20 apresenta a estrutura geral do
comando Case. (D’AMORE, 2012).
Figura 20 - Estrutura do comando Case
CASE expressão_de_escolha IS -- expressão_de_escolha
WHEN condição_1 => comando_a -- condição_1
WHEN condição_2 => comando_b;comando_c; -- condição_2
WHEN condição_3 | condição_4 => comando_d -- condição_3 ou condição_4
WHEN condição_5 TO condição_9 => comando_d; -- condição_5 até condição_9
WHEN OTHERS => comando_e; comando _f; -- condições restantes
END CASE;
Fonte: Reprodução do livro VHDL – Descrição e síntese de circuitos digitais d’Amore (2012)
Tendo sido feita estas considerações, parte-se para a estrutura geral do código. O
código é estruturado através de três comandos Process, um para cada núcleo de processamento.
O primeiro é referente à comunicação SPI com o cartão SD, já o segundo realiza a comunicação
SPI com o sensor acelerômetro, e o último tem o objetivo de amostrar e tratar o sinal lido. A
Figura 21 apresenta um diagrama de blocos genérico, que representa a estrutura do código
VHDL proposto.
43
Figura 21 - Estrutura do código em blocos de Process
Case de variação do
clock (35 estados)
{
Na primeira
condição:
Case de seleção de
comando (8
estados)
(defineção de rw,
mb, addr e reg)
---------------------------
Na ultima condição:
Case de recepção
de dados (8
estados)
(defineção datax,
datay e dataz)
}
Case de comandos (15
estados)
{
Primeiras
condições:
Inicializam o cartão
SD e entram em
estado IDLE
---------------------------
Condição de IDLE:
Espera a leitura do
sinal wr=1, para
realizar a escrita
dos 512 bytes de
dados.
---------------------------
Demais condições:
Após a escrita de
dados, retorna à
condição IDLE
}
Case de amostragem
(100 estados)
{
Do 1º ao 99º estado:
Somatório das
amostras, para o
calculo da média
---------------------------
Ultimo estado:
Calculo da média;
Case de registro
dos 512 bytes (64
estados)
{
Registro dos 512
bytes;
No ultimo estado,
envio do sinal de
escrita (wr=1)
}
}
Acelerometro:process Amostra:ProcessCartao_sd:process
Fonte: Elaborado pelo autor.
Partindo desta estrutura geral é possível realizar uma especificação de cada um dos
três Process, visando esclarecer melhor o funcionamento deles.
4.2 Algoritmo Acelerômetro
O dispositivo acelerômetro utilizado foi o ADLX345, uma vez que este já se
encontrava disponível no kit didático adotado reduzindo a complexidade da implementação do
projeto proposto. Dentre as aplicações possíveis para este dispositivo destaca-se o controle de
equilíbrio. Neste tipo de aplicação apenas a aceleração estática, referente a gravidade, é
relevante, sendo a aceleração dinâmica, advinda de forças mecânicas, desconsiderada. Em
determinados sistemas sua própria estrutura impede que acelerações dinâmicas sejam lidas pelo
acelerômetro, todavia, em sistemas onde a movimentação do dispositivo é livre, faz-se
necessário o tratamento dos dados para que seja retirada, ou reduzida a um nível aceitável, a
componente da aceleração dinâmica.
44
Na aplicação proposta, a leitura do acelerômetro ADXL345 é feita através do
protocolo SPI de três pinos. O código que realiza a comunicação é estruturado todo interno a
um Process, dentro do qual se localiza um comando Case, com mais dois Cases internos uns
aos outros. O Process possui em sua lista de sensibilidade um sinal de clock, com frequência
igual a 2x a frequência máxima do clock do ADXL345, já que cada estado do case indica uma
borda de subida, ou descida do clock. O Case principal realiza o protocolo propriamente dito,
já os dois Cases internos realizam a comutação entre os comandos de escrita e leitura, e
recepção de dados lidos, respectivamente. A Figura 22 apresenta um fluxograma para explicar
de forma simplificada o funcionamento do código de comunicação com o acelerômetro.
Figura 22 - Fluxograma do protocolo de comunicação SPI do acelerômetro ADXL345
Inicio
CASE K IS:
define os sinais
ADDRESS,
RW, MB e REG
Sinal de dados
recebe RW [1]Se K=3:
Sinal de dados
recebe MB [1]
DATAx
LSB
recebe
DATA
Sinal de dados
recebe
ADDRESS [6]
DATA[8]
recebe sinal de
dados
Se RW=1:
K=K+1
Não
Sim
Sinal de dados
recebe REG [8]
Não
Se K=4:
Não
Se K=5:
Não
Se K=6:
Não
Se K=7:
Não
Se K=8:
Sim
Sim
DATAx
MSB
recebe
DATA
Sim
DATAy
LSB
recebe
DATA
Sim
DATAy
MSB
recebe
DATA
Sim
DATAz
LSB
recebe
DATA
Sim
DATAz
MSB
recebe
DATA
K=K+1
K=3
Fonte: Elaborado pelo autor.
45
O fluxograma da Figura 22 mostra que o procedimento de comunicação do
acelerômetro se dá da seguinte forma: um Case define os valores de endereço a ser acessado,
se o comando será de escrita ou leitura e o que será gravado caso seja escrita. Em seguida inicia-
se o processo de comunicação, enviando-se o sinal de escrita/leitura (RW), multi byte acesso
(MB) e endereço são enviadas bit a bit ao acelerômetro. Caso o comando seja de escrita,
enviam-se os dados a serem registrados (REG), caso contrário, os dados lidos são gravados na
variável de dados (DATA), e então registrada em um dos 6 registradores de aceleração dos 3
eixos, de acordo com o valores definidos no Case inicial, a partir deste ponto, repete-se as
leituras dos 6 registradores, para atualização dos mesmos.
4.3 Algoritmo do cartão SD
O algoritmo de gravação do SDMC é uma modificação, que simplifica, o código
genérico de comunicação com o SDMC, desenvolvido pelo engenheiro Steven J. Merrifield e
divulgado em seu site pessoal (MERRIFIELD, 2008). Partindo de tal código, realizaram-se
mudanças de tal forma que o mesmo operasse apenas para a escrita de dados, e de forma a
enviar comandos de escrita de um único bloco de 512 bytes, por sinal de escrita.
O fluxograma apresentado na Figura 23, descreve de forma gráfica e simplificada, o
procedimento realizado pelo código de escrita do SDMC. Inicialmente o cartão SD é
inicializado em comunicação SPI através do envio de 80 pulsos de clock com o sinal CS em
nível lógico zero. Em seguida, já em protocolo SPI, é enviado o comando 0, que faz com que o
cartão SD entre em espera. Após, são enviados os comandos 55, para indicar o comando
especial que virá em seguida, daí envia-se o comando especial 41, que realiza a inicialização
do cartão SD, caso a resposta indique um correto funcionamento, o cartão SD volta ao estado
de espera, e se mantem até que um comando de escrita seja enviado (wr=1). No momento em
que o comando de escrita é enviado, o protocolo de registro é seguido, enviando os 512 bytes a
serem registrados na memória, retornando ao modo de espera ao final da gravação.
46
Figura 23 - Fluxograma do código de escrita do SDMC
Inicio
Estado=RST: variaveis são
inicializadas e Estado recebe
INIT
Estado=INIT: sinal de
CS=0 por 80 clocks
(habilita comunicação SPI)
Estado=CMD0:
Entra em modo de espera
Estado=CMD55:
Avisa que o próximo
comando é de Aplicação
Específica
Estado=CMD41:
Aplicação especifica para
ativar a inicialização do
cartão SD
Se miso=1
Estado=POLL_CMD:
Verifica o termino da
inicialização.
Sim
Estado=:IDLE
Estado de espera por
comando de escrita
Se wr=1
Não
Estado=WRITE_BLOCK_CMD (CMD24): Envia o sinal de escrita de
bloco de 512 bytes
Sim
Estado=WRITE_BLOCK_INIT:Inicia o envio de bytes (byte_counter=512)
Estadi=WRITE_BLOCK_DATAEnvia um byte e faz
byte_counter=byte_counter-1
Se Byte_counter=0
Não
Sim
Fonte: Elaborado pelo autor.
4.4 Algoritmo de tratamento e amostragem
A amostragem de dados é realizada através da leitura, temporizada, dos
registradores responsáveis pelo armazenamento dos dados de aceleração obtidos do
acelerômetro. O algoritmo de comunicação com o acelerômetro é formulado de maneira que os
dados sejam continuamente lidos, na maior frequência de comunicação possível. Desta forma,
47
a frequência do comando de sensibilidade deste Process, sendo inferior a frequência de
transmissão de dados, e que será a responsável por definir a frequência de amostragem.
Além de definir a frequência de amostragem, este Process é responsável por
tratamentos dos dados, sendo possível a aquisição de N dado (subamostras) a serem tratados
para a representação de um único dado amostrado. Outra função é a de organizar os dados em
um registrador de 512 bytes, o qual será utilizado na gravação do SDMC, já que o comando
para escrever, realiza a gravação de blocos de 512 bytes.
Partindo disto, algumas considerações devem ser feitas: a frequência de
amostragem definida foi de 10 Hz, ou seja, um dado a cada 0,1 segundo; a frequência do clock
que realiza a sensibilidade do Process de amostragem é de 50 MHz; o número de sub amostras
no caso onde elas são utilizadas é de 100, o número de variáveis a serem registradas são três,
referente aos três eixos, sendo cada uma com 16 bits. O tamanho do registrador é de 512 bytes,
ou 256 variáveis de 16 bits. Uma vez que o número de variáveis (3x16 bits) não é um divisor
para o tamanho do bloco a ser gravado no SDMC (2x256), utiliza-se uma quarta variável,
equivalente ao hexadecimal AAh, preenchendo dois bytes a cada conjunto de amostra das 3
variáveis.
Desta forma, a Equação 01 representa a formula de cálculo do divisor de frequência
a ser utilizado.
𝑓𝑟𝑒𝑞. 𝑑𝑒 𝑎𝑚𝑜𝑠𝑡𝑟𝑎𝑔𝑒𝑚 =𝑓𝑟𝑒𝑞. 𝑑𝑜 𝑐𝑙𝑜𝑐𝑘
𝑁º 𝑑𝑒 𝑠𝑢𝑏 𝑎𝑚𝑜𝑠𝑡𝑟𝑎𝑠 ∗ 𝑑𝑖𝑣𝑖𝑠𝑜𝑟 𝑑𝑒 𝑓𝑟𝑒𝑞. (4.1)
Para o caso em que não há tratamento do sinal obtido, temos o valor do divisor dado
por:
10 𝐻𝑧 =50 𝑀𝐻𝑧
1 ∗ 𝑑𝑖𝑣𝑖𝑠𝑜𝑟 𝑑𝑒 𝑓𝑟𝑒𝑞. (4.2)
𝑑𝑖𝑣𝑖𝑠𝑜𝑟 𝑑𝑒 𝑓𝑟𝑒𝑞. =50 𝑀𝐻𝑧
10 𝐻𝑧= 5.000.000 (4.3)
Já para o caso, onde há um tratamento de dados, utilizando 100 sub amostras, o
divisor de frequência é calculado da seguinte forma:
10 𝐻𝑧 =50 𝑀𝐻𝑧
100 ∗ 𝑑𝑖𝑣𝑖𝑠𝑜𝑟 𝑑𝑒 𝑓𝑟𝑒𝑞. (4.4)
𝑑𝑖𝑣𝑖𝑠𝑜𝑟 𝑑𝑒 𝑓𝑟𝑒𝑞. =50 𝑀𝐻𝑧
10 𝐻𝑧 ∗ 100= 50.000 (4.5)
48
Embora a taxa de amostragem seja de 10 Hz, devido o SDMC registra apenas
através de blocos de 512 bytes, o tempo de registro dos dados não é de 0,1. A frequência com
que os dados são registrados no SDMC é dado pela Equação (06).
𝑓𝑟𝑒𝑞. 𝑑𝑒 𝑟𝑒𝑔𝑖𝑠𝑡𝑟𝑜 =(2 ∗ 𝑣𝑎𝑟𝑖á𝑣𝑒𝑖𝑠) ∗ 𝑓𝑟𝑒𝑞. 𝑑𝑒 𝑎𝑚𝑜𝑠𝑡𝑟𝑎𝑔𝑒𝑚
𝑏𝑦𝑡𝑒𝑠 𝑑𝑜 𝑟𝑒𝑔𝑖𝑠𝑡𝑟𝑎𝑑𝑜𝑟 (4.6)
𝑓𝑟𝑒𝑞. 𝑑𝑒 𝑟𝑒𝑔𝑖𝑠𝑡𝑟𝑜 =(2 ∗ 4 𝑏𝑦𝑡𝑒𝑠) ∗ 10 𝐻𝑧
512 𝑏𝑦𝑡𝑒𝑠= 0,15625 𝐻𝑧 (4.7)
Sendo a frequência de registro igual a 0,15625 Hz, o tempo entre cada registro é de
6,4 segundos. Desta forma, após a aquisição dos dados, é recomendado que sejam esperados
6,4 segundos antes de remover o SDMC, a fim de garantir que os últimos dados obtidos sejam
realmente registrados neste.
Além da frequência de aquisição de dados, o Process de amostragem também
define quais tratamentos a serem realizados nos dados obtidos. Vislumbrando demonstrar esta
propriedade, o código desenvolvido foi modificado, a fim de apresentar um algoritmo para
realizar a média de 100 dados amostrados a cada 0,01 segundo, resultando em um dado
amostrado a ser registrado, a cada 0,1 segundo. O trecho de código apresentado na Figura 24,
apresenta um algoritmo para cálculo de média aritmética em linguagem VHDL.
Figura 24 - Algoritmo em linguagem VHDL para tratamento por média
-- aceleração: Valor de entrada
-- n: número de amostras da entrada
-- acumulador: somador dos n valores de entrada
media: PROCESS (lista_de_sensibilidade)
-- definição de variáveis
BEGIN
--
CASE contador IS
WHEN 0 => acumulador:= aceleração;
WHEN 1 TO n-1 => acumulador:= acumulador + aceleração;
WHEN n => acumulador:= acumulador /n
END CASE;
n<=n+1;
--
END PROCESS media; Fonte: Elaborado pelo autor.
49
4.5 Análise dos resultados
Buscando apresentar dados reais e na falta de um dispositivo que permitisse um
controle da posição do acelerômetro, foi implementado um protocolo, para a movimentação do
sensor, visando a aquisição de dados para efeito de comparação entre os resultados obtidos com
o tratamento via cálculo da média aritmética de 100 valores, e dos dados sem tratamento,
permitindo a percepção da redução de ruído.
Desta forma, tomou-se como padrão a seguinte sequência de rotação do sensor
acelerômetro:
Inicialmente o mesmo é posicionado com o eixo z paralelo à gravidade, de tal forma
que a leitura feita neste eixo seja positiva, e as dos eixos x e y sejam próximas a zero.
O sensor é girado 180º em torno do eixo y, de forma que o e o eixo z passe a ficar
em sentido contrário ao da gravidade.
O sensor retorna a posição inicial e repete o segundo movimento, girando agora em
todo do eixo x. A Figura 25 Apresenta por meio de imagens 3D este procedimento.
Seguindo este padrão de movimentação, realizou-se amostragem de dados em
ambos os modelos: sem tratamento e com tratamento por média. A Figura 26 e a Figura 27
apresentam os gráficos obtido através do aplicativo desenvolvido em plataforma MATLAB,
referentes aos códigos sem e com tratamento, respectivamente. Em ambos os gráficos é possível
perceber a coerência entre os dados e a movimentação de ensaio.
Na Figura 26 e na Figura 27 são apresentados dois sub gráficos. Os primeiros sub
gráficos apresentam as plotagens dos dados de aceleração dos três eixos, já os segundos sub
gráficos são referentes à soma vetorial dos três eixos, que, uma vez que o experimento busca
eliminar o efeito da aceleração dinâmica, deve, teoricamente, manter seu valor fixo no valor da
constante de gravidade na terra. Os valores dos segundos sub gráficos são dados em função do
erro percentual.
Observando ambos os gráficos é clara a percepção da vantagem em utilizar um
tratamento por média, uma vez que este apresenta um perfil mais suave, e sem as oscilações
ruidosas vistas no gráfico de dados sem tratamento. Observando o segundo sub gráfico de
ambas as figuras, é possível perceber uma melhora do erro do somatório, todavia, percebe-se
que mesmo no gráfico dos dados tratados por média, o erro se apresenta elevado, que indica
que projetos que exijam maior nível de precisão requisitam modelos matemáticos de maior
robustez, o que foge do escopo deste trabalho.
Os resultados obtidos por meio da leitura do cartão SD através do software HxD,
bem como os valores esperados a partir da realização do protocolo de rotação proposto,
mostram que a implementação proposta é funcional. A partir da análise dos dados com
tratamento por média e sem tratamento, observa-se que tratamentos dos dados do acelerômetros
podem, e devem, ser implementados para que seja possível a utilização dos mesmos em
aplicações que demandem altos níveis de precisão.
50
Figura 25 - Gráfico 3D do posicionamento do ADXL345 durante ensaios
Tempo T0 Posição no tempo T1 Posição no tempo T2 Posição no tempo T3
Posição no tempo T4 Posição no tempo T5 Posição no tempo T6 Posição no tempo T7
Posição no tempo T8 Posição no tempo T9 Tempo T10 Tempo T11
Tempo T12 Tempo T13 Tempo T14 Tempo T15
Fonte: Elaborado pelo autor.
51
Figura 26 - Gráfico dos dados de aceleração sem tratamento
Fonte: Elaborado pelo autor.
Figura 27 - Gráfico de dados de aceleração com tratamento por média
Fonte: Elaborado pelo autor.
T0 T1 T2 T4
T6
T8 T10 T12 T14
7
T3 T5 T7
T9 T11 T13 T15
7
52
5 CONCLUSÃO
A aplicação apresentada neste trabalho, bem como a teoria que o embasa, tornam
fácil a reprodução, com a possibilidade de modificação desta, de forma que projetos baseados
em FPGA possam facilmente vincula-la em sua estrutura.
Como objetivado, o projeto proposto mostrou-se funcional em sua totalidade,
apresentando tanto o sistema de comunicação, para aquisição de dados, com o sensor
acelerômetro, quanto o tratamento e registro de tais dados na memória não volátil do tipo flash
presente no cartão SD utilizado.
Dentre as vantagens do método de registro de dado em cartão SD proposto,
encontra-se a possibilidade de realização da aquisição de dados, para validação de projetos,
mesmo em casos onde não seria possível manter um computador fisicamente conectado, para a
captura de dados em tempo real.
Além disso, o uso do sensor acelerômetro ADXL345 apresenta diversas aplicações
possíveis, tendo como proposta de projetos futuros, desde um sistema de controle de
estabilidade de veículos aéreos, como de quadcópteros, até aplicações simples, porém uteis,
como o caso de um mouse de computador baseado em acelerômetro, cujo o funcionamento seria
independente da superfície de trabalho.
Os resultados obtidos pelos experimentos, mostram que algoritmos de tratamento
são indispensáveis a aplicações baseadas neste tipo de sensoriamento, dada a notada diferença
entre os dados sem tratamento e aqueles com um simples tratamento através do cálculo de
média aritmética.
Quanto à tecnologia de FPGAs, observou-se que embora desenvolvida com alto
nível de paralelismo, esta possui ferramentas que permitem facilmente a interação deste, com
dispositivos sequenciais voltados à arquitetura de microprocessadores, o que dá indícios de que
tecnologias baseadas nesse tipo de dispositivo ainda ocuparão grande parte do mercado,
tornando o conhecimento deste tipo de dispositivo, indispensável a um engenheiro eletricista
da área de automação e controle.
53
REFERÊNCIAS
ANALOG Devices. 3-Axis, ±2 g/±4 g/±8 g/±16 g Digital Accelerometer: ADXL345
Datasheet. Norwood: Analog Devices, 2010. Disponível em:
http://www.analog.com/static/imported-files/data_sheets/ADXL345.pdf. Acesso em
27/12/2013.
ALTERA Corporation. Technology Milestones. Altera.com. 2011. Disponível em:
http://www.altera.com/corporate/about_us/history/abt-history.html?GSA_pos=6&WT.
oss_r=1&WT.oss=history . Acesso em: 10 de out. 2013.
ALTERA Corporation. White Paper: Voltage Regulator Section for FPGAs. Versão 1.0. San
Jose, Califórnia, 2008, 8 p. Disponível em: http://www.altera.com/literature/wp/wp-01071-
voltage-regulator-selection-fpgas.pdf. Acesso em 27/12/2013.
COSTA, Cesar da; MESQUITA, Leonardo; PINHEIRO, Eduardo. Elementos de Lógica
Programável com VHDL e DSP: Teoria & Prática. São Paulo: Érica, 2011. 269 p.
D’AMORE, Roberto, Vhdl - Descrição e Síntese de Circuitos Digitais, Rio de Janeiro, LTC,
2ª Edição, 2012.
JOHNSON, Jeff, List and comparison of FPGA companies. FPGA developer. 2011.
Disponível em http://www.fpgadeveloper.com/2011/07/list-and-comparison-of-fpga-
companies.html. Acesso em: 05 de nov. 2013.
MERRIFIELD, Steven J. VHDL SD card interface. 2008. Disponível em
http://stevenmerrifield.com/tools/sd.vhd. Acesso em 27/12/2013.
PEDRONI, Volnei A. Eletrônica Digital Moderna e VHDL. Rio de Janeiro: Elsevier, 2010.
619 p. Tradução de Arlete Simille Marques.
SANDISK Corporation. SanDisk Secure Digital Card: Product Manual, versão 2.2,
Sunnyvale, Califórnia, 2004, 123 p. Disponível em:
http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Components/General/SDSpec.pdf. Acesso em
27/12/2013.
SENSR. Practical guide to accelerometers. 2013. Disponível em
http://www.sensr.com/pdf/practical-guide-to-accelerometers.pdf. Acesso em 27/12/2013
SREE, S. S. Digital Pen Ruler. 2013. 69 f. TCC (Graduação) - Curso de Electronics And
Communication Engineering, Department Of Electronics & Communication Engineering,
Aditya Engineering College, Surampalem, 2013. Cap. 5. Disponível em:
http://pt.scribd.com/doc/129882236/DOCUMENTATION-docx. Acesso em 27/12/2013.
ZELENOVSKY, Ricardo e MENDONÇA, Alexandre, PC: Um Guia Prático de Hardware e
Interfaceamento, Rio de Janeiro, MZ Editora, 2006
54
APÊNDICE – CÓDIGO DE LEITURA DE ACELEROMETRO E ESCRITA EM
SDMC, EM VHDL
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity main is
generic(
size_acc: natural:=13;
-- one start byte, plus 512 bytes of data, plus two FF end bytes (CRC)
WRITE_DATA_SIZE : integer := 515 -- 2 bytes data storage
);
port (
--spi-3:acelerometro
acc_cs, acc_sclk: out std_logic;
acc_din: inout std_logic;
--spi-4:SD card
sdcard_cs : out std_logic;
sdcard_mosi : out std_logic;
sdcard_miso : in std_logic;
sdcard_sclk : out std_logic;
--interface sclk
switch: in std_logic_vector(3 downto 0);
button: in std_logic_vector(1 downto 0);
led: out std_logic_vector(7 downto 0);
-- 50 Mhz clock
clk_50_in : in std_logic
);
end main;
architecture do of main is
type states is (
RST,
INIT,
CMD0,
CMD55,
CMD41,
POLL_CMD,
IDLE, -- wait for read or write pulse
SEND_CMD,
RECEIVE_BYTE_WAIT,
RECEIVE_BYTE,
WRITE_BLOCK_CMD,
WRITE_BLOCK_INIT, -- initialise write command
55
WRITE_BLOCK_DATA, -- loop through all data bytes
WRITE_BLOCK_BYTE, -- send one byte
WRITE_BLOCK_WAIT -- wait until not busy
);
type data_array is array (512 downto 1) of std_logic_vector(7 downto 0);
signal wr : std_logic;
signal dm_in : std_logic:='1'; -- data mode, 0 = write continuously, 1 = write single
block
signal state: states:=RST;
signal return_state : states;
signal sclk_sig : std_logic := '0';
signal cmd_out : std_logic_vector(55 downto 0):=x"FFFFFFFFFFFFFF";
signal recv_data : std_logic_vector(7 downto 0);
signal address : std_logic_vector(31 downto 0):=x"00000000";
signal cmd_mode : std_logic := '1';
signal data_mode : std_logic := '1';
signal response_mode : std_logic := '1';
signal data_sig : std_logic_vector(7 downto 0) := x"00";
signal data:data_array;
signal clk_50 : std_logic;
signal acc_x, acc_y, acc_z: integer range -(2**size_acc) to 2**size_acc-1:=0;
begin
sdcard_sclk <= sclk_sig;
sdcard_mosi <= cmd_out(55) when cmd_mode='1' else data_sig(7);
with switch(3) select
clk_50<=clk_50_in when '1',
'0' when others;
cartao_sd:process(clk_50)
variable byte_counter : integer range 0 to WRITE_DATA_SIZE;
variable bit_counter : integer range 0 to 160;
begin
data_mode <= dm_in;
if rising_edge(clk_50) then
case state is
when RST =>
sclk_sig <= '0';
cmd_out <= (others => '1');
address <= x"00000000";
byte_counter := 0;
cmd_mode <= '1'; -- 0=data, 1=command
response_mode <= '1'; -- 0=data, 1=command
56
bit_counter := 160;
sdcard_cs <= '1';
state <= INIT;
when INIT => -- CS=1, send 80 clocks, CS=0
if (bit_counter = 0) then
sdcard_cs <= '0';
state <= CMD0;
else
bit_counter := bit_counter - 1;
sclk_sig <= not sclk_sig;
end if;
when CMD0 =>
cmd_out <= x"FF400000000095";
bit_counter := 55;
return_state <= CMD55;
state <= SEND_CMD;
when CMD55 =>
cmd_out <= x"FF770000000001"; -- 55d OR 40h = 77h
bit_counter := 55;
return_state <= CMD41;
state <= SEND_CMD;
when CMD41 =>
cmd_out <= x"FF690000000001"; -- 41d OR 40h = 69h
bit_counter := 55;
return_state <= POLL_CMD;
state <= SEND_CMD;
when POLL_CMD =>
if (recv_data(0) = '0') then
state <= IDLE;
else
state <= CMD55;
end if;
when IDLE =>
if (wr='1') then
state <= WRITE_BLOCK_CMD;
else
state <= IDLE;
end if;
when SEND_CMD =>
if (sclk_sig = '1') then
if (bit_counter = 0) then
state <= RECEIVE_BYTE_WAIT;
57
else
bit_counter := bit_counter - 1;
cmd_out <= cmd_out(54 downto 0) & '1';
end if;
end if;
sclk_sig <= not sclk_sig;
when RECEIVE_BYTE_WAIT =>
if (sclk_sig = '1') then
if (sdcard_miso = '0') then
recv_data <= (others => '0');
if (response_mode='0') then
bit_counter := 3; -- already read bits 7..4
else
bit_counter := 6; -- already read bit 7
end if;
state <= RECEIVE_BYTE;
end if;
end if;
sclk_sig <= not sclk_sig;
when RECEIVE_BYTE =>
if (sclk_sig = '1') then
recv_data <= recv_data(6 downto 0) & sdcard_miso;
if (bit_counter = 0) then
state <= return_state;
else
bit_counter := bit_counter - 1;
end if;
end if;
sclk_sig <= not sclk_sig;
when WRITE_BLOCK_CMD =>
cmd_mode <= '1';
if (data_mode = '0') then
cmd_out <= x"FF" & x"59" & address & x"FF"; --
continuous
else
cmd_out <= x"FF" & x"58" & address & x"FF"; --
single block
end if;
bit_counter := 55;
return_state <= WRITE_BLOCK_INIT;
state <= SEND_CMD;
when WRITE_BLOCK_INIT =>
cmd_mode <= '0';
byte_counter := WRITE_DATA_SIZE;
state <= WRITE_BLOCK_DATA;
58
when WRITE_BLOCK_DATA =>
if byte_counter = 0 then
state <= RECEIVE_BYTE_WAIT;
return_state <= WRITE_BLOCK_WAIT;
response_mode <= '0';
else
if ((byte_counter = 2) or (byte_counter = 1)) then
data_sig <= x"FF"; -- two CRC bytes
elsif byte_counter = WRITE_DATA_SIZE then
if (data_mode='0') then
data_sig <= x"FC"; -- start byte, multiple
blocks
else
data_sig <= x"FE"; -- start byte, single
block
end if;
else
-- bit a ser gravado
-------------------------------------------------------------------------------------------
data_sig <= data(byte_counter-2);
end if;
bit_counter := 7;
state <= WRITE_BLOCK_BYTE;
byte_counter := byte_counter - 1;
end if;
when WRITE_BLOCK_BYTE =>
if (sclk_sig = '1') then
if bit_counter=0 then
state <= WRITE_BLOCK_DATA;
else
data_sig <= data_sig(6 downto 0) & '1';
bit_counter := bit_counter - 1;
end if;
end if;
sclk_sig <= not sclk_sig;
when WRITE_BLOCK_WAIT =>
response_mode <= '1';
if sclk_sig='1' then
if sdcard_miso='1' then
if (data_mode='0') then
state <= WRITE_BLOCK_INIT;
else
address <=
std_logic_vector(unsigned(address) + x"200");
state <= IDLE;
end if;
59
end if;
end if;
sclk_sig <= not sclk_sig;
when others => state <= IDLE;
end case;
end if;
end process cartao_sd;
acelerometro:process(clk_50)
variable count: natural range 0 to 100:=0;
variable rw,mb: std_logic:='0';
variable addr,reg,data: std_logic_vector(7 downto 0):=x"00";
variable datax,datay,dataz: std_logic_vector(12 downto 0):="0000000000000";
variable i: natural range 0 to 35:=0;
variable k: natural range 0 to 8:=0;
begin
if rising_edge(clk_50)then
if(count=10)then count:=0;
case i is
when 0 =>
acc_sclk<='1'; acc_cs<='1';
case k is -- define se é leitura/escrita, qual o endereço, e o que
deve ser escrito
when 0 =>rw:='0';mb:='0';addr:=x"31"; reg:=x"4f";
when 1 =>rw:='0';mb:='0';addr:=x"2c"; reg:=x"07";
when 2 =>rw:='0';mb:='0';addr:=x"2d"; reg:=x"08";
when 3 =>rw:='1';mb:='0';addr:=x"32"; reg:=x"00";
when 4 =>rw:='1';mb:='0';addr:=x"33"; reg:=x"00";
when 5 =>rw:='1';mb:='0';addr:=x"34"; reg:=x"00";
when 6 =>rw:='1';mb:='0';addr:=x"35"; reg:=x"00";
when 7 =>rw:='1';mb:='0';addr:=x"36"; reg:=x"00";
when 8 =>rw:='1';mb:='0';addr:=x"37"; reg:=x"00";
end case;
when 1 => acc_sclk<='1'; acc_cs<='0';
when 2 => acc_sclk<='0'; acc_din<=rw;
when 3 => acc_sclk<='1'; acc_din<=rw;
when 4 => acc_sclk<='0'; acc_din<=mb;
when 5 => acc_sclk<='1'; acc_din<=mb;
when 6 => acc_sclk<='0'; acc_din<=addr(5);
when 7 => acc_sclk<='1'; acc_din<=addr(5);
when 8 => acc_sclk<='0'; acc_din<=addr(4);
when 9 => acc_sclk<='1'; acc_din<=addr(4);
when 10 => acc_sclk<='0'; acc_din<=addr(3);
when 11 => acc_sclk<='1'; acc_din<=addr(3);
when 12 => acc_sclk<='0'; acc_din<=addr(2);
when 13 => acc_sclk<='1'; acc_din<=addr(2);
when 14 => acc_sclk<='0'; acc_din<=addr(1);
when 15 => acc_sclk<='1'; acc_din<=addr(1);
60
when 16 => acc_sclk<='0'; acc_din<=addr(0);
when 17 => acc_sclk<='1'; acc_din<=addr(0);
when 18 => acc_sclk<='0'; if(rw='1')then acc_din<='Z'; else
acc_din<=reg(7);end if;
when 19 => acc_sclk<='1'; if(rw='1')then data(7):=acc_din; else
acc_din<=reg(7);end if;
when 20 => acc_sclk<='0'; if(rw='1')then acc_din<='Z'; else
acc_din<=reg(6);end if;
when 21 => acc_sclk<='1'; if(rw='1')then data(6):=acc_din; else
acc_din<=reg(6);end if;
when 22 => acc_sclk<='0'; if(rw='1')then acc_din<='Z'; else
acc_din<=reg(5);end if;
when 23 => acc_sclk<='1'; if(rw='1')then data(5):=acc_din; else
acc_din<=reg(5);end if;
when 24 => acc_sclk<='0'; if(rw='1')then acc_din<='Z'; else
acc_din<=reg(4);end if;
when 25 => acc_sclk<='1'; if(rw='1')then data(4):=acc_din; else
acc_din<=reg(4);end if;
when 26 => acc_sclk<='0'; if(rw='1')then acc_din<='Z'; else
acc_din<=reg(3);end if;
when 27 => acc_sclk<='1'; if(rw='1')then data(3):=acc_din; else
acc_din<=reg(3);end if;
when 28 => acc_sclk<='0'; if(rw='1')then acc_din<='Z'; else
acc_din<=reg(2);end if;
when 29 => acc_sclk<='1'; if(rw='1')then data(2):=acc_din; else
acc_din<=reg(2);end if;
when 30 => acc_sclk<='0'; if(rw='1')then acc_din<='Z'; else
acc_din<=reg(1);end if;
when 31 => acc_sclk<='1'; if(rw='1')then data(1):=acc_din; else
acc_din<=reg(1);end if;
when 32 => acc_sclk<='0'; if(rw='1')then acc_din<='Z'; else
acc_din<=reg(0);end if;
when 33 => acc_sclk<='1'; if(rw='1')then data(0):=acc_din; else
acc_din<=reg(0);end if;
when 34 =>
acc_sclk<='1'; acc_cs<='1';
case k is --registra os valores lidos nos registradores
when 0 =>null;
when 1 =>null;
when 2 =>null;
when 3 =>datax:="00000000" & data(7 downto 3);
when 4 =>datax:=data & datax(7 downto 3);
when 5 =>datay:="00000000" & data(7 downto 3);
when 6 =>datay:=data & datay(7 downto 3);
when 7 =>dataz:="00000000" & data(7 downto 3);
when 8 =>dataz:=data & dataz(7 downto 3);
end case;
when 35 =>
acc_sclk<='1'; acc_cs<='1';
61
if(k>=8)then k:=3; else k:=k+1;end if;
end case;
if(i>=35)then i:=0;else i:=i+1; end if;
else count:=count+1;
end if;
end if;
acc_x<=to_integer(signed(datax(12 downto (13-size_acc))));
acc_y<=to_integer(signed(datay(12 downto (13-size_acc))));
acc_z<=to_integer(signed(dataz(12 downto (13-size_acc))));
end process acelerometro;
amostra:process(clk_50)
variable count1: natural range 0 to 50000:=0;
variable count2: natural range 0 to 100:=0;
variable count3: natural range 0 to 63:=0;
variable acum_x, acum_y, acum_z: integer range -2**(8+(size_acc-1)) to 2**(8+(size_acc-
1))-1;
variable vel_x,vel_y,vel_z,dis_x,dis_y,dis_z: integer range -2**15 to 2**15-1:=0;
variable acc_x_std,acc_y_std,acc_z_std: std_logic_vector(15 downto 0);
variable vel_x_std,vel_y_std,vel_z_std: std_logic_vector(15 downto 0);
variable dis_x_std,dis_y_std,dis_z_std: std_logic_vector(15 downto 0);
variable acc_x_o, acc_y_o, acc_z_o: integer range -(2**size_acc) to 2**size_acc-1:=0;
begin
if rising_edge(clk_50)then
if(count1=50000)then -- 10000 amostras por segundo
count1:=0;
case count2 is
when 0=>
wr<='0';
acum_x:=acc_x;
acum_y:=acc_y;
acum_z:=acc_z;
when 1 to 99=>
wr<='0';
acum_x:=acum_x+acc_x;
acum_y:=acum_y+acc_y;
acum_z:=acum_z+acc_z;
when 100=>
acum_x:=acum_x/100;
acum_y:=acum_y/100;
acum_z:=acum_z/100;
acc_x_std := std_logic_vector(to_signed(acum_x, 16));
acc_y_std := std_logic_vector(to_signed(acum_y, 16));
acc_z_std := std_logic_vector(to_signed(acum_z, 16));
led<=acc_z_std(8 downto 1);
--
case count3 is
when others =>data((512-count3*8) downto (505-
count3*8))<=
62
( acc_x_std(15 downto 8), acc_x_std(7
downto 0),
acc_y_std(15 downto 8), acc_y_std(7
downto 0),
acc_z_std(15 downto 8), acc_z_std(7
downto 0),
x"AA", x"AA");
end case;
if count3=63 then
count3:=0; wr<='1';
else count3:=count3+1; wr<='0';
end if;
end case;
if(count2=100)then count2:=0;
else count2:=count2+1;
end if;
else count1:=count1+1; wr<='0';
end if;
end if;
end process amostra;
end do;