Go Down

Topic: I²C ? SPI ? CAN ? (Read 3083 times) previous topic - next topic

slash-07

Bonjour à tous  :) !

J'aimerais connecter un Arduino à environ 50 capteurs, certains analogiques, certains numériques, je n'ai pas encore les références et le type de chacun. En attendant les conseils d'un expert pour choisir les capteurs, je me penche sur l'utilisation d'un ou plusieurs bus pour économiser le nombre de pins et avoir une carte d'acquisition moins large. Cela me permettrait d'utiliser un petit Arduino au lieu d'avoir besoin d'un mastodonte  :smiley-money: .

Sachant que certains capteurs peuvent être placés jusqu'à 2 mètres de la carte d'acquisition et que le système doit être très fiable (au moins plusieurs années sans réparation), que me conseillez vous ?

L'I²C me semble mal adapté pour de telles longueurs de câbles, mais peut-être existe-t-il des sécurité très fiables soit Hardware soit Software ? De plus, j'ai peur que si un capteur est défectueux, il "pourrisse" la liaison data :/

Merci d'avance pour vos conseils !  :smiley-mr-green:






Christian_R

Il faut voir selon le type de catpeur.
Attention, certains ont une adresse I2C fixe ou relativement peu de possibilités de la changer.
Christian

68tjs

#2
Feb 12, 2015, 09:41 pm Last Edit: Feb 12, 2015, 09:44 pm by 68tjs
et que le système doit être très fiable (au moins plusieurs années sans réparation), que me conseillez vous
De bien réfléchir avant d'utiliser du matériel arduino. Pour revenir sur une autre discussion je parle ici de matériel et non de l'IDE avec ses fonctions.

Je te conseille aussi de jetter un coup d'œil ici pour connaître les conditions de garantie des cartes officielles et les mises en garde du fabricant.

Si l'objectif est bien plusieurs années sans réparation il faudra obtenir plus d'information de la part d'"Arduino SRL" ou envisager la constitution d'une carte dédiée mais le coup d'achat en petite quantité de composants certifiés  risque d'être désagréable.
Les Shadocks : L'ignorance ne s'apprend pas.

fdufnews

Le SPI semble mal adapté au contexte dans la mesure ou il faut un chip select par périphérique.

B@tto

+1

Et +1 pour l'i2c si le plus loin est effectivement deux mètres. Juste bien prévoir les résistances de rappel et un câble blindé. En i2c on trouve beaucoup de capteurs, et au pire, il te suffit de lui coller un µc en slave et le problème est résolu ...
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

68tjs

+1
Et +1 pour l'i2c si le plus loin est effectivement deux mètres. Juste bien prévoir les résistances de rappel et un câble blindé. En i2c on trouve beaucoup de capteurs, et au pire, il te suffit de lui coller un µc en slave et le problème est résolu ...
Pas de conclusion hâtive jeune homme :smiley-mr-green: .
Une recherche gogole "I2C extender" donne entre autre un circuit TI  P82B715 dont la datasheet indique qu'il autorise la communication I2C jusqu'à 50 m sur paires symétriques.
En PS la présentation du CI.
Les Shadocks : L'ignorance ne s'apprend pas.

B@tto

Non mais je disais pas limite à 2m ^^ je disais simplement qu'à 2 m on est largement en dessous de la limite de l'i2c (j'ai déjà fait presque 10 m sans constater le moindre problème de fiabilité et sans résistance de rappel). Après oui si on rajoute en plus de relais de signaux xD
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

68tjs

Quote
j'ai déjà fait presque 10 m sans constater le moindre problème de fiabilité
Je n'en doute pas :smiley-mr-green: 
Compte tenu de ton expérience je ne doute pas non plus qu'instinctivement tu as fait directement comme il fallait sans te poser de question.

Le sujet m'a fait m'interroger sur la longueur maximale théorique.
Je pense qu'il y a deux notions a respecter.
 1) le respect de l'intégrité du signal. --> On sait faire avec des liaisons différentielles adaptées.
 2) le temps de transmission maximum.   --->  (? ? ?)

Pour le temps de transmission dans une ligne adaptée on prend généralement un temps de 5ns par mètre (*).
La datasheet du CI annonce 50 m, soit 0,25 µs. Quand SCL envoie un front d'horloge le retour se fait en 0,5 µs. A partir de quand il peut y avoir confusion dans la réception des bits ?

(*) Hasard ou universalité de la physique (ou un peu des deux ;) ) le temps de transmission dans une fibre optique est aussi de 5ns par m.
Les Shadocks : L'ignorance ne s'apprend pas.

B@tto

Salut,

L'électricité et la lumière ont approximativement la même vitesse. Par contre je ne pense pas que le temps de transmission soit un problème puisque ça ne fait que créer un offset sur le départ, pas pendant. Donc le seul impact que ça peut avoir c'est entre la question et la réponse, comme au JT quand ils font une interview à l'autre bout du monde.

En revanche, au-dela de la vitesse de transmission c'est surtout l'impédance et la capacitance des câbles qui posent ce genre de problème. Il faut alors charger et décharger le câble, et au lieu d'avoir un signal carré il s'arrondit au fur fur et à mesure ...
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

slash-07

Merci à tous pour vos réponses !


Et +1 pour l'i2c si le plus loin est effectivement deux mètres. Juste bien prévoir les résistances de rappel et un câble blindé. En i2c on trouve beaucoup de capteurs, et au pire, il te suffit de lui coller un µc en slave et le problème est résolu ...
Je suis rassuré si la longueur des câbles n'est pas un problème pour l'utilisation d'un bus I²C ! L'utilisation d'un autre microcontrôleur par contre peut s'avérer compliquée vu que certains capteurs sont immergés. Mais je veux bien quelques infos la-dessus, je ne vois pas trop en quoi cela peut régler le problème.

Il faut voir selon le type de catpeur.
Attention, certains ont une adresse I2C fixe ou relativement peu de possibilités de la changer.
Cela ne me dérange nullement, du moment que deux capteurs n'aient pas la même adresse bien sur  :smiley-mr-green:  ( ce serait vraiment pas de chance)

Reste la question de la fiabilité du protocole en lui même, et du partage de la même liaison pour les données. Peut-il y avoir des cafouillages entre les infos si un capteur est déficient ? Un capteur défectueux pourrait-il transmettre alors qu'il n'en a pas reçu l'ordre ?

Merci encore pour vos avis ! :smiley-razz:

B@tto

Je suis rassuré si la longueur des câbles n'est pas un problème pour l'utilisation d'un bus I²C ! L'utilisation d'un autre microcontrôleur par contre peut s'avérer compliquée vu que certains capteurs sont immergés. Mais je veux bien quelques infos la-dessus, je ne vois pas trop en quoi cela peut régler le problème.
Rien de sorcier, imagine ton capteur n'existe qu'en SPI, et bien tu lui colles un µC qui va faire la conversion i2c <=> SPI

Cela ne me dérange nullement, du moment que deux capteurs n'aient pas la même adresse bien sur 
Justement des fois c'est le cas ... Pas d'adressage variable et il n'existe qu'en une seule version. Car certain chip sortent en différente version mais il n'y a que l'adresse qui change. C'est le cas des PCF8574 notamment.

Reste la question de la fiabilité du protocole en lui même, et du partage de la même liaison pour les données. Peut-il y avoir des cafouillages entre les infos si un capteur est déficient ? Un capteur défectueux pourrait-il transmettre alors qu'il n'en a pas reçu l'ordre ?
Aucun risque : c'est le maitre qui contrôle l'horloge, aucune transmission ne peut être opérée par un esclave si le maitre n'en donne pas l'ordre (et encore, dans la réponse c'est toujours le maitre qui pilote l'horloge)
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

68tjs

#11
Feb 13, 2015, 06:01 pm Last Edit: Feb 13, 2015, 06:02 pm by 68tjs
L'électricité et la lumière ont approximativement la même vitesse.
Ce n'est pas gagné d'avance hors du vide. Dans un câble la vitesse dépend de la permitivité de l'isolant qui entoure le câble ou dans un circuit imprimé la permitivité du verre epoxy. Pour la lumière la vitesse dépend de l'indice de réfringeance du matériau transparant.
En revanche, au-dela de la vitesse de transmission c'est surtout l'impédance et la capacitance des câbles qui posent ce genre de problème. Il faut alors charger et décharger le câble, et au lieu d'avoir un signal carré il s'arrondit au fur fur et à mesure ...
Pour aller loin il faut  adapter la source et la charge à l'impédance caractéristique du câble. Avec une bonne adaptation l'effet capacitif est drastiquement réduit mais c'est plus compliqué à faire que de tirer deux bouts de fils.
Un signal numérique possède un spectre de fréquence large, au moins 10 fois plus que la fréquence fondamentale du carré initial. Pour conserver l'intégrité du signal il faut que le déphasage soit linéaire avec la fréquence ( je crois sur parole c'est dans tout les bons livres :smiley-mr-green: ) . Ce n'est plus vrai dans un câble dès que les pertes d'affaiblissement, qui augmentent avec la racine carrée de la fréquence, deviennent trop élevées.
Les Shadocks : L'ignorance ne s'apprend pas.

slash-07

Re-bonjour à tous !

Merci à tous pour vos informations, j'ai énormément appris ! Mais j'ai quand même cherché à obtenir plus d'informations auprès d'un professeur de mon école  :D

Voila l'architecture électronique qu'il m'a conseillé :

Le principal problème soulevé est le nombre de connexions entre la carte d'acquisition et les capteurs/sorties des autres systèmes électroniques. L'utilisation d'une seule carte électronique n'est pas indiquée : trop de câbles, des cartes à 50 pins ne sont pas pratiques. L'utilisation de multiples microcontrôleurs, chacun reliés à quelques capteurs est plus pratique (moins de longueur de câble, architecture plus lisible, + de fiabilité).

Je vais utiliser un bus CAN pour entre les petits microcontrôleurs et l'µC central. Ce bus est relativement cher, mais très fiable (utilisé dans l'automobile) ;)

Voila mon retour, je pense que le problème est réglé !

Bonne journée à tous, et merci encore pour vos conseils précieux !  :smiley-mr-green:

icare

Bonjour,
L'I2C est également utilisé dans l'automobile.
2B OR NOT(2B) = FF
Arduino 1.0.5 à 1.8.5 + gEdit + Ubuntu 18.04 LTS

Go Up