Минимальное значение I2C-подтягивающий резистор для arduino

Я пытаюсь определить минимальное значение тягового резистора для Arduino Uno

В таблицах данных указано для arduino; ОБЪЕМ = 0,4 для IOL = 20 мА. (VDD = 5 В)

Для формулы расчета минимального подтягивания: Rmin=Vcc-0,4 В/20 мА = 4,6 В / 20 мА = 230 Ом.

Но я видел, что люди используют 0,4 В для 3 мА. Чем минимальное значение составляет 1,6 К Ом.

Итак, каково минимальное значение подтягивания для arduino?

(также у моего раба 0,4 Об. для ИОЛ 20 мА)

, 👍2

Обсуждение

Я не понимаю, о чем вы спрашиваете. Что это за "0,4 вольта" и какое отношение имеет 20мА к чему-либо?, @Majenko

Они взяты из таблицы данных arduino UNO, @Kono

У меня такое чувство, что вы извергаете ценности, которые читаете, не понимая, что они означают и в каком контексте они используются. Я до сих пор не знаю, что это за "0,4 Об"., @Majenko

А понятие "минимальное подтягивание" для I2C бессмысленно., @Majenko

Пожалуйста, проверьте: http://www.ti.com/lit/an/slva689/slva689.pdf. Мне нужно определить минимальное значение подтягивания. Максимальное значение подтягивания зависит от максимальной емкости шины, @Kono

Почему вы думаете, что вам нужно идти на такие крайности? Просто придерживайтесь рекомендуемого диапазона подтягиваний, если у вас нет конкретной причины использовать что - то другое (2,2 к-4,7 к)., @Majenko

Моя емкость высока. Около 800pf. Мне нужно уменьшить подтягивания, @Kono

Вам нужно сделать один и тот же расчет для всех устройств на шине I2C., @Gerben

Что такое рабыня? Еще один Arduino uno? Только один раб?, @Jot


2 ответа


0

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

Это непростая задача, главным образом потому, что вы не знаете сопротивление включения (RDSON) МОП-транзистора с низкой стороной в чипе.

Тем не менее, можно составить приблизительную оценку (см. Здесь).

При напряжении 1,5 В и максимальном токе 40 мА расчетное теоретическое сопротивление составляет 1,5/0,04 = 37,5 Ом.

Примечание: это всего лишь оценка, основанная на абсолютном максимуме и значениях характеристик постоянного тока из таблицы.

Таким образом, если мы примем это значение за фактическое значение, вы можете рассчитать верхнюю половину делителя напряжения, что приведет к выходу 1,5 В. Есть два способа сделать это - с помощью сопротивления или с помощью тока.

Принимая сопротивление R1=R2(Vin/Vout-1), 37,5 x (5/1,5-1) = 87,5 Ом.

Если вы хотите сделать это с током (40 мА "абсолютный максимум"), то R=V/I = (5-1.5) / 0.04 = 87.5 Ω.

Однако это связано с большой оговоркой. Вывод ввода-вывода, хотя он может в течение короткого времени пропускать 40 мА, не предназначен для этого в течение длительного времени. Для этого 25 мА-рекомендуемый максимум. Поэтому следует выбрать резистор, который поддерживает ток ниже 25 мА.

Предполагая 37,5 Ом для сопротивления МОП-транзистора и 25 мА через него, это дает падение напряжения на нем 0,94 В (значительно ниже VIL). Верхний резистор в этом делителе тогда будет (5-0,94)/0,025=162,5 Ом

Итак, подводя итог:

  • Абсолютный минимальный резистор составит 87,5 Ом
  • Рекомендуемый минимальный резистор должен составлять 162,5 Ом
  • Резистор, который вы выбрали бы для использования, не имел бы реального отношения к этим значениям, поскольку обычно вы выбираете что-то более разумное, например 3,3 Ком, если только вы не хотите запускать шину I2C на безумно высоких скоростях или с большой нагрузочной способностью.

Вам действительно не нужно знать теоретический минимум. Вы уже знаете максимум, и все, что вам действительно нужно знать, это "является ли значение, которое я хотел бы использовать, безопасным для вывода ввода - вывода", т. Е. Оно составляет менее 20 мА?

Для этого вы можете игнорировать все остальные значения. Все, что вас волнует, - это ваше сопротивление, напряжение Vcc и результирующий ток.

Например, для резистора 900 Ом с 5 В поперек вы получаете 5,6 мА. Вы точно знаете, что у вас никогда не может быть более 5,6 мА, независимо от сопротивления МОП - транзистора-он может только снижаться оттуда.

5,6 мА ниже рекомендуемого максимума в 20 мА, так что с этим резистором вы в полной безопасности.

,

Спасибо, но в спецификации I2C они делают вычисления с помощью VOL и IOL. и не ВИЛ., @Kono

http://www.ti.com/lit/an/slva689/slva689.pdf, @Kono

VOL указан только в 20mA (я должен был использовать 20mA выше, а не 25, но это незначительная разница). Вы заметили, что цифра 0.9 для VOL в таблице данных совпадает (достаточно близко) с конечным значением, которое я рассчитал выше (0.94)...?, @Majenko

Официальный datahseet, делает расчет не с RDSON. Но просто по VOL и IOL, @Kono

Все они связаны между собой., @Majenko

В любом случае, на самом деле не имеет значения, каков минимум, потому что было бы безумием опускаться так низко. Вы должны больше сосредоточиться на том, что является максимумом для вашей емкости., @Majenko

Кроме того, это документ TI, который принимает значения, указанные в таблице данных устройства TI., @Majenko

Моя емкость-800 пф. Таким образом, в стандартном режиме мое МАКСИМАЛЬНОЕ сопротивление составляет около 1,5 К. Я хотел использовать что-то вроде 900 Ом, @Kono

На какой частоте вы управляете автобусом?, @Majenko

Стандарт, поэтому 100 кГц, @Kono

Я делаю это максимум 1475,27 Ком. Быстрый тест: полностью игнорируя значения вывода ввода-вывода, приводит ли выбранное вами значение резистора с напряжением 5 В к *меньшему* току, чем может выдержать вывод ввода-вывода? I=V/R=5/900=5,6 мА - так что да, 900Ω подходит для вывода ввода-вывода., @Majenko

Но стабильна ли она? Я имею в виду, достаточно ли низко падение над "транзистором в вводе-выводе"?, @Kono

Поскольку он намного ниже 20 мА, ответ-да. В противном случае 20мА не было бы 20мА., @Majenko

Падение должно быть меньше 0,4-0,5 вольта, @Kono

Капля не "должна" быть чем-то. Падение является функцией тока через МОП-транзистор. При 20 мА в таблице данных указано, что это не более 0,9 В. Таким образом, при 5,6 мА он будет значительно ниже., @Majenko

Если он *должен* быть чем-то, он должен быть ниже самого низкого *VIL* для периферийных устройств., @Majenko

И вообще, откуда вы берете этот диапазон 0,4-0,5 В?, @Majenko

Для надежной передачи; он должен быть ниже VIL. Это 0,3*VDD или 1,5. Он предположил, что это должно быть ниже 0,5 В ( с запасом 1 В)., @Kono

Это огромная разница. Я бы сказал, чересчур осторожно. Однако если 20мА равно 0,9 В, то 5,6 мА равно 0,9*(5,6/20)=0,25 В. Маржи более чем достаточно для любого., @Majenko


1

Полную техническую информацию atmega328p можно найти здесь: https://www.microchip.com/wwwproducts/en/ATmega328P.
Он называется "Микроконтроллер ATmega328/P AVR с паспортом технологии picoPower".

В разделе "32.7 Характеристики двухпроводного последовательного интерфейса" в таблице 32-10 на стр. 372 показаны различные уровни напряжения на входе.

На странице 110 говорится: "Когда бит TWEN в TWCR установлен (один) для включения 2-проводного последовательного интерфейса, вывод PC4 отсоединяется от порта и становится выводом ввода-вывода последовательных данных для 2-проводного последовательного интерфейса. В этом режиме на выводе имеется фильтр спайков для подавления спайков входного сигнала длиной менее 50 нс, а вывод приводится в действие драйвером открытого слива с ограничением скорости нарастания".

Я уже писал здесь ранее, что i2c (аппаратное обеспечение twi внутри микроконтроллера) не использовало оборудование с цифровым выводом. Тем не менее, контакты i2c все еще могут пропускать большой ток. Спасибо @Berkay за то, что заметил такое же поведение тока приемника, как и у обычного цифрового контакта.

Согласно техническому описанию, atmega328p Arduino uno может не использовать оборудование с цифровым выводом для i2c. Неизвестно, используется ли одна и та же схема МОП-транзистора с одинаковым (большим) током стока. Возможно, в микросхеме используется аналогичная схема МОП-транзистора с добавленной скоростью нарастания для выхода и добавленным спайковым фильтром для входа. Возможно, в конце концов используется тот же моп-транзистор цифрового вывода.

В скетче Arduino вызов Wire.begin включает выделенное оборудование i2c в чипе atmega328p. Уровни тока и напряжения в приемнике соответствуют спецификациям i2c.
Как вы можете видеть в руководстве по i2c Ника Гэммона, Arduino может пропускать более 3 мА.

Когда подтягивающие резисторы слишком малы, например, для тока стока 4 мА, Arduino uno может справиться с этим, но ведомый может и не справиться.

Когда все подтягивающие резисторы объединены, можно рассчитать необходимый ток стока. Максимальное значение составляет 3 мА для соответствия спецификациям i2c. Для компенсации емкости провода скорость шины i2c может быть снижена.

Шина i2c не предназначена для подключения к кабелю, она не предназначена для длинных проводов. Кабель cat6 составляет 46 пФ/м. Это означает, что ваши 800 пФ рассчитаны на 17-метровый кабель? Это не то, для чего предназначена шина i2c. Это на 17 сантиметров. Эмпирическое правило-максимум 50 см для обычной шины i2c от 100 кГц до 400 кГц.

,

Я думаю, что ты не прав. Контакты arduino i2c могут поглощать до 20 мА с максимальным напряжением 1 В. Это также то, что вы видите в ссылке. Arduino может легко потопить 10 мА, @Kono

Это означает, что изображения, которые вы видите в ссылке; подтвердите, что arduino просто использует цифровое PIN-оборудование для I2C, @Kono

При опускании 10 мА "низкий уровень" поднимается до 0,5 В. Это приемлемо в соответствии со спецификацией I2C. (VIL-1,5 В для связи). Подтягивание R составляет около 500 Ом, @Kono

@Berkay спасибо, я сильно изменил свой ответ. Согласно спецификации, цифровой вывод отсоединен. Но это можно сделать и до выходного каскада. Однако шина i2c рассчитана на максимальный ток приемника 3 мА. Вы должны решить свою проблему другим способом, возможно, с помощью RS485., @Jot

I2c 3ma - типичное значение для большинства устройств i2c. Есть некоторые устройства, которые могут тонуть гораздо больше, чем 20мА. Почему же тогда я должен использовать 3mA для своих расчетов?, @Kono

Это драйвер устройства, которое должно поглотить этот ток. Есть много буферов, которые поглощают 30 мА для i2c, @Kono

Также, как вы видите здесь; http://www.gammon.com.au/forum/?id=10896&reply=5#reply5 Это не проблема, чтобы потопить 5 мА до 10 мА, @Kono

Это следует из официальной спецификации: "Если используются более мощные приводные устройства, такие как PCA96xx Fast-mode Plus или буферы шины P82B, то более мощные выходные драйверы поглощают больше тока, что приводит к значительно более высоким граничным скоростям или, с другой стороны, позволяет увеличить емкость шины. Фактические возможности выходного привода см. в технических паспортах отдельных компонентов " https://www.nxp.com/docs/en/user-guide/UM10204.pdf Р56, @Kono

Arduino uno может работать только с обычной шиной i2c от 100 кГц до 400 кГц. У него нет тех дополнений с более высокой прочностью. Это не просто драйвер, который должен поглощать ток, sda и scl-это двухсторонние сигналы. Большинство датчиков не связываются с scl, но плата Arduino в качестве ведомого устройства поддерживает низкий уровень scl для растяжения тактовых импульсов. Пожалуйста, измените свой вопрос и добавьте гораздо больше информации о вашем проекте. Вам нужно что-то еще, чтобы общаться по этому длинному кабелю, о чем вы нам не рассказываете., @Jot

У меня нет длинного кабеля (максимум 2 м), но много устройств. Частота-100 кГц. Я не хочу идти быстрее. Я просто хотел сказать, что, как вы видите в ссылке gammon, arduino может поглотить гораздо больше, чем 3mA. Кроме того, мои рабы могут потопить гораздо больше. В этом случае нет необходимости ограничивать ваш подтягивающий резистор на 3 мА. Я могу использовать гораздо более низкое подтягивание для более высокого тока и для большей емкости., @Kono

Как вы видите здесь: https://www.nxp.com/docs/en/user-guide/UM10204.pdf P47; также 6mA можно использовать для 400 кГц. Вы можете снизить эту частоту до 100 кГц и по-прежнему использовать 6 мА., @Kono

@Berkay спасибо, я должен изменить свой ответ? Можете ли вы сказать, что это за устройства? Сколько устройств? Это один кабель длиной не более 2 метров или 2 метра к каждому устройству? У устройств так много емкости, что это очень странно. Я все еще хотел бы знать гораздо больше. 3 мА указаны как минимум, но некоторые датчики не могут сделать больше, потому что 3 мА-это все, что необходимо для соответствия спецификациям i2c. Поэтому нормальная шина i2c застревает максимум на 3 мА. С процессорами в качестве ведомых устройств i2c вы можете использовать более высокий ток стока., @Jot

Спасибо за ваш ответ. Нет, вам не нужно ничего менять. Классические устройства действительно имеют максимум 3 мА, но есть много устройств с более высокими возможностями. Я приму ваш ответ. Хорошего вам дня!, @Kono