Longueur de câbles

Bonjour à toutes et à tous.

Je réalise à l'aide d'une Arduino méga une acquisition de données d'un capteur via la liaison SPI.

J'ai cablé à l'aide des câbles officiels Arduino. Tout fonctionne très bien.

Trouvant les câbles trop courts, j'ai décidé de m'en faire moi-même et c'est la que j'ai remarqué que l'acquisition de mes données n'était plus bonne. Les valeurs sont bonnes au début puis font n'importe quoi jusqu'a ne m'afficher que des 0.

Conclusion : le principal fautif est la longueur des câbles selon moi. J'ai entendu parler de la notion d'adaptation d'impédance.

Auriez-vous une idée ou une piste me permettant de surmonter ce problème ? Dans l'idéal, j'aimerais utiliser des câbles d'une longueur se situant entre 30cm et 1m.

J'avais également une autre question : j'alimente mon capteur à l'aide d'une alimentation externe en 3,3v. Le MOSI, MISO, SCK et le CS sont reliés à mon Arduino. La masse de mon Arduino est reliée à la masse de l'alimentation externe.

Je pense que ma question est bête, je sais que l'alimentation externe alimente mon capteur, mais est ce que le fait de relier le MOSI, MISO, SCK, CS à l'arduino font qu'ils tirent du courant de la part de l'Arduino ?

Je pose cette question car j'aimerais dimensionner une batterie. Je sais que la consommation de l'arduino au repos est de 100 mA.

Merci d'avance et bonne fin de week-end.

Guillaume

Plus un câble est long et plus sa résistance sera grande, c'est le principe inverse pour le diamètre plus le câble est fin et plus sa résistance sera élevée.

Bonjour,
attention, si ton capteur fonctionne en 3v3 et ton arduino à 5v ?
(la liste des ennuis risque aussi de s'allonger)

trimarco232:
Bonjour,
attention, si ton capteur fonctionne en 3v3 et ton arduino à 5v ?
(la liste des ennuis risque aussi de s'allonger)

Remarque judicieuse car :

  • un micro ne doit pas recevoir de tension supérieure à sa tension d'alimentation
  • sur un micro avr les spécifications de niveau sont plus sévères si la pin fonctionne en SPI et I2C que si elle fonctionne en entrée digitale classique.

Longueur de fil et adaptation d'impédance :
Ce n'est pas la résistance du fil qui gène : la réception est à haute impédance.
Ce qui gène c'est l'augmentation de la capacité parasite entre fils et celle de l'inductance des fils.

La première chose à faire est de torsader chaque ligne (Mosi,Miso, etc ) avec un fil de masse --> l'impédance ne sera pas améliorée mais au moins elle sera stable et il sera possible de faire quelque chose.

Les circuits CMOS n'aiment absolument pas débiter sur des charges capacitives et comme dit plus haut plus la longueur des fils augmente plus la capacité parasite entre fils augmente.

Le SPI étant une liaison unidirectionnelle il est possible d'appliquer une solution qui fonctionne bien avec le LM35 : insérer une résistance série entre la sortie de la pin configurée en sortie et le fil de liaison.
Je n'ai pas testé avec le SPI mais cela vaut la peine d'essayer.

Valeur à définir sur le montage, probablement entre 1k et 10k.

Bonjour,

Merci à tous de vos réponses.

Mon capteur fonctionne en 3,3v. Il est alimenté par une générateur de tension externe.
Mon arduino est alimenté soir par USB soit sur secteur (plage de tension entre 7v et 12v).
La masse de l'arduino est commune à la masse du générateur de tension externe.

Seuls MISO, MOSI, SCK et CS sont reliés à l'arduino via des pins digitales.

"Torsader chaque ligne avec un fil de masse" cela veut dire que je rajoute 4 fils supplémentaires qui seront des masses ? Et chacun d'eux sera à torsader avec mes 4 fils dû capteurs si j'ai bien compris ? (MISO + gnd1, MOSI + gnd2, CS + gnd3, SCK + gnd4)

Que veut dire "ce n'est pas la résistance du fil qui gêne : la réception est à haute impédance" cela veut dire que l'arduino à une résistance d'entrée élevée ?
Mais du coup pourquoi rajouter une résistance entre le fil et la pin configurée en sortie de l'arduino ?

Merci d'avance,

Guillaume

Prenons dans l'ordre :

Mon arduino est alimenté soir par USB soit sur secteur (plage de tension entre 7v et 12v).

Ca c'est le coté alimentation de la carte.
L'alimentation de la carte on s'en fiche un peu, la seule chose qui compte c'est la tension d'alimentation du micro --> son Vcc. Dans tous les cas il est alimenté en +5 V.
Donc si le capteur, qui est alimenté en 3,3V, reçoit des signaux de +5V d'amplitude il risque de manquer totalement d'humour et de cramer.
Risquant, par ricochet, de faire aussi cramer le micro de la carte arduino.

Que veut dire "ce n'est pas la résistance du fil qui gêne : la réception est à haute impédance" cela veut dire que l'arduino à une résistance d'entrée élevée ?

Une résistance en série sur le fil forme pont diviseur avec l'impédance d'entrée du micro.
Les impédances des entrées du micro sont supérieures à 1 Mohm (1 million d'ohms ! )
Quelle influence peut avoir une résistance de fil de 1 à 2 ohms ?
D'autant que le Rdson des transistors de sortie du micro font autour de 30 ohms.

Mais du coup pourquoi rajouter une résistance entre le fil et la pin configurée en sortie de l'arduino ?

Il faut lire , j'ai écrit ceci :

Les circuits CMOS n'aiment absolument pas débiter sur des charges capacitives et comme dit plus haut plus la longueur des fils augmente plus la capacité parasite entre fils augmente.

La résistance en série masque la capacité du fil coté émission.

Fils torsadés :
Désolé mais je suis obligé de faire appel à des notions d'électronique analogique.

Si tu possède du câble éthernet c'est un bon choix de l'utiliser .
Un autre choix est d'utiliser du câble téléphonique.

Ces deux câbles sont constitués de paires de fils à impédance constante.
Je conseille le câble éthernet parce son impédance est de 100 ohms alors que le câble téléphonique est sous 600 ohms.
Il est toujours plus facile de travailler à la plus faible impédance.

Que veut dire "câble à impédance constante" ?
Premièrement cela ne s'applique qu'à des signaux à haute fréquence.

Pour avoir des fronts raides avec un signal numérique il faut passer des fréquences 10 fois supérieures à celle du signal.
Exemple pour ne pas déformer des signaux d'horloge à 1 MHz il faut transmettre au minimum 10 MHz et plus si possible.
Donc cette notion de signaux rapides s'applique aux signaux SPI.

Deuxièmement cela ne veut pas dire que le câble aura une résistance de 100 ohms ou 600 ohms.
Cela veut dire qu'en mesures fréquentielles si on charge une extrémité du câble par son impédance caractéristique (100 ohms pour le câble éthernet, 600 pour le câble téléphonique) au bout de 1m, 2m , 5m, etc on verra toujours une impédance égale à l'impédance caractéristique du câble.
Dis autrement : un câble à impédance constante ne déforme pas les signaux (dans des limites raisonnables de distance quand même)
C'est à rapprocher avec le câble coaxial pour la télé --> le coaxial est une forme, parmi d'autres, de câble à impédance constante.

Il existe des méthodes plus "techniques" pour adapter les lignes mais comme on n'a rien sans rien elles demandent plus de composants que la méthode que j'ai proposée.

Je pense plus raisonnable de commencer par le plus simple.
Plutôt que débuter avec 1k comme je l'ai bêtement écrit, débute avec une résistance entre 70 ohms et 100 ohms ça devrait le faire,( je m'étais laissé emporter par le LM35, ici c'est un peu différent).

1k comme je l'ai bêtement écrit

néanmoins cette valeur convient dans 99.9% des cas

Bonjour à tous,

Merci pour vos réponses. Je pense avoir tout compris.

Maintenant je cherche à dimensionner ma batterie qui au final n'alimentera que l'arduino car mon capteur sera alimenté par une alim externe. Je sais que l'arduino au repos consomme environ 100 mA. Par contre je ne sais pas comment mesurer en utilisation sachant qu'il n'alimente pas mon capteur. Il ne se contente juste de gérer un flux de données sur les pins digitaux et quelques calculs. Comment mesurer sa consommation ? En principe un ampèremètre en série devrait faire l'affaire mais comme il n'alimente pas mon capteur je ne sais pas où il faudrait le mettre.

Merci d'avance

Guillaume

Ps : je ne reçois d'email de notification pourtant c'est coché savez-vous d'où peut venir ce beug ?

trimarco232:
néanmoins cette valeur convient dans 99.9% des cas

Je persiste et signe "j'ai écrit bêtement".

Pourquoi : on est dans un cas de liaison unidirectionnelle à relativement basse fréquence.
Plus qu'une allergie des circuits CMOS à débiter sur charge capacitive c'est d'avantage un problème de liaison désadaptée avec comme conséquence l'établissement du système d'ondes stationnaires --> la valeur du coefficient de réflexion tant à l'émission qu'à la réception est proche de 1.

Jusqu'à une centaine de MHz ce qui marche bien est l'adaptation à la ligne uniquement coté émission et conserver la réflexion totale coté réception.
Au delà de la centaine de MHz il est préférable d'adapter des deux cotés.

Ce qui sur le schéma se traduit par :

  • Un câble de liaison à impédance constante : si paire éthernet Zc = 100 ohms
  • On ne met rien en réception --> entrée à haute impédance.
  • Coté émission on s'arrange pour que la paire voit 100 ohms (*).

(*) Tant qu'à faire les choses autant le faire correctement en prenant en compte le Rdson des transistors de sortie du micro dans le calcul de la 100 ohms.
D'après la courbe typique Vsortie = f(i) de la datasheet du micro-contrôleur (IO pin output VOLTAGE versus SOURCE CURRENT) j'estime la valeur typique du Rdson à 25 ohms.
La résistance à placer en série entre la sortie micro et l'entrée de la paire éthernet devra être de 75 ohms pour faire 100 ohms au total.