Escolar Documentos
Profissional Documentos
Cultura Documentos
em
Microprocessadores
Trabalho Final Medidor EletroResistivo em DSP
ndice
0 Introduo e objetivos
1 Descrio Geral do Problema
1.1 O Sensor Eletro-Resistivo
2 Aparato Experimental e ferramentas utilizadas
2.1 Construo da Sonda
2.2 Circuito Analgico
2.3 O DSP F28335 da Texas Instruments
2.4 Teclado Matricial
2.5 Display LCD de caracteres
2.6 Comunicao Serial
2.6.1 Transmisso Assncrona
2.6.2 Transmisso Sncrona
3 Parmetros de Projeto
3.1 Anlise espectral e determinao da frequncia de amostragem
3.2 - Filtro Passa Altas
3.2.1 Funo de transferncia em tempo contnuo
3.2.2 - Funo de transferncia em tempo discreto e equao a diferenas
3.3 Deteces falsas dos sensores Eletro-Resistivos
3.4 Algoritmo de Digitalizao do sinal
3.5 Algoritmo de Obteno de parmetros
3.6 O critrio de Chauvenet
3.6.1 Critrio de chauvenet adaptado para operar em tempo real
4 Utilizao e programao do DSP
4.1 Configurao da CPU, Inicializao de perifricos e interrupes
4.2 Configurao de ADC
4.2.1 Configurao do ADC na funo main
4.2.2 Algoritmo de digitalizao, deteco e rejeio na funo de interrupo ADC
4.2.2.1 Associao do valor de converso de 12bits a uma varivel float
4.2.2.2 Filtro passa-altas, digitalizao e aplicao da funo diferencial
4.2.2.3 Determinao de Resultados e critrio de rejeio de Chauvenet
4.3 Entradas e Sadas Digitais (GPIO)
4.3.1 Mapa de entradas e sadas digitais aos perifricos (display e teclado)
4.3.2 Instrues de Configurao dos pinos GPIO
4.3.3 Funes bsicas utilizadas nos GPIO
4.3.4 Menu de interao com o usurio
4.3.5 Fluxograma de uso do GPIO
4.4 Interface de Comunicao Serial (SCI)
4.4.1 Programa em CVI para comunicao serial com DSP e aquisio de dados
P g i n a 1 | 59
5 Resultados Obtidos
5.1 Menu de comunicao com o usurio
5.2 Frequncia de amostragem do ADC
5.3 Resultados obtidos no programa de interface serial
5.4 Comparao entre os resultados obtidos pelo DSP e pelo Matlab
6 Concluso
7 - Bibliografia
P g i n a 2 | 59
0 Introduo e Objetivos
A caracterizao de escoamentos multifsicos atravs de ferramentas e instrumentos adequados,
pode conduzir a otimizao de processos e sistemas. A proposta deste trabalho desenvolver um sistema de
medio em tempo real, baseado em DSP, que permita ao usurio o monitoramento (atravs de um programa
com interface serial ou atravs do display de caractere) e aquisio de dados.
O sensor eletro-resistivo vem sendo desenvolvido j h muitos anos no laboratrio de mecnica da
turbulncia (integrante do NIDF, Ncleo interdisciplinar de Dinmica dos Fluidos). Algumas sondas foram
desenvolvidas e o circuito analgico foi projetado. Os resultados eram armazenados via conversor A/D no
matlab e em seguida digitalizados atravs da utilizao de um trigger. Os valores de velocidade eram calculados
manualmente, em uma anlise off-line, a partir da defasagem entre dois sinais. Nenhum critrio de rejeio de
sinais discrepantes provenientes da intruso do sensor no escoamento, foi criado.
A proposta deste trabalho criar um instrumento baseado em DSP que execute a medio,
digitalizao do sinal, com rejeio de sinais discrepantes, e indique os resultados em tempo real ao usurio,
que, opcionalmente poder tambm fazer aquisio de dados. Para tanto,utilizaremos um desses antigos
sinais da sonda, aquisitados e armazenados no matlab, como entrada para o DSP, j que as sondas existentes
precisam ser reconstrudas.
No captulo 1, apresentaremos uma descrio geral do problema, introduzindo o mtodo de medio
por sensor eletro-resistivo. No captulo 2 apresentaremos o aparato experimental e ferramentas utilizadas no
projeto. No captulo 3 discriminaremos todos os parmetros de projeto. No captulo 4, apresentaremos como
foi feita a programao no DSP e no captulo 5 veremos os resultados obtidos.
P g i n a 3 | 59
P g i n a 4 | 59
Os padres de escoamento em tubos verticais podem ser classificados da seguinte forma: bolhas
dispersas, Slug, Churn e anular. Na figura 2 abaixo podemos ver uma ilustrao para cada padro
mencionado.
P g i n a 5 | 59
Como podemos ver na figura 3, nosso sistema basicamente conta com o tanque de vidro de 300L cheio de
gua, com um pequeno compressor de ar provocando a produo do gs no fundo do reservatrio. Os
sensores, defasados verticalmente de uma distncia dx, percebem a passagem da pluma de bolhas. Cada
sensor apresentar uma resistividade em relao a haste metlica que se apresenta afogada no tanque. Cada
sonda servir de entrada ao seu circuito analgico, que basicamente conta com uma ponte de wheatstone, um
amplificador de instrumentao e diodo zener de proteo. Desta forma, cada sinal de tenso servir de
P g i n a 6 | 59
entrada a uma porta ADC do DSP F28335 da Texas Instruments. O microprocessador ento aplicar o algoritmo
de digitalizao do sinal (passa altas e comparadores de nvel de sinal, derivada primeira e derivada segunda),
em seguida utilizar o algoritmo de obteno dos parmetros, com rejeio sistemtica de sinais oriundos das
falhas intrusivas do sensor (este tema ser melhor abordado nas sees seguintes) e rejeio estatstica de
resultados fora do padro (critrio de chauvenet). O processador utilizar ainda um pequeno teclado matricial
de 1 linha e 4 colunas e um display LCD de caractere de 16x2.
Utilizando os pinos GPIO, foram configuradas 4 entradas digitais com sensibilidade a transio
para nvel lgico baixo e 12 sadas para comunicao paralela com os pinos do display. oferecido ao usurio
um pequeno menu, dando opes de entrar com distncia entre sondas (dx) e as unidades dos parmetros
medidos (m/s ou mm/s e Hz ou Rpm). O menu controlado no teclado matricial e observado no display. Este
ltimo, ainda, mostra os resultados das medies feitas em tempo real.
Uma outra opo dada ao usurio a de fazer aquisio via comunicao serial (SCI-A) de dados
e monitoramento dos resultados em um software dedicado, feito atravs do CVI (National Instruments). Neste,
teremos a possibilidade de gravar os resultados em arquivos txt e csv (excel).
Vale lembrar que, para este projeto, no foi possvel utilizar o sistema de forma completa pois
a sonda precisava ser reconstruda. Desta forma, para fazer os devidos testes no sistema desenvolvido com o
DSP, utilizamos um sinal antigo obtido atravs do conversor A/D de uma placa de aquisio. Portanto, a parte
do projeto correspondente ao reservatrio, compressor, sonda e circuito analgico foi substituda por uma
placa PCI 6014 da NI que exporta o sinal via porta D/A, utilizando o Matlab/Simulink. Porm, para efeito de
conhecimento da origem do sinal exportado e para futuras etapas deste mesmo projeto explicaremos todos
os componentes e ferramentas nas sees seguintes.
P g i n a 7 | 59
A ponta da agulha dever ser o mais fina possvel, sem comprometer a robustez da sonda. Quanto maior
a agulha utilizada na sonda, maior ser a influncia destrutiva do sensor nas bolhas e piores sero os resultados
gerados. Na figura 5 abaixo podemos ver algumas sondas depois de construdas.
Conforme descrito anteriormente, utilizaremos duas sondas paralelas defasadas de uma distncia conhecida.
A figura 6 abaixo ilustra a disposio paralela dos sensores.
P g i n a 8 | 59
Como podemos observar no circuito acima, a resistncia Rx na ponte de Wheatstone varivel de acordo
com a resistividade do meio. Como o amplificador de instrumentao apresenta alta impedncia, logo a
corrente que circular por R4 ser praticamente nula, a ponto de desprezarmos a queda de tenso nestes
resistores. Assim, portanto, as tenses de entrada no amplificador de instrumentao sero dadas por:
+ = 3+
e = 1+2 (1)
Observe que V+ diretamente proporcional a resistividade do meio em que a sonda est inserida, pois
depende de Rx e V- constante pois no depende desta varivel.
Temos ainda, no circuito da figura 7, um filtro passa baixas conforme recomendao do fabricante do CI
INA111. Analisando a disposio dos capacitores no circuito, chegamos a seguinte equao:
3 =
44 (3 + 1 )
(2)
Este tipo de configurao importante para garantir a filtragem em caso de diferena entre os capacitores C1
e C2 que devem ser iguais.
P g i n a 9 | 59
50
(3)
Utilizando uma resistncia Rg de 47K, teremos que o ganho obtido pela equao 3 ser de 2.1.
Aps a passagem pelo amplificador, utilizamos um diodo zener IN4729 e um diodo IN4148 a fim de limitar a
tenso de entrada na porta ADC do DSP em 2.9V (3.6V do zener menos 0.7V do IN4148).
A resistncia R5 pode ser obtida pela seguinte expresso
5 =
12
(4)
Sabendo que Vz vale 3.6V e Iz, segundo o datasheet do fabricante do IN4729, vale 1mA, obtemos que R5
dever ser de 8.4K.
P g i n a 10 | 59
Como podemos ver na figura 8, o DSP possui dois barramentos indepentes: o barramento de dados (Data Bus)
e o barramento de programa (Program Bus). Esta caracterstica possibilita a leitura e transferncia de dois
operandos da memria para a CPU em um nico pulso de clock.
Na figura 8, observamos ainda a presena de registradores auxiliares de 32bits, registradores de 32bits para
multiplicao e adio em ponto fixo e uma unidade de hardware de 32bits chamada FPU para clculos em
ponto flutuante.
Em nosso projeto, utilizaremos 2 canais do mdulo ADC (de converso sincronizada a um ePWM), 14 canais
do mdulo GPIO (10 sadas e 4 entradas digitais), e interface de comunicao serial (SCI-A). Faremos a
programao na memria Flash.
P g i n a 11 | 59
No projeto, cada tecla quando apertada aplica uma transio de nvel lgico da entrada digital
correspondente de 1 para 0. Desta forma, cada tecla est associada a uma entrada e todas elas quando
pressionadas comunicam o seu pino a um quinto pino de ground.
P g i n a 12 | 59
No display, os pinos so enumerados de 1 a 16, da esquerda pra direita. Alguns no possuem os pinos 15 e
16, responsveis pelo backlight, possuindo, portanto, apenas 14 pinos. Na tabela 1 abaixo podemos ver
algumas instrues de entrada que sero teis neste projeto.
Tabela 1 instrues aplicveis ao display de caractere
A temporizao entre um enable on e enable off (na tabela, a transio entre estes estados foi
representada por 0-1-0 conforme variao de nvel lgico no pino) para cada instruo normalmente de
37s, de acordo com o datasheet do fabricante. As nicas excees so as instrues de Clear Display (linha
2 da tabela 1) e Cursor Home (linha 3 da tabela 1) cuja temporizao de 1.52ms.
Para escrever um caractere no display, basta utilizar a correspondente sequncia de bits (que pode ser obtida
da tabela ASCII) nos pinos D0-D7, com o RS em nvel lgico 1 e respeitando a temporizao entre o Enable
on e Enable off.
Desta forma, em nosso projeto fizemos as seguintes ligaes de pinos:
P g i n a 13 | 59
Conforme podemos observar na figura 11, uma transmisso de caractere somente iniciada aps o
start bit, que atribui nvel lgico zero em um perodo de tempo aps o estado de repouso (nvel lgico alto).
Aps o Start Bit, inicia-se a transmisso a cadeia de bits que formaro o caractere. A quantidade de bits
transmitidos por caractere pode ser previamente escolhida e normalmente varia entre 5 e 8 bits. Aps a
transmisso do conjunto de bits, ocorre um bit de paridade (para verificao da consistncia da transmisso
feita) e, aps, ocorre o bit de stop, onde novamente ocorre a fixao em nvel lgico alto. O intervalo de tempo
T de transmisso de 1 bit est diretamente relacionado ao baud rate que a taxa de transmisso em bits
por segundo. Desta forma temos que:
Medidor Eletro-Resistivo em DSP
P g i n a 14 | 59
P g i n a 15 | 59
3 Parmetros de Projeto
Neste captulo abordaremos os parmetros de projeto, algoritmos criados e apresentaremos os problemas
encontrados e suas respectivas solues.
Conforme podemos observar na figura 12, o espectro do sinal est todo concentrado na regio de baixas
frequncias. A maior frequncia observada nesta anlise espectral foi de 280Hz. Portanto, utilizando o critrio
de Nyquist para frequncia de amostragem e sabendo que o sinal que ser utilizado foi amostrado a uma
frequncia de 5KHz, teremos que a frequncia de amostragem do ADC do DSP dever estar entre:
= (6)
(limitao inferior dada pelo critrio de Nyquist)
(7)
P g i n a 16 | 59
(limitao superior dada pela frequncia de amostragem do sinal antigo que ser utilizado)
() = + = +0.1256 (9)
Simulando este filtro no simulink, com o sinal da sonda como entrada, teremos o resultado da figura 13.
Como podemos observar na figura 12, a componente DC foi perfeitamente eliminada do sinal.
P g i n a 17 | 59
2
0
11
1+ 1
(10)
() =
22 1
1 (0 2)+(2+0 )
()
()
(11)
Nas equaes 10 e 11 temos que T0 o perodo de amostragem, Y(z) o sinal discretizado de sada e
U(z) o sinal discretizado de entrada. Aplicando a transformada Z inversa da equao 11, sabendo que Y(z)*z 1
= ytk-1 e Y(z) * constante = constante*ytk (o mesmo vlido para u(z)) teremos a seguinte equao a
diferenas do filtro passa altas, que ser implementada em cdigo no DSP:
2 2 +1 (20 )
2+ 0
(12)
Deteces falsas dos sensores eletro-resistivos podem ocorrer tanto na sonda individual quando no
par de sensores. Qualquer deteco que no esteja relacionada a uma dinmica intrusiva de pouca influncia
na geometria do escoamento (no caso da sonda individual) ou de deteco da mesma bolha por parte das
duas sondas considerada falsa. No nosso caso, um escoamento bifsico de ar e gua, em uma sonda
individual podemos citar os seguintes problemas:
1 Bolha deformada pelo sensor: quando uma bolha deformada pelo sensor um atraso gerado entre o
momento da chegada na bolha no sensor e a mudana de fase a ser percebido pelo mesmo. Isso ocorre em
funo do uso de agulhas um pouco grossas.
2-Bolha desviada do sensor: ocorre quando uma bolha passa pela regio do sensor, porm defletida e no o
toca, ou seja, no percebida por ele.
3- Bolha Rompida pelo sensor: ocorre quando o sensor lentamente deforma a bolha at a sua ruptura. Nesta
situao o sensor no detecta a bolha.
Na figura 13 podemos ver essas trs situaes ilustradas
P g i n a 18 | 59
P g i n a 19 | 59
Desta forma, um algoritmo de processamento dos sinais deve ser capaz de:
1) Rejeitar um sinal detectado por uma sonda e no detectado pela outra
2) Rejeitar quando o sinal da segunda sonda aparecer antes da primeira
3) Rejeitar um resultado quando ele for formado por duas bolhas distintas no lugar de uma
Observe que o sinal, na passagem da bolha, sobe lentamente. Isso deve ao filme de lquido remanescente na
sonda e que demora a secar.
A digitalizao do sinal depender de quatro variveis: a derivada primeira do sinal; a derivada segunda do
sinal; a sada do filtro passa altas; o sinal digitalizado no instante t-1. No diagrama simulink da figura 16
abaixo, podemos entender melhor a lgica de binarizao do sinal.
P g i n a 20 | 59
P g i n a 21 | 59
Sabendo que o par de sensores est defasado de uma distncia dx, podemos calcular a velocidade da
bolha:
=
(13)
Sabendo o valor da velocidade e o tempo que a bolha leva para atravessar o sensor (Tbolha), podemos
determinar o seu tamanho:
=
(14)
P g i n a 22 | 59
Como podemos observar na figura 18 acima, atravs do sinal digital diferencial podemos delimitar o instante
de incio da passagem da bolha como 1 e o instante do fim da bolha como -1. Desta forma, para calcular os
parmetros da bolha, basta seguir 5 passos:
1) Iniciar contador1 e contador2 quando a sonda 1 apresentar um sinal diferencial igual a 1.
2) Quando a sonda 2 apresentar sinal diferencial 1, parar o contador1. Sabendo que T0 o perodo de
amostragem, teremos que:
T = (contador1-1)*T0
Velocidade = dx/T
Incrementar um contador3
3) Quando o sinal diferencial 1 atingir o valor -1 (final da bolha), verificar se o passo 2 realmente aconteceu.
Se o passo 2 tiver acontecido:
Parar contador2
Tamanho_bolha = (contador2-1)*T0*Velocidade
4) Zerar contadores 1 e 2
Frequencia = contador3/Tfreq
Zerar contador3
P g i n a 23 | 59
Desta forma, podemos verificar que apenas falta criar uma rotina de rejeio de um sinal quando os
dois sensores percebem bolhas diferentes na correta ordem de subida (sensor 1 e depois sensor 2), resultando
em valores aleatrios de velocidade. Para resolver este problema, utilizaremos um critrio estatstico que ser
apresentado na prxima seo.
Como podemos observar da figura 19, os resultados considerados ruins so aqueles que so maiores
que a mdia somados de uma constante vezes o desvio padro ou menores que a mdia subtrados de uma
constante vezes o desvio padro. Essa constante C varia de acordo com o nmero de amostras e pode ser
obtida da tabela 2 abaixo.
P g i n a 24 | 59
N
3
4
5
6
7
8
9
10
15
20
25
50
100
300
500
1000
C
1,38
1,54
1,65
1,73
1,80
1,87
1,91
1,96
2,13
2,24
2,33
2,57
2,81
3,14
3,29
3,48
Portanto, em um conjunto N de amostras, uma medida ser considerada boa se estiver na faixa:
. ( ) + . , = 1, 2, (16)
Em que:
=
=1
()
=
=1
(17)
()
1
(18)
P g i n a 25 | 59
P g i n a 26 | 59
P g i n a 27 | 59
P g i n a 28 | 59
Determina o nmero de canais a serem convertidos. Se igual a zero, teremos apenas um canal de converso.
Como queremos utilizar dois canais de converso em nosso projeto, atribuiremos a instruo em
hexadecimal 0x0001 a este registrador.
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x3; AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x2;
A instruo acima uma mscara que habilita a converso ADC via Epwm.
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1;
CMPA responsvel pela largura do pulso (lembrando que CMPA deve ser sempre menor que TBPRD)
EPwm1Regs.TBCTL.bit.CTRMODE = 0;
P g i n a 29 | 59
Aqui eu defino a frequncia de pwm. Como nosso pwm do tipo count up, vlida a regra: TBPRD = Tpwm *
sysclkout / clkdiv*hspclkdiv. Observe que Tpwm o mesmo que TADC pois o pwm quem temporiza a converso.
Desta forma, escolhendo um intervalo de aquisio de dados definido como T0 (210s), sabendo que CLKDIV=1
e HSPCLKDIV = 2 por default e a frequncia de CPU (SYSCLkOUT) igual a 150000000, logo TBPRD = 210*10-6 *
150 *106/2 = 15750
Nas linhas de cdigo acima, temos duas variveis inteiras de 16bits (Voltage1 e Voltage2) associadas aos valores
de converso de 12bits do ADC (ADCRESULT0 e ADCRESULT1) que so deslocados de 4bits a direita para que o
valor de converso de 12bits ocupe as primeiras posies da varivel de 16bits. Em seguida, essa varivel inteira
convertida em um float, multiplicando o valor inteiro pelo maior valor lido pela entrada ADC (3V) e dividindo
pelo maior valor inteiro que pode ser obtido pelo registrador de 12bits (212 1 = 4095).
P g i n a 30 | 59
As demais linhas de cdigo so responsveis por associar valores iniciais para as variveis utk1 e utk2 que na
verdade so as prprias entradas de sinal do ADC. Uma varivel auxiliar (aux4) foi criada para garantir que
essas instrues apenas sejam feitas uma vez. Aps isso, a varivel que um vetor de floats com trs posies
ir se atualizar de forma cclica, ou seja, sempre a posio 2 do vetor ser a mais atual, a posio 1
corresponder ao valor anteriormente lido e a posio 0 ao valor lido h dois ciclos atrs.
4.2.2.2- Filtro passa altas, digitalizao e aplicao da funo diferencial
Nas linhas de cdigo a seguir veremos a aplicao dos algoritmos de digitalizao do sinal, filtro passa altas e
funo diferencial de sinal digitalizado no sinal.
ytk[2] = (2*utk1[2] - 2*utk1[1]+((ytk[1])*(2-T0*wc)))/(2 + T0*wc);
der1 = (ytk[2]-ytk[1])/(T0*800);
der2 = (ytk[2]-2*ytk[1]+ytk[0])*(0.0000004)/T0;
result[2]=((der1>0.1)||result[1])&&(1-((der1>-0.12)&&(der1<0)&&(der2>0)&&(ytk[2]<0.2)));
ytk2[2] = (2*utk2[2] - 2*utk2[1]+((ytk2[1])*(2-T0*wc)))/(2 + T0*wc);
der22=(ytk2[2]-2*ytk2[1]+ytk2[0])*(0.00000015)/T0;
der11 = (ytk2[2]-ytk2[1])/(T0*800);
result2[2]=((der11>0.1)||result2[1])&&(1-((der11> 0.12)&&(der11<0)&&(der22>0)&&(ytk2[2]<0.2)));
dif1 = result[2]-result[1];
dif2 = result2[2]-result2[1];
No cdigo acima, temos que ytk e ytk2 so as sadas do filtro passa altas, T0 o intervalor de aquisio, wc a
frequncia de corte utilizada em rad/s, der1 e der11 so os valores de derivada primeira, der2 e der22 so os
valores de derivada segunda, result e result2 so os valores de sinal digitalizado, dif1 e dif2 so os sinais
digitalizados diferenciais. Observe que aqui vale a mesma regra anterior: os vetores de posio 2 so os mais
atuais, os de posio 1 so os de um ciclo anterior e os de posio 0 so os de 2 ciclos anteriores. Ao final da
funo de interrupo do ADC essas variveis so sempre atualizadas.
4.2.2.3- Determinao de Resultados e critrio de rejeio de chauvenet
Nas linhas de cdigo abaixo implementamos a determinao dos parmetros e o critrio de rejeio.
if((dif1==1)||(aux1==1))
{
if(aux1==0)
{
aux1=1;
}
Contador = Contador + 1;
count1 = count1 + 1;
if((dif2==1)&&(aux2==0))
{
time2 = (Contador-1)*T0;
velocidade = Dx/(time2);
time2=0;
count2 = count2+1;
if(velocidade)
{
count_freq++;
Velx = velocidade;
aux6=1;
P g i n a 31 | 59
if(aux5==0)
{
ttf = ttf+Velx;
N++;
N2=0;
}
if(aux5==1)
{
ttf = ttf+Velx;
vari = (Velx-medi)*(Velx-medi) + vari;
N++;
N2=0;
}
if((aux5==2)&(Velx<tsup)&(Velx>tinf))
{
N2=0;
ttf = ttf+Velx;
vari = (Velx-medi)*(Velx-medi)+vari;
N++;
}
}
aux2=1;
Contador=0;
}
if(dif1==-1)
{
if(velocidade != 0)
{
time_bolha = (count1-1)*T0;
tamanho = velocidade*time_bolha;
aux2=0;
velocidade = 0;
}
count1=0;
aux2=0;
Contador=0;
velocidade=0;
aux1=0;
}
}
}
if(couta*T0>2)
{
if(N==0)
{
aux5=0;
Velx=0;
freq=0;
medi=0;
ttf=0;
vari=0;
aux6=0;
aux9=0;
aux10=0;
aux11=0;
count2=0;
tinf = 0;
tsup = 0;
P g i n a 32 | 59
DP=0;
count_freq=0;
count4=0;
}
if(N2==1)
{
N=0;
}
N2=1;
couta=0;
}
if(N>15)
{
if(aux5==0)
{
aux5=1;
medi=ttf/N;
N=0;
count2=0;
count_freq=0;
count4=0;
}
if(aux5==1&N!=0)
{
medi=ttf/N;
DP = sqrt(vari/(N-1));
C = 2.13;
tsup = C*DP+medi;
tinf = medi-C*DP;
aux5=2;
N=0;
count2=0;
count_freq=0;
count4=0;
}
if(aux5==2&N!=0)
{
medi = ttf/N;
DP = sqrt(vari/(N-1));
C = 2.13;
tsup = C*DP+medi;
tinf = medi-C*DP;
N=0;
auxc=0;
freq = count_freq/((count4-1)*T0);
count_freq=0;
count4=0;
}
couta=0;
ttf=0;
var=0;
vari=0;
}
if(aux6==1)
{
couta++;
}
count4++;
P g i n a 33 | 59
As linhas de cdigo anteriores utilizam os algoritmos das sees 3.5 e 3.6. Como utilizamos uma janela fixa de
15 amostras, o valor de C utilizado 2.13, conforme podemos ver na tabela 2. Temos ainda que a varivel tsup
representa o valor limitante superior e tinf o valor limitante inferior para aceitao de amostras.
P g i n a 34 | 59
Pino do Display
D0
D1
D2
D3
D4
D5
D6
D7
RS
ENABLE
Na tabela 4 podemos ver como foram ligados os pinos GPIO nos pinos do teclado matricial.
P g i n a 35 | 59
Funo
Ok
Up
Down
Return
EALLOW;
GpioCtrlRegs.GPAMUX2.bit.GPIO16
GpioCtrlRegs.GPAMUX2.bit.GPIO17
GpioCtrlRegs.GPAMUX2.bit.GPIO18
GpioCtrlRegs.GPAMUX2.bit.GPIO19
GpioCtrlRegs.GPAMUX2.bit.GPIO20
GpioCtrlRegs.GPAMUX2.bit.GPIO21
GpioCtrlRegs.GPAMUX2.bit.GPIO22
GpioCtrlRegs.GPAMUX2.bit.GPIO23
GpioCtrlRegs.GPAMUX2.bit.GPIO24
GpioCtrlRegs.GPAMUX2.bit.GPIO25
GpioCtrlRegs.GPAMUX2.bit.GPIO26
GpioCtrlRegs.GPAMUX2.bit.GPIO27
GpioCtrlRegs.GPAMUX2.bit.GPIO30
GpioCtrlRegs.GPAMUX2.bit.GPIO31
GpioCtrlRegs.GPADIR.bit.GPIO16
GpioCtrlRegs.GPADIR.bit.GPIO17
GpioCtrlRegs.GPADIR.bit.GPIO18
GpioCtrlRegs.GPADIR.bit.GPIO19
GpioCtrlRegs.GPADIR.bit.GPIO20
GpioCtrlRegs.GPADIR.bit.GPIO21
GpioCtrlRegs.GPADIR.bit.GPIO22
GpioCtrlRegs.GPADIR.bit.GPIO23
GpioCtrlRegs.GPADIR.bit.GPIO24
GpioCtrlRegs.GPADIR.bit.GPIO25
GpioCtrlRegs.GPADIR.bit.GPIO26
GpioCtrlRegs.GPADIR.bit.GPIO27
GpioCtrlRegs.GPADIR.bit.GPIO30
GpioCtrlRegs.GPADIR.bit.GPIO31
EDIS;
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
0;
0;
0;
0;
0;
0;
0;
0;
0;
0;
0;
0;
0;
0;
1;
1;
1;
1;
1;
1;
1;
1;
1;
0;
1;
0;
0;
0;
Observe que utilizamos somente o Mux 2 do GPIO A. Primeiramente configuramos os pinos como entradas e
sadas digitais (GpioCtrlRegs.GPAMUX2.bit.GPIOx = 0) e em seguida configuramos a direo de dados dos
pinos (GPADIR).
P g i n a 36 | 59
void stri(char entrada[]) //funo para mandar uma string de entrada ao display
{
var=0;
tam =tamanh(entrada); //AQUI DEFINO O TAMANHO DA MINHA STRING DE TEXTO PADRO
while (var<(tam))
{
car = entrada[var];
bite[0] = (car&(1));
bite[1] = ((car)&(2))>>1;
bite[2] = ((car)&(4))>>2;
bite[3] = ((car)&(8))>>3;
bite[4] = ((car)&(16))>>4;
bite[5] = ((car)&(32))>>5;
bite[6] =((car)&(64))>>6;
bite[7] = ((car)&(128))>>7;
GpioDataRegs.GPADAT.bit.GPIO24 = 1;
if(bite[0]==1) GpioDataRegs.GPASET.bit.GPIO16 = 1;
else GpioDataRegs.GPACLEAR.bit.GPIO16 = 1;
if(bite[1]==1) GpioDataRegs.GPASET.bit.GPIO17 = 1;
else GpioDataRegs.GPACLEAR.bit.GPIO17 = 1;
if(bite[2]==1) GpioDataRegs.GPASET.bit.GPIO18 = 1;
else GpioDataRegs.GPACLEAR.bit.GPIO18 = 1;
if(bite[3]==1) GpioDataRegs.GPASET.bit.GPIO19 = 1;
else GpioDataRegs.GPACLEAR.bit.GPIO19 = 1;
if(bite[4]==1) GpioDataRegs.GPASET.bit.GPIO20 = 1;
else GpioDataRegs.GPACLEAR.bit.GPIO20 = 1;
if(bite[5]==1) GpioDataRegs.GPASET.bit.GPIO21 = 1;
else GpioDataRegs.GPACLEAR.bit.GPIO21 = 1;
if(bite[6]==1) GpioDataRegs.GPASET.bit.GPIO22 = 1;
else GpioDataRegs.GPACLEAR.bit.GPIO22 = 1;
if(bite[7]==1) GpioDataRegs.GPASET.bit.GPIO23 = 1;
else GpioDataRegs.GPACLEAR.bit.GPIO23 = 1;
GpioDataRegs.GPASET.bit.GPIO26 = 1;
dela(delay_value);
GpioDataRegs.GPACLEAR.bit.GPIO26 = 1;
var++;
}
var22 = 0;
}
char* fti(float num, Uint16 parametro) //funo que converte o float de entrada em
string
{
Uint16 n1=0;
Uint16 n2=0;
Uint16 n3=0;
Uint16 n4=0;
Uint16 n5=0;
char *s;
s = malloc( 6 * sizeof (char));
if(parametro==0)
P g i n a 37 | 59
{
char c1,c2,c3,c4;
n1= num/10;
n2= (num-(n1*10))/1;
n3 = ((num*10-n1*100-n2*10))/1;
n4=(num*100-n1*1000-n2*100-n3*10)/1;
c1 = n1 + 48;
c2 = n2 + 48;
c3 = n3 + 48;
c4 = n4 + 48;
s[0] = c1;
s[1] = c2;
s[2] = '.';
s[3] = c3;
s[4] = c4;
s[5] = '\0';
}
else if(parametro==1)
{
char c1,c2,c3;
n1= num/10;
n2= (num-(n1*10))/1;
n3 = ((num*10-n1*100-n2*10))/1;
c1 = n1 + 48;
c2 = n2 + 48;
c3 = n3 + 48;
if(n1!=0)
{
s[0]
}
else
{
s[0]
}
if(n2!=0)
{
s[1]
}
else
{
s[1]
}
= c1;
= ' ';
= c2;
= ' ';
s[2] = '.';
s[3] = c3;
s[4] = '\0';
}
else if(parametro==60)
{
num = num*parametro;
char c1,c2,c3,c4,c5;
n1= num/10000;
P g i n a 38 | 59
n2= (num-(n1*10000))/1000;
n3 = ((num-n1*10000-n2*1000))/100;
n4=(num-n1*10000-n2*1000-n3*100)/10;
n5=(num-n1*10000-n2*1000-n3*100-n4*10);
c1 = n1 + 48;
c2 = n2 + 48;
c3 = n3 + 48;
c4 = n4 + 48;
c5 = n5 + 48;
if(n1==0)
{
s[0] = ' ';
}
else
{
s[0] = n1;
}
if((n2==0)&(n1==0))
{
s[1] = ' ';
}
else
{
s[1] = c2;
}
if((n3==0)&(n1==0)&(n2==0))
{
s[2] = ' ';
}
else
{
s[2] = c3;
}
if((n3==0)&(n1==0)&(n2==0)&(n4==0))
{
s[3] = ' ';
}
else
{
s[3] = c4;
}
s[4] = c4;
s[5] = '\0';
}
else
{
num = num*parametro;
char c1,c2,c3,c4,c5;
n1= num/10000;
n2= (num-(n1*10000))/1000;
n3 = ((num-n1*10000-n2*1000))/100;
n4=(num-n1*10000-n2*1000-n3*100)/10;
n5=(num-n1*10000-n2*1000-n3*100-n4*10);
c1 = n1 + 48;
c2 = n2 + 48;
P g i n a 39 | 59
c3 = n3 + 48;
c4 = n4 + 48;
c5 = n5 + 48;
if(n1==0)
{
s[0] = ' ';
}
else
{
s[0] = n1;
}
if((n2==0)&(n1==0))
{
s[1] = ' ';
}
else
{
s[1] = c2;
}
if((n3==0)&(n1==0)&(n2==0))
{
s[2] = ' ';
}
else
{
s[2] = c3;
}
if((n3==0)&(n1==0)&(n2==0)&(n4==0))
{
s[3] = ' ';
}
else
{
s[3] = c4;
}
s[4] = c4;
s[5] = '\0';
}
return(s);
}
void cursor_init_erase(void)
{
GpioDataRegs.GPACLEAR.all = 0x01FE0000;
GpioDataRegs.GPASET.all = 0x04010000;
dela(delay_value);
GpioDataRegs.GPACLEAR.bit.GPIO26 = 1;
}
void cursor_init(void)
{
GpioDataRegs.GPACLEAR.all = 0x01FD0000;
GpioDataRegs.GPASET.all = 0x04020000;
dela(delay_value);
GpioDataRegs.GPACLEAR.bit.GPIO26 = 1;
P g i n a 40 | 59
}
void cursor_init_l2(void)
{
GpioDataRegs.GPACLEAR.all = 0x013F0000;
GpioDataRegs.GPASET.all = 0x04C00000;
dela(delay_value);
GpioDataRegs.GPACLEAR.bit.GPIO26 = 1;
}
void cursor_desloc(Uint16 desl)
{
GpioDataRegs.GPASET.all = 0x00140000;
GpioDataRegs.GPACLEAR.all = 0x00EB0000;
j=0;
while(j<desl)
{
GpioDataRegs.GPASET.bit.GPIO26 = 1;
dela(delay_value);
GpioDataRegs.GPACLEAR.bit.GPIO26 = 1;
j++;
}
}
void cursor_desliga(void)
{
GpioDataRegs.GPACLEAR.all = 0x01F30000;
GpioDataRegs.GPASET.all = 0x040C0000;
dela(delay_value);
GpioDataRegs.GPACLEAR.bit.GPIO26 = 1;
}
void cursor_liga(void)
{
GpioDataRegs.GPACLEAR.all = 0X01F00000;
GpioDataRegs.GPASET.all = 0X040F0000;
dela(delay_value);
GpioDataRegs.GPACLEAR.bit.GPIO26 = 1;
}
P g i n a 41 | 59
A funo stri recebe uma string de entrada e a direciona ao display. Para isso, ela separa caractere por
caractere desta string e do caractere separa bit por bit para ser associado ao GPIO correspondente ao envio
dos dados ao display.
A funo fti recebe um float de entrada e o converte para string. Ela utilizada para indicar os resultados no
display e para envia-los via porta serial.
As funes cursor_init_erase, cursor_init, cursor_init_l2, cursor_desloc, cursor_desliga e cursor_liga esto
associadas as linhas 2,3,12,11 e 9 da tabela 1, respectivamente.
As funes disp_vel e disp_freq so responsveis por atualizar os resultados de velocidade e frequncia no
display.
P g i n a 42 | 59
{
menu2:
cursor_init_erase();
stri("( )Unidades");
cursor_init_l2();
stri("( )Dist. Sondas");
cursor_init();
cursor_desloc(1);
Up=1; Down=0;
while(1)
{
if((GpioDataRegs.GPADAT.bit.GPIO27==0)&(Up==0))
{
Up = 1;
Down = 0;
cursor_init();
cursor_desloc(1);
}
if((GpioDataRegs.GPADAT.bit.GPIO31==0)&(Down==0))
{
Up = 0;
Down = 1;
cursor_init_l2();
cursor_desloc(1);
}
if(GpioDataRegs.GPADAT.bit.GPIO30==0)
{
jjj=0;
goto menu1;
}
if(GpioDataRegs.GPADAT.bit.GPIO25==0&Up==1)
{
menu3:
cursor_init_erase();
stri("( )Velocidade");
cursor_init_l2();
stri("( )Frequencia");
cursor_init();
cursor_desloc(1);
Up=1; Down=0;
while(1)
{
if((GpioDataRegs.GPADAT.bit.GPIO27==0)&(Up==0))
{
Up = 1;
Down = 0;
cursor_init();
cursor_desloc(1);
}
if((GpioDataRegs.GPADAT.bit.GPIO31==0)&(Down==0))
{
Up = 0;
Down = 1;
cursor_init_l2();
cursor_desloc(1);
P g i n a 43 | 59
}
if(GpioDataRegs.GPADAT.bit.GPIO30==0)
{
jjj=0;
goto menu2;
}
if(GpioDataRegs.GPADAT.bit.GPIO25==0&Up==1)
{
cursor_init_erase();
stri("( )m/s");
cursor_init_l2();
stri("( )mm/s");
cursor_init();
cursor_desloc(1);
Up=1; Down=0;
while(1)
{
if((GpioDataRegs.GPADAT.bit.GPIO27==0)&(Up==0))
{
Up = 1;
Down = 0;
cursor_init();
cursor_desloc(1);
}
if((GpioDataRegs.GPADAT.bit.GPIO31==0)&(Down==0))
{
Up = 0;
Down = 1;
cursor_init_l2();
cursor_desloc(1);
}
if(GpioDataRegs.GPADAT.bit.GPIO30==0)
{
jjj=0;
goto menu3;
}
if(GpioDataRegs.GPADAT.bit.GPIO25==0&Up==1)
{
univel = "m/s";
Velocidade = 0;
goto menu3;
}
if(GpioDataRegs.GPADAT.bit.GPIO25==0&Down==1)
{
univel = "mm/s";
Velocidade = 1000;
goto menu3;
}
}
}
if(GpioDataRegs.GPADAT.bit.GPIO25==0&Down==1)
{
P g i n a 44 | 59
cursor_init_erase();
stri("( )Hz");
cursor_init_l2();
stri("( )Rpm");
cursor_init();
cursor_desloc(1);
Up=1; Down=0;
while(1)
{
if((GpioDataRegs.GPADAT.bit.GPIO27==0)&(Up==0))
{
Up = 1;
Down = 0;
cursor_init();
cursor_desloc(1);
}
if((GpioDataRegs.GPADAT.bit.GPIO31==0)&(Down==0))
{
Up = 0;
Down = 1;
cursor_init_l2();
cursor_desloc(1);
}
if(GpioDataRegs.GPADAT.bit.GPIO30==0)
{
jjj=0;
goto menu3;
}
if(GpioDataRegs.GPADAT.bit.GPIO25==0&Up==1)
{
unicor = "Hz";
Frequencia = 0;
goto menu3;
}
if(GpioDataRegs.GPADAT.bit.GPIO25==0&Down==1)
{
unicor = "Rpm";
Frequencia = 60;
goto menu3;
}
}
}
}
}
if(GpioDataRegs.GPADAT.bit.GPIO25==0&Down==1)
{
cursor_desliga();
cursor_init_erase();
stri(" Dist. Sondas");
setcont:
cursor_init_l2();
stri("");
strcpy(rt6,fti(distson,1));
P g i n a 45 | 59
stri(rt6);
stri("mm");
stri("
+");
cursor_init();
cursor_desloc(1);
Up=1; Down=0;
while(1)
{
if((GpioDataRegs.GPADAT.bit.GPIO27==0)&(distson<31))
{
distson = distson + 0.1;
Dx = distson/1000;
goto setcont;
}
if((GpioDataRegs.GPADAT.bit.GPIO31==0)&(distson>(0)))
{
distson = distson - 0.1;
Dx = distson/1000;
goto setcont;
}
if(GpioDataRegs.GPADAT.bit.GPIO30==0|GpioDataRegs.GPADAT.bit.GPIO25==0)
{
jjj=0;
cursor_liga();
goto menu2;
}
}
}
}
}
}
delay_value=2;
cursor_desliga();
cursor_init_erase();
Basicamente o menu funciona acessando o nvel lgico da porta de entrada GPIO. As variveis Up e Down
servem para que o programa no se perca em relao a posio de cursor definida pelo usurio. Se o boto Up
apertado, a varivel Up ganha uma ficha e Down a perde. Se o usurio pressiona o boto Down, a varivel
Up perde a ficha e a Down a ganha. Utilizando a funo goto eu posso alternar entre um menu e outro
apertando o boto return.
P g i n a 46 | 59
Ligar display
Modo 8 bits
Ligar segunda
linha
Mensagem de
entrada no
display
Menu
Unidades e
Dist. entre Sondas definidas
Pelo usurio
Funo Main:
Se o numero de
amostras for 15:
Atualizar velocidade e
frequencia no display
A cada 210 s
Velocidade
Frequncia
Funo de
Interrupo ADC:
Recalculo os valores
de velocidade e
frequncia
P g i n a 47 | 59
+1
(19)
. 8
1 (20)
4.4.1 Programa em CVI para comunicao serial com DSP e aquisio de dados
Atravs da ferramenta de criao de programas com interface grfica em C (CVI/LABWINDOWS) da
Texas Instruments, criamos um programa para realizar a comunicao serial e salvar os dados em um arquivo
txt ou csv (excel). O usurio tem a opo de somente fazer aquisio de dados, somente monitorar os
resultados (atualizados em tempo real) pelo programa ou fazer as duas coisas. Na figura 23 podemos ver o
programa criado.
P g i n a 48 | 59
Conforme podemos ver na figura 23, o programa caracterizado por possuir 3 ilhas:
Configuraes de porta: nesta regio, configuramos a porta serial de entrada do dsp no computador. Caso
acontea algum problema de configurao por parte do usurio, uma mensagem padro de erro aparecer
na tela.
Resultados: nesta rea os resultados so atualizados para monitoramento. O usurio pode optar por desligar
a atualizao de resultados.
Aquisio de Dados: nesta regio o usurio define o nome, extenso (csv ou txt) e diretrio ao qual o arquivo
de aquisio de dados ser salvo. A aquisio de dados tambm opcional, podendo ser desligada.
P g i n a 49 | 59
5 Resultados obtidos
Nas sees a seguir analisaremos vrios aspectos a fim de verificar se os resultados obtidos foram
satisfatrios.
Aps a mensagem, uma tela de menu ser aberta ao usurio, conforme podemos ver na figura 25.
Se o usurio apertar Ok (boto 3), imediatamente se iniciar a medio. Se o usurio apertar o boto para
baixo (boto 2) e em seguida apertar Ok, abrir a seguinte tela de configurao da figura 26.
P g i n a 50 | 59
Se o usurio pressionar o boto para baixo e em seguida der Ok, abrir a configurao de distncia entre
sondas, conforme podemos ver na figura 27
Apertando o boto UP (boto 1) o usurio incrementa 0.1mm no valor de distncia entre sonda e apertando
Down (boto 2), subtrai 0.1mm do valor de distncia entre sonda, que vai sendo atualizado imediatamente
no display. Apertando ok, eu dou um valor para a varivel Dx do cdigo, que representa a distncia entre
sensores para clculo da velocidade.
Apertando o boto Return (boto 4), eu volto para a tela da figura 26. Aqui posso selecionar a opo
Unidades apertando Ok. Em seguida, aparecero na tela as opes que pode ser vistas na figura 28.
P g i n a 51 | 59
Conforme podemos ver na figura 28, o usurio pode escolher entre configurar unidades da velocidade ou
frequncia. Escolhendo configurar velocidade, teremos a tela da figura 29 abaixo
De acordo com a escolha que fao nesta etapa, eu modo a forma com que o resultado se apresentar tanto
no prprio display quanto no programa CVI. Na figura 30 podemos ver a tela de configurao de unidades de
frequncia.
P g i n a 52 | 59
Aps fazer as devidas escolhas para unidades e distncia entre sondas, apertando o boto return, o usurio
deve voltar a tela da figura 25 para ento selecionar a opo medio para ento comear a mostrar os
resultados.
Ao sair do menu, o programa detectar se existe ou no algum sinal na entrada. Se no existir ele transmitir
a mensagem da figura 31 no display
Se existir algum sinal de entrada, o programa imediatamente iniciar o processo de clculos dos parmetros
estatsticos para rejeio de valores discrepantes. Durante este processo, a mensagem da figura 32 aparecer
no display.
P g i n a 53 | 59
Logo aps obter os parmetros estatsticos, o display mostrar os resultados da medio, conforme podemos
ver na figura 33.
Figura 33 Resultado
P g i n a 54 | 59
funo de interrupo e uma sada clear no mesmo pino no final da funo. O resultado obtido pode ser visto
na figura 34.
Pela figura 34, podemos ver que, de fato, o intervalo de aquisio ocorreu em exatamente 210s. A largura
do pulso set que vemos na figura 34 representa o tempo gasto com aquela sequncia de instrues dentro
da funo. Assim, todo esse tempo em que o sinal aparece em reset poderia ser eliminado diminuindo-se o
intervalo de aquisio at o limite do valor da largura do pulso unitrio. O valor do tempo correspondente a
essa largura pode ser observado na figura 35.
P g i n a 55 | 59
Como podemos ver na figura 35, o tempo gasto para realizar as instrues dentro da funo de interrupo do
ADC de 7.840s. Portanto, em aplicaes futuras, quando o sistema estiver operando novamente com o sinal
dos sensores e no com o sinal antigo enviado pelo conversor D/A da placa de aquisio, poderemos aumentar
a frequncia de amostragem para 50KHz, resultando em um perodo prximo a 20s, de modo a equilibrar o
tempo disponvel a ser gasto nas instrues da funo main (12.16 s) e da interrupo (7.840s).
P g i n a 56 | 59
P g i n a 57 | 59
No arquivo indicado pela figura 37, temos que a coluna da esquerda representa os valores de velocidade salvos
e a coluna da direita os valores de frequncia de passagem de bolhas salvos.
Parmetro Medido
Velocidade mdia
Frequncia mdia
DSP
Matlab
Erro
Discrepancia Relativa (%)
1,4943 m/s 1,5 m/s 0,0057 m/s
0,38
4,23 Hz 4,3042 Hz 0,0742 Hz
1,724
Como podemos ver na tabela 5, os resultados encontrados foram muito prximos, obtendo um erro e
discrepncia relativa muito pequenos.
P g i n a 58 | 59
6 Concluso
No captulo 1 deste trabalho, vimos a importncia de quantificao das variveis de interesse em um
escoamento multifsico e como o conhecimento destas pode otimizar um processo industrial, um projeto.
Vimos ainda o princpio bsico de funcionamento do sensor eletro-resistivo e como ele pode ajudar na medio
de escoamentos bifsicos cujo acesso tico seja precrio.
No captulo 2 apresentamos as ferramentas necessrias para construo do medidor eletro-resistivo e
no captulo 3 vimos os parmetros de projeto e algoritmos para processamento e rejeio estatstica e
sistemtica de resultados discrepantes.
No captulo 4 vimos alguns perifricos do DSP TMS320F28335, bem como apresentamos como cada
um foi programado.
No captulo 5, vimos que os resultados obtidos com o sinal vindo do matlab foi excelente. Os erros e
as discrepncias para velocidade e frequncia calculados no dsp foram muito pequenos. Portanto, agora com
o sistema funcionando para o sinal vindo da placa de aquisio, para futuros projetos deve-se agora reconstruir
a sonda danificada e organizar os circuitos e o dsp em uma estrutura, de modo a assim, concluir a construo
de um robusto instrumento de medio de velocidade e frequncia de bolhas.
7 Bibliografia
[01]Using Enhanced Pulse Width Modulator (ePWM) Module for 0-100% Duty Cycle Control
http://www.ti.com/lit/an/spraai1/spraai1.pdf
[02] TMS320x2802x, 2803x Piccolo Enhanced Pulse Width Modulator (ePWM) Module
http://www.ti.com/lit/ug/spruge9e/spruge9e.pdf
[03] TMS320F28335, TMS320F28334, TMS320F28332 TMS320F28235, TMS320F28234, TMS320F28232
Digital Signal Controllers (DSCs)
http://www.ti.com/lit/ds/symlink/tms320f28335.pdf
[04] Running an Application from Internal Flash Memory on theTMS320F28xxx DSP
[05] TMS320x2834x Delfino Serial Communications Interface (SCI)
P g i n a 59 | 59