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.

% Nome da porta Serial a ser Conectada


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

USART_InitTypeDef USART_InitStructure;
set(s,'DataBits',8);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
set(s,'Parity','None');
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);

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);

USART_Cmd(USART1, ENABLE);

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.

% 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

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.
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

Um exemplo do cdigo implementado no Matlab para


estabelecer a conexo da porta serial esta demostrado na
figura 2.

Figura 3. Funo de juno de dados.

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.

Saturao
4000
3500
3000
Leitura ADC

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.

4500

2500
Leitura Real
Leitura Esperada

2000
1500

4.

CALIBRAO DO CONVERSOR A/D

1000
500

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
1
2
3
4
5
6
7
8
9
10

0
0,3
0,6
0,9
1,2
1,5
1,8
2,1
2,4
2,7
3,0

0
409
820
1228
1639
2048
2457
2867
3277
3686
4096

6
428
843
1265
1696
2110
2523
2942
3368
3789
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.

5
Amostras

10

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.

Sinas Recebidos via Serial

5. RESULTADOS
Sinal com Fator de Correo
Sinal sem Fator de Correo

2.5

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
1
2
3
4
5
6
7
8
9
10
11
12

0,0041
0,3009
0,6013
0,8997
1,2007
1,5007
1,8007
2,1084
2,4058
2,7025
2,8043
2,9051
2,9515

0,0051
0,3076
0,6152
0,9199
1,2250
1,5330
1,8380
2,1510
2,4540
2,7590
2,8620
2,9660
2,9990

0,0051
0,3007
0,6014
0,8993
1,2000
1,4990
1,7990
2,1030
2,3990
2,6960
2,7970
2,8990
2,9320

1.5

0.5

0
10

20

30

40

50

60

70

80

90

100

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.

Tabela 2. Dados de Converso.

Posteriormente foi graficado os dados da tabela 2.

Sinas Recebidos via Serial


3

Comparao de leituras de Tenso


3

X: 9
Y: 2.696

2.5

2.5

Multimetro
Sem Fator de Correo
Com Fator de Correo

Leituras (Volts)

1.5
1.5

1
1

0.5
0.5

0
0

6
Amostra

10

50

100

150

200

250

300

12

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 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.

Você também pode gostar