• No results found

4 Avbøtende tiltak

3.7 S TØY OG VIBRASJONER

Depois de ser conhecido o valor da radia¸c˜ao recebida por ambos os sensores bem como a temperatura a que eles se encontram, ´e muito f´acil de calcular a temperatura do corpo. para isso basta desenvolver um algoritmo que efectue os c´alculos descritos no cap´ıtulo 5 (equa¸c˜ao 5.4):

Tc= p s U1Ts2p − U2Ts1p U1 − U2 .

Um poss´ıvel algoritmo ´e o 10.1 onde T empQuente e T empF ria representam

1

Um m´etodo simples e pr´atico de calibra¸c˜ao ´e ligar na ponte, em vez do sensor, trˆes re- sistˆencias de valor conhecido e a partir da equa¸c˜ao 8.4 calcular as temperaturas corresponden- tes.

10.2. C´alculo da temperatura

Algoritmo 10.1 C´alculo da temperatura do corpo. RadQuente ← lerADC(1)

RadF ria ← lerADC(2) dig ← lerADC(3)

T empQuente ← a1× dig2+ b1× dig + c1

dig ← lerADC(4)

T empF ria ← a2× dig2+ b2× dig + c2

T qP ← pow(T empQuente, p) T f P ← pow(T empF ria, p)

numerador ← RadQuente × T fP − RadF ria × T qP denominador ← RadQuente − RadF ria

if denominador 6= 0 then

radical ← numerador/denominador temperatura ← pow(radical, 1/p) Ajustaunidades(temperatura) end if

respectivamente as temperaturas a que se encontram os dois sensores (Ts1 e Ts2 da

equa¸c˜ao 5.4 respectivamente) e RadQuente e RadF ria s˜ao os valores da radia¸c˜ao que cada um deles recebe (U1 e U2 da mesma equa¸c˜ao).

O valor da temperatura, por defeito vem em Kelvin, como n˜ao podia deixar de ser. O procedimento AjustaU nidades serve para converter o seu valor numa outra escala preferida pelo utilizador. Como op¸c˜ao existem trˆes outras escalas: Celsius, Fahrenheit e Rankine. Para a convers˜ao foi usado o algoritmo 10.2.

Algoritmo 10.2 Ajuste das unidades de temperatura para outras escalas. if escala = Kelvin then

temperatura ← temperatura end if

if escala = Celsius then

temperatura ← temperatura − 273.15 end if

if escala = F ahrenheit then

temperatura ← 1.8 × temperatura − 459.67 end if

if escala = Rankine then

temperatura ← 1.8 × temperatura end if

10.2.1

C´alculo num´erico de a

b

sendo a e b n´umeros reais

No algoritmo do c´alculo da temperatura ´e usada uma fun¸c˜ao “pow(a, b)”, que calcula o valor de ab, sendo a e b n´umeros reais.

A fun¸c˜ao potˆencia de base e expoente reais pode ser vista como sendo uma fun¸c˜ao real de duas vari´aveis reais em que

f (a, b) = ab (10.1)

Para que o c´alculo se torne mais simples, e como ´e poss´ıvel, esta fun¸c˜ao decomp˜oem-se noutras duas de apenas uma vari´avel. Calculando o logaritmo de ambos os termos da equa¸c˜ao fica:

log (f (a, b)) = logab= b. log(a) calculando agora a exponencial da igualdade anterior, fica:

f (a, b) = eb. log(a) (10.2)

ou seja, para que se calcule o valor de ab, deve ser calculado o logaritmo de a,

multiplicar este por b e achar a exponencial do resultado. O ´unico problema da simplifica¸c˜ao ´e que a deve ser um n´umero pertencente ao dom´ınio da fun¸c˜ao logaritmo, ou seja, positivo. Na fun¸c˜ao f (a, b) = ab, a n˜ao tem que ser neces-

sariamente positivo. No caso do software do prot´otipo esta restri¸c˜ao n˜ao imp˜oe nenhuma limita¸c˜ao uma vez que apenas ´e necess´ario calcular potˆencias de base positiva.

O problema ficou mais simples, mas ainda ´e necess´ario calcular o valor num´erico das fun¸c˜oes f (x) = ex e f (x) = log(x).

10.2.2

C´alculo num´erico da fun¸c˜ao exponencial

Para efectuar o c´alculo num´erico da fun¸c˜ao ex em que x ´e um n´umero real,

come¸ca-se por dividir o expoente (x) em duas partes: a parte inteira e a parte fraccion´aria. Se se chamar xi `a parte inteira de x e xf `a sua parte fraccion´aria,

ex = exi × exf (10.3)

O c´alculo da exponencial de um n´umero inteiro ´e f´acil de realizar, basta mul- tiplicar a base por si pr´opria o n´umero de vezes indicado no expoente, no entanto este m´etodo exige muitas multiplica¸c˜oes, sobretudo se o expoente ´e um n´umero elevado. Quando se est´a a programar um microcontrolador de uso geral, as multiplica¸c˜oes devem ser opera¸c˜oes a evitar, j´a que consomem muito tempo de processamento, podendo tornar o algoritmo invi´avel para aplica¸c˜oes em tempo real. Mas existem alternativas. . .

Se o expoente for uma potˆencia de 2, o c´alculo fica muito simplificado pois basta elevar a base ao quadrado e ir multiplicando o resultado por si pr´oprio at´e se chegar ao n´umero de indicado pelo expoente. Exemplo: o c´alculo de e16 seria

10.2. C´alculo da temperatura

resultado ← e × e ; e2

resultado ← resultado × resultado ; e4

resultado ← resultado × resultado ; e8

resultado ← resultado × resultado ; e16

Assim o resultado final ´e alcan¸cado com apenas quatro multiplica¸c˜oes, em vez de quinze! Este m´etodo ´e bom quando o expoente for uma potˆencia de base 2, s´o que isto acontece muito poucas vezes. Com pequenas altera¸c˜oes, o algoritmo adapta-se a qualquer n´umero, j´a que todos se podem decompor num somat´orio de potˆencias de base 2. Exemplo:

11 = 23+ 21+ 20

Ent˜ao, para se calcular e11, seria necess´aria a decomposi¸c˜ao do expoente (11)

num somat´orio de potˆencias de base 2, ou seja: e11= e23+21+20

o algoritmo necessitar´a apenas de uma vari´avel auxiliar e ficar´a do seguinte modo: resultado ← 1

auxiliar ← e

resultado ← resultado × auxiliar ; 20

auxiliar ← auxiliar × auxiliar

resultado ← resultado × auxiliar ; 21

auxiliar ← auxiliar × auxiliar

; n˜ao se actualiza o resultado ; 22

auxiliar ← auxiliar × auxiliar

resultado ← resultado × auxiliar ; 23

No caso do expoente ser onze, o resultado n˜ao ´e actualizado na potˆencia relativa a 22, j´a que esta n˜ao faz parte da decomposi¸c˜ao do n´umero. Com um

microcontrolador este c´alculo torna-se ainda mais simples, j´a que os n´umeros inteiros est˜ao representados na sua mem´oria em potˆencias de 2 (nota¸c˜ao bin´aria).

11decimal = 1011bin´ario

O estudo generalizado para um n´umero de n bits pode ser visto na tabela que cont´em o algoritmo 10.3.

E fica assim conclu´ıdo o c´alculo de exi em que x

i ´e um n´umero inteiro.

Para o c´alculo de exf em que x

f ´e um n´umero real entre zero e um, pode ser

usado um desenvolvimento em s´erie de Taylor, j´a que esta converge rapidamente para exponenciais cujo expoente est´a entre zero e um. O desenvolvimento em s´erie de Taylor para a fun¸c˜ao exponencial, em torno do ponto zero ´e o seguinte [Pisk 87] ex = 1 + x +x 2 2 + x3 3! + x4 4! + x5 5! + · · · + xn n!

Algoritmo 10.3 C´alculo de exi resultado ← 1

auxiliar ← e for i = 1 to n do

if biti = 1 then

resultado ← resultado × auxiliar end if

auxiliar ← auxiliar × auxiliar end for

que com o objectivo de poupar multiplica¸c˜oes, pode ser arranjada da seguinte forma: ex = 1 + x  1 + x 1 2+ x 1 3!+ x 1 4! + x 1 5! + · · · + x 1 n!  (10.4) A equa¸c˜ao 10.4 mostra claramente que para se desenvolver a s´erie at´e `a ordem n, s˜ao necess´arias apenas n multiplica¸c˜oes.

10.2.3

C´alculo num´erico da fun¸c˜ao logaritmo

A s´erie de Taylor n˜ao est´a definida para a fun¸c˜ao f (x) = log(x), no entanto est´a-o para f (x) = log(1 + x) e para esta fun¸c˜ao, o desenvolvimento ´e o seguinte:

log(1 + x) = x − x 2 2 + x3 3 − x4 4 + x5 5 − · · · + (−1) n+1xn n (10.5)

Para ser poss´ıvel o c´alculo num´erico de um logaritmo, basta fazer a seguinte mudan¸ca de vari´avel:

log(y) = log(1 + x) ⇔ y = x + 1 ou seja, o valor de x a aplicar na equa¸c˜ao 10.5 ser´a dado por:

x = y − 1

em que y ´e o n´umero sobre o qual se pretende obter o logaritmo.

Esta s´erie, tal como a da exponencial, converge rapidamente para valores de y pr´oximos de 1 (x pr´oximo de zero), n˜ao acontecendo o mesmo `a medida que y aumenta. Mas para tornar o c´alculo mais f´acil, os n´umeros em v´ırgula flutuante s˜ao representados na mem´oria do microcontrolador do seguinte modo:

y = m × 2n

em que m ´e a mantissa e n o expoente de base 2. Para se efectuar o c´alculo do logaritmo de um n´umero assim representado basta fazer: