®
ADC Técnicas Oversampling para Stellaris
microcontroladores da família
Eric Ocasio
ABSTRATO
Alguns membros da família de microcontroladores Stellaris ter um módulo conversor analógico-digital
(ADC). A resolução do ADC hardware é de 10 bits; no entanto, devido ao ruído e outros fatores de
precisão diminuindo, a verdadeira precisão é inferior a 10 bits. Este relatório proporciona uma técnica de
aplicação de sobreamostragem baseado em software, resultando em um número eficaz melhorada de bits
(ENOB) no resultado da conversão. Este documento descreve os métodos de oversampling um sinal de
entrada, e o impacto sobre a precisão e desempenho geral do sistema.
Conteúdo
1 oversampling ........................................................................................................................................................1
2 média ....................................................................................................................................................................2
3 Implementação .....................................................................................................................................................4
4 Oversampling mais de 8 vezes usando vários sequenciadores ou um temporizador ...........................................6
5 Oversampling Usando um rolamento médio .......................................................................................................10
6 Questões a considerar ........................................................................................................................................11
7 Conclusão ...........................................................................................................................................................12
8 Referências.........................................................................................................................................................12
Lista de Figuras
1 Resultados de conversão médios .........................................................................................................................2
2 Média normal ........................................................................................................................................................3
3 Média Móvel .........................................................................................................................................................4
4 Sobreamostragem por 16 .....................................................................................................................................6
1 oversampling
Como o nome implica, sobreamostragem reúne os dados de conversão adicionais a partir de um sinal de
entrada. convenção padrão para a amostragem de um sinal analógico que indica a frequência de
amostragem fs deve ser pelo menos o dobro da maior frequência componente f Hdo sinal de entrada. Isto
é referido como o Teorema de Nyquist (verequação 1).
Nyquist Teorema FS = 2 FH
(1)
Qualquer frequência de amostragem seleccionada acima da f Sé considerado como sendo de
sobreamostragem, e quando combinado com técnicas de amostragem, melhora a ENOB. Isto é
possível porque a média dos resultados de sobreamostragem também calcula a média do ruído de
quantização, por conseguinte, melhorar a relação sinal-para-ruído (SNR), que tem um efeito directo
sobre o ENOB.
Para cada bit de melhora a precisão, o sinal deve ser amostrado por um fator de quatro, o que significa
que a relação entre a frequência oversampling f OS e frequência de amostragem fS é como se mostra na
equação 2.
FOS = 4X *F
Frequência oversampling S (2)
em que x é a melhoria desejada na ENOB (por exemplo, durante dois bits de melhoria, x = 2).
Stellaris é uma marca registrada da Texas Instruments.
Todas as outras marcas comerciais são propriedade dos seus respectivos proprietários.
figura 1 mostra como oversampling melhora a precisão do resultado da conversão. Neste diagrama, a
sinal de entrada é amostrado por quatro (grupos de amostras são apresentados em verde e roxo) e
média. Os pontos de amostragem indicados ilustrar a diferença entre a matéria, o sinal ruidoso e média; o
ruído neste exemplo afectando ± 3 bits de precisão sobre uma amostra individual. Note-se que a média
dos valores (pontos laranja) são muito mais próximo do valor ideal do que a maioria das amostras
individuais.
Valor de conversão
grupo amostra
510
média
500
495
490
As amostras
485
individuais
480
grupo amostra
2 média
Calculando a média actua como um filtro passa-baixo do sinal de entrada, com a banda de passagem
do filtro estreitando medida que o tamanho da amostra aumenta. Quando uma média de resultados de
conversão, existem duas abordagens que podem ser tomadas: média normal ou média rolante.
Figura 2 mostra uma situação em que a média normal é usada para oversample uma fonte de entrada por
4. Para este exemplo, a aplicação requer que um novo valor de conversão estar pronto (média completa),
em cada passo de t (t0, t1, t2, e assim por diante).
Quando se utilizam técnicas de amostragem, há um ligeiro atraso associado com o resultado da
conversão calculada, uma vez que corresponde à média dos últimos n amostras. O atraso pode ser
calculado utilizando a fórmula apresentada naequação 3.
t
demo
= t
(
-t ) /2+t
Amostra média Delay ra sn s0 processo (3)
onde tS0 é o tempo em que a primeira amostra da média ocorre, e tSné onde ocorre a última amostra. O
tempo necessário para o manipulador de interrupção para processar os dados de amostra e calcular a
média
tprocesso para fornecer ao aplicativo também é tido em conta na equação. EmFigura 2, O resultado da
conversão é retardada em destaque na laranja.
Valor de conversão
amostra média disponível
tdemora
onda de entrada
t0 t1 t2
tS0 tSn
Valor de conversão d1
d0 d2
onda de entrada
t
t0 t5 t10 t15 t20
3 Implementação
A arquitectura sequenciador amostra no ADC torna simples sobreamostragem por permitindo até 17
amostras originais (a partir de qualquer um dos canais analógicos) para ser recolhido usando um único
gatilho. Isto permite uma flexibilidade no software, fornecendo os meios para uma aplicação para
oversample um número de canais em qualquer momento dado.
Esta secção apresenta várias implementações de sobreamostragem utilizando os microcontroladores
Stellaris. Existem inúmeros métodos que funcionam utilizando combinações de configurações do
sequenciador de amostra, gatilhos ADC e interrupções, no entanto, os exemplos mostrados aqui se
concentrar em técnicas que têm mais probabilidade de ser usado.
Todo o código exemplo usa as funções da biblioteca ADC dos controladores de periféricos Stellaris. O
código fonte para a biblioteca de drivers e os exemplos de software apresentados nesta nota de
aplicação pode ser encontrada no website emhttp://www.ti.com.
4 ADC Técnicas Oversampling para Stellaris® microcontroladores da família SPMA001A -junho 2009 Revisado jan 2013
Apresentar documentação comentários
Copyright © 2009-2013, Texas Instruments Incorporated
www.ti.com Implementação
//
// Inicializar o ADC para oversample canal 1 por 8x usando sequenciador 0.
// Sequencer será disparado por um dos temporizadores de propósito geral.
//
ADCSequenceConfigure (ADC_BASE, 0, ADC_TRIGGER_TIMER, 0);
ADCSoftwareOversampleConfigure (ADC_BASE, 0, 8);
ADCSoftwareOversampleStepConfigure (ADC_BASE, 0, 0, (ADC_CTL_CH1
\ | ADC_CTL_IE | ADC_CTL_END));
//
// Inicializar Temporizador 0 para acionar uma conversão ADC uma vez a cada 10 milissegundos
//
TimerConfigure (TIMER0_BASE, TIMER_CFG_32_BIT_PER);
TimerLoadSet (TIMER0_BASE, TIMER_A, SysCtlClockGet () /
100); TimerControlTrigger (TIMER0_BASE, TIMER_A, true);
A configuração mostrada na ADC 1.a segmento de código dita que uma interrupção ocorre quando a
amostragem for concluída, o que significa que um manipulador de interrupção deve ser implementada
(ver 1.b segmento de código). Desde as funções oversampling Biblioteca condutor médio
automaticamente os dados amostrados, a função de manipulador de interrupção é relativamente
básico. Tenha em mente que ter a média calculada durante cada interrupção adiciona sobrecarga
computacional para o manipulador de interrupção.
vazio
ADCIntHandler (void)
{
lStatus longos;
//
// Desmarque a interrupção ADC
//
ADCIntClear (ADC_BASE, 0);
//
// Obter dados médios do ADC
//
lStatus = ADCSoftwareOversampleDataGet (ADC_BASE, 0, & g_ulAverage);
//
// Espaço reservado para o código de processamento de ADC
//
}
//
// Ativar ADC sequenciador 0 e sua interrupção (tanto na ADC e NVIC)
//
ADCSequenceEnable (ADC_BASE,
0); ADCIntEnable (ADC_BASE, 0);
IntEnable (INT_ADC0);
//
// Ativar o temporizador e iniciar o processo de conversão
//
TimerEnable (TIMER0_BASE, TIMER_A);
interromper gerado
//
// Inicializar o ADC para 16x sobreamostragem no canal 1 usando sequenciadores
// 0-2. A conversão é desencadeada por uma GPTM.
//
ADCSequenceConfigure (ADC_BASE, 0, ADC_TRIGGER_TIMER,0);
ADCSequenceConfigure (ADC_BASE, 1, ADC_TRIGGER_TIMER,1);
ADCSequenceConfigure (ADC_BASE, 2, ADC_TRIGGER_TIMER,2);
//
// Configurar passos de sequência para 0 sequenciador
//
ADCSequenceStepConfigure (ADC_BASE, 0, 0, ADC_CTL_CH1);
ADCSequenceStepConfigure (ADC_BASE, 0, 1, ADC_CTL_CH1);
ADCSequenceStepConfigure (ADC_BASE, 0, 2, ADC_CTL_CH1);
ADCSequenceStepConfigure (ADC_BASE, 0, 3, ADC_CTL_CH1);
ADCSequenceStepConfigure (ADC_BASE, 0, 4, ADC_CTL_CH1);
ADCSequenceStepConfigure (ADC_BASE, 0, 5, ADC_CTL_CH1);
ADCSequenceStepConfigure (ADC_BASE, 0, 6, ADC_CTL_CH1);
ADCSequenceStepConfigure (ADC_BASE, 0, 7, (ADC_CTL_CH1|ADC_CTL_END));
//
// Configurar passos de sequência para um sequenciador
//
ADCSequenceStepConfigure (ADC_BASE, 1, 0, ADC_CTL_CH1);
ADCSequenceStepConfigure (ADC_BASE, 1, 1, ADC_CTL_CH1);
ADCSequenceStepConfigure (ADC_BASE, 1, 2, ADC_CTL_CH1);
ADCSequenceStepConfigure (ADC_BASE, 1, 3, (ADC_CTL_CH1|ADC_CTL_END));
//
// Configurar passos de sequência para sequenciador dois
//
ADCSequenceStepConfigure (ADC_BASE, 2, 0, ADC_CTL_CH1);
ADCSequenceStepConfigure (ADC_BASE, 2, 1, ADC_CTL_CH1);
ADCSequenceStepConfigure (ADC_BASE, 2, 2, ADC_CTL_CH1);
ADCSequenceStepConfigure (ADC_BASE, 2, 3, (ADC_CTL_CH1|ADC_CTL_IE|ADC_CTL_END));
//
// Inicializar Temporizador 0 para acionar uma conversão ADC uma vez a cada 10 milissegundos
//
TimerConfigure (TIMER0_BASE, TIMER_CFG_32_BIT_PER);
TimerLoadSet (TIMER0_BASE, TIMER_A, SysCtlClockGet () / 100);
TimerControlTrigger (TIMER0_BASE, TIMER_A, true);
No Segmento de Código 2.b, o manipulador de interrupção deve reunir os dados das FIFOs e executar o cálculo
da média. A função ADCSequenceDataGet não é usada aqui, uma vez que os resultados desejados são obtidos
sem ter que lidar com o overhead(estress) da função, portanto, leituras de registro diretas são usadas para
esvaziar os FIFOs do seqüenciador. O uso de ADCSequenceDataGet requer que a função defina um buffer de
amostra extra de 8 entradas. Mesmo com leituras de registros diretos, ainda há uma sobrecarga computacional
dos cálculos de soma e média executados no manipulador de interrupção.
Exemplo 2.b. Segmento 5. Código ADC interrupção Handler
void
ADCIntHandler(void) {
unsigned long ulIdx;
unsigned long ulSum = 0;
//
// Clear the interrupt
//
ADCIntClear(ADC_BASE, 2);
//
// Get the data from sequencer 0
ADC Técnicas Oversampling para Stellaris® microcontroladores da
SPMA001A -junho 2009 Revisado jan 2013 família 7
Apresentar documentação comentários
Copyright © 2009-2013, Texas Instruments Incorporated
Oversampling mais de 8 vezes usando vários sequenciadores ou um temporizador www.ti.com
//
// Ative os sequenciadores e interromper
//
ADCSequenceEnable (ADC_BASE,0);
ADCSequenceEnable (ADC_BASE,1);
ADCSequenceEnable (ADC_BASE,2);
ADCIntEnable (ADC_BASE, 2);
IntEnable (INT_ADC2);
//
// Ativar o temporizador e iniciar o processo de conversão
//
TimerEnable (TIMER0_BASE, TIMER_A);
8 ADC Técnicas Oversampling para Stellaris® microcontroladores da família SPMA001A -junho 2009 Revisado jan 2013
Apresentar documentação comentários
Copyright © 2009-2013, Texas Instruments Incorporated
www.ti.com Oversampling mais de 8 vezes usando vários sequenciadores ou um
temporizador
//
// Inicializar o ADC para levar uma única amostra no canal 1, 3 sequenciador
// quando um gatilho é detectado.
//
ADCSequenceConfigure (ADC_BASE, 3, ADC_TRIGGER_TIMER, 0);
ADCSequenceStepConfigure (ADC_BASE, 3, 0, (ADC_CTL_CH1 | ADC_CTL_IE | ADC_CTL_END));
//
// Inicializar Temporizador 0 para acionar uma conversão ADC uma vez a cada 625 microssegundos
//
TimerConfigure (TIMER0_BASE, TIMER_CFG_32_BIT_PER);
TimerLoadSet (TIMER0_BASE, TIMER_A, SysCtlClockGet () / 1600);
TimerControlTrigger (TIMER0_BASE, TIMER_A, true);
{
//
// Desmarque a interrupção
//
ADCIntClear (ADC_BASE, 3);
//
// Adicionar a nova amostra para a soma global de
//
g_ulSum + = HWREG (ADC_BASE + ADC_O_SSFIFO3);
//
// incremento g_ucOversampleCnt
//
g_ucOversampleCnt ++;
//
// Se 16 amostras têm acumulado, média-los e redefinir globals
//
se (g_ucOversampleCnt == 16)
{
g_ulAverage = g_ulSum >> 4;
g_ucOversampleCnt = 0;
g_ulSum = 0;
}
//
// Espaço reservado para o código de processamento de ADC
//
}
//
// Permitir que o sequenciador e interromper
//
ADCSequenceEnable (ADC_BASE,
3); ADCIntEnable (ADC_BASE, 3);
IntEnable (INT_ADC3);
//
// Zero o contador oversample e a soma
//
g_ucOversampleCnt = 0;
g_ulSum = 0;
//
// Ativar o temporizador e iniciar o processo de conversão
//
TimerEnable (TIMER0_BASE, TIMER_A);
//
// Inicializar o ADC para levar uma única amostra no canal 1, 3 sequenciador
// quando um gatilho é detectado.
//
ADCSequenceConfigure (ADC_BASE, 3, ADC_TRIGGER_TIMER, 0); ADCSequenceStepConfigure (ADC_BASE, 3, 0,
(ADC_CTL_CH1 | ADC_CTL_IE | ADC_CTL_END));
//
// Inicializar Temporizador 0 para acionar uma conversão ADC uma vez a cada 100 microssegundos
//
TimerConfigure (TIMER0_BASE, TIMER_CFG_32_BIT_PER);
TimerLoadSet (TIMER0_BASE, TIMER_A, SysCtlClockGet () / 10000);
TimerControlTrigger (TIMER0_BASE, TIMER_A, true);
vazio
ADCIntHandler (void)
{
10 ADC Técnicas Oversampling para Stellaris® microcontroladores da família SPMA001A -junho 2009 Revisado jan 2013
Apresentar documentação comentários
www.ti.com Questões a
considerar
Mais uma vez, antes que o timer é iniciado, o sequenciador e sua interrupção são habilitados (veja 4.c
segmento de código).
//
// Permitir que o sequenciador e a interrupção
//
ADCSequenceEnable (ADC_BASE,
3); ADCIntEnable (ADC_BASE, 3);
IntEnable (INT_ADC3);
//
// Ativar o temporizador e iniciar o processo de conversão
//
TimerEnable (TIMER0_BASE, TIMER_A);
6 Questões a considerar
As técnicas oversampling descritos neste documento têm um impacto óbvio sobre o desempenho geral do
sistema, uma vez que requerem código adicional para executar os cálculos de média, as interrupções
adicionais, ea maior parte dos recursos do sequenciador de amostras. Escolhendo a técnica que melhor
se adequa à aplicação requer analisar os trade-offs entre o tráfego de interrupção aumentou e
manipuladores de interrupção mais volumosos.
SPMA001A -junho 2009 Revisado jan 2013 ADC Técnicas Oversampling para Stellaris® microcontroladores da 11
família
Apresentar documentação comentários
Copyright © 2009-2013, Texas Instruments Incorporated
Conclusão www.ti.com
7 Conclusão
A arquitetura de exemplo sequenciador oferece uma ampla gama de opções para a
implementação de técnicas de oversampling. Quando combinado com média software, a
arquitetura permite que os designers de sistema para efetivamente fazer a engenharia trade-offs
entre frequência de amostragem, o desempenho do sistema e resolução de amostragem.
8 Referências
Os seguintes documentos e software relacionados estão disponíveis no site da Stellaris
em: www.ti.com/stellaris:
• Folha Stellaris LM3S microcontrolador de dados (documentos de dispositivos individuais
disponíveis através produtos ferramenta de seleção).
• Biblioteca de Drivers Periféricos Stellaris. Disponível para download emwww.ti.com/tool/sw-drl.
• StellarisWare Usuário do Driver Library Manual, publicação SW-DRL-UG (SPMU019)
12 ADC Técnicas Oversampling para Stellaris® microcontroladores da família SPMA001A -junho 2009 Revisado jan 2013
Apresentar documentação comentários
Copyright © 2009-2013, Texas Instruments Incorporated
NOTÍCIA IMPORTANTE
Texas Instruments Incorporated e suas subsidiárias (TI) reservamos o direito de fazer correções, melhorias, melhorias e outras alterações
aos seus produtos e serviços semicondutores por JESD46, última edição, e descontinuar qualquer produto ou serviço por JESD48, última
edição. Os compradores devem obter a última informação relevante antes de fazer pedidos e deve verificar que tais informações sejam
atuais e completas. Todos os produtos semicondutores (também referidos aqui como “componentes”) são vendidos sujeitos aos termos e
condições de venda fornecidos no momento da confirmação do pedido de TI.
TI garante desempenho de seus componentes com as especificações aplicáveis no momento da venda, de acordo com a garantia, em
termos e condições de venda de produtos semicondutores da TI. técnicas de teste e outro de controle de qualidade são utilizados na
medida em julgar necessário TI para apoiar esta garantia. Exceto quando exigido por lei aplicável, testes de todos os parâmetros de cada
componente não é necessariamente executada.
TI não assume qualquer responsabilidade assistência aplicações ou a concepção de produtos dos compradores. Os compradores
são responsáveis pelos seus produtos e aplicações que utilizam componentes de TI. Para minimizar os riscos associados aos
produtos e aplicações dos compradores, os compradores devem fornecer garantias de projeto e operação adequados.
A TI não garante nem declara que qualquer licença, expressa ou implícita, é concedido sob qualquer direito de patente, direitos de autor, a
máscara de trabalho certo, ou outro direito de propriedade intelectual relacionada a qualquer combinação, máquina ou processo em que
são utilizados componentes ou serviços de TI . Informações publicadas pela TI em relação a produtos ou serviços de terceiros não constitui
uma licença para utilizar tais produtos ou serviços, ou uma garantia ou endosso dos mesmos. Uso de tais informações pode exigir uma
licença de um terceiro, nas patentes ou outros direitos de propriedade intelectual de terceiros, ou de uma licença de TI sob as patentes ou
outros direitos de propriedade intelectual de TI.
A reprodução de porções significativas da informação da TI em livros de dados TI ou folhas de dados só é permitida se reprodução é sem
alteração e é acompanhada por garantias todos associados, condições, limitações, e os avisos. TI não é responsável por tal
documentação alterada. Informações de terceiros pode estar sujeito a restrições adicionais.
Revenda de componentes ou serviços com declarações diferentes a partir de ou para além dos parâmetros estabelecidos pela TI para
esse componente ou serviço anula todos os expressam e quaisquer garantias implícitas para o componente de TI associado ou serviço
de TI e é uma prática comercial desleal e enganosa. TI não é responsável por quaisquer dessas declarações.
Comprador reconhece e concorda que é o único responsável pelo cumprimento de todos os requisitos legais, regulamentares e
relacionadas com a segurança relativamente aos seus produtos, bem como qualquer utilização de componentes de TI em suas aplicações,
independentemente de qualquer informação ou suporte aplicações relacionadas que podem ser fornecidos por TI. Comprador representa e
concorda que ele tem todo o conhecimento necessário para criar e implementar salvaguardas que antecipam perigosas consequências de
falhas, falhas do monitor e as suas consequências, diminuir a probabilidade de falhas que podem causar danos e tomar ações corretivas
apropriadas. Comprador indenizará totalmente TI e seus representantes contra quaisquer danos que surjam do uso de quaisquer
componentes da TI em aplicações de segurança crítica.
Em alguns casos, os componentes da TI pode ser promovido especificamente para facilitar aplicações de segurança. Com tais
componentes, o objetivo da TI é ajudar permitem que os clientes para projetar e criar suas próprias soluções de produto final que
atendam às normas de segurança funcionais aplicáveis e exigências. No entanto, esses componentes estão sujeitas a estes termos.
Nenhum dos componentes de TI são autorizadas para utilização em FDA Classe III (ou equipamento médico crítico de vida similar) a
menos que os oficiais autorizados das partes assinam um acordo especial que rege especificamente tal uso.
Somente os componentes de TI que TI tem especificamente designados como nível militar ou “plástica reforçada” são projetados e
fabricados para uso em aplicações militares / aeroespaciais ou ambientes. Comprador reconhece e concorda que qualquer uso militar ou
aeroespacial dos componentes de TI que não foram assim designados é exclusivamente por risco do comprador, e que o comprador é o
único responsável pelo cumprimento de todos os requisitos legais e regulamentares em relação a tal uso.
A TI especificamente designado certos componentes como satisfazendo requisitos da norma ISO / TS16949, principalmente para a
indústria automóvel. Em todo o caso de uso de produtos não-designada, TI não será responsável por qualquer falha para cumprir a norma
ISO / TS16949.
Produtos aplicações
auditivo www.ti.com/audio Automotiva e Transporte www.ti.com/automotive
amplificadores amplifier.ti.com Comunicações e Telecom www.ti.com/communications
Conversores de dados dataconverter.ti.com Computadores e Periféricos www.ti.com/computers
produtos DLP ® www.dlp.com Eletrônicos de consumo www.ti.com/consumer-apps
DSP dsp.ti.com Energia e Iluminação www.ti.com/energy
Relógios e temporizadores www.ti.com/clocks Industrial www.ti.com/industrial
Interface interface.ti.com Médico www.ti.com/medical
Lógica logic.ti.com Segurança www.ti.com/security
poder Mgmt power.ti.com Espaço, Avionics e Defesa www.ti.com/space-avionics-defense
microcontroladores microcontroller.ti.com Vídeo e Imagem www.ti.com/video
RFID www.ti-rfid.com
Aplicações OMAP Processadores www.ti.com/omap TI Comunidade E2E e2e.ti.com
Conectividade sem fio www.ti.com/wirelessconnectivity
Endereço para correspondência: Texas Instruments, Caixa Postal 655303, Dallas, Texas 75265
Copyright © 2013, Texas Instruments Incorporated