I2C подтягивающие резисторы и I2C MUX

У меня есть установка с 5 датчиками освещенности на мультиплексоре I2C, и мне интересно, нужен ли мне только 1 подтягивающий резистор для всей шины или по одному на каждой ветви от мультиплексора?

Или мне следует снять все подтягивания с ветвей и оставить один на мультиплексоре?

Моя проблема в том, что Arduino softlocks после 5-60 минут работы, и это всегда softlocks на вызове read lux.

, 👍0


1 ответ


2

Из того, что я могу сказать, мультиплексор шины I2C сам получает и повторно передает то, что составляет совершенно отдельную шину. Таким образом, каждая шина будет нуждаться в своих собственных подтягивающих резисторах. Тем не менее, плата, которую вы связали, которая разрывает чип мультиплексора, имеет подтягивающие резисторы на каждой шине, которую он предоставляет:

Excerpt of Sparkfun Multiplexer breakout showing bus pull-up resistors on far side of multiplexor.

Прорыв также имеет подтягивания на автобусе, идущем к самому мультиплексору:

Excerpt of Sparkfun Multiplexer breakout showing bus pull-up resistors on near side of multiplexor.

Кроме того, прорыв датчика окружающего освещения, по-видимому, обеспечивает свои собственные подтягиванияна 4,7 К. Arduino на основе AVR (и, вероятно, другие) также включают свои собственные, по общему признанию, слабые, подтягивания в кишках проволочной библиотеки.

Кажется, вам не обязательно нужно добавлять какие-либо дополнительные подтягивающие резисторы к тому, что уже есть на шинах.


Что касается приведенного ниже комментария О. П., то он обеспокоен слишком большим количеством подтягивающих резисторов.

В какой-то момент, вероятно, ниже (возможно, намного ниже) 500 Ом некоторые устройства могут иметь проблемы с погружением достаточно тока, чтобы создать НИЗКИЙ. Например, у AVR не было бы проблем с 500 омами.

Спецификация ATmega328P (как и большинство других спецификаций AVR) сообщит вам, что внутреннее значение подтягивания находится в диапазоне от 20 до 50 Тыс. Если вас беспокоит слишком много параллельных резисторов/слишком много токовых путей/слишком мало общего сопротивления, вы можете взять цифру 20K вместе с цифрой прорыва мультиплексора 4,7 K, чтобы вычислить pow(1/20e3 + 1/4.7e3, -1)примерно для 3,8 K , что должно быть прекрасно. Если вы сделаете то же самое вычисление для отдельного резистора шины мультиплексора 4,7 к и собственного резистора пробоя датчика окружающего освещения 4,7 к, вы получите 2,35 к (половина), что также, вероятно, нормально. Во всяком случае, обе эти суммарные цифры можно сделать меньше (добавив еще один параллельный резистор) для более длинных шин и на более высоких частотах. Если вы беспокоитесь об этих цифрах, вы можете снизить тактовую частоту I2C. Вы также можете исследовать края вашего сигнала с помощью прицела. Кроме того, если вы действительно хотите покопаться в этом материале, вы читаете в официальном руководстве I2C. Но на самом деле я думаю, что то, что у вас есть, вероятно, прекрасно.

,

но не слишком ли много у меня подтягивающих резисторов? я думал, что у меня должен быть только 1 комплект? тогда я должен удалить те, что на датчиках lux?, @levi Clouser

Я преобразовал большую часть моего предыдущего (теперь удаленного) комментария, адресованного вам, в дополнение к ответу., @timemage

Попробуйте заменить некоторые из объемных колпачков 1,0 мкФ чем - то в диапазоне 10-100 нФ, чтобы добавить обход высокой частоты., @Gil