Минимальное значение 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 мА)
@Kono, 👍2
Обсуждение2 ответа
Я предполагаю, что вы хотите определить минимальное значение для подтягивающего резистора, которое даст напряжение ниже 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
Полную техническую информацию 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
- Несколько подчиненных устройств I2C на Arduino — Pull-up значения
- i2c высокоскоростные и подтягивающие резисторы
- Отправка и получение различных типов данных через I2C в Arduino
- Как работают функции вне цикла void?
- Как отображать переменные на 0,96-дюймовом OLED-дисплее с библиотекой u8glib?
- OVF в последовательном мониторе вместо данных
- Чтение датчика давления от 4 до 20 мА с использованием uno
- ЖК-дисплей I2C отображает странные символы
Я не понимаю, о чем вы спрашиваете. Что это за "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