Dans mon projet actuel, je dois communiquer entre un microcontrôleur et certains capteurs via I2C. L'un d'eux est un capteur de température, il doit être placé à environ 2 mètres du microcontrôleur. Je ne peux pas choisir un autre protocole (le capteur est sur un module avec un connecteur / broches / protocole donné).
Pensez-vous qu'il est possible de communiquer dans cette configuration? Quelles informations dois-je rechercher pour m'assurer que cela peut ou ne peut pas être possible? Avez-vous des conseils?
C'est ma première communication avec IC en dehors du PCB.
i2c
communication
cables
JackOfHearts
la source
la source
Réponses:
I2C n'est pas conçu pour être utilisé sur de longues distances mais je connais plusieurs applications où il est effectivement utilisé sur une distance d'environ 2 mètres. Je connais également un cas où ils ont eu des problèmes avec cela et il a finalement été résolu en réparant des boucles de terre, je crois.
Pour être sûr qu'il fonctionnera, vous devez utiliser un prolongateur de bus I2C comme le P82B715.
Cependant, la fiche technique du PB2B715 indique ce qui suit dans la section 8.2:
Ainsi, les experts (NXP est l'ancien Philips, l'inventeur de l'I2C) disent que 30 mètres ont été prouvés comme une distance faisable. D'après mon expérience, 2 mètres est une distance réalisable, et les expériences qui m'ont été rapportées indiquent que des bus I2C plus chargés sans extension sont également possibles.
Les points clés du fonctionnement des bus I2C sur de longues distances sont:
Calcul de pullup
Texas Instruments a une bonne note d'application (SLVA689) sur le calcul du pull-up .
la source
Vous êtes généralement limité par une capacité de bus maximale de 400 pF.
Cela devrait fonctionner correctement si vous abaissez votre fréquence à quelque chose comme 1 kHz et fournissez un découplage d'alimentation à côté du capteur.
Si vous avez besoin de quelque chose de plus robuste, vous pouvez utiliser des convertisseurs I2C différentiels aux deux extrémités comme le PCA9615 .
la source
Vous pouvez, mais ce n'est pas recommandé.
Différents bus à des fins différentes
I2C, comme SPI, est conçu pour la communication au sein d'une carte ou d'un groupe de cartes (pensez à Raspberry Pi et ses chapeaux ou Arduino et ses boucliers). Il peut fonctionner sur de plus longues distances (voir les autres réponses) mais ne doit pas être utilisé dans ces cas, simplement parce que ce n'est pas pour cela qu'il a été conçu, optimisé et qualifié.
Le risque que vous prenez est que vous ne pourrez peut-être pas ajouter d'autres capteurs à l'avenir, ou que votre système ne fonctionnera pas partout ou échouera dans certaines circonstances.
Ce que vous devriez rechercher est un bus de terrain, quelque chose comme 1 fil, CAN, RS-485, Ethernet, etc.
Les systèmes sans fil comme le bluetooth ou le zigbee pourraient également être une option.
la source
Comme indiqué par @filo, I2C est généralement limité par la capacité du bus. Cependant, il existe des moyens de contourner ce problème:
Jetez un œil aux AN10658 et AN11084 de NXP pour plus d'informations.
la source
J'aime les réponses de filo et Caleb.
Une autre option consiste à utiliser un ou plusieurs ponts maîtres DS28E17 1 fil à I2C sur les capteurs individuels et à câbler le bus en tant que Onewire. C'est bon pour les bus de plus de 100 m et bien adapté aux applications de réseaux de capteurs à faible débit comme la gestion de la température et de la batterie distribuées.
la source