You are on page 1of 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.

2.

AQUISIO E TRANSMISSO DE DADOS.

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.

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.
USART_InitTypeDef USART_InitStructure;

% Nome da porta Serial a ser Conectada s = serial('COM4'); % Mesma Configurao estabelecida no Microcontrolador set(s,'BaudRate',115200); 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); USART_Cmd(USART1, ENABLE); 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

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

Figura 2. Configurao Porta Serial Matlab

3.

CONEXO SERIAL NO 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

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

4500 Saturao 4000 3500 3000 2500 2000 1500 Leitura Real Leitura Esperada

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

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

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

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.

(1)

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.

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
2.5 Sinal com Fator de Correo Sinal sem Fator de Correo

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

1.5

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

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.

Tabela 2. Dados de Converso.

Posteriormente foi graficado os dados da tabela 2.


Comparao de leituras de Tenso 3

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.
Sinas Recebidos via Serial 3

2.5

X: 9 Y: 2.696

Multimetro Sem Fator de Correo Com Fator de Correo

2.5

2
2

Leituras (Volts)

1.5
1.5

1
1

0.5
0.5

0
0 0 2 4 6 Amostra 8 10 12

50

100

150

200

250

300

Figura 7. Sinais Recebidos via Serial

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

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.