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
bsendo 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: