implementação em microprocessador de um adc do tipo sar

Upload: manuel-nascimento

Post on 05-Jul-2018

217 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/16/2019 Implementação em microprocessador de um ADC do tipo SAR

    1/221

    Relatório de Sistema de Aquisição de Dados2009/2010

    1ºSemestre

    Engenharia Física Tecnológica

    CONVERSÃO ANALÓGICO-DIGITAL: IMPLEMENTAÇÃO DE UM ADC DO TIPO SAR, “APROXIMAÇÕES SUCESSIVAS” 

    Laboratório II

     Trabalho realizado por:Manuel Nascimento, nº52294

     João Pereira, nº 55315

    Grupo 3; 4ªfeira

    Lisboa, 15 de Janeiro de 2010

  • 8/16/2019 Implementação em microprocessador de um ADC do tipo SAR

    2/222

    Introdução

    No mundo físico, os sinais com informação relevante têm normalmente uma natureza analógica.No entanto, para trabalhar com eles, quer para fazer leituras quer tratamento de dados ouprocessamento de sinais, é mais conveniente trabalhar com grandezas discretas. Torna-se assim

    necessário ter a possibilidade de fazer a conversão destes sinais em grandezas digitais.

    Um conversor analógico-digital ou ADC ( analog-to-digital converter  ) é um dispositivo electrónicoque converte um sinal contínuo (e.g. uma tensão) num número discreto, proporcional à suamagnitude, i.e. quantiza-o. Os valores da conversão são representados digitalmente normalmentena forma de um número binário, podendo ser utilizadas várias codificações convenientes.Um ADC com M bits tem um total de 2M  valores de conversão possíveis, em intervalosigualmente espaçados. A amplitude de cada intervalo denomina-se de resolução do ADC, que é o

     valor correspondente à variação do bit menos significativo da conversão, normalmenterepresentada por “Q”, sendo dada pela fórmula: 

     = 2 − 1

     

    em que EFSR é escala total da grandeza a converter (e.g. voltagem pico-a-pico) e M o número debits do ADC.

     A conversão aproxima o valor analógico por arredondamento ou truncagem. Em geral, quandomaior o número de bits menor será o erro da discretização do sinal analógico a converter. Noentanto, os ADCs podem sofrer vários erros que os afastam de condições ideais que conduzem aerros na conversão, nomeadamente: erros de offset   ou de ganho, não linearidade integral, nãolinearidade diferencial, entre outros. Assim, estes erros podem, em alguns casos, ter uma

    amplitude maior do que a resolução ideal do ADC, fazendo com que, na realidade, alguns dosbits menos significativos não tenham significado.

    Mesmo que os erros referidos se consigam controlar e se possam considerar desprezáveis faceaos sinais a considerar, qualquer dispositivo ADC requer que o sinal analógico a converter estejaconstante durante um certo período de tempo necessário às operações de conversão, de outramaneira esta não é feita correctamente. Torna-se então necessário um circuito que permita“fixar” o sinal analógico a converter. Uma escolha possível  é o circuito de Amostragem eRetenção ( Sample & Hold),  o qual foi o tema principal do primeiro trabalho de laboratório.Estando o sinal de interesse “fixo” é possível efectuar a conversão. 

    Em relação à conversão analógico-digital em si, existem várias implementações possíveis, comdiferentes métodos e características, sendo que uma delas é o método das aproximaçõessucessivas ou SAR –  successive approximation register. 

    Os ADC de N bits do tipo SAR   são essencialmente constituídos por um comparador, umregisto e DAC interno de N bits, a lógica que implementa o algoritmo das aproximaçõessucessivas e um módulo auxiliar de Sample & Hold , montados como se pode ver na fig. 1, napróxima página.

  • 8/16/2019 Implementação em microprocessador de um ADC do tipo SAR

    3/223

    Figura 1 –  Arquitectura geral de um ADC do tipo SAR  

    O método das aproximações sucessivas consiste numa busca entre os vários níveis dequantização possíveis com os N bits do conversor daquele que mais se aproxima do valor aconverter. Embora existam muitas variações na sua implementação, o funcionamento geral écomo o descrito de seguida. Primeiramente, inicializa-se o valor do bit mais significativo doregisto a “1” e os restantes a “0”, ou seja, coloca-se no registo um valor igual a metade da escalade funcionamento do ADC, na midscale   –   V REF/2. Após convertê-lo para analógico através doDAC interno, o valor é comparado com o sinal analógico de entrada (durante o estado de hold, possibilitado pelo circuito auxiliar de amostragem e retenção). Conforme da comparação resultar

     V IN  > V DAC  ou V IN  < V DAC , a lógica do SAR define o bit mais significativo a “1” ou a “0”,respectivamente. De seguida, passa-se ao bit seguinte, colocando-o a “1”, e repete-se o processode comparação do valor e definição desse bit de acordo com o resultado do comparador. Destamaneira, percorrem-se todos os bits até ao bit menos significativo. No final do algoritmo, apóstodos os bits terem sido percorridos, o que se encontra no registo é a conversão digital do valordo sinal de entrada.Uma vez que a definição dos bits de registo depende de uma boa comparação entre V DAC e V IN,este tipo de conversor é bastante sensível à qualidade da mesma e, assim, sensível a imperfeiçõesque a possam comprometer. É necessário então garantir o máximo de exactidão possível nadefinição do V DAC e de precisão no hold  do sinal de entrada V IN. Ou seja, é desejável fazer comque as imperfeições não afectem em demasia os valores de ambos os sinais e que as suasflutuações não sejam, também, significativas em relação ao número de bits utilizados.

    Como quanto maior o número de bits maior o número de passos do algoritmo e, assim, maior otempo que este demora a ser executado, é necessário ter em consideração que um maior númerode bits requer uma maior permanência no estado hold . Assim sendo, o conversor do tipo SAR  apresenta uma certa taxa de aquisição máxima. Desta forma, pode haver um certo compromissoentre o número de bits e a variabilidade máxima esperada no sinal de entrada, uma vez que sinaisde elevada frequência podem não ser amostrados em boas condições devido às limitações da taxade aquisição. Assim, poderá perder-se qualidade de conversão e o sinal reconstruído será bastantediferente do original. Desta maneira, a resolução da conversão também está dependente dessamesma variabilidade do sinal.

  • 8/16/2019 Implementação em microprocessador de um ADC do tipo SAR

    4/224

    Objectivos

    O objectivo deste trabalho consiste em construir um ADC de 12 bits do tipo SAR  através de ummicrocontrolador do tipo dsPIC.

    Primeiramente, pretende-se implementar o conversor DAC interno do ADC SAR   através dumsinal PWM e dum filtro passa-baixo do tipo RC, com o intuito de se obter um sinal DC de valorcontrolável. Quer-se então programar no dsPIC um PWM de frequência e duty-cycle  comandadopelo HiperTerminal  e projectar e realizar na breadboard  o circuito RC.

    Numa segunda fase, deseja-se projectar e realizar na breadboard   o comparador do ADC deaproximações sucessivas e desenvolver um programa no dsPIC que implemente a lógica doalgoritmo respectivo. Ficará assim consubstanciado o dispositivo ADC, objectivo último dotrabalho.

     Testa-se o funcionamento do circuito ADC, nomeadamente comparando medições externas de

    sinais de entrada com o resultado da conversão. Em particular, investigam-se características do ADC como a gama de valores de entrada, a resolução e a máxima taxa de aquisição.

    Implementação, Procedimento e Resultados

    Nota: Todo o código se encontra em anexo e devidamente comentado e descrito. Este relatórioexplicita apenas a filosofia conceptual usada bem como as escolhas particulares efectuadas naimplementação.

    1ª Sessão de laboratório

    Material utilizado:  Osciloscópio digital;   Gerador de sinais; 

      Resistências de 5.6KΩ;   Condensador de 1µF; 

      Multímetro;   Estação de trabalho electrónica com

    gerador de sinais –  workbench ; 

      Placa de ligações breadboard ;   “MPLAB” Software  e compilador “C”; 

      HyperTerminal  Software;  Microcontroller ds30F3014; 

      Microchip MPLAB ICD2.

     

     A primeira sessão de laboratório teve como principal objectivo a programação dodsPIC30F3014, reutilizando o código do primeiro trabalho de laboratório e acrescentando-lhenovas funções necessárias, bem como implementar o filtro RC passa-baixo que irá realizar oDAC interno do ADC. Depois de implementado, testa-se o correcto funcionamento desta partedo circuito global.

    De seguida explana-se sobre o código utilizado e sobre a implementação do filtro RC.

  • 8/16/2019 Implementação em microprocessador de um ADC do tipo SAR

    5/225

    I –  Código utilizado

    Como primeira abordagem, recorreu-se ao código do trabalho do primeiro laboratório. Para adefinição do PWM existem dois parâmetros a considerar: o seu período e o seu duty cycle . Apesarde se tratar de um dsPIC diferente do utilizado no primeiro trabalho, o seu cálculo continua omesmo:

     T = [(PRx + 1) * 4 /Fosc]*[ Prescaler_Fosc/Prescaler_TIMERx]

    Utilizou-se para o nosso código os seguintes valores: Prescaler_Fosc=16, Prescaler_TIMER2=1e a frequência interna de funcionamento do dsPIC, Fosc, é de 7373KHz. O PWM está associadoao Timer2.

    O código utilizado neste trabalho é bastante extenso e encontra-se devidamente comentado. Poressa razão encontram-se aqui apenas alguns excertos de código relevantes. Primeiramente, vamosreferir as funções que também foram aplicadas no trabalho anterior. É de referir que asconstantes e as macros estão definidas no ficheiro user_defines(FOSCPWM=7373).

     A seguinte parte do código é responsável pela criação e controlo de um PWM para o qual outilizador introduz o comando 'pwm' seguido pelo período em microsegundos e o duty cycle  (empercentagem) , entre espaços. Este código é o mesmo que o código do programa utilizado noprimeiro trabalho, mas os limites válidos para o parâmetro período são, desta feita, [1;2220] μs,uma vez que se mudou o  prescaler  do timer2, por razões que iremos especificar mais tarde nesterelatório.

     A função InitPWM  executa os comandos necessários à preparação do dsPIC para a utilização doPWM. É executada pela função SetUp, onde é feita a inicialização de todos outputs e inputs.

    void  InitPWM(void ) //funcao que prepara o PWM do dsPIC com o timer 2 e atribui asaida ao pin RD0{

    T2CONbits.TON=0; //Desliga o timer 2OC1CONbits.OCM = 6; //OC1 PWM mode RD0 pinPR2 = 0; //Valor do CCP associado ao timer 2OC1RS = 0; //duty cycle = 0OC1R = 0; //no delayOC1CONbits.OCTSEL = 0; //using timer 2T2CONbits.TCS = 0; //using instruction cycleT2CONbits.TCKPS = PRESCALE_TIMER2_BIT; //prescaler (0)1:1T2CONbits.TON = 1; //liga o Timer 2

    return;}

     A função receiveActionPWM  recebe a instrução do utilizador que altera o período e o duty cycle  doPWM:

    int receiveActionPWM(const char *s) // A string s tem o comando pwm, maisos seus parametros, que deverao ser interpretados pela funcao {char * p = s + wordlen(s,0) + 1;

    unsigned  int duty, period;

    period = atoi(p);p += wordlen(p,0) + 1;

    duty = atoi(p);

  • 8/16/2019 Implementação em microprocessador de um ADC do tipo SAR

    6/226

    UpdatePWM(period, duty); //o PWM e' alterado 

    print_string("A mudar o PWM para um periodo de: ");print_int(period);print_string(" us \n");Serial_print();print_string("e para um duty cycle de: ");

    print_int(duty);print_string("% \n");Serial_print();print_string(" ");Serial_print();return 1; //devolve 1, accao PWM foi executada 

    }

     A anterior chama a função UpdatePWM , que permite alterar o período e duty cycle   do PWMgerado:

    void  UpdatePWM(unsigned long period, unsigned long duty)//funccao que muda o PWM 

    {if(period==0){PR2=0; OC1RS=0;} //desliga o PWM se o periodo e' 0else

    {PR2= (long)(period*FOSCPWM*PRESCALE_FOSC/(4*1000*PRESCALE_TIMER2))-1;OC1RS = PR2*duty/100;return;

    }

     As novas funções que foram criadas para este trabalho são receiveActionDUTY,executeActionDUTY, que estão associadas ao comando „duty‟ , e receiveActionADC   e UpdateADC,que estão associadas ao comando „adc‟. As primeiras serão abordadas nesta sessão, as restantesna seguinte, onde serão utilizadas.

     Ao introduzir o comando „duty‟ seguido pelo período em microsegundos e o delay emmilisegundos, entre espaços, o dsPIC vai produzir um PWM com o período introduzido e cujoduty cycle  começará a zero e que vai sendo incrementado de 1% em 1% com pausas de duraçãoigual ao delay   introduzido, até atingir os 100%. Dentro da função main , o código do comando„duty‟ vai repetir-se novamente com os mesmos parâmetros iniciais, até que o utilizador cancelecom a tecla ESC .Esta função foi desenvolvida para testar o correcto funcionamento do filtro passa-baixo RC. Ocódigo relevante referente ao comando „duty‟ encontra-se abaixo.

     A função receiveActionDUTY  recebe o comando „duty‟ do utilizador:

    int receiveActionDUTY(const char * s) // A string s tem o comando duty, mais osseus parametros{

    char * p = s + wordlen(s,0) + 1;unsigned  long delay, duty, period;period = atoi(p);p += wordlen(p,0) + 1;delay = atoi(p);duty = 0;

    print_string("A mudar o PWM para um periodo de: ");print_int(period);

  • 8/16/2019 Implementação em microprocessador de um ADC do tipo SAR

    7/227

    print_string(" us \n");Serial_print();print_string("com delay de: ");print_int(delay);print_string("ms \n");Serial_print();print_string("executar \n");

    Serial_print(); //vai globalizar as variaveis iniciais do comandoDUTY para serem reutilizados na main, para repetir a funccao executeActionDuty

    exeDuty.period=period;exeDuty.duty=duty;exeDuty.delay=delay;

    executeActionDUTY(period,duty,delay);

    return 1;}

     A anterior chama a função executeActionDuty , que executa os incrementos do duty cycle   com osdelays  referidos:

    void  executeActionDUTY(unsigned  long period, unsigned  long duty, unsigned  long delay){ //varia o dutycycle por 1% com pausas em ms 

    while(duty

  • 8/16/2019 Implementação em microprocessador de um ADC do tipo SAR

    8/22

  • 8/16/2019 Implementação em microprocessador de um ADC do tipo SAR

    9/229

    Figura 5 –   pwm 137μs, 90%.  Figura 6 –   pwm 2222μs, 50%. 

    Estando garantido o bom funcionamento do DAC interno do ADC, procurou-se obter a curvade transferência do mesmo, i.e., o valor do sinal DC do DAC em função da percentagem de dutycycle  do PWM aplicada. Para tal, mediu-se, com um multímetro, o valor da tensão aos terminaisdo condensador (i.e., à saída do filtro RC) para valores de duty cycle  do PWM em incrementos de5%, começando nos 0% e até aos 100%. Realizou-se ainda um ajuste linear aos pontos obtidos.É de referir que se repetiu este estudo na segunda sessão de laboratório, após se montar todo ocircuito, uma vez que seria de se esperar pequenas flutuações do comportamento do mesmo e sepretendia obter esta curva de transferência o mais próximo possível da utilização do ADC. Nafig. 7 encontra-se o perfil obtido na segunda sessão de laboratório, bem como o ajuste linear.

    Figura 7 –  Função de transferência do DAC interno do ADC

     A recta de ajuste obtida foi:

    VDAC % = 21.7 ± 2.12 + 49.3 ± 3.62 × 10−3 × % mV, 

    com um R de 0.999999.

    0 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100

    0.0

    0.5

    1.0

    1.5

    2.0

    2.5

    3.0

    3.5

    4.0

    4.5

    5.0

    [20-11-2009 10:25 "/Plot2" (2455155)]

    Linear Regression for Valores2_B:

    Y = A + B * X

    Parameter Value Error 

    ------------------------------------------------------------

     A 0.0217 0.00212

    B 0.0493 3.62026E-5

    ------------------------------------------------------------

    R SD N P

    ------------------------------------------------------------

    0.99999 0.00502 21

  • 8/16/2019 Implementação em microprocessador de um ADC do tipo SAR

    10/2210

    2ª Sessão de laboratório

    Material utilizado:  Osciloscópio digital; 

      Gerador de sinais;   Resistências de 5.6KΩ e 68KΩ;   Condensador de 1µF;   Circuito integrado lf353dp (JFET input

    opamp); 

      Multímetro; 

      Estação de trabalho electrónica com

    gerador de sinais –  workbench ;   Placa de ligações “breadboard ”; 

      “MPLAB” Software  e compilador “C”; 

      Microcontroller ds30F3014;   Microchip MPLAB ICD2 

    Encontrando-se o DAC interno implementado, faltava apenas implementar o comparador do ADC SAR  antes de se poder executar o algoritmo das aproximações sucessivas em si. Assim, nasegunda sessão de laboratório implementou-se o circuito comparador e desenvolveu-se o código

    para a execução do algoritmo necessário para gerar um ADC de aproximações sucessivas.De seguida explana-se sobre a implementação do comparador e sobre código utilizado pararealizar o algoritmo.

    I –  Comparador

    Uma típica realização de um comparador é utilizando um amplificador operacional que,dependendo da comparação entre os dois sinais às suas entradas, ora sature à tensão de

    alimentação positiva V S+ , ora à tensão de alimentação negativa V S-. Como se utiliza o dsPIC paraa realização do algoritmo, a escolha por um comparador digital torna-se ainda mais adequada,uma vez que se podem utilizar entradas digitais. Desta maneira, escolheu-se utilizar o circuitointegrado lf353dp utilizado no trabalho anterior. Na figura 8 encontra-se o esquema do circuitoque realiza o comparador pretendido.

    Figura 8 –  Esquema do circuito que implementa o comparador do ADC SAR  

    Desta forma, à saída do comparador esperava-se obter:

    Se V IN>V DAC , V COMP=”0” Se V IN

  • 8/16/2019 Implementação em microprocessador de um ADC do tipo SAR

    11/2211

    Uma vez que o dsPIC trabalha com valores de entradas digitais entre 0V e 5V, utilizou-se comotensões de alimentação do ampop os valores de 0V para V S+  e 5V para V S-, fazendo uso dasligações da workbench .

     Testou-se o funcionamento do comparador, usando o V DAC  implementado e, como sinal deentrada, o gerador de sinais DC de tensão variável do workbench . No entanto, observou-se noosciloscópio que a saída do comparador não saturava a 0V e 5V, mas sim a aproximadamente1.26V e 4.5V. Ainda assim, verificou-se que o dsPIC continuava a interpretar essas saídas como“1” ou “0” lógico, de maneira que aparentemente não haveria problema. Contudo, verificou-semais tarde que o resultado da comparação não era o correcto para tensões de entrada menoresque cerca de 1.26V, tensão de saturação inferior do ampop: à saída do ampop. Nesses casos,qualquer que fosse o valor de V DAC, para V IN < ~1.26V surgia sempre o valor lógico “1” à saídado comparador, independentemente do valor de V DAC. Desta forma, o comparador não seencontrava a funcionar como pretendido, comprometendo o correcto funcionamento do ADC.Conseguiu-se contornar este problema utilizando um V S- negativo, com o auxílio da saída DC

     variável negativa da placa workbench , de modo que, quando V IN

    > V DAC

    , V COMP

     satura a cerca de-1.3V.

    Confirmou-se, então, o correcto funcionamento do comparador com vários valores de V DAC e de V IN. Nas figuras seguintes (fig. 9 e fig. 10) encontram-se duas imagens correspondendo a umcaso em que se colocou V IN>V DAC e um outro em que se colocou V INV DAC. A verde encontra-se o PWM, a rosa V DAC, a amarelo V IN e,a azul, V COMP.

  • 8/16/2019 Implementação em microprocessador de um ADC do tipo SAR

    12/2212

    Figura 10 –  Teste do comparador com V IN

  • 8/16/2019 Implementação em microprocessador de um ADC do tipo SAR

    13/2213

    Figura 11 –  Fluxograma do algoritmo de aproximações sucessivas implementado

    Este algoritmo corresponde assim a uma ligeira alteração do algoritmo de aproximaçõessucessivas original, em que se define o valor do registo bit a bit, começando pelo maissignificativo. No nosso caso, substituiu-se essa definição do bit pela soma da variável „i‟ ou„i>>1‟, consoante a comparação, mas mantendo o mesmo princípio de funcionamento. Estaalteração permitiu realizar mais facilmente o algoritmo dentro das características do dsPIC.

    De seguida apresenta-se o código do comando „adc‟ em si: 

    long receiveActionADC(void ) // A string s tem o comando adc mais os seus

    parametros {

    unsigned  long duty, MaxBits, registo, i; //inicializaccao das variaveis MaxBits = ADCBITS; //o valor maximo de bits, tambem vai corresponder

    ‘a frequencia utilizada no sinal do DAC, neste caso e' aproximadamente 139usduty = DUTYBITS; //valor do primeiro valor a comparar com o DACregisto = 0; //valor de registo do metodo das aproximaccoes sucessivasi=duty; //variavel auxiliar para a contagem do ciclo do metodo

    das aproximaccoes sucessivas

    while(i>0) //inicio do ciclo do metodo das aproximaccoes sucessivas{

    UpdateADC(MaxBits, duty); //variaccao do duty-cycle do pwmgerado, actualizaccao do valor do DAC

    delay_ms(50); //um delay para dar tempo ao RC responder 'avariaccao anterior

    LED1=COMPARADOR; //vericaccao da variaccao do COMPARADOR com oauxilio do LED1

    if(COMPARADOR==0){ //condiccao, se o comparador==0, significa queVIN>VDAC 

    registo = registo + i; //registo guarda o valor do bitcorrespondente do valor i dentro da sua string the bits

    duty=duty+(i>>1); //duty aumenta para o proximo bit}else duty=registo+(i>>1); //Se o comparador=!0, significa que o

    VIN>1); //decresce o valor auxiliar i (shift para a direita oureduzir a metade)

    } //termina o ciclo do metodo das aproximaccoes sucessivasreturn registo; //retorna o valor final do registo

    }

  • 8/16/2019 Implementação em microprocessador de um ADC do tipo SAR

    14/2214

    É de referir o comando delay_ms(50), dado que 50ms foi um delay  que se observou permitir que ocondensador carregasse totalmente e, assim, alterar o V DAC correctamente. 1ms era insuficiente.

     A função „adc‟ chama a f unção UpdateADC , que se permite mudar o duty cycle  do PWM de acordocom o algoritmo pretendido: 

    void  UpdateADC(unsigned  long MaxBits, unsigned  long duty) //funccao que muda o PWMassociado ao comando ADC{

    if(MaxBits==0){PR2=0; OC1RS=0;} //desliga o PWM se o periodo e' 0else

    {PR2= MaxBits;OC1RS = duty;}

    return;}

    Quando termina o ciclo, a função receiveActionADC  devolve o valor do registo. O comando „adc‟repete-se novamente dentro da função main , até que o utilizador o cancele com a tecla ESC.Desta forma o programa está continuamente a realizar a conversão e a apresentar os resultados.

     A escolha da frequência utilizada prende-se com o seguinte: para simular a existência de umregisto físico interno de 12 bits no nosso ADC, e uma vez que o valor de referência docomparador do algoritmo, isto é, V DAC, é controlado pelo valor do duty cycle , definiu-se o prescaler  referente ao PWM de maneira a que uma palavra de 12 bits, todos a „1‟ , correspondesse àfrequência do PWM escolhida, que é de 7.20 kHz (período de 139 μs). Desta maneira há umarazão directa entre o duty cycle , necessário à execução do algoritmo, e o registo, cujo valor é oresultado da conversão no final do algoritmo, evitando-se assim possíveis erros de conversão dos

     valores em binário entre o registo e o duty cycle , pelo dsPIC.

    Para testar o correcto funcionamento do ADC, executou-se o algoritmo para valores de tensão

    de entrada começando em 0V e indo de cerca de 100 em 100mV até aos 5V, valores medidosdirectamente pelo multímetro. A tabela geral com todos os resultados encontra-se em anexo.Filmou-se ainda um pequeno vídeo durante o funcionamento do mesmo.

    Em relação ao resultado da conversão, optou-se por utilizar três métodos distintos de odeterminar, de maneira a averiguar qual deles apresentava uma maior exactidão, sendo estareferente à medição directa do valor do sinal de entrada utilizando um multímetro.

    Uma vez que o PWM gerado pelo dsPIC tem uma gama de tensão de 0V a 5V, o valor V DAC é,idealmente, igual à fracção do duty cycle  (i.e. duração do duty cycle  a dividir pelo período do PWM)multiplicada pelos 5V. Assim, não tendo em consideração imperfeições no circuito, o resultadoda conversão é igual a essa fracção final de duty cycle  multiplicada por 5V. Utilizando as variáveis

    do programa desenvolvido, tem-se então que o resultado da conversão é:VCONV registo =

    registo

    212 − 1 × 5 V, 

    que se utilizará como primeiro possível candidato a resultado de conversão, dado pelo programa.

    No entanto, uma vez se conhece a curva de transferência do DAC interno, é sabido que acorrespondência entre o valor do registo e a tensão de conversão não é assim tão directa. Destamaneira, um valor mais plausível poderá ser aquele dado pelo ajuste linear, a curva detransferência do DAC. Assim, utilizando a recta obtida e o valor do duty cycle  correspondente aoque se encontra no registo, após a execução do algoritmo, um melhor candidato a resultado daconversão será:

    VCONV registo = 21.7 ± 2.12 + 49.3 ± 3.62 × 10−3 ×

    registo

    212 − 1 mV 

  • 8/16/2019 Implementação em microprocessador de um ADC do tipo SAR

    15/2215

    Chamemos ao anterior o resultado a priori  da conversão, uma vez que apresenta um resultadoantes de se fazer alguma comparação com a medição directa com o multímetro.

    Finalmente, uma vez que se mediu o sinal de entrada directamente com o multímetro, é possívelobter um  plot   a que corresponderá a uma espécie de curva de transferência entre o valor doregisto obtido como resultado pelo programa e o valor medido pelo multímetro do sinal deentrada, que se está a tomar como valor exacto. Desta forma, obtém-se uma relação directa entrea saída do programa e o valor exacto da conversão, medido por outro método, isto é, umarelação a posteriori , que necessita do conhecimento da grandeza que se pretende medir. Com estarelação pensou-se que se poderia obter informação sobre o “real”  funcionamento do ADC e,assim, obter melhores resultados com ele.

    É de referir que, para tentar eliminar eventuais erros devido às flutuações dos sinais ao longo dotempo de medida, para cada medição esperou-se que o sinal de entrada estabilizasse (lendo nomultímetro) e realizaram-se várias conversões com o programa, parando aquando da observaçãono multímetro de uma alteração do valor no dígito menos significativo. Tomou-se finalmente amédia desses valores do registo obtidos pelo programa como o valor definitivo para o mesmo.

    Na figura 12 encontra-se o perfil obtido, bem como o ajuste linear correspondente.

    Figura 11 –  Curva de transferência do ADC a posteriori  

    Como já foi referido, as tabelas com todos os valores encontram-se em anexo. Apresentaremosaqui apenas uma comparação entre os métodos, referindo, para cada um o desvio à exactidãomáximo obtido (em relação a todas as medições), bem com a média desses desvios à exactidão.Nas figuras e tabela seguinte encontra-se a evolução do desvio à exactidão com as mediçõesefectuadas, bem como uma comparação entre os métodos.

    0 500 1000 1500 2000 2500 3000 3500 4000

    0.0

    0.5

    1.0

    1.5

    2.0

    2.5

    3.0

    3.5

    4.0

    4.5

    5.0

    [08-01-2009 10:25 "/Graph1" (2557921)]

    Linear Regression for ValoresPer_B:Y = A + B * X

    Parameter Value Error 

    ------------------------------------------------------------

     A 0.00693093 0.000452

    B 0.00121435 4.51115E-6

    ------------------------------------------------------------

    R SD N P

    ------------------------------------------------------------

    0.99999 0.00314 39

  • 8/16/2019 Implementação em microprocessador de um ADC do tipo SAR

    16/2216

    Figura 12 –  Evolução dos desvios à exactidão dos resultados do programa ao longo das medições 

    Figura 13 –  Evolução dos desvios à exactidão dos resultados a priori  ao longo das medições

    Figura 14 –  Evolução dos desvios à exactidão dos resultados a posteriori  ao longo das medições 

    0

    10

    20

    30

    40

    50

    0,0 0,5 1,0 1,5 2,0 2,5 3,0 3,5 4,0 4,5 5,0

       D   e   s   v   i   o    à   e   x   a   c   t   i    d   ã   o    [   m   V    ]

    Vin (multímetro) [V]

    Desvios à exactidão - Programa

    0

    10

    20

    30

    40

    50

    0,0 0,5 1,0 1,5 2,0 2,5 3,0 3,5 4,0 4,5 5,0

       D   e   s   v   i   o    à   e   x   a   c   t   i    d   ã   o    [   m   V    ]

    Vin (multímetro) [V]

    Desvios à exactidão - a priori 

    0

    10

    20

    30

    40

    50

    0,0 0,5 1,0 1,5 2,0 2,5 3,0 3,5 4,0 4,5 5,0

       D   e   s   v   i   o    à   e   x   a   c   t   i    d   ã   o    [   m   V    ]

    Vin (multímetro) [V]

    Desvios à exactidão - a posteriori 

  • 8/16/2019 Implementação em microprocessador de um ADC do tipo SAR

    17/2217

    Método Programa  A priori A posteriori

    Máximo desvio à exactidão [mV] 23.3 48.3 20.3

    Média dos desvios à exactidão [mV] 9.0 11.7 4.1

     Tabela 1 –  Comparação dos resultados referentes aos três métodos 

     Análise dos resultados

    Como esperado, não se encontraram problemas com o código utilizado na primeira sessão delaboratório, que se resume à criação de um PWM e de um novo comando „duty‟. Em relação aoPWM, o código referente é bastante idêntico ao utilizado no primeiro trabalho de laboratório,mantendo todas as suas características de utilização, vantagens e desvantagens, que já foramreferidas anteriormente, aquando do primeiro trabalho de laboratório da cadeira.O novo comando „duty‟ criado é facilmente implementável tendo dominado o código referente à

    geração de sinais PWM, uma vez que utiliza os mesmos conceitos que o no caso anterior.Estando o anterior em bom funcionamento, não se esperavam também dificuldades com estenovo comando, o que se confirmou.

    No que diz respeito à conversão do PWM para um sinal DC de amplitude controlável, utilizandoo circuito RC projectado (que pretendia-se que realizasse o DAC interno do ADC SAR  ), pôdedesde logo observar-se ao osciloscópio que, com o comando „duty‟, essa amplitude iaaumentando ao longo do tempo, aparentando estar tudo a funcionar correctamente. Fazendomedições mais rigorosas da amplitude do sinal, de entre as quais aquelas apresentadas nas figuras3, 4 e 5, observa-se que o valor do sinal DC é, de facto, o correcto: 5V multiplicados pela fracçãode duty cycle  utilizada. No entanto, só aquando do estudo da curva de transferência do DAC é que

    se pode definitivamente concluir da boa qualidade desta implementação. Podem ver-se algumasflutuações do sinal do DAC, o que poderá porventura influenciar a comparação do sinal deentrada com o V DAC. Analisaremos isto mais à frente.

     Antes de passarmos à análise da curva de transferência do DAC interno, atentemos na figura 6.Nela encontra-se um exemplo típico das consequências de um dimensionamento mal feito: osinal que se obtém não é perfeitamente DC, longe disso. Isto deve-se ao facto de ainda nãoestarmos a uma frequência de funcionamento elevada o suficiente para ter o comportamentodesejado em que o filtro retém o valor médio do sinal de entrada. Nestas condições, obter-se-iaum sinal V DAC instável e, assim, aquando da execução do algoritmo das aproximações sucessivas,iria haver flutuações significativas na tensão de referência, provocando flutuações no resultadoda comparação e, assim, erros na conversão.

    Desta maneira, o passa-baixo RC bem dimensionado revelou-se eficaz para a geração de um sinalDC de amplitude controlável pelo dsPIC, como se pretendia. O correcto dimensionamento dofiltro é um factor importantíssimo para um correcto funcionamento do circuito.

     A curva de transferência obtida para o DAC permite dizer que este se encontra bemimplementado: o perfil obtido é muito próximo do linear, com um coeficiente R de 0.999999.

     Ainda assim, podem desde já prever-se alguns problemas, senão vejamos o seguinte. Verifica-se que a ordenada na origem obtida é de 21.7 ± 2.12 mV. Assim sendo, utilizando 0%para o duty cycle , o valor mínimo possível, obtém-se à saída do DAC não 0 mV, mas sim cerca de22 mV, podendo mesmo chegar a 23.82 mV. Relembre-se que a resolução a priori  deste ADC de12 bits é de (usando a fórmula na introdução) 1.22 mV. Assim, para sinais de entrada de baixaintensidade, o erro cometido pelo DAC faz com que haja bits menos significativos do ADC que

    não têm significado físico, ficando assim mais reduzido o número efectivo de bits do ADC. Deigual modo, no outro extremo do intervalo, ou seja com um duty cycle  de 100%, V DAC dado pela

  • 8/16/2019 Implementação em microprocessador de um ADC do tipo SAR

    18/2218

    recta de ajuste pode valer, tendo em conta as incertezas do ajuste, cerca de 4949 mV, ou seja, terum erro de cerca de 51 mV. Supondo que este é o maior erro de V DAC ao longo de toda a escalade funcionamento do ADC e utilizando-se esta curva de transferência para obter os resultadosda conversão analógico-digital, poderá ser esta a resolução do ADC, cerca de 51mV. Invertendoa expressão que dá a resolução do ADC, podemos calcular o número efectivo de bits:

     = 2   + 1, em que Floor[x]  é o menor inteiro mais próximo de x . Com Q=51 mV, obtém-se um númeroefectivo de bits de 6, metade dos 12 bits projectados. Relembra-se, no entanto, que este é o piorcaso possível. Ainda assim, com isto se pode prever que a utilização da curva de transferênciaentre o duty cycle  e o V DAC para determinação do resultado da conversão pode não ser o melhormétodo. Aquando da comparação dos três métodos utilizados para se obter o resultado iráestudar-se melhor esta questão. 

    Passando à segunda sessão de laboratório, em relação à implementação do comparador,

    relembra-se que inicialmente se teve o problema da saturação inferior dar-se a cerca de 1.26V enão a 0V, o que levava a resultados incorrectos de comparação para tensões de entrada menoresque cerca de 1.26V. Tendo ultrapassado esse problema usando um valor negativo para a tensãode alimentação Vs- do ampop, os resultados obtidos foram os desejados, como já mencionado eevidenciado nas figuras 9 e 10. É apenas de referir que, quando os sinais à entrada docomparador eram muito próximos, a saída do mesmo oscilava ligeiramente entre a saturaçãopositiva e negativa. Tal pode ser visto nos vídeos de teste do funcionamento do algoritmo deaproximações sucessivas, aquando dos últimos passos do mesmo. Isto tem a ver com asflutuações inerentes tanto do sinal de entrada V IN, como do V DAC, uma vez que há semprepequenas imperfeições impossíveis de eliminar. Não se procurou fazer um estudo exaustivo dosseus efeitos, mas, como se poderá ver mais à frente, os resultados obtidos para as conversões

    parecem-nos bons o suficiente para ser razoável supor que o seu efeito não seja significativo.

    No que diz respeito ao código em si, tendo já programado o PWM e o comando „duty‟, não serevelou muito complicado desenvolver o código que executasse o algoritmo das aproximaçõessucessivas. Utilizando a facilidade de ter uma frequência que correspondesse a uma cadeia de bitstodos a „1‟ (a variável PR2  ), tornou-se muito mais directo fazer as actualizações do duty cycle  necessárias à execução do algoritmo. Essas alterações eram semelhantes às das funções „duty‟ ou„pwm‟ já feitas. 

    Em relação à conversão propriamente dita relembra-se que se apresentaram os resultados comtrês “métodos” distintos: directamente do programa, a priori  e a posteriori. Relembra-se também

    que se encontra em anexo a tabela com todos os resultados obtidos. É de referir desde logo quehouve alguma dificuldade em regular o controlo da amplitude do sinal DC variável na workbench  para os valores desejados para as medições do sinal de entrada, o controlo manual era bastantesensível. Conseguiu-se, no entanto, realizar as medições pretendidas. Em relação à gama de

     valores de entrada possível utilizar com este ADC, uma vez que o V DAC gerado tem amplitudelimitada à amplitude do PWM, a gama é, então, de 0V a 5V.

    Começando pelo “método” dado directamente do programa, e analisando a figura 12, daevolução dos desvios à exactidão das medições efectuadas, observa-se que as medições comsinais de entrada até cerca de 2V apresentam desvios à exactidão reduzidos e aproximadamenteconstantes. No entanto, a partir daí, dá-se um salto no desvio à exactidão, passando os mesmos aaproximar-se dos 20mV, permanecendo relativamente constantes. É de notar que, aos 2V, omultímetro digital utilizado mudava de escala, tendo menos precisão, o que poderá estarrelacionado com esta mudança súbita observada, uma vez que, relembra-se, adquiriram-se

  • 8/16/2019 Implementação em microprocessador de um ADC do tipo SAR

    19/22

  • 8/16/2019 Implementação em microprocessador de um ADC do tipo SAR

    20/2220

    Com tudo isto se pode ver a relevância do conceito de número efectivo de bits: apesar de osaparelhos ADC poderem ter bastantes bits, devido às imperfeições dos circuitos em si vão existirerros no seu funcionamento que fazem com que haja menor precisão na conversão e, assim, aresolução diminua, fazendo reduzir o número de bits com significado, i.e. bits efectivos. Há que,então, ter este parâmetro em consideração aquando da escolha de um ADC.

    O último objectivo de estudo deste trabalho era estudar a sua máxima taxa de aquisição. Uma vez que se utilizou um delay  de 50ms em cada passo do algoritmo das aproximações sucessivas, eque o ADC tem 12 bits, o tempo de execução do código é de 50  × 12 = 0.6s. A rotina“main” do código tem uma frequência de  execução de 4 kHz e o tempo de preparação das

     variáveis necessárias para gerar o PWM e alterar o duty cycle  corresponde ao tempo usado pelodsPIC, que se lembra que funciona na escala dos MHz, muito mais rápido. Desta maneira, otempo de uma aquisição é sensivelmente igual aos 0.6s determinados, correspondendo a umataxa de aquisição de 1.67 aquisições por segundo. Parece-nos um valor razoável, se pensarmosque um multímetro típico também demora cerca de meio segundo a adquirir uma grandeza.

    No entanto, uma vez que o delay  introduzido poderia ser de valor mas reduzido, quis-se calcular ataxa máxima que se poderia utilizar. Para isso, há que ter em consideração que é necessário, acada passo do algoritmo, dar um tempo mínimo para que o condensador no circuito RC querealiza o DAC carregue para o valor desejado. Uma vez que estamos a trabalhar com 12 bits, a“sensibilidade” do ADC é de cerca de 1 212 − 1   = 0.0244%.   Assim, considera-se que ocondensador está totalmente carregado quando atinge 100% − 0.0244% = 99.976%  do seu

     valor final; esse valor de 100% demoraria um tempo infinito a atingir. O pior caso possível é noprimeiro passo do ciclo, em que V DAC, encontrando-se inicialmente a 0V, tem que subir para2.5V, metade da escala de funcionamento do ADC. Nos passos seguintes, a variação da tensão émenor, de maneira que demorará sempre menos tempo. Calculemos então quanto demora essecarregamento do condensador dos 0V até 99.976% de 2.5V. Como é sabido, a expressão para acarga de um condensador num circuito RC é:

    t  =   − (  − )−  

    Começando o condensador partir dos 0V e tendo duty cycle  a 50%, tem-se que V i=0V e V f =2.5V.Dado que se pretende  =   × 2.5 V, colocando a equação em ordem ao tempo vem:

     = − ln1 − frac 

    Relembra-se que para o nosso RC τ=5.6ms. Uma vez que frac=0.99976 obtém-se finalmentet=46.7ms.Desta maneira, seria possível reduzir um pouco o delay  utilizado no código, o que reduziria otempo de uma conversão para 0.56s, aumentando ligeiramente a taxa para 1.79 aquisições porsegundo. É de referir que, ainda assim, com este período de amostragem, provavelmente este

     ADC não seria indicado par afazer amostragem de sinais AC, uma vez que, de acordo com o Teorema de Nyquist, a frequência destes teria que ser muito reduzida. No entanto, parautilizações idênticas às de um multímetro habitual, dentro da gama de funcionamento docircuito, de 0V a 5V, este ADC seria bastante proficiente.

     Adicionalmente, e para concluir, como o tempo de carga é directamente proporcional aoproduto RC, fazendo outro dimensionamento do circuito que diminuísse τ seria provavelmentepossível diminuir o tempo de carregamento do condensador e, assim, melhorar a máxima taxa deaquisição do ADC. Lembra-se, no entanto, que, ao fazer isso, aumentar-se-ia a frequência decorte do RC, podendo comprometer o bom funcionamento do DAC à frequência actual. Isto anão ser que se utilizasse uma nova frequência de funcionamento, nomeadamente através daalteração do  prescaler . Ainda assim, tem-se algumas reservas sobre se ainda assim seria possívelreduzi-lo tanto ao ponto de se poder utilizar o circuito para realizar amostragens de sinais AC.

  • 8/16/2019 Implementação em microprocessador de um ADC do tipo SAR

    21/2221

    Conclusões

    Com o microcontrolador dsPIC e alguns circuitos adicionais é possível realizar um ADC do tipoSAR . O dsPIC revela-se versátil no que diz respeito à escolha do número de bits, uma vez quepermite ter-se mais ou menos, consoante o desejado. Para além disso, a implementação do

    algoritmo é simples face às potencialidades do microcontrolador em executar código.

    No entanto, a geração do sinal DC de amplitude controlável através do PWM de duty cycle   variável e de um circuito RC não é a mais vantajosa, uma vez que o circuito requer um criteriosodimensionamento e introduz limitações no tempo de conversão. Adicionalmente, veio-se a

     verificar que, apesar da aparente boa linearidade da curva de transferência entre o duty cycle   e V DAC, os resultados obtidos não têm a melhor exactidão possível.

    Fazendo a calibração do aparelho com medições externas é possível obter os melhoresresultados possíveis, com 7 bits efectivos em toda a escala de funcionamento, de 0V a 5V, ouseja, uma resolução de 39.4 mV.

    Limitando a escala a de 0V a 2V, o melhor método é o directamente dado pelo programa,ignorando a curva de transferência referida, permitindo obter 10 bits efectivos, ou seja, umaresolução de 1.96mV. Este método é ainda o mais directo.

    Finalmente, a máxima taxa de aquisição é limitada pelo circuito RC que gera o sinal DC deamplitude controlável. Para sinais de entrada DC o ADC revela-se satisfatório, equiparável aos

     ADC presentes num típico multímetro. No entanto, mesmo com uma eventual optimização docircuito e a escolha de uma melhor frequência, muito provavelmente a taxa de aquisição não seriacompatível com sinais AC típicos.

  • 8/16/2019 Implementação em microprocessador de um ADC do tipo SAR

    22/22

     Anexos

    Na seguinte tabela podem observar-se todos os resultados obtidos referentes à conversãoanalógico-digital. Na segunda linha encontra-se referida a fonte de onde se obtiveram os valores.No caso dos resultados, esta tem a ver com o método utilizado para o cálculo, como se referiu

    no texto principal do relatório. A abreviatura “D. Ex.” significa desvio à exactidão, acrónimoutilizado para reduzir a largura da tabela.

    Vin Registo Resultado 1 D.Ex. D.Ex. Resultado 2 D.Ex. D.Ex. Resultado 3 D.Ex. D.Ex.

    [V] (média) [V] [mV] [%] [V] [mV] [%] [V] [mV] [%]

    multímetro programa programa - - a priori - - a posteriori - -

    0.000 0.00 0.000 0.000 - 0.022 21.700 - 0.007 6.931 -

    0.094 73.61 0.090 -4.124 4.39% 0.110 16.318 17.36% 0.096 2.318 2.47%

    0.201 161.61 0.197 -3.676 1.83% 0.216 15.262 7.59% 0.203 2.180 1.08%

    0.302 244.83 0.299 -3.067 1.02% 0.316 14.448 4.78% 0.304 2.235 0.74%

    0.408 331.22 0.404 -3.583 0.88% 0.420 12.455 3.05% 0.409 1.145 0.28%

    0.506 412.52 0.504 -2.310 0.46% 0.518 12.338 2.44% 0.508 1.877 0.37%

    0.601 490.26 0.599 -2.391 0.40% 0.612 10.929 1.82% 0.602 1.279 0.21%

    0.704 574.64 0.702 -2.368 0.34% 0.714 9.509 1.35% 0.705 0.741 0.11%

    0.800 653.52 0.798 -2.049 0.26% 0.808 8.480 1.06% 0.801 0.535 0.07%

    0.900 735.96 0.899 -1.396 0.16% 0.908 7.723 0.86% 0.901 0.640 0.07%

    1.048 856.61 1.046 -2.080 0.20% 1.053 4.977 0.47% 1.047 -0.846 0.08%

    1.137 928.58 1.134 -3.204 0.28% 1.140 2.623 0.23% 1.135 -2.449 0.22%

    1.200 982.96 1.200 0.191 0.02% 1.205 5.088 0.42% 1.201 0.584 0.05%

    1.336 1093.53 1.335 -0.799 0.06% 1.338 2.208 0.17% 1.335 -1.142 0.09%

    1.434 1174.14 1.434 -0.370 0.03% 1.435 1.259 0.09% 1.433 -1.249 0.09%

    1.518 1241.45 1.516 -2.188 0.14% 1.516 -1.709 0.11% 1.514 -3.514 0.23%

    1.614 1321.35 1.613 -0.630 0.04% 1.612 -1.517 0.09% 1.612 -2.488 0.15%

    1.732 1418.00 1.731 -0.620 0.04% 1.729 -3.160 0.18% 1.729 -3.121 0.18%

    1.818 1488.05 1.817 -1.095 0.06% 1.813 -4.831 0.27% 1.814 -4.061 0.22%1.913 1566.00 1.912 -0.912 0.05% 1.907 -5.981 0.31% 1.909 -4.397 0.23%

    2.12 1744.43 2.130 9.957 0.47% 2.122 1.838 0.09% 2.125 5.285 0.25%

    2.18 1798.48 2.196 15.944 0.73% 2.187 6.901 0.32% 2.191 10.913 0.50%

    2.41 1985.22 2.424 13.953 0.58% 2.412 1.718 0.07% 2.418 7.680 0.32%

    2.59 2134.61 2.606 16.360 0.63% 2.592 1.571 0.06% 2.599 9.093 0.35%

    2.79 2297.69 2.805 15.479 0.55% 2.788 -2.097 0.08% 2.797 7.128 0.26%

    3.03 2496.57 3.048 18.309 0.60% 3.027 -2.667 0.09% 3.039 8.635 0.28%

    3.20 2634.43 3.217 16.648 0.52% 3.193 -6.685 0.21% 3.206 6.057 0.19%

    3.39 2791.83 3.409 18.823 0.56% 3.383 -7.200 0.21% 3.397 7.185 0.21%

    3.60 2961.79 3.616 16.349 0.45% 3.587 -12.580 0.35% 3.604 3.580 0.10%

    3.80 3126.83 3.818 17.858 0.47% 3.786 -13.892 0.37% 3.804 3.992 0.11%

    4.02 3304.96 4.035 15.356 0.38% 4.001 -19.439 0.48% 4.020 0.305 0.01%

    4.20 3458.91 4.223 23.337 0.56% 4.186 -14.090 0.34% 4.207 7.262 0.17%

    4.39 3613.61 4.412 22.221 0.51% 4.372 -17.850 0.41% 4.395 5.117 0.12%

    4.60 3783.65 4.620 19.844 0.43% 4.577 -23.134 0.50% 4.602 1.609 0.03%

    4.81 3957.52 4.832 22.139 0.46% 4.786 -23.811 0.50% 4.813 2.747 0.06%

    4.93 4054.13 4.950 20.098 0.41% 4.902 -27.503 0.56% 4.930 0.064 0.00%

    4.96 4075.65 4.976 16.376 0.33% 4.928 -31.593 0.64% 4.956 -3.801 0.08%

    4.98 4091.74 4.996 16.018 0.32% 4.948 -32.226 0.65% 4.976 -4.266 0.09%

    5.00 4095.00 5.000 0.000 0.00% 4.952 -48.300 0.97% 4.980 -20.306 0.41%

    Max D.Ex.: 23.3 mV 48.3 mV 20.3 mV

    Média D.Ex. 9.0 mV 11.7 mV 4.1 mV

    Obs: sob fundo amarelo encontram-se as medições, em cada método, que tiveram o maiordesvio à exactidão desse método.