Parasites sur bus I2C et alimentations
Répondre à la discussion
Affichage des résultats 1 à 18 sur 18

Parasites sur bus I2C et alimentations



  1. #1
    trendkiller

    Parasites sur bus I2C et alimentations


    ------

    Bonjour,

    J'aurais besoin d'avis sur le comportement d'un bus I2C. Je travaille sur une carte qui possède ce bus qui comprend:
    - un uC maitre, freescale MC9S08QE16
    - un capteur de température AD7414
    - un capteur de lumière ISL29023
    - une EEPROM M24128
    - un potentiomètre numérique ISL22326

    Le bus tourne à 225KHz, les pull-up sont de 2k2. La distance max entre le maître et un esclave est de 9-10cm sur la carte.

    La carte est alimentée par une alimentation Meanwell LPV-60-12. Le 12V fournie par cette alimentation est ensuite ramené à du 3V3 par un LM2674ADJ qui alimentent tous les composants cités au dessus.Il y a d'autres choses sur la cartes (LEDs, 2 srégulateurs découpage, driver RS485..).

    Le bus fonctionne tel que:

    - au démarrage il y a une communication avec chacun des composants (1 fois).
    - puis le capteur analyse périodiquement la température et la luminosité, tous les 5s et 2s respectivement. (sans mise en sommeil)

    Mon problème est que lors de ces communications il y a des perturbations qui se passent:

    - lors des changement de front sur SDA, ça se répercute sur le SCL.
    - lors des changement de front sur SCL, ça se répercute sur le SDA.
    - lorsque SCL ou SDA commute ça se répercute sur les alimentations (3V3, les 2 autres régulateurs découpage, le 12V)

    Je joins des screenshots oscillo:

    -on peut voir les SDA, SCL, 12V (en entrée de carte donc) et 3V3 (en sortie de régulateur et aux bornes de l'AD7414).

    J'ai l'impression que chaque commutation de SDA ou SCL se répercutent partout sur la carte. J'ai 2 autres régulateurs à découpage sur la carte qui n'alimentent que des Leds
    qui sont aussi perturbés.(On voit aussi les même parasites). I2C à 50KHz, le problème est le même.


    Questions:

    - C'est parasites peuvent-ils être dû à des couplages entre les lignes?
    - J'ai de temps à autres le AD7414 qui n'envoie pas son ACK sur le 9ème coup de clock lorsque l'on communique avec, est-il possible que ce soit dû à tous ces parasites?

    Merci,

    Samuel

    -----
    Images attachées Images attachées

  2. #2
    bobflux

    Re : Parasites sur bus I2C et alimentations

    donc
    sda = vert jaunâtre
    scl = rouge
    alim = bleu

    Je suis assez moyennement convanicu qu'une pauvre ligne I²C arrive à perturber l'alim, sauf si elle passe juste à côté d'une pin chatouilleuse et à haute impédance du convertisseur (feedback, enable...) donc à vérifier.

    Un problème de mesures est toujours possible. Lorsqu'un trempe le nez dans des problèmes de CEM, il faut savoir ce que l'on mesure, et comment. Donc, comment as-tu fait ces mesures (genre, où est raccordée la masse de l'oscillo, etc).

    Note au passage que le couplage SCL -> SDA intervient uniquement sur les fronts descendants qui sont rapides. Les fronts montants sont mous (pullup seul) donc ne parasitent pas.

    Détails des mesures, une idée du layout, etc.

    À la limite tu peux poster une photo de la carte ou du layout complet avec les 2 lignes et la masse colorisées. Si c'est un projet top secret, envoie juste une image des couches cuivre...

    A+
    Dernière modification par bobflux ; 10/09/2012 à 13h06.

  3. #3
    invitee05a3fcc

    Re : Parasites sur bus I2C et alimentations

    Citation Envoyé par bobfuck Voir le message
    À la limite tu peux poster une photo de la carte
    ... et du schéma ! Ca sent le manque de condensateur de découplage à plein nez !

  4. #4
    invite5637435c

    Re : Parasites sur bus I2C et alimentations

    +1 ********************

  5. A voir en vidéo sur Futura
  6. #5
    trendkiller

    Re : Parasites sur bus I2C et alimentations

    Bonjour,

    Merci pour la réactivité.


    sda = vert jaunâtre
    scl = rouge
    alim = bleu

    Exactement, j'avais oublié de mettre la légende. Concernant le fait que le phénomène n'apparait que sur front descendant, je n'avais pas vu. Le front est beaucoup plus raide (15 à 20ns sans les oscillations qui suivent en descente contre 290ns en montée), ce qui doit engendré le problème, mais je ne voit pas comment "l'adoucir". Après recherche sur internet, cela serait dû aux descentes trop rapide, qui créerai un phénomène appelé "ringing", une alternance d'overshoot et d'undershoot...

    Je poste une partie du schéma, celle qui nous intéresse ainsi que le PCB, j'ai du séparé en trois pour mettre en surbrillance SDA, SCL et le 3V3. Je n'ai pas pu faire la même manipulation pour le plan de masse.

    Concernant mes mesures, l'oscilloscope utilisé est un Lecroy WaveSurfer 104MXs-A, les sondes sont des sondes Lecroy PP011. Les mesures ont été faite avec la masse de l'oscilloscope en entrée de carte sur le condensateur C67 mais aussi sur la pin 2 de IC20 (EEPROM). Aucun filtre de l'oscilloscope n'est utilisé et je n'ai pas réduit la bande passante de l'oscilloscope.

    J'ai essayé en découplant par exemple le Vcc de l'AD7414 avec un 10uF céramique (sans amélioration, peut-être même pire...). J'ai aussi essayé de découpler l'entrée de la carte (le Vin) avec un 2200uF sans succès (mais je pense que s'il manque du découplage, ce n'est pas l'endroit où rajouter des capas).

    Je ne voit pas trop quoi faire pour améliorer la chose a part redessiner le PCB, mais j'en suis pas tout à fait convaincu. Disons que la carte fonctionne en l'état, mais je n'aime pas l'idée qu'il y ai des saletés aussi importantes qui se baladent. Surtout que l'AD7414 oublie parfois d'acquitter (sans savoir si c'est dû à ça) et que malgré cette erreur minime, j'ai des problème software qui sont engendré sur le uC (dont je connais l'origine et dont j'ai trouvé une rustine).

    Samuel
    Images attachées Images attachées

  7. #6
    invite5637435c

    Re : Parasites sur bus I2C et alimentations

    De plus il est important de câbler de cette manière pour éviter des influences ente SCL et SDA:

    1/VCC
    2/SCL
    3/GND
    4/SDA

    Le câble ne doit pas ête trop capacitif non plus.
    En tout cas ne découple jamais SCL et SDA avec un condo sinon tu vas aggraver ton cas en alourdissant le bilan capacitif de la ligne et plus rien ne fonctionnera.

    Pour résumer met un découplage entre Vcc et Gnd (10µF/10V et un céramique multicouche 100nF) au plus près de ton câble, découple correctement les boitiers I2C, fais ta liaison I2C avec un câble 4 conducteurs peu capacitif si possible.

    Sur 50cm ça doit fonctionner sans problème avec 2.2K en pull-up, au delà il faudra transistoriser (voir ce que j'avais posté dans la rubrique projet pour des schémas fonctionnant jusqu'à 15m: http://forums.futura-sciences.com/pr...2c-80c552.html

    Edit: je vois après coup que ta liaison est directe par des pistes sur le PCB donc c'est encore quelque peu différent.
    Je distingue assez mal ton routage en général donc pas évident de te dire ce qui ne va pas hormis que le découplage de ton alim bus est insuffisamment efficace à mon avis.

  8. #7
    trendkiller

    Re : Parasites sur bus I2C et alimentations

    Citation Envoyé par HULK28 Voir le message
    De plus il est important de câbler de cette manière pour éviter des influences ente SCL et SDA:

    1/VCC
    2/SCL
    3/GND
    4/SDA

    Le câble ne doit pas ête trop capacitif non plus.
    En tout cas ne découple jamais SCL et SDA avec un condo sinon tu vas aggraver ton cas en alourdissant le bilan capacitif de la ligne et plus rien ne fonctionnera.
    Oui je n'en avais pas l'intention pour cette raison.

    Citation Envoyé par HULK28 Voir le message
    Pour résumer met un découplage entre Vcc et Gnd (10µF/10V et un céramique multicouche 100nF) au plus près de ton câble, découple correctement les boitiers I2C, fais ta liaison I2C avec un câble 4 conducteurs peu capacitif si possible.
    Il n'y a pas de câble, tout est sur PCB, les composants I2C sont tous découplés avec un 100nF, j'ai aussi essayé avec un 10uF sur le AD7414, sans succès.


    Citation Envoyé par HULK28 Voir le message
    Sur 50cm ça doit fonctionner sans problème avec 2.2K en pull-up, au delà il faudra transistoriser (voir ce que j'avais posté dans la rubrique projet pour des schémas fonctionnant jusqu'à 15m: http://forums.futura-sciences.com/pr...2c-80c552.html
    A priori ce n'est pas mon cas.

  9. #8
    invite5637435c

    Re : Parasites sur bus I2C et alimentations

    Tu peux filtrer un peu, en tout cas ca ne coûte rien de le tenter.

    Tu mets une self de quelques dizaines de µH en série dans SCL et SDA avec une petite capa de 220pF à la masse, regarde au scope si ça change l'allure de ton signal, le plus important étant de garder un front montant pas trop arrondi.
    Peux-tu me faire voir uniquement ton plan de masse de ce routage?
    Le 3.3V c'est uniquement les pistes que tu montres?

  10. #9
    invite5637435c

    Tu peux aussi baisser la fréquence de ton bus, 100kHz c'est déjà pas si mal.

    Citation Envoyé par trendkiller Voir le message

    Il n'y a pas de câble, tout est sur PCB, les composants I2C sont tous découplés avec un 100nF, j'ai aussi essayé avec un 10uF sur le AD7414, sans succès.
    Ca prouve au moins que tes dv/dt ne sont pas liés a une insuffisance d'alimentation mais à une influence du routage, à priori ici de la diaphonie.
    Si vraiment tu veux t'en donner la peine, tu peux virer tes deux pistes et les remplacer par une paire torsadée, avec du fils très fin c'est jouable sur une maquette proto.
    Si tu refais ton PCB il faudra veiller à avoir un vrai plan de masse et faire le routage de ces deux pistes convenablement.

  11. #10
    bobflux

    Re : Parasites sur bus I2C et alimentations

    > Les mesures ont été faite avec la masse de l'oscilloscope en entrée
    > de carte sur le condensateur C67 mais aussi sur la pin 2 de IC20 (EEPROM)

    Si tu utilises une sonde classique avec un fil de masse de 10 cm et un croco au bout, tu ne mesures probablement pas la réalité. Le fil de masse fait une excellente antenne. Comme il semble y avoir un problème sur ton circuit, avec un signal qui émet des interférences, le clip de masse de la sonde va le capter et tu auras l'impression que tous tes signaux sont parasités.

    Quand aux autres sondes, si tu as mis tous les clips de masse au même endroit, les coax forment une boucle de masse (càd une antenne réceptrice). Si tu n'as raccordé qu'un seul clip de masse, la mesure faite avec les sondes sans masse est aussi parasitée...

    Fais donc l'essai de mettre le clip de masse au point où tu prenais la masse d'habitude, et de mesurer la tension sur la masse au même point avec la pointe de la sonde, en utilisant une seule sonde. Je te parie que tu vas mesurer des pics de tension au lieu d'une ligne plate...

    Si tu as les moyens, prends une sonde différentielle et mesure ce que voit le chip ADmachin en mettant les 2 bouts de la sonde différentielle directement sur sa masse et son SDA.

    Sinon, coupe en deux un coax 50 ohms (c'est moins chiant que souder des connecteurs) et fabrique toi 2 sondes "high speed". Sonde 1 : une queue de résistance sur la tresse de masse et une résistance de 50 (ou 47) ohms sur l'âme du coax, sonde 2 la même mais en remplaçant la 50 ohms par un fil. Utilise de préférence la 1ère. Soude ça bien court côté câble et laisse 1 cm qui dépasse, avec de la gaine thermos et du scotch autour pour que ce soit propre. Soude ça sur les pattes d'un ADmachin et mesure SDA (avec une seule sonde pour ne pas faire de boucle de masse : si il y a de la diaphonie, t'as pas besoin de sonde sur SCL, tu verras les spikes).

    Aussi je ne vois pas trop le plan de masse sur ton image : où est la boucle de courant de retour de ces signaux et doit-elle contourner une rupture du plan ?

    > Le front est beaucoup plus raide
    > (15 à 20ns sans les oscillations qui suivent en descente contre 290ns en montée)

    Le front de descente est vraiment très rapide, en fait beaucoup trop pour un bus dans ce style avec des grandes traces... et il y a une grosse oscillation derrière.

    Une solution simple si tu refais le pcb serait de mettre une résistance en série sur les pins scl/sda, pas trop élevée pour ne pas faire diviseur de tension avec le pullup, peut-être une centaine d'ohms...

  12. #11
    bobflux

    Re : Parasites sur bus I2C et alimentations

    En complément :

    Il parle de la sonde coax + résistance de 1k :
    http://www.signalintegrity.com/Pubs/straight/probes.htm

    Et il y a aussi plus simple, le clip de masse court qui permet de garder le mode x1/x10 de la sonde, avec exemples de traces (défile jusqu'à "10 July 2007") :
    http://www.cliftonlaboratories.com/july_2007.htm

  13. #12
    trendkiller

    Re : Parasites sur bus I2C et alimentations

    Bonjour,

    Etant donné que cela se répercute partout sur la carte, j'en ai déduit que ça passait sur la masse. Donc effectivement ma mesure était faussée. J'avais des boucles de masse.

    Je ne prenais qu'un seul point de masse à la base, du coup j'ai mis un point de masse pour chaque sonde. Un pour le SDA/SCL et un autre sur mon 3V3. C'est nettement mieux.

    J'envoie les screenshots. Mesure de l'I2C avec le 3V3 en AC et DC puis un zoom sur le tout en DC.
    On voit que les front descendants ne se répercutent plus entre chaque ligne.

    Merci beaucoup pour les conseils. Ça ne m'était jamais arrivé, maintenant oui...

    Samuel
    Images attachées Images attachées

  14. #13
    bobflux

    Re : Parasites sur bus I2C et alimentations

    Bon eh bien, on dirait qu'il n'y avait pas de problème en fait !

    Un léger undershoot sur le signal rose qui est peut-être un artefact de mesure.

    Et il y a tout de même pas mal de bruit sur l'alim... tu as des pics de quasiment 1v si je lis bien le screenshot ! Essaie de mesurer uniquement l'alim avec un coax et une résistance de 50 ohms, ou un clip de masse court (post du dessus) et une seule trace (une connection entre la masse du scope et la masse du montage).

  15. #14
    trendkiller

    Re : Parasites sur bus I2C et alimentations

    Oui il y a des undershoots, sur les signaux. Je reposte quelques mesures oscilloscope à différents points:

    - Au 3V3 en sortie de régulateur en DC et AC
    - Au 3V3 sur le AD7414 en DC et AC

    L'alimentation est effectivement assez bruitée.


    >Fais donc l'essai de mettre le clip de masse au point où tu prenais la masse d'habitude, et de mesurer la tension sur la masse au même point avec la pointe de la sonde, en utilisant une seule >sonde. Je te parie que tu vas mesurer des pics de tension au lieu d'une ligne plate...

    J'ai essayé, c'est plat.

    > Si tu as les moyens, prends une sonde différentielle et mesure ce que voit le chip ADmachin en mettant les 2 bouts de la sonde différentielle directement sur sa masse et son SDA.

    Je n'ai pas de sonde différentielle...et comme ma masse est plate, je devrais avoir la même chose.

    Par contre je n'ai pas de coaxial sous la main. Mais je ne vois pas comment lisser un peu ce 3V3 bruité.

  16. #15
    bobflux

    Re : Parasites sur bus I2C et alimentations

    Oups, il manque les fichiers joints

    > Mais je ne vois pas comment lisser un peu ce 3V3 bruité.

    Tu confirmes que c'est bien quasi 1V de bruit crète à crète ?

    Il y a des gros consommateurs de courant sur le 3v3, des charges qui commutent vte, etc ? (j'imagine que non)

    Peux-tu donner les specs des capas en sortie du LM2674 (datasheet si possible).

    C91 (le 1nF dans la partie haute du diviseur de tension du feedback)... est-il nécessaire ?

  17. #16
    trendkiller

    Re : Parasites sur bus I2C et alimentations

    J'ai oublié les fichiers joints effectivement...

    Avant de répondre à vos dernières requêtes. J'ai refait les mesures sur le 3V3. Avant j'utilisais une petit pince avec quelques centimètres de fils qui venait se plugger sur ma sonde d'oscilloscope, ça me permettait de pouvoir m'accrocher aux pins des CI sans avoir à tout tenir (3 mesures à tenir c'est pas évident). Comme une erreur de mesure ne s'accompagne pas seule, j'ai retiré cette petite pince et j'ai pointé directement ma sonde sur la pin voulue:

    Bruit très atténué par rapport à avant.

    Je joins les visualisation à l'oscilloscope, on peut voir en DC que le signal est relativement propre, en AC il y a à peu près 150mV d'amplitude sur le 3V3, ce qui me parait acceptable (moins de 5% de bruit).

    Bilan:

    - tout à l'air d'être correct, sauf quelques undershoots sur le bus I2C (certainement dû à la longueur des pistes et à la raideur des front descendants).
    - que des erreurs de mesures...ça m'apprendra...ça ne m'était jamais arrivé, je prendrais mes précautions à l'avenir.

    Merci beaucoup pour l'aide apportée!

    Samuel,
    Images attachées Images attachées

  18. #17
    bobflux

    Re : Parasites sur bus I2C et alimentations

    > certainement dû à la longueur des pistes et à la raideur des front descendants

    Oui mais difficile de faire autrement sans trop de complications...

    > que des erreurs de mesures

    Mais c'est positif : le circuit est bon, et tu as appris des trucs.

    Perso sur les protos je mets des points de tests "manouche" : 2 pins (barrette sécable au pas de 2.54) pour signal et masse, je les soude en CMS (sans les trous) et j'ai des bouts de coax avec le connecteur femelle soudé au bout, ça libère les mains... ça m'est arrivé d'exploser un MOS à cause d'une pointe de touche qui ripe...

  19. #18
    trendkiller

    Re : Parasites sur bus I2C et alimentations

    Ce n'est pas un circuit que j'ai conçu moi-même. Donc le hardware est indépendant de ma volonté. Mais je penserais effectivement à ces petits points tests c'est pratique.

    Merci beaucoup pour l'aide apportée.

    A bientôt,

Discussions similaires

  1. Problème de lecture température LM75 sur bus I2C
    Par invitec6c4cac3 dans le forum Électronique
    Réponses: 1
    Dernier message: 27/08/2012, 12h43
  2. I2c, plus de 8 capteur sur le bus
    Par invite3ad3cb38 dans le forum Électronique
    Réponses: 3
    Dernier message: 24/07/2012, 19h17
  3. Problème sur bus I2C : driver ??
    Par Poseidon88 dans le forum Électronique
    Réponses: 12
    Dernier message: 06/12/2011, 17h40
  4. Plusieurs LM75 sur un bus I2C
    Par invitec330b05b dans le forum Électronique
    Réponses: 2
    Dernier message: 13/09/2008, 07h48
  5. Bus I2C
    Par invitead790ea1 dans le forum Électronique
    Réponses: 15
    Dernier message: 15/04/2007, 11h58
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...