STM32 ADC Noise 2


9

Acabei de testar meu segundo design com STM32F2, agora é STM32F207ZFT6, o comportamento do ADC é o mesmo do meu primeiro aplicativo - ruído forte no ADC.

Parte essencial dos esquemas da placa

Ruído da entrada de corrente sem nenhum sinal conectado:

sinal recebido com pino flutuante

Nota: Nos gráficos de sinal acima, o eixo vertical está em bits ADC, não em volts !; não se confunda com a legenda „[V]“, para este teste, usamos o nosso programa modificado para ver dados aproximados do ADC.

O mesmo ruído aparece mesmo quando o pino analógico da CPU em curto-circuito para GND, conforme mostrado aqui: sinal de entrada com pino curto-circuito

Existem picos permanentes acima de 30 LSBs e mais no sinal amostrado, embora eles não devam exceder 5-10 LSBs, na minha opinião.

Outros detalhes:

  • PCB de 2 lados, no lado inferior, existem outras conexões, mas a maioria é derramada com sinal GND - comum para digital e analógico, o terra analógico não é separado. Como o consumo da placa é mínimo, abaixo de 100 mA, acho que não deve causar esse ruído.

  • referência de tensão VREF 3.3V em buffer por opamp, bloqueado por 100nF e tântalo 10uF em paralelo, o mesmo com VREF / 2; cada pino de energia do processador está bloqueado com uma tampa de 100nF

  • em nosso aplicativo antigo, usamos o mesmo conceito de design, mas o processador usado foi o AduC834; também possui ADC de 12 bits e o ruído do sinal era apenas de vários LSBs, não havia problemas; A principal diferença foi que foi usada a referência interna de tensão do AduC, nenhuma externa

  • testamos para desconectar o pino de terra analógico do processador do GND comum da placa e conectá-lo com fio extra diretamente ao terra VREF de referência de tensão, sem efeito

  • é um dispositivo de medição de rede trifásico, existem 3 canais de tensão analógica e três canais de corrente com pré-amplificador de ganho comutável; o oscilador de CPU de 25 MHz, o relógio interno de 120 MHz por PLL, o relógio ADC é de 30 MHz (em conformidade com as especificações técnicas), testamos para diminuir o clock do principal interno (portanto, todos os relógios secundários) até um quarto, mas sem nenhum efeito

  • O ADC coleta periodicamente o sinal de entrada com taxa de 128 conversões por período de rede de 50 Hz, ou seja, cada 156 usecs; os resultados são transferidos pelo DMA para a RAM interna; os dados da RAM são transferidos via RS485 isolado (em outra placa) e visualizados em nosso programa. Tentamos prolongar o tempo de conversão ao máximo, sem efeito

  • excluindo CPU, existem apenas 3 opams, 2 comutadores analógicos, termômetro I2C e três comutadores ULN (não utilizados durante o teste), alimentados pelo estabilizador linear LF33, normalmente alimentado por 5V DC do comutador em outra placa, mas durante o teste o comutador foi desconectado e o LF33 foi alimentado com uma fonte clara de laboratório de 5V DC. Tenho certeza de que nada, exceto o oscilador do processador, pode oscilar na placa.

  • verificar o sinal com o osciloscópio não obtém resultados decisivos, o sinal está muito fraco

Alguém com essa experiência de desempenho ADC da família de processadores?

Com relação à força do sinal: mesmo que a entrada analógica seja em curto-circuito, vejo ruído de 5 a 10 mV (pico a pico) no osciloscópio - medido com cabo coaxial com comprimento mínimo do fio terra soldado à placa. Com a sonda padrão, o ruído era cerca de duas vezes maior provavelmente devido ao pior aterramento (ruído geral da EMC?).

Esta é uma imagem do meu quadro: imagem de placa montada

E a parte inferior do quadro: imagem do fundo do tabuleiro

Como relatei acima, mesmo que o sinal esteja aterrado, o ruído de cerca de 30 LSBs ainda persiste nos dados convertidos pelo ADC.


Você diz que o sinal é muito fraco, quão fraco é esse?
Kortuk

Também relatei o meu problema no fórum ST, há todos os links (incluindo a foto do quadro): my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/…
Milão

2
Não estou vendo nenhum lugar perto de calhas de derivação suficientes nesse quadro para me sentir confortável, e elas estão bem distantes da peça.
Connor Wolf

2
@Fake Name - Milan não está abusando do termo; a referência a "x LSB's" refere-se a x vezes o valor linear do bit menos significativo. No entanto, "x bits de ruído" podem se referir a 2 ^ x LSBs.
Chris Stratton

3
@ Chris Stratton - eu discordo. "x bits de ruído" é sinônimo de "x LSBs". Assim, dizer "x vezes o valor LSB" significaria x vezes o valor linear do bit menos significativo. No entanto, x LSBs significa x bits menos significativos ou um intervalo linear de 2 ^ x.
Connor Lobo

Respostas:


4

Eu argumentaria que o ADC tem uma quarta entrada além das três citadas por Fred: seu relógio. Pelo menos para alguns tipos de ADCs, o jitter ou o ruído de fase no relógio podem afetar as medições do ADC.

Você diz que possui um oscilador de 25 MHz, mas está executando o ADC a 30 MHz, portanto, você tem alguma PLL envolvida na geração de seu relógio. Se isso não estiver funcionando bem, sua irregularidade pode ser uma fonte de ruído de conversão. Você pode tentar alterar a configuração do software (mesmo que temporariamente) para não usar o PLL e simplesmente ficar sem um relógio de entrada ou dividido por ele?

Acredito que alguns microcontroladores também têm um mecanismo para suspender a maioria dos circuitos digitais enquanto fazem uma leitura do ADC para reduzir o ruído. Você pode verificar se algo assim é possível.


2

Existem muitas razões possíveis para o barulho que você está vendo. É importante entender que um ADC possui TRÊS entradas:

  1. O pino (s) de entrada (aquele projetado para ser a entrada do sinal)
  2. As entradas de referência (Dout = 2 ^ n * Vin / Vref)
  3. Os pinos de alimentação (fornecimento + gnd)

Ruído em qualquer um desses pode criar o ruído que você está vendo e, assumindo que o ADC em si não está com defeito, o ruído deve estar entrando em um desses três caminhos.

É possível ter um desempenho decente do ADC usando o mesmo aterramento para analógico e digital, mas é necessário dispor cuidadosamente a placa de circuito impresso para que todas as correntes de loop digital sejam isoladas dos loops analógicos.

Nesse contexto, um loop é todo o caminho atual que um sinal ou linha de fonte de alimentação (que deve ser considerado um sinal de "ruído" nesse contexto) assume no PCB. Portanto, para uma linha de fonte de alimentação, seria de onde a energia entra na placa, ao longo do traço até chegar ao pino de alimentação, através de todos os transistores no IC, para fora do pino de aterramento e, em seguida, ao longo do caminho de menor resistência até onde a energia entra no quadro. Esse é um loop de fonte de alimentação.

Mas se você fizer um bom trabalho com desvio de suprimento, não haverá muita corrente CA nesse loop, porque você terá um loop muito menor e mais localizado do lado da fonte da tampa de desvio para ligar o pino ao pino de terra e voltar ao terra lado da tampa de derivação. Se todas as suas fontes digitais forem contornadas com força, o loop da fonte de alimentação estará praticamente limpo e todo o ruído digital será restrito a loops curtos da tampa do desvio.

Os loops de sinal (incluindo o loop Vref) funcionam da mesma maneira - o sinal entra, segue em direção ao ADC, sai do ADC GND e volta ao terra do sinal (espero que seja o mesmo local onde o sinal foi iniciado). Se esse loop cruzar um loop digital, você poderá receber injeção de ruído. Portanto, normalmente um bom design de sinal misto que usa um GND para analógico e digital manterá o digital de um lado e o analógico de outro, com o GND no final da placa, no ponto de divisão. Geralmente não é tão fácil de cortar e secar, você precisa fazer compromissos, mas essa é a ideia.

Sua menção "Como o consumo da placa é mínimo, abaixo de 100 mA, acho que não deve causar esse ruído". Tem mais a ver com o quão bem o sistema é ignorado. Um sistema de 100mA com desvio pobre terá muito mais ruído digital no plano de terra do que um sistema de 1000mA com desvio bom.

Espero que isto ajude...


1

O design da placa realmente não respeita as regras gerais recomendadas.

Testamos novamente. O ruído típico da placa padrão está na Fig1 em http://imgur.com/a/TU9RQ .

Para confirmar que o problema foi causado por aterramento incorreto, fizemos as seguintes modificações:

  • aterramento comum reforçado (placa modificada na Fig2 e ruído apropriado na Fig 3)
  • separação do terra analógico do digital e sua interconexão mútua no pino do processador VSSA (Fig 4).

Nenhum deles ajudou. Por isso, receio que o problema possa ocorrer novamente, mesmo após a reformulação do PCB de 4 camadas…

Para testar a influência da PLL, a desativamos e o núcleo foi cronometrado somente por cristal externo de 25 MHz. O ruído caiu (Fig. 5), mas parece que ele foi causado apenas pelo clock do sistema mais baixo (normalmente, o núcleo possui clock de 120 MHz do PLL), não pelo PLL interrompido, porque quando voltamos ao PLL aos 25 MHz, o ruído era o mesmo que sem o PLL em execução.

O único efeito perceptível foi alcançado medindo o sinal VREF / 2 via pino do processador individual simultaneamente com cada par de tensão e corrente usando o terceiro processador ADC e subtraindo-o dos sinais de tensão e corrente - então o ruído modulado é reduzido para cerca da metade (em http : //imgur.com/a/EeqUo , gráfico vermelho superior = sinal padrão, gráfico azul inferior = sinal após a subtração de ruído medida). Mas não posso usar o terceiro ADC para medição de ruído, preciso dele para outra tarefa, portanto isso não é uma solução para mim.


1
Esta não é uma resposta e, portanto, não deveria ter sido postada como tal. Dito isto, a entrada do relógio do PLL no ADC a 1: 1 do oscilador de entrada é provavelmente muito mais limpa do que em uma razão ímpar. Se você suspeitar de ruído de modo comum, você precisa olhar para as coisas todos os canais têm em comum ...
Chris Stratton

Normalmente, osc externo de 25 MHz é dividido internamente em 1 MHz e essa frequência é usada para controlar o PLL; o relógio do sistema de 120 MHz é dividido por 4 para obter o relógio ADC de 30 MHz. Durante o teste, o relógio do sistema foi de 25 MHz (diretamente do ext osc e usando PLL) e o ADC foi acionado diretamente (prescaller definido como 1), ou seja, é executado nos mesmos 25 MHz. Com relação à sua segunda ideia, você provavelmente quer mudar o núcleo para o modo de suspensão durante a conversão de ADC; Os ADCs são atendidos pelo DMA que não pode ser simplesmente desligado. Mas, embora não seja utilizável em nosso aplicativo, concordo que seria interessante experimentá-lo.
Milan

Preciso do meu comentário anterior: esqueci que existe um divisor na saída do PLL; então, de fato, normalmente o PLL roda a 240 MHz e dividido por dois para obter o relógio do sistema; durante o teste, o PLL roda a 200 MHz e dividido por oito para obter o relógio do sistema de 25 MHz.
Milan

@ ChrisStratton parece estar detalhando como ele resolveu o problema, isso não parece uma resposta?
21412 Kortuk

2
@Kortuk "Nenhum deles ajudou. Por isso, receio que o problema possa ocorrer novamente mesmo após o redesenho no PCB de 4 camadas ..." Para mim, parece que essa resposta deve ser adicionada como uma edição da pergunta original. Sua segunda resposta parece descrever como ele resolveu o problema.
m.Alin

1

Eu redesenhei o PCB para 4 camadas. E - que surpresa - o barulho está baixo! Mais detalhes aqui .


4
Você está louco! Um URI de 319 caracteres (!), Mesmo sem hiperlink?
Stevenvh

1
O link está quebrado, acho que está aqui agora - community.st.com/thread/19850
ogurets

1
@ogurets E está quebrado novamente. Eu odeio respostas de links e fóruns de fornecedores. "A página que você estava procurando foi movida ou não existe."
Navin

1
@Navin Eu sinto sua dor ... Pesquisado no Google por "STM32F2 ADC Noise Signal", data de publicação de 28 de outubro de 2011 (para a próxima vez que eles o moverem): community.st.com/s/question/0D50X00009XkaFz/…
ogurets

@ogurets Thanks! Eu estava curioso sobre a história de fundo.
Navin
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.