Você está na página 1de 4

Transmisso de Dados via Serial para o Matlab e

Calibrao do ADC.

Rafael Lira Bolzan.
Universidade Tecnolgica Federal do Paran Campus Pato Branco
85503-390 Pato Branco PR



Resumo Este documento descreve o procedimento para
transmitir dados de um microcontrolador, neste caso o
STM32F4Discovery, via serial para o software Matlab,
juntamente com esse processo configurado a calibrao do
conversor analgico/digital (ADC) para uma melhoria no sinal
transmitido.

Palavras-chaves Transio via Porta Serial, Serial Matlab,
STM32F4Discovery, Calibrao ADC.



1. INTRODUO


A transmisso de dados via conexo serial de grande
utilidade e pouca complexidade, o objetivo deste projeto
fazer a aquisio de dados analgicos atravs do
conversor analgico/digital (ADC) e armazenar em um
buffer de memria, aps o armazenamento esses dados
sero transmitidos via conexo serial para o software
Matlab. Tambm ser realizado um processo de
calibrao do ADC para que os sinal digital seja
equivalente o sinal analgico e no ocorra nenhuma
deformao.

O esse procedimento de grande auxilio no
desenvolver de qualquer projeto, pois, primeiramente
possvel pegar os dados do prprio sinal a ser analisado
enviar para o Matlab e aplicar algum processo
matemtico ou algum realizar algum processo de
controle antes mesmo de implementar o algoritmo ou
cdigo do processo no microcontrolador. Tambm
possvel analisar o comportamento do sinal convertido e
as respostas do sistema graficamente.

O microcontrolador STM32F4Discovery foi utilizado
para o desenvolver desse projeto, o qual possui: clock
mximo de 168 MHz, conversor A/D de 12 bits, USART
(Universal Synchronous Asynchronos Reciver
Transmiter), DMA (Direct Memory Access) [1], alm de
vrios outros perifricos.


2. AQUISIO E TRANSMISSO DE DADOS.


Para o decorrer desse projeto ser analisado o
comportamento de um sinal alternado porem sem nveis
negativos, pois o ADC do microcontrolador faz um
leitura de zero a 3 volts, tendo em considerao que o
sinal tambm no pode ter um amplitude maior que 3
volts pico a pico. Como o conversor ADC tem suas
limitaes o sinal a ser analisado tem que se adequar ao
prprio, se o sinal a ser analisado for simtrico e com
nveis de tenses que ultrapassem os nveis de aceitao
do ADC necessrio a utilizao de algum circuito
rebaixador e um circuito somador ou grampeador, por
exemplo, para que esse sinal seja compatvel com a
entrada do ADC.

Aps a adaptao do sinal analgico, o ADC deve ser
configurado para realizar as converses do sinal e
armazen-las em um buffer digital. Ento primeiramente
deve ser estipulado o nmero de dados a serem
convertidos e transmitidos pela serial, ideal que esse
nmero seja definido por perodo do sinal de entrada, por
exemplo: 100 aquisies em um sinal de 100 Hz, assim
com essas informaes j possvel determinar a
frequncia de trabalho do ADC, ou seja quantas
converses o ADC deve fazer durando um tempo
determinado, neste caso 10000 converses por segundo.

Como os dados convertidos devem ser armazenados
em um buffer de memria o DMA ir garantir o acesso
direto dos dados convertidos para a memria, o que ir
garantir uma maior velocidade no processo, alm de
utilizar menos o microprocessador. No DMA tambm
ser definido o tamanho do buffer, ou seja o nmero total
de dados a serem transmitidos.

Para a transmisso de dados configurado a USART
do microcontrolador, com as definies que se adequem
a aplicao desejada, um exemplo desta configurao
demostrada na figura 1. O incio da transmisso deve ser
comear logo aps o ADC ler o sinal de entrada por
completo, ento foi utilizado uma interrupo no DMA
que sinaliza a transmisso por completa dos dados no
buffer, em outras palavras, que o buffer encheu. Nessa
interrupo uma flag setada e a transmisso iniciada.
Figura 1. Configurao USART STM32F4Discovery

Lembrando que as definies da USART podem
mudar dependendo da aplicao, neste caso foi utilizado
um BoudRate de 115200, WordLength de 8 bits, 1
StopBit e no modo Transmiter (Tx). Cabe ressaltar que o
tamanho do dado a ser transmitido de 16 bits (nesta
aplicao) e a serial tem tamanho de 8 bits (WordLength)
assim o dado enviado e duas partes de 8 bits.

Tambm h a necessidade de um ponteiro para
direcionar o buffer de memria o qual ser enviado via
serial e a configurao das portas de transmisso de
dados (Tx). A flag a ser setada na RTI (Rotina de
tratamento de interrupo) do DMA dar incio a
transmisso dos dados o qual feita no while (1).



3. CONEXO SERIAL NO MATLAB


Como j visto o microcontrolador j foi configurado
para mandar um conjunto de dados via serial, agora
necessrio interpretar esses dados para que seja possvel
a manipulao dos mesmos.

Primeiramente necessrio estabelecer a conexo
serial no Matlab, ou seja, configurar a porta que est
sendo utilizada, o BoudRate, o tamanho do dado, e assim
por diante, lembrando que as configuraes da feitas no
microcontrolador devem ser as mesmas utilizadas no
Matlab, para que haja um compatibilidade entre as duas
portas.

Um exemplo do cdigo implementado no Matlab para
estabelecer a conexo da porta serial esta demostrado na
figura 2.

Figura 2. Configurao Porta Serial Matlab

No exemplo da figura 2 foi utilizada a porta COM4,
e as demais configuraes foram as mesmas
estabelecidas no microcontrolador. A funo fread
retorna a informao a ser recebida pela serial a qual
armazenada no vetor dado que possui 512 informaes de
8 bits cada. Neste caso foi enviado 256 dados de 16 bits
os quais resulta em 512 dados de 8bits cada.

Agora necessrio montar a informao enviada, ou
seja, montar o dado de 16 bits. Para o mesmo exemplo
da figura 2 foi utilizado o cdigo descrito na figura 3.
Figura 3. Funo de juno de dados.


USART_InitTypeDef USART_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

USART_InitStructure.USART_BaudRate = 115200;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl =
USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Tx;

USART_Init(USART1, &USART_InitStructure);

USART_Cmd(USART1, ENABLE);
% Nome da porta Serial a ser Conectada
s = serial('COM4');

% Mesma Configurao estabelecida no
Microcontrolador
set(s,'BaudRate',115200);

set(s,'DataBits',8);

set(s,'Parity','None');

set(s,'stopBits',1);

set(s,'FlowControl','none');

% Tamanho do Buffer de entrada
set(s,'InputBufferSize',512);

% Tempo que para receber algum dado (ms)
set(s,'Timeout',5000);

% Abre a porta Serial
fopen(s);

% Os dados recebidos so armazenados no vetor
dado
dado=fread(s,512);

% Fecha a porta Serial
fclose(s);

% Exclui a varivel s
delete(s);

% Limpa a varivel s
clear s

for I=1:length(dado)
if(rem(I,2)==1)
dadopar=dado(I);
else

dadoimpar=dado(I);

mont(J)=(dadoimpar*256+dadopar)

J=J+1;
end
end

A figura 3 demostra um funo a qual monta o dado
de 16 bits e retorna um vetor mont de 256 dados. Ento
agora j possvel enviar e receber dados atravs da
porta serial com simplicidade e exatido.

Porm ainda no possvel a manipulao desses
dados com preciso, pois o conversor A/D tem um erro
de converso o qual deve ser corrigido.


4. CALIBRAO DO CONVERSOR A/D


Embora o conversor A/D possui vrios erros de
converso o mais preocupante o erro de ganho, ento
para qualquer aplicao que haja a necessidade de
utilizar dados com uma alta preciso necessrio a
calibrao do ADC.

Como foi utilizado neste experimento o
microcontrolador STM32F4Discovery, foi analisado o
erro de ganho do conversor A/D. Foram realizados
medies de 0 a 3 volts e registrados os valores
fornecidos pelo ADC e o valor esperado pelo mesmo.
Cabe ressaltar que o conversor possui uma resoluo de
12 bits, ou seja a 3 volts a converso equivale a 4096 e
esperasse um comportamento linear desse sistema. Os
valores registrados esto na tabela 1.

Amostra Tenso (V) Valor
Esperado
Valor
Registrado
0 0 0 6
1 0,3 409 428
2 0,6 820 843
3 0,9 1228 1265
4 1,2 1639 1696
5 1,5 2048 2110
6 1,8 2457 2523
7 2,1 2867 2942
8 2,4 3277 3368
9 2,7 3686 3789
10 3,0 4096 4095
Tabela 1. Dados de Converso.


Para essa anlise foi variado a tenso de entrada do
ADC de 0 a 3 volts com um incremento de 0,3 volts e
comparado os valores registrados pelo ADC e o valores
esperado pela converso a partir da determinada tenso
de entrada. A curva dos entre o valor esperado e o valor
registrado podem ser observadas na figura 4.

Figura 4. Erro de Ganho e Saturao do ADC


Como visto na figura 4 h uma defasagem entre a
curva real e a esperada, essa defasagem o erro de ganho
do conversor A/D, tambm possvel notar que o erro
constante, consequentemente possvel determinar um
fator de correo para o sistema. Percebesse tambm que
h um outro problema na curva real, houve a saturao
da curva na ltima amostra do ADC.

Primeiramente devesse calibrar o ADC, para que essa
defasagem seja minimizada, posteriormente analisar o
quo grave o problema de saturao. Para a calibrao,
determinado um fator de correo o qual ser aplicado
em cada converso do ADC. Esse fator de correo
determinado a partir de uma tenso de referncia interna
(Vrefint), que no caso do STM32F4Discovery equivale
a 1,21 [1] volts, esse valor de tenso preciso e normal
mente encontrado em todos os conversores A/D.

Para o experimento, foi utilizado uma funo de
inicializao do ADC, a qual o conversor realiza 10
converses e partir desses resultados calculado a mdia
das converses, em seguida calculado o fator de
correo das amostras (equao 1).


(1)


Assim cada amostra deve ser multiplicada por o fator
de correo (

) e resultar o valor da converso em


volts. Posteriormente ser analisado as comparaes
entre resultados das amostras sem calibrao do ADC e
aps a calibrao.



0 1 2 3 4 5 6 7 8 9 10
0
500
1000
1500
2000
2500
3000
3500
4000
4500
Amostras
L
e
i
t
u
r
a

A
D
C


Leitura Real
Leitura Esperada
Saturao

5. RESULTADOS


Primeiramente foram obtidos resultados da
calibrao do conversor A/D, como feito anteriormente,
foram obtidas vrias amostras das converses e
analisados os resultados, na tabela 2 descrito os dados
desse experimento.

Amostra Leitura
Multmetro
Leitura ADC
sem Fc
Leitura ADC
com Fc
0 0,0041 0,0051 0,0051
1 0,3009 0,3076 0,3007
2 0,6013 0,6152 0,6014
3 0,8997 0,9199 0,8993
4 1,2007 1,2250 1,2000
5 1,5007 1,5330 1,4990
6 1,8007 1,8380 1,7990
7 2,1084 2,1510 2,1030
8 2,4058 2,4540 2,3990
9 2,7025 2,7590 2,6960
10 2,8043 2,8620 2,7970
11 2,9051 2,9660 2,8990
12 2,9515 2,9990 2,9320
Tabela 2. Dados de Converso.

Posteriormente foi graficado os dados da tabela 2.


Figura 5. Analises das Amostras do ADC.

Aps a correo do ADC, foi realizado um outro
experimento, gerou-se um sinal senoidal a partir de um
gerador de funo com amplitude de 2,8 Vp, o mesmo
foi inserido do ADC e enviado via conexo serial para o
Matlab. Foi analisado o sinal com calibrao do ADC e
sem calibrao (figura 6).

Figura 6. Sinal Recebidos via Serial com e sem Fator de
Correo.

Tambm possvel enviar mais de um sinal para o
Matlab, dependendo do nmero de ADCs que o usurio
est utilizando, neste caso o microcontrolador utilizado
possui trs ADC, consequentemente possvel o envio
de at trs sinais para o Matlab. A figura 7 mostra dois
sinais gerados por um gerador de funo e enviados via
serial, os sinais possuem uma defasagem de 30 e
amplitude de 2,8 volts. Para este caso o ADC j foi
calibrado.

Figura 7. Sinais Recebidos via Serial

Este documento demonstrou o funcionamento da
conexo serial via Matlab e o procedimento de calibrao
do ADC, o qual de grande utilidade pois possvel
realizar estudos e anlises de quaisquer sinais
primeiramente atravs do Matlab e posteriormente no
microcontrolador.
0 2 4 6 8 10 12
0
0.5
1
1.5
2
2.5
3


X: 9
Y: 2.696
Comparao de leituras de Tenso
Amostra
L
e
it
u
r
a
s

(
V
o
lt
s
)
Multimetro
Sem Fator de Correo
Com Fator de Correo
10 20 30 40 50 60 70 80 90 100
0
0.5
1
1.5
2
2.5
Sinas Recebidos via Serial


Sinal com Fator de Correo
Sinal sem Fator de Correo
0 50 100 150 200 250 300
0
0.5
1
1.5
2
2.5
3
Sinas Recebidos via Serial

Você também pode gostar