Domanda:
Più sensori I2C con lo stesso indirizzo
Łukasz Kidziński
2017-01-05 02:26:32 UTC
view on stackexchange narkive permalink

Sto cercando di trovare il modo più semplice per collegare più sensori IMU (preferibilmente circa 10-20) a un controller. Ci sono due vincoli: campionamento a 60Hz e cablaggio ragionevolmente semplice come voglio metterlo sui vestiti.

Sono totalmente nuovo nel mondo Arduino, per favore fammi sapere quali altri dettagli dovrei fornire.

Sembra che solo avere più IMU sul bus I2C funzionerebbe benissimo, ma di solito hanno tutte lo stesso indirizzo.

Quindi, le soluzioni che ho trovato finora:

  • L'utilizzo di diverse IMU di società diverse - difficile trovarne 20
  • Utilizzo di un multiplexer - richiede una topologia di cablaggio a stella.
  • Utilizzo di più controller: inefficiente e non mi sembra corretto.

Per ora, la soluzione con un multiplexer mi sembra la più ragionevole, ma c'è qualche altro modo che mi manca? Posso in qualche modo produrre IMU con, diciamo, 16 indirizzi diversi e collegarli tutti insieme a un I2C?

Grazie per il tuo aiuto!

Vedi anche http://arduino.stackexchange.com/questions/18790/how-to-set-address-for-using-more-than-mpu9250/18793#18793
Tre risposte:
dda
2017-01-05 12:50:20 UTC
view on stackexchange narkive permalink

Se stai usando le IMU MPU6050, c'è un trucco semplice: inseriscile tutte sul bus I2C e collega il pin AD0 di ciascuna IMU a un pin digitale separato su Arduino [*]. Quando vuoi leggere da una specifica IMU, imposta tutti gli AD0 su HIGH , tranne quello su cui vuoi leggere LOW . Tutte le IMU con AD0 impostato su HIGH hanno un indirizzo I2C di 0x69, mentre l'unica su LOW avrà un indirizzo di 0x68.

Se vuoi leggerli tutti, fai semplicemente un ciclo e imposta quello che vuoi su LOW , gli altri su HIGH e sei pronto.

[*] Se vuoi 20 IMU, è meglio che tu prenda un Mega, o, ancora meglio, un Maple. Fattore di forma ridotto, un po 'di grinta, molti pin e flash e alcuni cloni costano quasi nulla; ad esempio, Itead vende cloni di Maple per 6 dollari. ElecFreaks li vende per 9 dollari. Potresti usare i 16 pin in basso per AD0s.

Questo trucco funziona con qualsiasi tipo di dispositivo I2C che abbia uno schema di indirizzi personalizzabile tramite uno o più pin. Lo faccio con le EEPROM AT24Cxx, che hanno un intervallo di indirizzi 0x50-57. Quando vuoi avere più di otto chip, impostare tutti tranne uno su 0x50 e uno su 0x51 risolve il problema subito.

Riferimento: https://github.com/PaulStoffregen/FreeIMU_original/blob /master/documents/PS-MPU-6000A-00v3.4.pdf

È un'idea abbastanza intelligente!
E detto da te, è un bel complimento, Nick!
MayBee
2018-05-24 14:03:09 UTC
view on stackexchange narkive permalink

Puoi anche ottenere Multiplexer I2C come il TCA9545A che può dividere una linea I2C in 4 bus. Ho collegato fino a 9 MPU9150 su una linea con quello.

Jeromy Adofo
2020-02-01 18:23:18 UTC
view on stackexchange narkive permalink

Un altro modo è utilizzare un ' emulazione software dell'interfaccia I2C in modo che qualsiasi pin I / O digitale possa agire come un pin I2C. Una libreria ben scritta che puoi usare per questo è SoftWire di Steven Marple. Può essere installato tramite Arduino Library Manager o direttamente dal suo repository GitHub qui.

Con questo, puoi selezionare coppie arbitrarie di pin che agiscano come SDA e SCL per ogni I2C dispositivo e quindi puoi comunicare con ogni dispositivo individualmente.

Nota che con questo metodo, hai bisogno di due pin digitali per ogni dispositivo I2C. In questo senso, credo che la risposta di @ dda sia la migliore per quanto riguarda queste IMU in questione.



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...