Medidas Analógicas com Basic Step 1
SENSORES E CONVERSORES AD
AS MEDIDAS ANALÓGICAS E COMO REALIZÁ-LAS COM O BASIC STEP 1
Acredito que atualmente muitos são os que buscam por respostas sobre "medidas analógicas". Neste artigo procurarei descrever alguns tipos de sensores, conversores AD e o que são as "medidas analógicas" para reforçar a teoria no assunto e , finalmente, como realizar uma medida analógica com o microcontrolador Basic Step 1.
Sempre que falamos em microcontroladores ou mesmo nos PC's (com seus poderosos processadores), pensamos logo na lógica digital presente nestes, e por conseqüência nossa referência sobre os pinos de I/O (tanto entrada como saída) também nos remetem ao mundo digital ("0" ou "1", "tudo" ou "nada").
No mundo digital, temos dois níveis previamente definidos. O "1" lógico (sempre Vcc) e o "0" lógico (GND). No "mundo analógico" poderíamos dizer que não existem tais níveis. O sinal pode variar no "tempo" de maneira quase que infinita. Para isso bastaria considerar a quantidade de números possíveis entre os valores 1 e 2: "1,000000000000000000000...01", "1,000000000000000000000...02", e assim por diante.
Claro que sempre existirão os limites, devido as limitações dos próprios componentes e outros. Um conversor AD (Analógico Digital) de oito bits pode converter valores de "0" a "5" Volts, por exemplo, em até 256 passos (de 0 a 255). Ou seja, o valor 0V seria informado com um conjunto de oito bits "0000 0000" e o valor 5 V o seria em um conjunto de oito bits "1111 1111" (255 decimal). Podemos observar que o limite de um conversor AD está justamente em seus "degraus". Mais à frente, neste artigo, falarei um pouco mais sobre isso.
Os sensores (figura abaixo) ou transdutores como são também usualmente conhecidos são componentes eletrônicos capazes de transformar uma grandeza "física" qualquer em uma "medida elétrica".
Alguns sensores são sempre mais fáceis de lidar que outros. Sensores de calor como os termistores e de luz como os LDRs podem ser considerados como o que se tem de mais simples no mundo dos sensores. Estes sensores variam sua resistência de acordo com a temperatura (termístores) ou a luz (LDR) e assim, são fáceis de lidar. Abaixo descreverei cada um deles além de passar alguns exemplos de uso.
OS TERMÍSTORES
Os "termistores" (figura abaixo) são sensores capazes de alterar sua resistência em relação da temperatura. São dois os tipos mais básicos: o PTC (Coeficiente de Temperatura Positiva) e o NTC (Coeficiente de Temperatura Negativa). Na figura mais abaixo podemos observar a curva características destes dois sensores.
O PTC tem um aumento na sua resistência conforme a elevação da temperatura. Já o NTC tem uma queda no valor da sua resistência, proporcional ao aumento da temperatura. Estes componentes são constituídos, entre outros, de "titanato de bário" (PTC) e "óxidos metálicos", como o magnésio (NTC). Sendo assim, como os resistores, estes componentes não são polarizados e não requerem o cuidado com a polarização ao serem ligados. Na figura abaixo demonstro como utilizar estes componentes. O uso de um ou outro é de livre escolha. Posso apenas dizer o seguinte sobre o seu uso: o NTC's têm melhor precisão quando a tomada de temperatura exige uma grande curva, ou seja, a faixa a ser medida é grande (por exemplo, de 0 a 100 ºC). Já o PTC tem maior precisão em pequenas variações (tomadas menores). Observe isso na curva características destes componentes na figura mais acima.
Os LDRs
Os LDRs (Resistores Dependentes da Luz) são componentes feitos de uma pequena trilha de "sulfito de cádmio", depositada sobre uma base isolante. Geralmente uma cobertura em acrílico ou esmalte é inserida sobre o material para protejê-lo. Esta "cobertura" permite a passagem da luz e protege o componente (trilha) contra a umidade, poeira, e outros. Veja a figura abaixo.
O LDR funciona da seguinte maneira: sempre que exposto à luz sua resistência irá variar. Quanto maior a intensidade luminosa a que for exposto, menor será sua resistência e quanto menor a intensidade da luz(escuro) maior será a resistência do LDR. Este tipo de componente também não é polarizado e sua ligação em qualquer circuito eletrônico não requer maiores cuidados, neste quesito.
Na figura abaixo você encontra duas maneiras de ligá-lo. Em uma é possível medir a intensidade luminosa e em outra a quantidade de sombra. Teríamos assim dois sensores, um para "luz" e outro para "sombra".
DICAS SOBRE SENSORES QUE VARIAM A SUA RESISTÊNCIA
É muito importante você perceber nos circuitos exemplos passados até aqui que em todos os casos temos a passagem da corrente elétrica pelos elementos "sensores" e neste caso, deve-se ter cuidado para que esta seja a menor possível. Se forçarmos uma corrente muito alta sobre um NTC ou mesmo PTC, este terá a tendência de aquecer, alterando sua resistência de acordo com este aquecimento também, além da temperatura a sua volta. O mesmo acontece com os LDR's. Se aplicarmos uma corrente alta sobre o mesmo, o aquecimento pode alterar significativamente o seu comportamento.
Neste caso é aconselhável calcular antes a corrente que passará sobre o sensor. Um outro detalhe que ajuda é utilizar um buffer para conexão com outros circuitos. Isso pode ser feito conforme indica a figura abaixo, utilizando um amplificador operacional como seguidor de tensão. Essa configuração tem elevada impedância na entrada, o que garante baixo dreno de corrente. Claro que você também poderia utilizar o amplificador operacional em outras configurações como "amplificador inversor", "não inversor", "diferencial", etc. Tudo dependerá da sua aplicação.
Existem outros tipos de sensores considerados "inteligentes", e conequentemente, sua operação é um pouco mais complexa. Alguns são do tipo analógico e, portanto, necessitam de um conversor AD para sua ligação a um microcontrolador qualquer, já outros são digitais. Neste último caso, o sensor tem internamente um pequeno "microcontrolador" dedicado capaz de se comunicar com um outro microcontrolador externo através de padrões/protocolos pré-definidos como: I2C, SPI, RS-232, etc.
Na figura abaixo você tem um exemplo de um sensor muito conhecido, do tipo analógico, o LM35. Este sensor aumenta ou diminui sua tensão de saída em 10 mV para cada grau Celsius de variação na temperatura. A precisão deste tipo de sensor é muito boa, já que a variação da tensão é linear.
Agora que você já possui a base teórica necessária, de acordo com as informações passadas acima sobre grandezas analógicas, grandezas "físicas" e "sensores" podemos falar um pouco mais sobre os conversores AD (Analógico Digital).
Você já deve ter percebido que vivemos num mundo completamente analógico. Tudo o que "percebemos" e "experimentamos" é analógico. A audição, a visão, o tato, o paladar e o olfato são "percepções" que podemos chamar de "analógicas". Alias, tudo na natureza é analógico!
Porém nossos computadores e microcontroladores não são perfeitos! Eles não podem compreender as "medidas analógicas" sem uma "ajudinha". E esta ajuda é feita pelos conversores AD's.
Estes componentes são capazes de receber em suas entradas um sinal analógico e convertê-lo em um valor digital fixo, expresso em bit's para que um microcontrolador posso interpretar e tratar este sinal.
NÚMERO DE BITS X PRECISÃO
Para converter um sinal analógico, um conversor AD faz algumas amostragens e depois representa a leitura realizada em um número equivalente binário (digital), dentro da sua escala de "degraus". Cada degrau representa um byte na escala de conversão. Então, quanto mais degraus, maior a precisão. E o que determina o número de degraus é o número de bits que um AD pode usar em sua escala. Um AD de 8 bits usa 256 degraus de 00H a FFH (0 a 255) e um AD de 10 bits utiliza 1024 degraus de 0000H a 03FFH (0 a 1023).
Obs.: O "H" inserido ao lado dos números refere-se à adoção do sistema de numeração hexadecimal, um sistema muito usado em computação e eletrônica e que possui 16 valores – números de 0 a 9 e letras A, B, C, D, E, F, respectivamente, os valores de 10 a 15.
Para exemplificar ainda mais, na tabela 1 você tem o comparativo do valor escalar para uma conversão do valor de 5 VDC com AD's de 8 e 10 bits.
Tabela 1 – Conversões com AD's de 8 e 10 bits de precisão
AD de 8 bits AD de 10 bits
Valor a ser convertido = 5V
Escala = Entrada/(2N-1) = 5/(28-1)= 0,0196 V (19,6 mV)
Escala = Entrada/(2N-1) = 5/(210-1) = 0,00488 V (4,88 mV)
Onde, N = número de bits do AD.
Pode-se notar que com um AD de 8 bits podemos representar de 0 a 5V em "degraus" cujos valores são de 0,0196 V cada, e com um AD de 10 bits podemos representar o mesmo valor em "degraus" cujos valores são de 0,00488 V cada. Obtemos assim, para o último caso, uma precisão muito maior.
Note também que o valor a ser enviado pelo conversor ao microcontrolador não será o valor de 0,0196V ou 0,00488, por exemplo. O conversor AD enviará um valor binário dentro da sua escala que representa a grandeza analógica em sua entrada. Cabe a "nós" "desenvolvedores" operarmos o milagre da "conversão" do valor binário para um valor decimal dentro da escala desejada. Isso será feito internamente no microcontrolador, através de equações matemáticas previamente definidas.
Um outro ponto importante a respeito é que a informação é dividida em "degraus", e se o valor ficar entre um degrau e outro, o AD poderá enviar uma leitura "flutuante", hora enviando o primeiro degrau, dentro da faixa de leitura, hora o segundo. Mas nunca um valor intermediário entre dois degraus. Os valores dos degraus são sempre fixos!
AD EXTERNO X AD INTERNO
Você deve estar se perguntando: "E fisicamente, como se mostram estes tais AD's?!?" Bom, existem vários modelos, como os CI's conversores AD's da National Semicondutores. Um deles e bastante conhecido é o modelo ADC0808, um conversor AD com apenas um canal (uma única entrada para conversão) e precisão de 8 bits e saída paralela, ou seja, existem oito pinos na saída (um para cada bit). Já o ADC0831 é um conversor AD também de apenas um canal, mas com comunicação do tipo serial "NSC MICROWIRE". O ADC0838 é um conversor AD com 8 canais (oito entradas para conversão) e 8 bits de precisão. Sua comunicação também é feita através de uma saída serial tipo "NSC MICROWIRE".
Estes ADs são CI's e portanto ADs do tipo externos e, geralmente, são aplicados com microcontroladores que não possuem conversores AD internamente. Porém hoje em dia, a maioria dos fabricantes de microcontroladores oferece em sua linha de produtos, alguns modelos que têm internamente conversores AD e a maioria com precisão de 10 bits.
É o caso do PIC12F675 da Microchip® que tem apenas 8 pinos mas 4 canais AD de 10 bits cada. Já o PIC16F877 (também Microchip) possui 8 canais AD de 10 bits.
Neste caso o "CI" conversor AD está incorporado internamente ao microcontrolador e lidar com estes torna-se mais fácil (não existem ligações externas, protocolos, etc). Precisamos apenas configurar alguns registradores e ler em outros os valores das conversões. Algumas interrupções para "término de conversão", por exemplo, também são disponibilizadas para facilitar ainda mais a vida do "desenvolvedor". Neste artigo não tratarei do uso dos AD's internos nos microcontroladores.
Obs.: Todos os fabricantes de microcontroladores como a Motorola, Atmel, Microchip, National, e outros possuem em sua linha de microcontroladores versões com conversores AD internos.
USANDO OS CANAIS AD DO BASIC STEP 1
O Basic Step 1 possui uma família com três membros: Basic Step 1 módulo, Basic Step 1 OEM e Basic Step 1 LT (Ligth). Destes três, os dois primeiros citados possuem cinco canais AD's de 10 bits cada. O uso destes canais é bem simples. Basta ligá-los as entradas a serem analisadas, desde que respeitadas algumas regras:
- O valor a ser lido não pode superar 5 VDC (valores maiores devem ser atenuados para que fiquem dentro da faixa permitida);
- Não existe entrada para alterar a referência e ela será então sempre 0 V (GND);
- Não é possível fazer a medida de sinais alternados sem que seja feita antes uma conversão AC/DC;
- Não é possível realizar a medida de tensões negativas, apenas positivas.
Se você respeitar estas regras poderá utilizar os canais AD's do Basic Step 1 sem maiores problemas.
Para ler um canal AD o compilador TBASIC ganhou uma instrução nova: write. Basta escrever o valor 0 no canal desejado para se ler o mesmo (write 0,0 - lê o canal AD0, write 0,1 lê o canal 1 e assim sucessivamente). Um outro detalhe não menos importante é que todo valor convertido, seja de que canal for, será sempre inserido na variável de 16 bits W0. Esta variável é composta por duas de 8 bits b0 e b1. Na figura abaixo você tem um esquema elétrico exemplo que mostra como usar o Basic Step 1 e seus canais AD.
Optei por usar um simples potenciômetro (ou mesmo trimpot) para verificar "manualmente" a variação do valor lido de 0 a 5V e um divisor resistivo 10k/10k Ohm para ler um tensão fixa de aproximadamente 2,5VDC (para ler esta entrada é preciso mudar no programa o número do canal - de write 0,0 para write 0,1). Os valores são apresentados em um LCD do tipo serial. Mais abaixo você encontrará o código fonte do programa, devidamente comentado, para uma melhor compreensão do seu funcionamento.
'PROGRAMA - TESTE_AD_BS.BAS
'DESENVOLVIDO POR MÁRCIO JOSÉ SOARES
'OBS: ESTE PROGRAMA SÓ FUNCIONARÁ COM BASIC STEP 1
'FIRMWARE 2.6 ou superior
'COMPILADOR TBASIC 1.0.0.0
symbol cmd=254 'habilita lcd p/ receber comandos
symbol clear=1 'apaga display
symbol posi=168 'posiciona cursor no lcd
dirs=%11111111 'todos I/Os como saída
pause 500 'espera display iniciar
serout 0,N2400, (cmd,clear) 'apaga display
pause 10 'aguarda 10 ms
serout 0,N2400, ("Lendo AD - Cn 0") 'escreve no display
write 0,0 'colhe do canal analogico
w1=w0*10 'em W1, W0x10
w1=w1/205 'W1 é auxiliar de W0. W1=(W0x10)/205
b4=w1/10 'em b4 parte inteira do valor
b6=b4*10 'b5 é auxiliar de b4. b6 = b4x10
b5=w1-b6 'em b5 parte decimal. b5 = (w1/205)-(b4x10);
serout 0,N2400,(cmd,posi) 'muda linha no display
serout 0,N2400,(#b4, ".", #b5, "V") 'mostra b4 e b5
pause 500 'espera para próxima leitura
goto loop 'faz eternamente
Em seus testes você poderá usar um NTC, PTC ou LDR para obter os valores em graus centígrados, quantidade de "luz" ou ainda outra medida. Para isso terá de compor uma nova fórmula, diferente da apresentada no meu programa. E acredito que sem dúvida alguma a maior dificuldade encontrada será sempre no tratamento do resultado. O compilador do Basic Step 1 não possui instruções diretas de conversão e sendo assim, alguns artifícios deverão ser adotados. Estude o programa fornecido. Com certeza você chegará ao que precisa.
Você também pode, tomando como exemplo o uso de um sensor de temperatura (NTC ou PTC), adotar a seguinte solução: compor uma tabela com os valores possíveis de "0 à 100º C" em passos de "1 ºC" ou preferencialmente "10 ºC" (de acordo com as necessidades de cada um). Nesta "tabela", cada medida seria aferida com o auxilio de um termômetro comum e seu valor anotado. Sempre que o STEP converter um dado, ele deve verificar esta tabela e informar o valor referente. Isso pode ser feito com o comando "IF"
IF valor = tabela THEN mostre_resultado
A desvantagem deste tipo de programa é seu tamanho final. Dependendo do caso, ele não caberá no Basic Step 1.
Existem outras formas de tratamento que não somente informar uma determinada grandeza. Você pode também monitorá-la. Você poderá, por exemplo, monitorar uma ou duas temperaturas distintas. Neste caso não há a necessidade da tabela, basta apenas saber qual valor representa cada temperatura a ser medida.
Os canais AD do Basic Step 1 também podem ser utilizados para medir a tensão de uma bateria de 12V, por exemplo. Neste caso, a tensão deve antes ser "tratada" para se equiparar aos níveis de entrada do canal AD do Basic Step 1 (lembra-se das regras passadas?). A figura abaixo mostra um simples divisor resistivo. Quando a tensão máxima na entrada do divisor for 12 V, a mesma será de 5 V em sua saída.
Nesta artigo tentei passar a você algumas informações sobre sensores, conversores AD e "medidas analógicas" utilizando o microcontrolador Basic Step 1. Espero ter ajudado todo aquele que buscava por informações sobre o assunto e desejo trazer outras muito em breve, já que o assunto "Medidas analógicas" é bem vasto e muito interessante. Boas experiências e até a próxima!