Escolar Documentos
Profissional Documentos
Cultura Documentos
Transmissão de Dados Via Serial para Matlab e Calibração Do ADC PDF
Transmissão de Dados Via Serial para Matlab e Calibração Do ADC PDF
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 (