• Nenhum resultado encontrado

Conclusões e sugestões para próximos trabalhos

No documento ES 952 TRABALHO DE GRADUAÇÃO II (páginas 91-101)

A motivação do presente trabalho foi analisar a relação sinal/ruído de um sistema de aquisição de dados composto por um sensor de alta impedância (fotodiodo), por um circuito amplificador operacional e pelo conversor A/D, comparando as diferentes metodologias existentes para o último parâmetro. Para tanto, o trabalho inicia com a descrição e estudo das fontes de ruído de cada componente do sistema.

Os modelos e informações para análise de ruídos em fotodiodos e amp-ops disponíveis na bibliografia consultada foram bastante satisfatórios. No caso dos conversores A/D, houve maior dificuldade devido ao foco em três diferentes tipos de estruturas. O modelo sigma-delta dispõe de vastas informações e análise científicas. Fato possivelmente atribuído pela estrutura moderna e capacidade de alta resolução que esses ADCs possuem, além de trabalharem muito bem em altas frequências. Para o modelo ADC por aproximação sucessiva existem bons materiais disponíveis, com informações claras e bem estruturadas, embora não com o mesmo excesso do item anterior. Já para o conversor tipo rampa, enfrentamos dificuldade na busca por bibliografia satisfatória para análise mais profunda em termos de sinal/ruído. Por ser uma estrutura mais antiga, porém não descartável para uso em certas aplicações, esse modelo não é objeto de estudo freqüente como os dois anteriores.

O trabalho, então, apresenta o circuito fotodiodo-amplificador a ser utilizado e define os modelos dos componentes, permitindo que se faça uma estimativa numérica

92

para o ruído e a relação sinal/ruído. Em seguida, o conversor AD é adicionado ao conjunto por meio de microcontroladores da Texas Instruments, cujo desenvolvimento dos aplicativos se deu com uma placa de desenvolvimento e programação via software. Uma nova estimativa numérica do ruído é feita, levando em consideração, agora, o sistema completo. O resultado final foi a análise dos dados do circuito mostrando a SNR real e permitindo analisar o peso da escolha entre cada tipo de conversor AD e avaliar a validade da estimativa teórica do ruído.

Em uma comparação entre os resultados experimentais e os estimados, podemos considerar que a modelagem do sistema em termos de suas fontes de ruído é válida, não só pela precisão apresentada, mas por permitir enxergar o desempenho de cada componente separadamente e detectar os pontos mais críticos. Como exemplo, obtemos um valor estimado da SNR de 43,5dB, contra 49,5dB experimental para o modelo tipo “rampa”; para o conversor por aproximação sucessiva o valor obtido foi de 53,2dB contra 46dB experimental. Quanto à análise dos conversores, o conversor por aproximação sucessiva mostrou um desempenho ligeiramente superior. Essa pequena diferença pode ser significativa em certas aplicações, tais como em comunicações ópticas ou instrumentação de alta precisão. Porém, essa diferença de 2,5dB é muito pequena quando comparada a perda pelos ruídos internos do sistema, a ressaltar o ruído de entrada dos conversores. Esse foi o maior contribuinte em ambos os experimentos. Portanto, é muito importante que esses parâmetros sejam controlados e minimizados para que o desempenho do conversor se torne mais relevante.

Como forma de continuação desse trabalho, pode-se desenvolver experimentos para avaliar conversores tipo sigma-delta. Outro ponto a ser explorado são os métodos de otimização da SNR, tais como digital averaging, decimação e oversampling e avaliar o desempenho e benefícios relativos de cada um deles.

93

Referências bibliográficas

SALEH, Bahaa E. A. e TEICH, Malvin Carl. Fundamentals of Photonics. Wiley-Interscience, 2007.

Hamamatsu, Photodiode Technical Information, 2003.

Texas Instruments, Noise Analysis in Operational Amplifier Circuits – Application Report SLVA043, 1998.

National Semiconductor, Noise Specs Confusing?- Application note 104, 1974.

KESTER, Walt; BRYANT, James e JUNG, Walt. Amplifiers for Signal Conditioning. 1999.

Analog Devices, Inc., Amplifier Applications Guide. 1992.

Analog Devices, Inc., The Good, the Bad, and the Ugly Aspects of ADC Input Noise – Is No Noise Good Noise?- Tutorial MT-004. 2005

KESTER, Walt; BRYANT, James e BUXTON, Joe. High Resolution Signal Condiotining ADCs. 1999.

KESTER, Walt; BRYANT, James e BUXTON, Joe. ADCs for Signal Condiotining. 1999.

Analog Devices, Inc., ADC Architectures II: Successive Approximation ADCs – Tutorial MT021. 2006.

Motorolla, Inc., ASingle Ramp Analog-to-Digital Converter. 1972.

94

1996; 426 p.

FRANCO, S. Design with Operational Amplifiers and Analog Integrated Circuits, USA: Mc Graw-Hill, 1988.

FRANCO, S, Active Filters: Part I and Switched Capacitors Circuits In: Designed with Operational Amplifiers and Analog Integrated Circuits, Tucson: Mc Graw Hill International Editions, 1988, p 103-110, cap3, p 556, 564, cap 13.

FRADEN, J., AIP – Handbook of Modern Sensors Physics, Designs and Applications, USA: American Institute of Physics, 1993.

ZANINELLI, A.R. – Estudo e Caracterização de Circuitos de Transimpedância Aplicados a Sensores Ópticos, 2004.

95

Anexo I

Demonstração de (3.5) e (3.6)

A partir do circuito da Fig. A1.1, tem-se o ganho de tensão de ruído An(f) é obtido por:

Figura A1.1 – Fontes de ruído do fotodiodo e do amplificador

(A1.1)

Sendo:

Ama - Ganho de malha aberta, open loop, do amplificador;

β(f) - Fator de realimentação, indicativo da fração da tensão de saída que é realimentada para a entrada do amplificador;

Ama(f)β(f) - Ganho de malha do amplificador realimentado. Na hipótese de Ama(f)β(f) >> 1, tem-se:

(A1.2) E como para o circuito em questão:

96

(A1.3)

Chega-se a:

(A.1.4)

Definindo ainda:

Cujas assíntotas para baixas e altas freqüências são, respectivamente:

(A1.10) e

97 Anexo II /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Trabalho de Graduação * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Fábio da Costa Simões RA 015993

* Compilado com o Code Composer da Texas Instruments * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Descrição geral *

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /*

Este programa inicializa os portos de entrada/saída do Microcontrolador, ini- cializa o ADC12 e, então passa a ler seqüencialmente a voltagem do circuito externo através do canal 0 do ADC12. Após converter a leitura para Volts, esse valor é enviado via pora serial para o PC e mostrado no hyperterminal. ACLK = n/a, MCLK = SMCLK = default DCO ~ 800k

*/ /* **=========================================================================== ** 1 Informações Gerais **=========================================================================== ** 1.1 Referências **

** No Identificação Nome ou Descrição

** == ===================== ================================ ** 1 MSP430x1xx Family User's Guide SLAU049F

* 2 MSP430F14x Datasheet SLAS368E **=========================================================================== */ /* **=========================================================================== ** 2. Arquivos a Incluir ** 2.1 Arquivos-padrão a incluir **=========================================================================== */ #include "msp430x44x.h" #include <stdio.h> /* **=========================================================================== ** 2.2 Arquivos a incluir específicos da aplicação

**=========================================================================== ** Coloque nesta seção as diretivas "include" dos arquivos de definição de

** macros, funções especiais, etc. */

98 /* **=========================================================================== ** 3. DECLARAÇÕES ** 3.1 Constantes Internas **=========================================================================== */ /* **=========================================================================== ** 3.2 Macros internas **=========================================================================== */ /* **=========================================================================== ** 3.3 Definições de tipos internas

**=========================================================================== */

/*

**=========================================================================== ** 3.4 Variáveis globais

** (declaradas como 'extern' em algum arquivo de cabeçalho)

**=========================================================================== */

/*

**=========================================================================== ** 3.5 Protótipos de funções internas (definidas na Seção 5)

**=========================================================================== */

void Retardo_ms(unsigned int TEMPO); void envia_tx_serial(char *aux, char size); /*

**=========================================================================== ** 3.6 Variáveis Internas

**=========================================================================== */

char TENSAO[16], aux[16]; unsigned int i, c;

float VOLTAGEM; /*

**=========================================================================== ** 4. FUNÇÕES GLOBAIS

** (declaradas como 'extern' em algum arquivo de cabeçalho)

**=========================================================================== */

/* FUNÇÃO PRINCIPAL */ void main( void )

/*

**--- */

{ /*

99

**--- ** Inicia o sistema

**--- */

WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer /*

**--- ** Inicia os periféricos utilizados **--- */

P1OUT = 0x00; // Set P1 pins P2OUT = 0x00; // Set P2 pins P3OUT = 0x00; // Set P3 pins P4OUT = 0x00; // Set P4 pins P5OUT = 0x00; // Set P5 pins P6OUT = 0x00; // Set P6 pins

P1DIR |= 0x00; // Set P1 to input direction P2DIR |= 0xFF; // Set P2 to output direction P3DIR |= 0xCF; // Set P3 to output direction P4DIR |= 0xFF; // Set P4 to output direction P5DIR |= 0xFF; // Set P5 to output direction P6DIR |= 0xC0; // Set P6 to output direction

Retardo_ms (255); // Aguarda a alimentação estabilizar.

//******************Configura USART0*************************************************

P3SEL |= 0x30; // P3.4,5 = USART0 TXD/RXD

UTCTL0 |= SSEL0; // UCLK = ACLK

U0TXBUF=' ';

ME1 |= URXE0 + UTXE0; // Habilita USART0 TXD/RXD

U0CTL |= SWRST + CHAR; // Caracter de 8 bits

U0MCTL=0x4A; // Modulation

U0BR0=0x03; // 32k/9600 - 3.41

U0BR1=0; //

UCTL0 &= ~SWRST; // tira o USART0 do reset

/* Inicializa o ADC12

/************************************************************************************************** *************************************************************************************************/

WDTCTL = WDTPW+WDTHOLD; // Desliga watchdog timer

P6SEL = 0x01; // Enable A/D channel A0

ADC12CTL1 = CSTARTADD_0 + SHS_0 + SHP + CONSEQ_2;

// CSTARTADD_0 - utiliza memória 0 para armazenamento do resultado da conversão, // SHS_0 - disparo por software, SHP - modo temporizado, CONSEQ_2 - um canal repetitivo.

100

ADC12CTL0 = ADC12ON+SHT0_0+REFON+REF2_5V; // Liga e configura ADC12

//** ADC12CTL1 = SHP; // Use sampling timer

ADC12MCTL0 = SREF_1 + INCH_0;

// Configura memória 0: SREF_1 - tensão ref. interna, INCH_0 - Canal 0 (pino 6.0). ADC12CTL0 = SHT0_0 + MSC + ADC12ON + REFON + REF2_5V;

// SHT0_2 - tempo de amostragem, MSC - modo de conversão repetitiva, ADC12ON - // conversor ligado, REFON - ref. tensão interno, REF2_5 - tensão ref. = 2,5V for ( i=0; i<0x3600; i++) // Delay for reference start-up

{ }

ADC12CTL0 |= ENC; // Habilita conversões // Laço infinito. while (1) { if(P1IN == 0) { for (c=0;c<=1000;c++) {

ADC12CTL0 |= ADC12SC; // Start conversion

while ((ADC12IFG & BIT0)==0);

_NOP(); // SET BREAKPOINT HERE // Converte voltagem lida para string decimal codificado em ASCII

VOLTAGEM = (float)(ADC12MEM0 * 2.500) / 4095; // Lê e escalona A0

sprintf(TENSAO,"%4.6f",VOLTAGEM); envia_tx_serial(TENSAO,8); envia_tx_serial("/r",1); } } }

} /* FIM DA FUNÇÃO PRINCIPAL */ /*

**=========================================================================== ** 5. FUNÇÕES INTERNAS (prototipadas na Seção 3.5)

**=========================================================================== */

//***************************************************************************** // Função Retardo_ms( tempo )

// tempo = quantidade de milissegundos

//--- void Retardo_ms(unsigned int TEMPO)

/* Código do livro de MSP430 */ {

volatile unsigned int TEMP;

101

}

/* Função que envia voltagem para serial */

//--- void envia_tx_serial(char *aux, char size)

{

for (i=0; i < size; i++) {

while (!(IFG1 & UTXIFG0)); U0TXBUF=(aux[i]); } } /* **=========================================================================== ** FIM DO ARQUIVO **=========================================================================== */

No documento ES 952 TRABALHO DE GRADUAÇÃO II (páginas 91-101)

Documentos relacionados