Sofia Miranda da Silva Portela
Sistema auto adaptativo para
leitura e aquisição de dados para
sensores de pressão piezorresistivos
Sof ia Mir anda da Silv a P or tela dezembro de 2013 UMinho | 2013 Sis
tema auto adap
tativ
o para leitura e aq
uisição de dados para sensor
es de pr essão piezor resis tiv os
Universidade do Minho
Escola de Engenharia
dezembro de 2013
Tese de Mestrado
Ciclo de Estudos Integrados Conducentes ao Grau de
Mestre em Engenharia Eletrónica Industrial e Computadores
Trabalho efetuado sob a orientação do
Professor Doutor Gerardo Rocha
Professor Doutor Lanceros Mendez
Sofia Miranda da Silva Portela
Sistema auto adaptativo para
leitura e aquisição de dados para
sensores de pressão piezorresistivos
Universidade do Minho
iii
Agradecimentos
Com o aproximar da conclusão de mais uma etapa de vida não poderia deixar passar a oportunidade de expressar os meus sinceros agradecimentos às pessoas que me acompanharam e ajudaram a chegar até aqui.
Começo assim, por agradecer ao meu orientador, o Doutor Gerardo Rocha, e meu co-orientador, o Doutor Senentxu Lanceros Mendez, pela possibilidade de realizar esta dissertação e por todo o tempo que dispensaram para me guiar nesta jornada.
Não posso esquecer o investigador, Doutor Vitor Correia, que também me ajudou, com orientação científica e sugestões para a realização deste trabalho e os técnicos do Departamento de Eletrónica Industrial pelas assistências prestadas.
Agradeço também ao meu namorado e amigos que me acompanharam ao longo do curso, pelas recordações que construímos e pelo ânimo que ofereceram.
Para finalizar, dedico esta dissertação à minha família, pelo apoio dado e por tornarem possível chegar a este dia.
v
Resumo
Todos os dias procura-se novas formas de estender a tecnologia às diversas áreas científicas. Com esse objetivo em mente, busca-se novos métodos de fabrico de componentes, que os torne mais versáteis e mesmo mais baratos.
Foi com este pensamento que um grupo de investigadores da Universidade do Minho decidiu desenvolver uma matriz de sensores piezorresistivos pelo método de
inkjet print para aplicações biomédicas [1] [2]. Contudo quando se inova em sensores,
por vezes torna-se também necessário evoluir no sistema de leitura e aquisição de dados para estes.
Este trabalho de dissertação foca-se precisamente na necessidade de desenvolver um sistema auto adaptativo de leitura e aquisição de dados para a matriz de sensores piezorresistivos desenvolvida. Tal indispensabilidade deve-se ao facto de o processo de fabrico ser incapaz de controlar os parâmetros de construção dos sensores, terminando estes com características diferentes na mesma matriz e de se pretender aplicar estes sensores na área da biomédica, onde uma vez implantado o sistema, não é possível proceder a calibrações.
Ao longo deste relatório serão descritos os passos necessários para tornar um sistema de leitura e aquisição de dados auto adaptativo.
vii
Abstract
Every day we look new ways to extend the technology to various scientific fields. With this goal in mind, we seek new methods of manufacture components, which make them more versatile and even cheaper.
It was with this thought that a group of researchers from the University of Minho decided to develop an array of piezoresistive sensors by inkjet print method for biomedical applications [1] [2]. However when it innovates sensors, sometimes it becomes also necessary to innovate the system for data acquisition for these.
This dissertation focuses precisely on the need to develop an auto adaptive system for reading and data acquisition for the piezoresistive sensor array developed. This necessity is due to the fact that the manufacturing process is unable to control the parameters of the construction of sensors, ending these with different characteristics in the same array and the fact these sensors want to apply in the field of biomedical, where the system once implanted, is not possible to carry out calibrations.
Throughout this report we will describe the steps needed to make a system of reading and auto adaptive data acquisition.
ix
Índice
Agradecimentos ... iii Resumo ... v Abstract ... vii Índice ... ix Índice de ilustrações ... xiÍndice de Tabelas ... xiii
Lista de símbolos e notações ... xv
1 Introdução ... 1
1.1 Enquadramento e Motivação ... 1
1.2 Estado da arte ... 1
1.3 Comunicação SPI (Serial Peripheral Interface) ... 4
1.4 Comunicação I2C (Inter-Integrated Circuit) ... 6
1.5 Objetivos ... 6
2 Desenvolvimento experimental ... 8
2.1 Diagrama de Blocos do Sistema Auto Adaptativo ... 8
2.2 Escolha dos componentes ... 10
2.2.1 Microcontrolador ... 10
2.2.2 Digital to analog converter (DAC) ... 11
2.2.3 Amplificador de instrumentação ... 12 2.2.4 Multiplexer ... 13 2.2.5 Potenciómetro... 14 2.3 Esquemático e Algoritmo ... 16 3 Resultados ... 20 3.1 Sistema adaptativo... 21
3.2 Sistema auto adaptativo ... 24
4 Conclusão e trabalho futuro ... 32
5 Bibliografia ... 34
Anexos... 35
1. Código do sistema adaptativo ... 36
2. Código do sistema auto adaptativo ... 41
Função seleção do sensor ... 41
Função de calibração do sistema ... 43
Função de leitura dos sensores ... 45
xi
Índice de ilustrações
Ilustração 1-1 Ponte Wheatstone ... 2
Ilustração 1-2 Esquema do amplificador de instrumentação ... 3
Ilustração 1-3 Exemplo de um diagrama de bloco de um sistema adaptativo [5] ... 4
Ilustração 1-4 Representação das conexões SPI ... 5
Ilustração 1-5 Representação das ligações I2C ... 6
Ilustração 2-1 Diagrama de Blocos do sistema auto adaptativo ... 8
Ilustração 2-2 Divisão do Diagrama de Blocos ... 9
Ilustração 2-3 Arduino Uno ... 10
Ilustração 2-4 AD5061 ... 11
Ilustração 2-5 Diagrama temporal do AD5061... 12
Ilustração 2-6 Trama de transmissão AD5061 ... 12
Ilustração 2-7 LTC6915 ... 12
Ilustração 2-8 Diagrama temporal LTC6915 ... 13
Ilustração 2-9 ADG708 ... 14
Ilustração 2-10 MCP4441-103 ... 14
Ilustração 2-11 Trama para configuração do potenciómetro ... 15
Ilustração 2-12 Esquema do sistema... 17
Ilustração 2-13 Fluxograma do sistema ... 18
Ilustração 3-1 PCB ... 20
Ilustração 3-2 Placa final do sistema auto adaptativo ... 20
Ilustração 3-3 Shield colocado no Arduino ... 21
Ilustração 3-4 Interface com o utilizador ... 23
Ilustração 3-5 Aplicativo desenvolvido ... 26
Ilustração 3-6 Configuração do sistema ... 26
Ilustração 3-7 Leitura após configuração do sistema para resistências elétricas ... 27
Ilustração 3-8 Leituras para L1C1:5,1kΩ e L2C1:3,3kΩ ... 27
Ilustração 3-9 Leituras para L1C1:20kΩ e L2C1:1kΩ ... 28
Ilustração 3-10 Nova leitura com os valores iniciais de resistências ... 28
Ilustração 3-11 Gráfico de evolução da tensão em relação ao valor de resistência ... 29
Ilustração 3-12 Leitura dos sensores após configuração ... 29
Ilustração 3-13 Leitura após deformar sensor no sentido em que decrementa o valor da sua resistência ... 30
Ilustração 3-14 Leitura após deformação no sentido que incrementa o valor da sua resistência ... 30
xiii
Índice de Tabelas
Tabela 1-1 Modos de transmissão SPI ... 5
Tabela 2-1 Características do microcontrolador ... 11
Tabela 2-2 Níveis programáveis LTC6915 ... 13
Tabela 2-3 Tabela de Verdade ADG708 ... 14
Tabela 2-4 Comandos do MCP4441-103 ... 16
xv
Lista de símbolos e notações
ADC – Analog to digital converter AI – Amplificador de Instrumentação
CMRR – Razão de rejeição em modo comum DAC – Digital to analog converter
EEPROM – Electrically-Erasable Programmable Read-Only Memory G – Ganho
Hz – Hertz
I – Símbolo Corrente I/O – Input/Output
I2C – Inter-Integrated Circuit
MISO – Master In Slave Out MOSI – Master Out Slave In PCB – Printed Circuit Board Pot – Potenciómetro
R – Símbolo de resistência
Rpot – Símbolo da resistência do potenciómetro
SCK – Serial Clock SCL – Serial Clock SDA – Serial Data
SPI – Serial Peripheral Interface SS – Slave Select
V – Volt
VADC – Símbolo da tensão no ADC
VCC – Símbolo de tensão de alimentação
VDAC – Símbolo da tensão do DAC
δ – Símbolo da variação de resistência Ω – Ohm
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
1
1 Introdução
Quando se utiliza sensores necessita-se obrigatoriamente de um circuito de leitura para estes.
Os sistemas de leitura e aquisição de dados de sensores têm a importante missão de traduzir o sinal proveniente dos sensores para valores elétricos possíveis de analisar.
Esta dissertação descreve o desenvolvimento e implementação de um sistema de leitura e aquisição de dados para sensores piezorresistivos auto adaptativo, começando pelo enquadramento e motivação do trabalho realizado, o seu estado de arte, descrição da comunicação SPI e I2C necessárias no desenvolvimento do mesmo, e objetivos a
atingir.
1.1 Enquadramento e Motivação
Após o desenvolvimento dos sensores piezorresistivos [2] e da realização de testes a estes sentiu-se a necessidade de realizar um sistema de leitura e aquisição de dados auto adaptativo devido ao facto de se pretender aplicar os sensores na área das biomédicas, nomeadamente no interior do corpo humano, o que significa que uma vez implantado não se pode voltar a configurar o sistema.
A motivação para a realização desta dissertação foi precisamente a oportunidade de contribuir, para a melhoria de vida das pessoas que possam vir a beneficiar da utilização desta tecnologia.
1.2 Estado da arte
Um sensor é um dispositivo que converte uma grandeza física numa elétrica. No caso dos piezorresistivos, convertem uma variação de pressão numa variação de resistência elétrica.
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
2
Uma resistência tem a característica de a tensão aos seus terminais ser proporcional à corrente que a atravessa. Esta propriedade é demonstrada pela Lei de Ohm que estabelece a relação entre resistência, tensão e corrente pela equação (1.1):
R = [Ω] (1.1)
É devido a esta característica que quando se pretende fazer o condicionamento de sinal de um sensor resistivo utiliza-se pontes de medida, conhecidas como ponte de
Wheatstone.
Ilustração 1-1 Ponte Wheatstone
O sensor é representado por R(1+δ) em que R é o valor da resistência em repouso e δ a variação sentida. Como se pode observar pela ilustração 1-1 havendo uma variação de resistência no sensor os valores Vi1 e Vi2 serão diferentes.
Quando se pretende uma medição precisa utilizam-se amplificadores de instrumentação que recebem nas suas entradas, positiva e negativa, as saídas da ponte de Wheatstone e transformam a sua subtração no valor elétrico referente á pressão aplicada nos sensores.
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
3 Ilustração 1-2 Esquema do amplificador de instrumentação
Estes amplificadores são conhecidos por terem a seguintes características:
Ganho elevado em relação à entrada, preciso e estável; CMRR (Razão de rejeição em modo comum) elevado; Impedância de saída baixa;
Impedância de entrada finita.
Quando se utilizam sensores é necessário conhecer as suas características para o dimensionamento do sistema de aquisição e além disso diferentes tipos de sensores requerem circuitos de aquisição diferentes.
Com o avanço tecnológico tem-se estudado e desenvolvido sistemas que respondam às necessidades encontradas nesta área.
Após alguma pesquisa pôde-se encontrar estudos de circuitos adaptativos para contornar problemas como:
Compensar variações causadas por variáveis externas [3]
Leitura de dois tipos de sensores diferentes no mesmo circuito [6] [7]
Informações sobre o método de programação utilizado para tornar os circuitos adaptativos [4] [5].
A arquitetura adotada para estes sistemas é semelhante independentemente do tipo de sensores a ler. Geralmente encontra-se um multiplexer para a seleção dos sensores, um amplificador de instrumentação e um sistema de controlo para conferir a
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
4
adaptabilidade. No entanto esta característica refere-se apenas à possibilidade de selecionar a leitura de cada sensor ou à alteração no ganho do amplificador.
Ilustração 1-3 Exemplo de um diagrama de bloco de um sistema adaptativo [5]
Encontra-se também trabalhos sobre o tipo de algoritmo de programação que se deve realizar para conferir a adaptabilidade, como basear a programação nas redes neuronais para conferir uma espécie de memória e raciocínio ao sistema e exemplos de algoritmos de perturbações [4].
Pode-se então afirmar que existe uma arquitetura base para este tipo de circuitos assim como algoritmos recomendados que facilitam e possibilitam uma vasta gama de aplicações nos circuitos adaptativos.
1.3 Comunicação SPI
(Serial Peripheral Interface)
A comunicação SPI (Serial Peripheral Interface) é um protocolo de dados série síncronos para comunicação entre um master e um ou mais periféricos (slaves).
É caracterizada por necessitar de 3 ligações ao barramento e os componentes podem apresentar 4 conexões:
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
5
MOSI (Master out Slave in) – Linha do master para envio de dados para os periféricos;
MISO (Master in Slave out) – Linha do master para receber dados dos periféricos;
SCK (Serial Clock) – Os pulsos de relógio que sincroniza o envio de dados gerados pelo master;
SS (Slave Select) – Pino de cada periférico que o master utiliza para ativar ou desativar a comunicação.
Ilustração 1-4 Representação das conexões SPI
A implementação do protocolo SPI não segue em padrão específico, sendo da responsabilidade do fabricante informar qual o modo de transmissão dos dados. Na tabela 1-1 encontram-se os modos possíveis.
Modo Polaridade Clock Fase Clock
Modo 0 0 0
Modo 1 0 1
Modo 2 1 0
Modo 3 1 1
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
6
1.4 Comunicação I
2C (Inter-Integrated Circuit)
O I2C (Inter-Integrated Circuit) é um protocolo de comunicação série a 2 ligações.
No barramento existe apenas um master que envia ou requer dados dos periféricos através do endereço destes e estipula a velocidade de transmissão. O endereço de cada dispositivo no barramento é sempre fixo.
Ilustração 1-5 Representação das ligações I2C
Como se pode verifica pela ilustração 1-5 só é necessário 2 ligações nesta comunicação, sendo cada uma encarregue de:
SDA (Serial data) – envio ou receção de dados;
SCL (Serial Clock) – configuração de velocidade da transmissão.
1.5 Objetivos
Desenvolver um sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos.
O sistema será capaz de realizar, numa primeira etapa a leitura de cada sensor da matriz e calcular os parâmetros necessários para uma aquisição correta de cada um e posteriormente utilizar esses parâmetros para a leitura do trabalho realizado pelos sensores.
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
7
No capítulo 3 desta dissertação serão apresentados os resultados dos seguintes testes:
Circuito adaptativo para leitura de um sensor
Circuito adaptativo para leitura de matriz de sensores Circuito auto adaptativo para leitura de um sensor
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
8
2 Desenvolvimento experimental
Nesta secção será apresentada a arquitetura do sistema auto adaptativo, a descrição dos componentes escolhidos e a sua função, o esquemático do circuito final e o algoritmo de programação pretendido.
2.1 Diagrama de Blocos do Sistema Auto Adaptativo
Ilustração 2-1 Diagrama de Blocos do sistema auto adaptativo
A ilustração 2-1 demonstra o diagrama de blocos do sistema auto adaptativo e a conexão da matriz de sensores piezorresistivos ao mesmo.
Como o trabalho desenvolvido foca-se apenas no sistema de leitura e aquisição de dados, este será o único e ser explicado a fundo. Por essa razão e para um melhor esclarecimento do seu funcionamento pode-se dividir o sistema em três subcircuitos distintos representados na ilustração 2-2.
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
9 Ilustração 2-2 Divisão do Diagrama de Blocos
O circuito 1 é constituído por um multiplexer e um demultiplexer que são os responsáveis pela ligação da matriz de sensores ao sistema de leitura e aquisição de dados e competindo-lhe a seleção do sensor piezorresistivo a ler. Com esta ligação consegue-se que os sensores apenas sejam alimentados no momento da leitura e de forma individual contribuindo assim para um menor consumo de energia e garantindo que não exista interferência na leitura realizada.
O conjunto potenciómetro – Digital do analog converter (DAC) – amplificador de instrumentação (AI) que representam o circuito 2 têm por função a aquisição do sinal. Neste sistema a usual ponte de Wheatstone utilizada para obter o valor de uma resistência desconhecida é simulada pelo potenciómetro e pelo DAC, sendo cada um deles a representação de um dos braços da ponte.
Este é o circuito que desempenha o papel crucial de todo o sistema, pois é quem confere a propriedade de adaptabilidade sendo composto por componentes programáveis.
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
10
A saída do potenciómetro em junção com a do multiplexer fornecem o valor da entrada positiva do amplificador, enquanto o DAC fornece o valor da negativa tornando a ponte compensada. Esta subtração resulta na medição do sensor.
Por último, no circuito 3 encontra-se o microprocessador responsável por tornar o sistema auto adaptativo e guardar os dados pretendidos.
Numa primeira etapa o microcontrolador irá calcular os valores do potenciómetro, DAC, e ganho do AI necessários para uma correta leitura dos sensores e guarda-los na memória EEPROM para posteriores medições. Terminada esta etapa o sistema está pronto a operar. O microcontrolador será responsável por selecionar o sensor a ler, colocar os valores corretos nos componentes do circuito 2, receber do amplificador de instrumentação o dado adquirido e enviá-lo.
2.2 Escolha dos componentes
2.2.1 Microcontrolador
O microcontrolador utilizado nesta dissertação foi o ATmega328 inserido na placa Arduino Uno que se pode ver na ilustração 2-3. A escolha deste microcontrolador deve-se ao facto de deve-ser de fácil utilização, responder às necessidades precisas para o desenvolvimento do sistema e já ter sido utilizado na elaboração de outros trabalhos. A opção pela sua utilização foi a única que não teve em vista a aplicação final, isto é, o tamanho e consumo não foram das especificações que receberam mais atenção.
Ilustração 2-3 Arduino Uno
A tabela 2-1 mostra as características mais significativas da placa Arduino Uno para o projeto em questão.
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
11
Alimentação 5V Nº pinos digitais (I/O) 14
Nº entradas analógicas (ADC) 6 (resolução: 10bits) Memória Flash 32KB
SRAM 2KB
EEPROM 1KB
Velocidade de relógio 16MHz Suporta comunicação SPI Pinos: 10, 11, 12 e 13 Suporta comunicação I2C Pinos: A4 e A5
Tabela 2-1 Características do microcontrolador
O Arduino fornece algumas bibliotecas que facilitam a programação do microcontrolador. Contudo a utilização destas pode limitar as opções de programação ou não responderem como o pretendido, por essas razões resolveu-se implementar uma biblioteca própria para o uso da comunicação SPI.
2.2.2 Digital to analog converter (DAC)
O DAC é o responsável por receber um valor digital e traduzi-lo num analógico, mantendo assim a ponte compensada. Para desempenhar tal papel optou-se pelo AD5061 da Analog Devices que é um DAC de baixa potência, com uma resolução de 16-bit, tensão de alimentação simples de 2,7V a 5,5V, a sua configuração é através de comunicação SPI e apresenta dimensão de 3mm x 3mm x 1,2mm.
Ilustração 2-4 AD5061
Após conhecer as ligações do componente, é necessário retirar as informações para a sua programação, na ilustração 2-5 encontra-se o diagrama temporal que nos
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
12
fornece o modo de transmissão para a comunicação SPI. Da sua análise pode-se concluir que o modo de transmissão é o Modo 1, tendo em conta a tabela 1-1.
Ilustração 2-5 Diagrama temporal do AD5061
Na ilustração abaixo está representada a trama de informação a enviar para o
DAC. Pode-se ver que além dos 16-bit de dados é necessário enviar também 2-bit de
controlo que indicam o modo de operação do componente.
Ilustração 2-6 Trama de transmissão AD5061
2.2.3 Amplificador de instrumentação
O amplificador de instrumentação é um LTC6915 da Linear Technology que trata-se de um amplificador de precisão com ganho programável.
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
13
Ele possui 14 níveis de ganho programável, demonstrados na tabela 2-2, uma precisão de ganho na ordem de 0,1%, a tensão de alimentação pode ser entre 2,7V e 5,5V, também é configurado através da comunicação SPI e apresenta as dimensões de 5mm x 4mm x 1,2mm. Palavra Digital 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101-1111 Ganho 0 1 2 4 8 16 32 64 128 256 512 1024 2048 4096
Tabela 2-2 Níveis programáveis LTC6915
Ilustração 2-8 Diagrama temporal LTC6915
Da análise do diagrama temporal verifica-se que o modo de transmissão é o Modo 3.
2.2.4 Multiplexer
A interface entre a matriz de sensores e o sistema de aquisição é feita pelo multiplexer e demultiplexer, como se definiu-se que o sistema deve ser capaz de ler até uma matriz de 8x8 ambos devem ser de oito entradas/saídas.
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
14
Utilizou-se então um ADG708 da Analog Devices que tem a propriedade de funcionar quer como multiplexer quer demultiplexer alterando apenas o modo de ligação dos pinos S1 a S8 e D.
Ilustração 2-9 ADG708
A seleção das saídas é feita segundo a tabela de verdade abaixo:
A2 A1 A0 EN Saída X X X 0 - 0 0 0 1 1 0 0 1 1 2 0 1 0 1 3 0 1 1 1 4 1 0 0 1 5 1 0 1 1 6 1 1 0 1 7 1 1 1 1 8
Tabela 2-3 Tabela de Verdade ADG708
2.2.5 Potenciómetro
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
15
O potenciómetro utilizado foi o MCP4441-103 da Microchip que possui 7-bit de resolução, resistência máxima de 10kΩ, tem quatro potenciómetros no mesmo integrado, é programado por I2C, tensão de alimentação entre 2,7V e 5,5V e dimensão
de 6,5mm x 6,4mm x 1mm.
Para configurar o MCP4441-103 é necessário o seu endereço, o endereço de memória a manipular, a função a desempenhar e os dados a enviar, quando necessário.
Ilustração 2-11 Trama para configuração do potenciómetro
Os bits A6 a A0 são o endereço do componente, em que A1 e A0 correspondem aos pinos do integrado com mesmo nome e por isso o seu nível lógico deve estar de acordo com as ligações efetuadas. O bit R/W informa se é pedida leitura ou escrita ao dispositivo, colocando-o a “0” para escrita e a “1” para leitura. AD3 a AD0 estipulam o endereço de memória a utilizar, enquanto os bits C1 e C0 carregam a informação do comando a efetuar. Na tabela 2-5 pode-se observar quais os comandos permitidos nos diferentes endereços de memória. Por ultimo os bits D9 a D0 traduzem o valor de resistência que se pretende aplicar.
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos 16 C1 C0 Comando 0 0 Escrever dados 0 1 Incrementar 1 posição 1 0 Decrementar 1 posição 1 1 Ler dados Tabela 2-4 Comandos do MCP4441-103
Tabela 2-5 Endereços de memória e respetivos comandos
2.3 Esquemático e Algoritmo
Com os componentes escolhidos e estudados desenvolveu-se o esquemático do sistema para posterior passagem para PCB. Nesta etapa decidiu-se que a placa final seria dimensionada de forma a ter dimensões para servir como shield para o microcontrolador, isto é, encaixar nas ligações deste. Para o desenho da placa utilizou-se o software de design Altium.
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
17 Ilustração 2-12 Esquema do sistema
Tendo o circuito do sistema dimensionado chega a altura de preparar a componente digital do trabalho, que passa por preparar o algoritmo de programação dos componentes.
Para tal é necessário evidenciar as funções pretendidas do sistema, que são:
Auto calibração Aquisição de dados
A calibração é a etapa que necessita de especial atenção, pois sem o seu perfeito funcionamento não será possível a leitura a aquisição de dados dos sensores.
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
18
Ilustração 2-13 Fluxograma do sistema
A primeira tarefa do algoritmo é calcular o valor da resistência para o potenciómetro. Para tal inicia-se por selecionar o sensor a ler, colocar o ganho a 1 e a saída do DAC a 0V para aumentar a gama de leitura do circuito.
Em seguida altera-se o valor da resistência do potenciómetro até que a tensão lida pelo ADC (Analog to digital converter) seja superior a 0,5V. Quando a condição for verdadeira calcula-se o valor real de Rpot como demonstrado no fluxograma.
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
19
Após o cálculo do Rpot passa-se para a obtenção do valor do DAC colocando a
sua tensão de saída a metade da tensão de alimentação e em seguida calcula-se o valor indicado tendo em conta a leitura do ADC.
Assim que os parâmetros são encontrados, eles são guardados na memória do microcontrolador para serem utilizados na função seguinte de aquisição das variações sofridas pelos sensores. Nesta etapa o microcontrolador só necessita de selecionar o sensor a medir e carregar os parâmetros guardados para o restante sistema.
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
20
3 Resultados
Após o desenho do esquemático do circuito fez-se o ficheiro PCB para em seguida imprimir a placa final.
Ilustração 3-1 PCB
Ilustração 3-2 Placa final do sistema auto adaptativo
Como foi referido no capítulo anterior, a placa final foi dimensionada de forma a ser um shield para o Arduino como se vê a ilustração 3-3.
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
21 Ilustração 3-3 Shield colocado no Arduino
Com a placa pronta testou-se os códigos para o sistema funcionar de modo adaptativo e auto adaptativo.
3.1 Sistema adaptativo
Neste sistema o utilizador fornece os valores para o potenciómetro e para o DAC previamente e pode escolher o sensor que pretende analisar.
Para a colocação dos valores dos componentes criou-se um array para cada um, que deve ser preenchido antes da execução do programa.
Na programação do DAC sabe-se que é necessário 3 bytes, o primeiro que traduz a função a desempenhar e os outros dois são de dados, no caso do potenciómetro necessita-se de 2 bytes, o primeiro que diz qual o potenciómetro a utilizar do componente e a função que desempenha e o segundo são os dados.
byte dac[128]={215,124}; byte pot[64]={49};
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
22
Após a inserção dos valores é só enviar o programa para o microcontrolador e este irá pedir o número do sensor a ler.
Neste exemplo colocou-se valores no DAC e potenciómetro para que na presença de uma resistência de 10kΩ a saída do amplificador seja 0V e o amplificador com ganho 1. Será apresentado os resultados para uma resistência de 10kΩ, 20kΩ e 5kΩ, sendo respetivamente o sensor 1, 2 e 3.
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
23 Ilustração 3-4 Interface com o utilizador
O microcontrolador recebe o sensor a ler por porta série e vê a que condição corresponde sabendo assim como adaptar. No quadro abaixo está o código para o caso do sensor 1. //configuração do DAC SPI_MasterInit(0,1); digitalWrite(10,LOW); SPI_MasterTrans3(0x00,dac[0],dac[1]); digitalWrite(10,HIGH); //configurar o Pot Wire.beginTransmission(44); Wire.write(byte(0x60)); Wire.write(byte(pot[0])); Wire.endTransmission(); //seleção do sensor
select_mux(1,1); //seleção do sensor
delay(100); //leitura
val=analogRead(A0); //ler do adc
volt = (float)((5.00*val)/1023); //conversão para tensão
Serial.println(volt);
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
24
3.2 Sistema auto adaptativo
As principais diferenças deste sistema para o anterior são que agora os valores do
DAC e potenciómetro serão calculados pelo sistema e guardados na memória EEPROM
do microcontrolador para não se perderem, através do algoritmo apresentado no subcapítulo 2.3 e o utilizador não escolherá o sensor a ler, o próprio programa irá percorrer os sensores existentes.
Para o código ficar mais simples e não haver repetição dividiu-se em três funções diferentes:
Seleção do sensor,
Configuração dos parâmetros dos sensores, Leitura dos sensores.
A função de seleção do sensor não tem muito a explicar pois faz exatamente o que sugere o seu nome, seleciona o sensor quer na configuração quer na leitura.
Na configuração dos parâmetros é que já existe alguns pontos a referenciar. Em primeiro lugar, apresenta-se uma pequena diferença ao algoritmo na configuração do potenciómetro. Optou-se por incrementar uma palavra digital de cada vez em vez de, colocar a metade da resistência total inicialmente e de dividir o seu valor por 10 enquanto a saída do ADC for menor que 0,5V. Esta escolha deveu-se apenas ao facto de neste potenciómetro a palavra digital 00h traduzir o máximo de resistência e a FFh o valor mínimo 0V.
A variável “x” conta o número de vezes que se incrementou o potenciómetro, para assim ser possível o cálculo do seu correspondente em ohm. O valor real a colocar no potenciómetro é então encontrado pelo código:
while(tensao<0.50) {
Wire.beginTransmission(44); Wire.write(byte(0x64)); Wire.endTransmission();
delay(1000); //tempo para alterar valores na placa
tensao=(float)((5.00*analogRead(A0))/1023); x++; //número de incrementos
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
25
Primeiro calcula-se o valor de resistência em cada incremento, em seguida multiplica-se pelo número de incrementos para saber a variação de resistência necessária para que a tensão no ADC seja superior a 0,5V. Conhecendo este valor é só aplicar a fórmula do algoritmo sem esquecer que o valor de resistência é o valor máximo menos a variação calculada. Dividindo o valor real pela variação em cada incremento obtêm-se a palavra digital correspondente e guarda-se na memória
EEPROM. A variável “i” representa a posição de memória.
Com o valor do potenciómetro calculado passa-se para a configuração do DAC. Neste componente utilizou-se o cálculo do algoritmo do subcapítulo 2.3 sendo de frisar apenas o facto de este DAC ter 16 bits de dados e o microcontrolador apenas conseguir enviar 8 bits de cada vez, ou seja, após o cálculo da palavra digital foi necessário dividi-la em 2 bytes com recurso ao código:
O algoritmo implementado permite configurar os componentes de forma a ser possível obter leituras quer o sensor piezorresistivo esteja sujeito a uma deformação que aumente a sua resistência ou a diminua.
Concluída a programação do sistema passou-se para a fase de testes. Nesta etapa optou-se por desenvolver uma aplicação em linguagem C# de forma a ser mais percetível qual o sensor da matriz a ser lido.
v_ohm=(10000/255); //valor de resistência em cada incremento
ohm=v_ohm*x; //variação necessária para tensão >0,5V
tensao=(float)((5.00*analogRead(A0))/1023); //conversão para tensão
ohm_out=((tensao*(10000-ohm))/(5.00-tensao)); //cálculo do valor real
pot=(ohm_out/v_ohm); //conversão para digital
EEPROM.write(i,pot); //guardar na memória
i++; //incrementar posição de memória
dac_f=((dac_out*65535)/2.97); //cálculo da palavra digital
dac=dac_f&0xff; //máscara para guardar o byte menos significativo
EEPROM.write(i+1, dac); //guardar na memória
dac_f=dac_f>>8; //shift register
dac=dac_f&0xff; //máscara para guardar o byte menos significativo
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
26
Ilustração 3-5 Aplicativo desenvolvido
O aplicativo é constituído por 3 botões, um para ligar/desligar, outro para mandar configurar o sistema quando os sensores são conectados e o ultimo para receção dos dados lidos. Após o pedido de configuração aparece uma mensagem que informa o término da operação.
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
27
Iniciou-se os testes ao sistema auto adaptativo com recurso a resistências elétricas. A ilustração 3-7 mostra os valores lidos após a configuração.
Ilustração 3-7 Leitura após configuração do sistema para resistências elétricas
A resistência na L1C1 é de 1kΩ e na L2C1 encontra-se uma de 20kΩ. Realizaram-se medições aumentando o valor da resistência da L1 e diminuindo a da L2.
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
28
Ilustração 3-9 Leituras para L1C1:20kΩ e L2C1:1kΩ
Na ilustração 3-10 mostra o valor lido após voltar a colocar as resistências iniciais.
Ilustração 3-10 Nova leitura com os valores iniciais de resistências
No final do teste traçou-se o gráfico de evolução da tensão em relação ao valor de resistência. Pela análise do gráfico da ilustração 3-11 pode-se observar que as leituras não estão muito longe de uma evolução linear. O problema pode ser influenciado pela
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
29
tolerância das resistências que é diferente e pelo erro introduzido pelas leituras do ADC e resolução dos componentes programáveis.
Ilustração 3-11 Gráfico de evolução da tensão em relação ao valor de resistência
Nas ilustrações seguintes apresenta-se as leituras efetuadas com sensores, onde o da L1C1 foi mantido em repouso em todas as leituras e o da L2C1 foi deformado em dois sentidos e depois colocado novamente na posição inicial.
Ilustração 3-12 Leitura dos sensores após configuração
0 0,5 1 1,5 2 2,5 3 3,5 4 1000 2000 3300 5100 10000 20000 Ten são (V) Valor de resistência (Ω) Conf. 1kΩ Conf. 20kΩ
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
30
Ilustração 3-13 Leitura após deformar sensor no sentido em que decrementa o valor da sua resistência
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
31 Ilustração 3-15 Leitura após o sensor voltar à posição de repouso
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
32
4 Conclusão e trabalho futuro
O objetivo desta dissertação era chegar ao final com um sistema de leitura e aquisição de dados para sensores de pressão piezorresistivos auto adaptativo, com capacidade de ler uma matriz de sensores 8x8.
Este objetivo deve-se ao facto de se pretender aplicar estas matrizes na área da biomédica, nomeadamente em próteses para analisar se existe alguma deslocação destas do local onde devem estar. Assim sendo o sistema de leitura irá ser colocado no interior das próteses impossibilitando recalibração do sistema caso haja alguma alteração nos sensores durante o procedimento de implantação da prótese.
O sistema desenvolvido difere dos habituais pelo facto de a ponte de wheatstone ser simulada pelo potenciómetro e DAC havendo assim mais liberdade na calibração e como os componentes são digitalmente programáveis permitem a característica auto adaptativa.
Iniciou-se então por desenvolver um código adaptativo para a placa. Nesta etapa os valores necessários a colocar no potenciómetro e no DAC eram conhecidos e fornecidos previamente ao microcontrolador e serviu para comprovar que o sistema encontrava-se a funcionar como esperado.
Em seguida implementou-se o código auto adaptativo, seguindo o algoritmo desenvolvido e acrescentando as conversões de valores analógicos para digitais necessários para os cálculos pretendidos e o armazenamento dos valores na memória
EEPROM do microcontrolador.
Com a realização dos testes verificou-se que se trata de uma solução fiável e de baixo custo que contribuirá para proporcionar uma melhoria de vida às pessoas que venham a beneficiar desta aplicação e ajudará os médicos a terem uma análise mais simples e rápida do que se passa com as próteses nos pacientes.
Validado o sistema auto adaptativo surge agora a necessidade de análise dos sistemas de comunicação para o envio dos valores adquiridos e uma plataforma para a receção dos mesmos. Sabendo a comunicação mais apropriada para a aplicação deve-se
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
33
escolher um novo microcontrolador que vá de encontro com as necessidades e refazer a placa, incorporando na própria o microcontrolador.
Outro aspeto importante de trabalho futuro será a pesquisa e desenvolvimento de um sistema de alimentação/carregamento do sistema completo.
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
34
5 Bibliografia
[1] P. Alpuim, V. Correia, E. S. Marins, J. G. Rocha, I. G. Trindade, and S. Lanceros-Mendez, “Piezoresistive silicon thin film sensor array for biomedical applications,” Thin Solid Films, vol. 519, no. 14, pp. 4574–4577, May 2011.
[2] V. Correia, C. Caparros, C. Casellas, L. Francesch, J. G. Rocha, and S. Lanceros-Mendez, “Development of inkjet printed strain sensors”, Source: Smart Materials and Structures, Struct. 22 105028, Impact factor: 2.024, Quartile: Materials Science (miscellaneous) Q1 DOI: 10.1088/0964-1726/22/10/105028, 2013
[3] N. Medrano-Marqués, G. Zatorre-Navarro, S. Celma-Pueyo, “Sensor Compensation Using Analogue-Digital Adaptive Circuits”, IEEE, 2006
[4] G. Zatorre, N. Medrano, M. Sanz, C. Aldea, B. Calvo, S. Celma, “Digitally Programmable Analogue Circuits for Sensor Conditioning Systems”, Sensore, published 14 May 2009
[5] R. Amirtharajah, A. Chen, D. Thaker, F. T. Chong, “Circuit Interfaces and Optimization for Resistive Nanosensors”,
[6] C. Yang, J. Xi, A. Mason, P. Zhong, “Configurable Hardware-Efficient Interface Circuit for Multi-Sensor Microsystems”, will be presented at IEEE Sensors Conference 2006, Daegu, Korea, Oct. 2006
[7] J. Xi, C. Yang, A. Mason, P.Zhong, “Adaptive Multi-Sensor Interface System-on-Chip”, IEEE Sensors Conference, Daegu, Korea, Oct. 2006
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
35
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
36
1. Código do sistema adaptativo
//variáveis auxiliares int a=0; int val; float volt=0.00; byte dac[24]={0,215,124}; byte pot[16]={96,49}; void setup() { Wire.begin(); Serial.begin(9600); pinMode(13,OUTPUT); pinMode(11,OUTPUT); pinMode(10,OUTPUT); pinMode(2,OUTPUT); pinMode(9,OUTPUT); pinMode(8,OUTPUT); pinMode(7,OUTPUT); pinMode(A0,INPUT); digitalWrite(10,HIGH); digitalWrite(2,HIGH); //configurar o LTC
SPI_MasterInit(0,3); //inicia comunicação SPI em Modo e formato de envio de dados
digitalWrite(2,LOW);
SPI_MasterTrans1(0b0001); //envio de dados
digitalWrite(2,HIGH);
end_Master(); //desliga comunicação SPI
Serial.println("Insira o sensor a efetuar leitura"); }
void loop() {
if(Serial.available()>0) //verifica se existe dados na porta série
{
a=Serial.read(); //leitura da porta série
switch(a) {
case '1': {
//configuração do DAC
SPI_MasterInit(0,1); //inicia comunicação SPI em Modo e formato de envio de dados
digitalWrite(10,LOW);
SPI_MasterTrans3(0x00,dac[0],dac[1]); //envio de dados
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
37 //configurar o Pot
Wire.beginTransmission(44); //seleção do componente
Wire.write(byte(0x60)); //envio de dados I2C
Wire.write(byte(pot[0])); //envio de dados I2C
Wire.endTransmission(); //termina I2C //seleção do sensor
select_mux(1,1); //seleção do sensor; código apresentado no auto adaptativo
delay(100); //espera para as alterações sentirem-se na placa
//leitura
val=analogRead(A0); //leitura do adc
volt = (float)((5.00*val)/1023); //conversão para tensão
Serial.println(volt); //imprime valor
Serial.println("Insira o sensor a efetuar leitura"); break; } case '2': { //configuração do DAC SPI_MasterInit(0,1); digitalWrite(10,LOW); SPI_MasterTrans3(0x00,dac[2],dac[3]); digitalWrite(10,HIGH); //configurar o Pot Wire.beginTransmission(44); Wire.write(byte(0x60)); Wire.write(byte(pot[1])); Wire.endTransmission(); //seleção do sensor
select_mux(1,2); //seleção do sensor; código apresentado no auto adaptativo
delay(100); //leitura
val=analogRead(A0);
volt = (float)((5.00*val)/1023); //conversão para tensão
Serial.println(volt);
Serial.println("Insira o sensor a efetuar leitura"); break; } case '3': { //configuração do DAC SPI_MasterInit(0,1); digitalWrite(10,LOW); SPI_MasterTrans3(0x00,dac[4],dac[5]); digitalWrite(10,HIGH); //configurar o Pot Wire.beginTransmission(44); Wire.write(byte(0x60)); Wire.write(byte(pot[2]));
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
38
Wire.endTransmission(); //seleção do sensor
select_mux(1,3); //seleção do sensor; código apresentado no auto adaptativo
delay(100); //leitura
val=analogRead(A0);
volt = (float)((5.00*val)/1023); //conversão para tensão
Serial.println(volt);
Serial.println("Insira o sensor a efetuar leitura"); } case '4': { //configuração do DAC SPI_MasterInit(0,1); digitalWrite(10,LOW); SPI_MasterTrans3(0x00,dac[6],dac[7]); digitalWrite(10,HIGH); //configurar o Pot Wire.beginTransmission(44); Wire.write(byte(0x60)); Wire.write(byte(pot[3])); Wire.endTransmission(); //seleção do sensor
select_mux(1,4); //seleção do sensor; código apresentado no auto adaptativo
delay(100);
//leitura
val=analogRead(A0);
volt = (float)((5.00*val)/1023); //conversão para tensão
Serial.println(volt);
Serial.println("Insira o sensor a efetuar leitura"); }
case '5': {
//configuração do DAC
SPI_MasterInit(0,1); //inicia comunicação SPI em Modo e formato de envio de dados
digitalWrite(10,LOW);
SPI_MasterTrans3(0x00,dac[8],dac[9]); //envio de dados
digitalWrite(10,HIGH); //configurar o Pot
Wire.beginTransmission(44); //seleção do componente
Wire.write(byte(0x60)); //envio de dados I2C
Wire.write(byte(pot[4])); //envio de dados I2C
Wire.endTransmission(); //termina I2C
//seleção do sensor
select_mux(1,5); //seleção do sensor; código apresentado no auto adaptativo
delay(100); //espera para as alterações sentirem-se na placa
//leitura
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
39 volt = (float)((5.00*val)/1023); //conversão para tensão
Serial.println(volt); //imprime valor
Serial.println("Insira o sensor a efetuar leitura"); break; } case '6': { //configuração do DAC SPI_MasterInit(0,1); digitalWrite(10,LOW); SPI_MasterTrans3(0x00,dac[10],dac[11]); digitalWrite(10,HIGH); //configurar o Pot Wire.beginTransmission(44); Wire.write(byte(0x60)); Wire.write(byte(pot[5])); Wire.endTransmission(); //seleção do sensor
select_mux(1,6); //seleção do sensor; código apresentado no auto adaptativo
delay(100); //leitura
val=analogRead(A0);
volt = (float)((5.00*val)/1023); //conversão para tensão
Serial.println(volt);
Serial.println("Insira o sensor a efetuar leitura"); break; } case '7': { //configuração do DAC SPI_MasterInit(0,1); digitalWrite(10,LOW); SPI_MasterTrans3(0x00,dac[12],dac[13]); digitalWrite(10,HIGH); //configurar o Pot Wire.beginTransmission(44); Wire.write(byte(0x60)); Wire.write(byte(pot[6])); Wire.endTransmission(); //seleção do sensor
select_mux(1,7); //seleção do sensor; código apresentado no auto adaptativo
delay(100);
//leitura
val=analogRead(A0);
volt = (float)((5.00*val)/1023); //conversão para tensão
Serial.println(volt);
Serial.println("Insira o sensor a efetuar leitura"); }
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos 40 case '8': { //configuração do DAC SPI_MasterInit(0,1); digitalWrite(10,LOW); SPI_MasterTrans3(0x00,dac[14],dac[15]); digitalWrite(10,HIGH); //configurar o Pot Wire.beginTransmission(44); Wire.write(byte(0x60)); Wire.write(byte(pot[7])); Wire.endTransmission(); //seleção do sensor
select_mux(1,8); //seleção do sensor; código apresentado no auto adaptativo
delay(100); //leitura
val=analogRead(A0);
volt = (float)((5.00*val)/1023); //conversão para tensão
Serial.println(volt);
Serial.println("Insira o sensor a efetuar leitura"); }
} } }
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
41
2. Código do sistema auto adaptativo
Função seleção do sensor
void select_mux(int linha, int coluna) { switch(linha) { case 1: digitalWrite(7,LOW); digitalWrite(8,LOW); digitalWrite(9,LOW); break; case 2: digitalWrite(7,LOW); digitalWrite(8,LOW); digitalWrite(9,HIGH); break; case 3: digitalWrite(7,LOW); digitalWrite(8,HIGH); digitalWrite(9,LOW); break; case 4: digitalWrite(7,LOW); digitalWrite(8,HIGH); digitalWrite(9,HIGH); break; case 5: digitalWrite(7,HIGH); digitalWrite(8,LOW); digitalWrite(9,LOW); break; case 6: digitalWrite(7,HIGH); digitalWrite(8,LOW); digitalWrite(9,HIGH); break; case 7: digitalWrite(7,HIGH); digitalWrite(8,HIGH); digitalWrite(9,LOW); break; case 8: digitalWrite(7,HIGH); digitalWrite(8,HIGH); digitalWrite(9,HIGH);
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos 42 break; } switch(coluna) { case 1: digitalWrite(4,LOW); digitalWrite(5,LOW); digitalWrite(6,LOW); break; case 2: digitalWrite(4,LOW); digitalWrite(5,LOW); digitalWrite(6,HIGH); break; case 3: digitalWrite(4,LOW); digitalWrite(5,HIGH); digitalWrite(6,LOW); break; case 4: digitalWrite(4,LOW); digitalWrite(5,HIGH); digitalWrite(6,HIGH); break; case 5: digitalWrite(4,HIGH); digitalWrite(5,LOW); digitalWrite(6,LOW); break; case 6: digitalWrite(4,HIGH); digitalWrite(5,LOW); digitalWrite(6,HIGH); break; case 7: digitalWrite(4,HIGH); digitalWrite(5,HIGH); digitalWrite(6,LOW); break; case 8: digitalWrite(4,HIGH); digitalWrite(5,HIGH); digitalWrite(6,HIGH); break; } }
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
43
Função de calibração do sistema
void configura(int linha,int i, int coluna) {
select_mux(linha,coluna); //seleção do sensor //variáveis auxiliares dos calculos
int x=0; int v_ohm; int ohm; int ohm_out; byte pot; float tensao; float dac_out; word dac_f; byte dac; //colocar o dac a 0V SPI_MasterInit(0,1); digitalWrite(10,LOW); SPI_MasterTrans3(0x00,0x00,0x00); digitalWrite(10,HIGH);
//colocar o LTC com ganho 1
SPI_MasterInit(0,3); digitalWrite(2,LOW);
SPI_MasterTrans1(0b0001); digitalWrite(2,HIGH);
//colocar potenciómetro na palavra digital 00h
Wire.begin(); Wire.beginTransmission(44); Wire.write(byte(0x60)); Wire.write(byte(0x00)); Wire.endTransmission(); delay(1000); tensao=(float)((5.00*analogRead(A0))/1023); //configurar o pot while(tensao<0.50) { Wire.beginTransmission(44); Wire.write(byte(0x64)); Wire.endTransmission(); delay(1000); tensao=(float)((5.00*analogRead(A0))/1023); x++; //contagem de incrementos }
v_ohm=(10000/255); //cálculo da resistência equivalente a 1 incremento
ohm=v_ohm*x; //variação de resistência para tensão ser superior a 0.5V
tensao=(float)((5.00*analogRead(A0))/1023);
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
44
pot=(ohm_out/v_ohm); //conversão para digital
EEPROM.write(i,pot); //guardar na memória
i++; //incremento da posição de memória
Wire.beginTransmission(44); Wire.write(byte(0x60)); Wire.write(byte(pot)); Wire.endTransmission(); delay(1000); //configurar o DAC SPI_MasterInit(0,1); digitalWrite(10,LOW); SPI_MasterTrans3(0x00,0xd7,0x7c); digitalWrite(10,HIGH); delay(1000); tensao=(float)((5.00*analogRead(A0))/1023);
dac_out=2.50-((2.50-tensao)/1); //cálculo do valor real do DAC
//guardar valores do dac
dac_f=((dac_out*65535)/2.97); //cálculo da palavra digital //separação dos bytes
dac=dac_f&0xff; //máscara para guardar o byte menos significativo
EEPROM.write(i+1, dac); dac_f=dac_f>>8; //shift register
dac=dac_f&0xff; //máscara para guardar o byte menos significativo
EEPROM.write(i,dac); i=i+2;
coluna++;
if(coluna<9) //condição para efetuar calibração para todos os sensores
{ if(linha<9) { configura(linha,i,coluna); } } else { linha++; if(linha<9) { coluna=1; configura(linha,i,coluna); }
} EEPROM.write(0,1); //coloca posição 0 da memória com valor 1
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos
45
Função de leitura dos sensores
void leitura(int linha, int i, coluna) { int val; float volt; select_mux(linha,coluna); Wire.beginTransmission(44); Wire.write(byte(0x60)); Wire.write(byte(EEPROM.read(i))); Wire.endTransmission(); SPI_MasterInit(0,1); digitalWrite(10,LOW); SPI_MasterTrans3(0x00,EEPROM.read(i+1),EEPROM.read(i+2)); digitalWrite(10,HIGH); delay(100); val=analogRead(A0);
volt = (float)((5.00*val)/1023); //conversão para tensão
Serial.print("Sensor "); Serial.print(linha); Serial.println(coluna); Serial.println(volt); delay(1000); i=i+3; coluna++; if(coluna<9) { if(linha<9) { leitura(linha,i,coluna); } } else { linha++; if(linha<9) { coluna=1; leitura(linha,i,coluna); } } }
Sistema auto adaptativo de leitura e aquisição de dados para sensores de pressão piezorresistivos 46