STM32 ADC Noise 2

9

Je viens de tester mon deuxième design avec STM32F2, maintenant c'est STM32F207ZFT6, le comportement ADC est le même que dans ma première application - fort bruit dans ADC.

Partie essentielle des schémas de la carte

Bruit d'entrée de courant sans aucun signal connecté:

signal reçu avec broche flottante

Remarque: Dans les graphiques de signaux ci-dessus, l'axe vertical est en bits ADC, pas en volts !; ne soyez pas confus par sa légende «[V]», pour ce test, nous avons utilisé notre programme modifié pour voir les données approximatives de l'ADC.

Le même bruit apparaît même lorsque la broche analogique du CPU est court-circuitée à GND, comme illustré ici: signal d'entrée avec broche court-circuitée à la masse

Il y a des pointes permanentes de plus de 30 LSB et plus dans le signal échantillonné, bien qu'elles ne devraient pas dépasser 5-10 LSB, à mon avis.

Un autre détail:

  • PCB à 2 côtés, sur le côté inférieur il y a d'autres connexions mais la majeure partie est versée avec un signal GND - commun à la fois numérique et analogique, la masse analogique n'est pas séparée. Comme la consommation de la carte est minimale, inférieure à 100 mA, je pense qu'elle ne devrait pas provoquer un tel bruit.

  • référence de tension VREF 3,3 V tamponnée par ampli-op, bloquée par 100nF et tantale 10uF en parallèle, la même chose avec VREF / 2; chacune des broches d'alimentation du processeur est bloquée avec un capuchon de 100 nF

  • dans notre ancienne application, nous utilisions le même concept de conception, mais le processeur utilisé était AduC834; il dispose également d'un CAN 12 bits et le bruit du signal n'était que de plusieurs LSB, il n'y a eu aucun problème; La principale différence était que la référence de tension interne AduC était utilisée, aucune externe

  • nous avons testé pour déconnecter la broche de masse analogique du processeur de la carte GND commune et pour la connecter avec un fil supplémentaire directement à la masse de référence de tension VREF, sans effet

  • c'est un appareil de mesure de réseau triphasé, il y a 3 canaux de tension analogiques et trois canaux de courant avec préamplificateur à gain commutable; l'oscillateur CPU 25 MHz, l'horloge interne 120 MHz par PLL, l'horloge ADC est 30 MHz (conformément aux spécifications techniques), nous avons testé pour ralentir l'horloge interne principale (donc toutes les horloges secondaires aussi) jusqu'au quart, mais sans aucun effet

  • L'ADC échantillonne périodiquement le signal d'entrée avec un taux de 128 conversions par période de réseau de 50 Hz, c'est-à-dire chaque 156 usecs; les résultats sont transférés par DMA dans la RAM interne; les données de la RAM sont transférées via RS485 isolé (sur une autre carte) et visualisées dans notre programme. Nous avons essayé de prolonger les temps de conversion au maximum, sans effet

  • hors CPU, il n'y a que 3 opams, 2 commutateurs analogiques, un thermomètre I2C et trois commutateurs ULN (inutilisés pendant le test), alimentés par un stabilisateur linéaire LF33, normalement alimenté par 5V DC à partir d'un commutateur sur une autre carte, mais pendant le test, le commutateur était déconnecté et le LF33 était alimenté par une alimentation CC claire de 5 V en laboratoire. Je ne suis sûr que l'oscillateur du processeur peut osciller sur la carte.

  • vérifier le signal avec l'oscilloscope n'obtient pas de résultats décisifs, le signal est trop faible

Quelqu'un avec cette expérience de performance ADC de la famille de processeurs?

Concernant la force du signal: même si l'entrée analogique est en court-circuit, je vois un bruit de 5-10 mV (crête à crête) sur l'oscilloscope - mesuré avec un câble coaxial avec une longueur minimale de fil de terre soudé à la carte. Avec une sonde standard, le bruit était environ deux fois plus élevé probablement en raison d'une pire mise à la terre (bruit CEM général?).

Voici une image de ma planche: image de la carte assemblée

Et le bas du tableau: image du bas du tableau

Comme je l'ai indiqué ci-dessus, même si le signal est mis à la terre, le bruit d'environ 30 LSB persiste toujours dans les données converties par l'ADC.

Milan
la source
Vous dites que le signal est trop faible, à quel point est-ce faible?
Kortuk
J'ai également signalé mon problème sur le forum ST, il y a tous les liens (y compris la photo du forum): my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/…
Milan
2
Je ne vois pas suffisamment de bouchons de dérivation sur cette carte pour me mettre à l'aise, et ils font tous assez loin partie.
Connor Wolf
2
@Fake Name - Milan n'utilise pas le terme à mauvais escient, la référence aux «x LSB» fait référence à x fois la valeur linéaire du bit le moins significatif. Cependant, "x bits de bruit" pourraient faire référence à 2 ^ x LSB.
Chris Stratton
3
@ Chris Stratton - Je ne suis pas d'accord. "x bits de bruit" est synonyme de "x LSBs". Ainsi, dire "x fois la valeur LSB" signifierait x fois la valeur linéaire du bit le moins significatif. Cependant, x LSBs signifie les x bits les moins significatifs, ou une plage linéaire de 2 ^ x.
Connor Wolf

Réponses:

4

Je dirais que l'ADC a une 4ème entrée en plus des trois citées par Fred: son horloge. Au moins pour certains types de CAN, la gigue ou le bruit de phase sur l'horloge peuvent avoir un impact sur les mesures du CAN.

Vous dites que vous avez un oscillateur à 25 MHz mais que vous exécutez l'ADC à 30 MHz, vous avez donc une PLL impliquée dans la génération de son horloge. Si cela ne fonctionne pas bien, son irrégularité pourrait être une source de bruit de conversion. Pouvez-vous essayer de changer la configuration logicielle (même temporairement) pour ne pas utiliser la PLL et simplement exécuter une horloge d'entrée ou la diviser?

Je crois que certains microcontrôleurs ont également un mécanisme pour suspendre la plupart des circuits numériques tout en prenant une lecture ADC afin de réduire le bruit. Vous pourriez voir si quelque chose comme ça est possible.

Chris Stratton
la source
2

Il y a plusieurs raisons possibles au bruit que vous voyez. Il est important de comprendre qu'un ADC a TROIS entrées:

  1. La ou les broches d'entrée (celle conçue pour être l'entrée de signal)
  2. La ou les entrées de référence (Dout = 2 ^ n * Vin / Vref)
  3. Les broches d'alimentation (alimentation + gnd)

Le bruit sur l'un de ceux-ci pourrait créer le bruit que vous voyez, et en supposant que l'ADC lui-même n'est pas défectueux, le bruit doit entrer par l'un de ces trois chemins.

Il est possible d'avoir des performances ADC décentes en utilisant la même masse pour analogique et numérique, mais vous devez soigneusement disposer le PCB de sorte que tous les courants de boucle numérique soient isolés des boucles analogiques.

Dans ce contexte, une boucle est la totalité du chemin de courant qu'un signal ou une ligne d'alimentation (qui doit être considéré comme un signal de "bruit" dans ce contexte) prend sur le PCB. Donc, pour une ligne d'alimentation, elle proviendrait de l'endroit où l'alimentation entre dans la carte, le long de la trace jusqu'à ce qu'elle atteigne la broche d'alimentation, à travers tous les transistors du circuit intégré, hors de la broche de terre, puis le long du chemin de moindre résistance jusqu'à où le pouvoir entre dans le tableau. C'est une boucle d'alimentation.

Mais si vous faites un bon travail avec le contournement de l'alimentation, il n'y aura pas beaucoup de courant alternatif dans cette boucle, car vous aurez une boucle beaucoup plus petite et plus localisée du côté alimentation du capuchon de dérivation pour alimenter la broche à la broche de terre et de nouveau à la terre côté du bouchon de dérivation. Si toutes vos alimentations numériques sont étroitement contournées, votre boucle d'alimentation sera généralement propre et tout le numérique bruyant contraint à de courtes boucles de cap de dérivation.

Les boucles de signal (y compris la boucle Vref) fonctionnent de la même manière - le signal entre, s'enroule vers l'ADC, sort de l'ADC GND et revient à la masse du signal (si tout va bien au même endroit où le signal a commencé). Si cette boucle traverse une boucle numérique, vous pouvez obtenir du bruit injecté. Donc, généralement, une bonne conception de signaux mixtes qui utilise un GND pour l'analogique et le numérique gardera le numérique d'un côté et l'analogue de l'autre, avec GND à la fin de la carte juste au point de division. Ce n'est généralement pas si simple que ça, il faut faire des compromis, mais c'est l'idée.

Votre mention "Comme la consommation de la carte est minimale, inférieure à 100 mA, je pense qu'elle ne devrait pas provoquer un tel bruit." Cela dépend davantage de la façon dont le système est contourné. Un système 100mA avec un mauvais contournement va avoir beaucoup plus de bruit numérique dans le plan de masse qu'un système 1000mA avec un bon bypass.

J'espère que cela t'aides...

Fred Hamilton
la source
1

La conception de la carte ne respecte vraiment pas les règles générales recommandées.

Nous l'avons à nouveau testé. Le bruit typique de la carte standard est sur Fig1 à http://imgur.com/a/TU9RQ .

Pour confirmer que le problème est causé par une mauvaise mise à la terre, nous avons effectué les modifications suivantes:

  • mise à la terre commune renforcée (carte modifiée sur Fig2 et bruit approprié sur Fig 3)
  • séparation de la terre analogique de la terre numérique et leur interconnexion mutuelle au niveau de la broche du processeur VSSA (Fig 4).

Aucun d'eux n'a aidé. J'ai donc plutôt peur que le problème puisse se reproduire même après la refonte du PCB à 4 couches…

Pour tester l'influence de la PLL, nous l'avons éteint et le cœur a été cadencé par un cristal externe de 25 MHz uniquement. Le bruit a baissé (Fig 5), mais je pense qu'il a été causé uniquement par une horloge système inférieure (normalement, le cœur est cadencé par les 120 MHz de la PLL), et non par une PLL arrêtée, car lorsque nous sommes passés à nouveau à la PLL à 25 MHz, le bruit était le même que sans la PLL.

Le seul effet notable a été atteint en mesurant le signal VREF / 2 via une broche de processeur individuelle simultanément avec chaque paire de tension et de courant en utilisant le troisième processeur ADC et en le soustrayant des signaux de tension et de courant - puis le bruit modulé est réduit à environ la moitié (sur http : //imgur.com/a/EeqUo , graphique rouge supérieur = signal standard, graphique bleu inférieur = signal après soustraction du bruit mesuré). Mais je ne peux pas utiliser le troisième ADC pour la mesure du bruit, j'en ai besoin pour une autre tâche, donc ce n'est pas une solution pour moi.

Milan
la source
1
Ce n'est pas une réponse et n'aurait donc pas dû être affiché comme tel. Cela dit, l'entrée d'horloge PLL à l'ADC à 1: 1 de l'oscillateur d'entrée est probablement beaucoup plus propre qu'à un rapport impair. Si vous soupçonnez du bruit en mode commun, vous devez regarder les choses que tous les canaux ont en commun ...
Chris Stratton
Normalement, un osc 25 MHz externe est divisé en interne à 1 MHz et cette fréquence est utilisée pour contrôler PLL; son horloge système 120 MHz est divisée par 4 pour obtenir une horloge ADC 30 MHz. Pendant le test, l'horloge du système était de 25 MHz (à la fois directement à partir de l'oscillation ext et à l'aide de PLL) et l'ADC en était directement piloté (pré-appeleur réglé sur 1), c'est-à-dire qu'il fonctionnait à la même 25 MHz. Concernant votre 2ème idée, vous voulez probablement passer le cœur en mode veille lors de la conversion ADC; Les ADC sont desservis par DMA qui ne peut pas être simplement éteint. Mais, bien que non utilisable dans notre application, je suis d'accord qu'il serait intéressant de l'essayer.
Milan
Précisant mon commentaire précédent: j'ai oublié qu'il y a un diviseur sur la sortie PLL; en fait, normalement, la PLL fonctionne à 240 MHz et divisée par deux pour obtenir l'horloge système; pendant le test, la PLL fonctionne à 200 MHz et divisée par huit pour obtenir une horloge système de 25 MHz.
Milan
@ChrisStratton, il semble détailler comment il a résolu le problème, cela ne semble-t-il pas être une réponse?
Kortuk
2
@Kortuk "Aucun d'eux n'a aidé. J'ai donc plutôt peur que le problème puisse se reproduire même après une refonte du PCB à 4 couches ..." Pour moi, il me semble que cette réponse devrait être ajoutée en tant que modification à la question d'origine. Sa deuxième réponse semble décrire comment il a résolu le problème.
m.Alin
1

J'ai repensé le PCB en 4 couches. Et - quelle surprise - le bruit est coupé! Plus de détails ici .

Milan
la source
4
Es-tu fou! Un URI de 319 (!) Caractères, sans même hyperlien correctement?
stevenvh
1
Le lien est rompu, je pense qu'il est ici maintenant - community.st.com/thread/19850
ogurets
1
@ogurets Et c'est encore cassé. Je déteste les réponses aux liens et les forums des fournisseurs. "La page que vous cherchiez a été déplacée ou n'existe pas."
Navin
1
@Navin Je ressens tellement votre douleur ... Googlé par "STM32F2 ADC Signal Noise", date de publication du 28 octobre 2011 (pour la prochaine fois qu'ils le déplacent): community.st.com/s/question/0D50X00009XkaFz/…
ogurets
@ogurets Merci! J'étais curieux de connaître la trame de fond.
Navin