Нужны ли контакты GPIO MCP23S17 для защиты от электростатического разряда в этой схеме?

Я уже писал об этой системе. Теперь я сосредоточу свои вопросы на направлении «защита от электростатического разряда».

У меня есть система на основе SPI, в которой Raspberry разговаривает с устройством расширения GPIO, используя связь SPI. Чип читает и/или записывает «0»/«1» и отправляет их на Raspberry по шине.

Схема экспандера GPIO — очень простая схема, но иногда после нескольких часов правильной работы случайным образом срабатывает опасное перерасход/перегрев (он почти сгорает). Это прекращается, когда я перезагружаю устройство. После этого устройство имеет нормальное поведение и нормальное потребление. В настоящее время система подключается и тестируется на макетной плате. Таким образом, проводка или лабораторный материал могут влиять немного или сильно.

Некоторые люди предполагают, что такое поведение похоже на «защелкивание», вызванное электростатическим разрядом. В противном случае это может быть вызвано скачками напряжения, положительными скачками или отрицательными GND. Так вот, мне сказали, что мои GPIO нужно защищать резисторами, диодами и конденсаторами. Но я не вижу ни одного примера с диодами, Cs и Rs, защищающими входы/выходы в других проектах, основанных на микроконтроллерах или микропроцессорах. Максимум, что я видел, это последовательные резисторы на некоторых контактах GPIO.

Моя схема намного проще тех, что я видел:

введите описание изображения здесь

  1. 8 контактов расширителя будут входами. Остальные будут выходами.

  2. Выходы расширителя будут записывать '0', а не '1'.

  3. Входы расширителя имеют внутренний Rpull up, который выдает входное напряжение 3,3 В, когда он не подключен.

  4. Я поставил провод на каждый выход, и этот провод мог быть подключен напрямую к входам или нет. Таким образом, при чтении 8 входных контактов те, кто подключен к входам, будут читать «0», а остальные будут читать «1».

  5. Ввод будет читать эти 3 сценария:

    • '1' (когда не подключен),
    • Запись выхода '0' (если они подключены)
    • '0' = GND (если точка GND имеет прямой контакт с входом).

Особенностью этой системы является то, что GPIO не будут настроены как входы или выходы в остальное время. Таким образом, во время одного выполнения вывод может быть настроен как вход во время инициализации, но при следующем выполнении тот же самый вывод может быть настроен как выход.

Это явление перегрева не происходит более одного или двух раз в день. Но боюсь, что одного раза будет достаточно, чтобы разрушить систему.

При окончательном проектировании печатной платы контакты GPIO будут проложены через плату, получив 64-контактный разъем. Вход и выход будут соединены через провод, который соединит или не соединит два контакта 64-контактного разъема с помощью человеческого соединения во время выполнения. Таким образом, цепь между одним входом и одним выходом может быть замкнута. Но также могут быть разомкнутые цепи между остальными входами и выходами.

Я добавил 10 000 рупий на каждый GPIO устройства и использую 100 нФ между VDD и GND. Кажется, два дня назад этого больше не произошло, но я хотел бы обеспечить свои GPIO, если схема действительно нуждается.

Эта схема нуждается в защите GPIO? Достаточно ли этих резисторов?

Если у вас не было никаких обходных колпачков на контактах питания на микросхеме, это само по себе может вызвать всевозможные проблемы. Но поскольку вы перепробовали так много всего сразу, невозможно знать, что поможет, а что нет. Я бы попытался выяснить, были ли два контакта случайно установлены как выходы, так как тогда это не защелка, вызванная электростатическим разрядом, а, возможно, ошибка программирования или связи.
UPS! извините забыл начертить, но там конденсатор 100нФ! так жаль!
@Justme Я прочитал много литературы об этом за последние 3 дня, и одним из способов защиты от того, что вы говорите: ошибки программирования и настройка входов как выходов, была серия R. Поэтому я поставил последовательные резисторы на каждый вывод GPIO. Он имеет две функции: ограничение тока в случае ошибок и улучшение защиты от электростатического разряда. Кто-то предложил мне использовать от 10K до 200K. Но я знаю, что есть пользователи, которые использовали 200 Ом, когда входы имеют кнопки.
Кажется, какая-то путаница. Позвольте мне уточнить. (1) Электростатический разряд обычно разрушает компоненты, когда человек обращается с компонентами (а) до того, как компонент будет вставлен в цепь, И (б) человек не заземлен и в то же время несет электростатический заряд. Если ваши компоненты уже включены в схему, то проблемы с электростатическим разрядом нет. / продолжать, ...
Возможно, вы говорите о двух других вещах: (1) скачок напряжения в сети. Когда происходит отключение электроэнергии из-за перегрузки сети (то, что вы называете «перерасходом», как говорят слишком многие кондиционеры), спотыкается о MCB. И когда после этого все включаются/выключаются одновременно, могут быть всплески/всплески от ближайшей подстанции здания. Эти всплески могут превышать пиковое напряжение 220 В и сбрасывать Rpi. Обычно не должно быть никакого вреда для Rpi, потому что он получает питание только 5 В от адаптера, а не напрямую от сети, / чтобы продолжить, ...
И есть еще одна вещь, называемая «обратная ЭДС». Если вы используете Rpi для управления индуктивными нагрузками, такими как двигатель, соленоид или вентилятор, возможно, с помощью реле 5 В или твердотельного реле. Затем при выключении (а) реле и/или (б) двигателя или соленоида может возникнуть обратная ЭДС, которая представляет собой всплеск напряжения, иногда в несколько раз превышающий исходный источник питания, вызывающий ток, возвращающийся к Схема Rpi. Эта обратная ЭДС обычно минимизируется с помощью (i) «обратноходового» диода, (ii) цепей оптоизоляции. Но шипы могут проходить через наземные линии и запускать/сбрасывать Rpi. / продолжать, ...
А "пристегиваться" - другое дело. Возьмем, к примеру, Rpi, если один вывод Rpi GPIO находится в режиме ввода, а вывод GPIO подключен через последовательный резистор к источнику 5 В. Тогда есть 5% вероятность того, что может произойти «защелкивание», поджаривая контактную схему GPIO Rpi или сокращая срок службы Rpi. / продолжать, ...
Чтобы получить общее представление о «фиксации», вы можете прочитать мой ответ на следующий вопрос: (1) «Rpi3 мог быть сожжен из-за неправильно подключенного датчика температуры DHT11 — Rpi SE. Блокировка вопросов и ответов»: raspberrypi.stackexchange . ком/вопросы/96560/… . Ваше здоровье.
какие-то случайные комментарии. (1) Если вы используете MCP23S17, то вы используете MOSI, MISO, CS Rpi для связи с MCP23S17. Если то, что вы называете GPIO, является контактами GPIO MCP23S17, то не беспокойтесь, потому что любой всплеск, обратная ЭДС сначала поджарит MCP23S17, а Rpi, скрывающийся за ним, должен быть «безопасным». (2) Обычно, когда GPIO Rpi или MCP23S17 находится в режиме вывода, и вы хотите защитить его от короткого замыкания на землю или короткого замыкания на другой выходной контакт GPIO, и поэтому они борются друг с другом, тогда обычный прием заключается в использовании серии резистор, допустим 330R или 470R. / продолжать, ...
Использование 10K допустимо, если ваш GPIO должен управлять устройством MOS с входом с высоким импедансом. Но если устройство BJT, то сопротивление смещения обычно 220R на 1к, то использовать серию 10к для защиты GPIO немного переборщить. Просто небрежно говорю вслух, прошу прощения за опечатки. А, пора спать. Увидимся завтра.
Ах, я забыл, что ваш Rpi также использует контакты GPIO для установки адресных контактов (от A0 до A2) MCP23S17, но это не должно вызывать никаких проблем. Безопасный способ — просто соединить контакты A0 и A2 напрямую с Vcc и/или заземлением. Ваше здоровье.
(1) Еще одна вещь, касающаяся контакта сброса MCP23x17. Играя с MCP23x17, я обнаружил, что чип время от времени сходит с ума, и мне нужно нажать кнопку ручного сброса, которую я установил, потому что я нахожу ее очень полезной при отладке. Я подозреваю, что MCP23x17 очень чувствителен к шуму, поэтому может сойти с ума, если ваши соединительные провода SPI/I2C очень длинные (> 60 см). (2) Другое дело, что я считаю хорошей идеей не подключать вывод прерывания MCP23x17 напрямую к Rpi. Вместо этого вы используете Rpi для зацикливания регистров состояния прерывания MCP23s17. Ваше здоровье.
@ tlfong01Я боюсь, что пользователи-люди будут подключать провода. Так что, по вашему мнению, ESD может произойти легко. Это?
@tifong хорошо, как я уже сказал, ВЫХОДЫ GPIO MCP будут писать «0», а выходы могут быть подключены проводами к входам GPIO MCP (обнаружение контакта между двумя проводами) или нет (не подключен ни к чему = обнаружение изоляции между двумя проводами). Входы будут подключены к выходам. Итак, несмотря на однополюсные провода, это КМОП-технология. Наверняка адрес каждого чипа будет одинаковым на протяжении всего жизненного цикла, поэтому я буду настраивать их по VCC и GND. Нам не нужны INT для нашего приложения. И мой последний комментарий: продолжайте..
заключается в том, что что-то вызывало перегрев после нормальной работы в течение нескольких часов, и большинство людей говорят мне, что это похоже на защелку из-за скачков напряжения или электростатического разряда. Когда у меня есть конденсатор 1 мкФ внутри VDD-GND, это произошло дважды. Внезапно начал сильно греться, потребление идет от 3Вт до 6Вт (поэтому видимо потребление КЗ). Он останавливается только тогда, когда выполняется сброс MCP (это одна из вещей, которая происходит, когда происходит защелкивание). Я поменял 1 мкФ на 100 нФ, и после 2 дней работы этого не произошло. Причина возникновения нежелательной ситуации мне неизвестна. Большое спасибо за ваше время
@ tlfong01 Я хочу, чтобы вы прояснили еще одну вещь: когда я говорю о GPIO, я не имею в виду GPIO Raspberry, поэтому я имею в виду GPIO устройства MCP. Устройство MCP перегревается, и я хотел бы предотвратить подгорание компонентов моей печатной платы. Система не должна легко выйти из строя таким образом.
(1) Об электростатическом разряде. Вы могли заметить, что продавцы обычно отгружают комплектующие в металлических пластиковых пакетах, а также на металлических губках. Это для антистатика. Операторы на сборочных и испытательных предприятиях носят такие антистатические браслеты: «Регулируемый антистатический браслет AliExpress, запястье из ПВХ, кабель для разрядки электростатического разряда, ремешок для рук с заземляющим проводом»: aliexpress.com/popular/ground-strap.html . Я любитель играть с дешевыми компонентами, и я никогда не заморачиваюсь, потому что шансы подхватить вирус ESD очень и очень малы.
Это в старые времена, когда электронные компоненты стоили дорого, люди заморачивались. Или вы остаетесь в очень засушливой стране, носите одежду из поли / пластика / нейлона, тогда вам нужно побеспокоиться. Конечно, у всех есть шанс быть пораженным молнией. Возможно, вам следует погуглить дальше для ума.
(2) Я всегда рекомендую новичкам НЕ использовать шину Rpi 5 В или 3 В для питания MCP23S17 или других периферийных устройств, а использовать внешний источник питания, по крайней мере, для стадии прототипирования. Таким образом, если MCP23S17 сойдет с ума, Rpi все еще будет сидеть спокойно. Поэтому я просто вручную сбрасываю MCP23S17, и мне не нужно сбрасывать Rpi, шоу продолжается.
(3) То, что вы говорите о перегреве , немного беспокоит. MCP23S17 не может работать с большими токами. Я обычно использую буферные чипы для обработки больших токов. Если вы перегрузите все 16 выходных контактов GPIO большим током, у вас будут большие проблемы. Позвольте мне проверить таблицу данных MCP23S17, чтобы подтвердить. Я вернусь через минуту. Кстати, я немного запутался, так что давайте перейдем в чат и продолжим позже.

Ответы (1)

Вопрос

Почему мой расширитель GPIO MCP23S17 сильно нагревается и сходит с ума?

/ продолжать, ...


Отвечать

Часть 1. Тестовая установка

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

PA0~7 установлен в режим ввода

PB0~7 установлен в режим вывода

Только когда при тестировании вы обнаружите, что фиксированный режим ввода/вывода контактов в норме, вы обобщаете программу.

mcp23017_test_v0.2_2020aug0101 ОБЩЕСТВЕННЫЙ

mcp23017 тест v02


Часть 2. Разъяснение по ESD и фиксации

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

Операторы сборочных и испытательных заводов носят такие антистатические повязки:

AliExpress регулируемый антистатический браслет ПВХ запястье электростатический разрядный кабель ESD ремешок рука с заземляющим проводом .

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

Это в старые времена, когда электронные компоненты стоили дорого, люди заморачивались. Или вы остаетесь в очень засушливой стране, носите одежду из поли / пластика / нейлона, тогда вам нужно побеспокоиться. Конечно, у всех есть шанс быть пораженным молнией. Возможно, вам следует погуглить дальше для ума.

(См. A.2) Электростатическое оборудование, повышающее безопасность и защиту рабочего места — AntiStat


Часть 3 - Рекомендации по использованию внешнего источника питания для MCP23S17

Я всегда рекомендую новичкам НЕ использовать 5-вольтовую или 3-вольтовую шину Rpi для питания MCP23S17 или других периферийных устройств, а использовать внешний источник питания, по крайней мере, для стадии прототипирования.

Таким образом, если MCP23S17 сойдет с ума, Rpi все еще будет сидеть спокойно. Поэтому я просто вручную сбрасываю MCP23S17, и мне не нужно сбрасывать Rpi, шоу продолжается.


Часть 4 - Возможные причины перегрева

То, что вы говорите о перегреве, немного беспокоит.

MCP23S17 не может работать с большими токами. Я обычно использую буферные чипы для обработки больших токов. Если вы перегрузите все 16 выходных контактов GPIO большим током, у вас будут большие проблемы.

Я просмотрел таблицу и сделал резюме:

(1) Общая мощность = 700 мВт

(2) Максимальный ток на выводе VSS = 150 мА

(3) Максимальный ток на выводе VDD = 25 мА.

(4) Входной ток фиксации = ±20 мА

(5) Выходной ток фиксации = ±20 мА

(6) Максимальный выходной ток, потребляемый любым выходным контактом = 25 мА.

(7) Максимальный выходной ток, создаваемый любым выходным контактом = 25 мА.

Итак, вы видите, если вы нагрузите 6 контактов GPIO 25 мА, то общий ток превысит ограничение вывода Vss в 150 мА. Обычно я использую 8 больших чипов ULN2803A, чтобы выполнять всю тяжелую работу. Каждый из 8 больших парней может обрабатывать 500 мА, ...

Кажется, вы используете 10 Ом для последовательного ограничивающего/защитного резистора. Возможно, вы захотите выполнить расчеты, чтобы убедиться, что индивидуальный предел тока GPIO и общий предел тока Vcc не превышен.


Часть 5. Тестирование и программирование пары/свопа

Часто бывает полезно использовать более двух образцов для тестирования пары/перестановки. Часто компонент может быть неисправен по прибытии или поврежден из-за небрежного подключения или тестирования. Так часто только путем сравнения и сравнения местами вы находите ошибки небрежного подключения. Вы можете использовать MCP23s08 или MCP23017 для перекрестного тестирования. В версиях I2C и SPI MCP23x17 отличается только часть настройки. Основные рабочие функции идентичны для MCp23SS17 и MCP23017 017. Время от времени делать снимки — хорошая документация для дальнейшего использования.

mcp23s08


mcp23017 х 4


mcp23s17_2020aug0101

/ продолжать, ...


Рекомендации

Часть A. Спецификации и статьи

(A.1) Техническое описание MCP23S17/MCP23017 — MicroChip

(A.2) Электростатическое оборудование, повышающее безопасность и защиту рабочего места — AntiStat

(A.3) Чистая мощность для каждой микросхемы, часть 1: понимание обходных конденсаторов — Роберт Кейм, AAC, 2015 сентябрь 21 года.

(A.4) Чистая мощность для каждой ИС, Часть 2: Выбор и использование ваших обходных конденсаторов - Роберт Кейм. ААС 2015сен27

(A.5) Adafruit I2C 16-канальный 12-разрядный ШИМ/серводрайвер — 15 долларов США

(A.6) Техническое описание ШИМ-контроллера PCA9685 — NXP

(A.7) mcp23s17 Технический паспорт - Микрочип

(A.8) Модуль AliExpress MCP23S17

(A.9) Модуль TaoBao MCP23S17

(A.10) Преобразователь логического уровня (ULN2803, TBX/TSX0102/4/6/8 и т. д.) 1/2

(A.11) Преобразователь логического уровня (ULN2803, TBX/TSX0102/4/6/8 и т. д.) 2/2

(A.12) Зажимной диод TVS, MOV - Лиз Лондон, 2019март16

(A.13) (TVS) Диод подавления переходного напряжения — Википедия

(A.14) Диоды для защиты от электростатических разрядов (диоды TVS) — Toshiba

(A.15) Защита от электростатического разряда за счет конструкции микросхем и микросхем — онлайн-библиотека, Wiley

(A.16) ESD (электростатический разряд) — Википедия

(A.17) Развязывающие колпачки, разводка печатной платы — Olin Lathrop, EE SE, 2011jun07, просмотрено 80 тыс. раз


Часть B - Обсуждения на форуме

(B.1) Почему устройство MCP23S17 внезапно и случайным образом сильно нагревается Raspb 4A? - Евгения Суарес EE SE 2020jul17

(B.2) Нужна ли мне защита выводов GPIO MCP23S17 от защелкивания ESD в этой схеме? - Евгения Суарес, EE SE, 2020jul29


Часть C. Схемы

(C.1) mcp23s17_test_2020jul3002 Схема CircuitLab — tlfong01 2020jul3001

(C.2) mcp23017_test_v0.2_2020aug0101 ПУБЛИЧНЫЙ tlfong01 2020aug01


Приложения

Приложение A — Байпасные и развязывающие конденсаторы — Роберт Кейм, AAC

(A.3) Чистая мощность для каждой микросхемы, часть 1: понимание обходных конденсаторов — Роберт Кейм, AAC, 2015 сентябрь 21 года.

(A.4) Чистая мощность для каждой ИС, Часть 2: Выбор и использование ваших обходных конденсаторов - Роберт Кейм. ААС 2015сен27

Введение

Не исключено, что целеустремленный, успешный студент-инженер закончит колледж, почти ничего не зная об одном из самых распространенных и важных компонентов, встречающихся в реальных схемах: шунтирующем конденсаторе. Даже опытные инженеры могут не до конца понять, почему они включают керамические конденсаторы емкостью 0,1 мкФ рядом с каждым выводом питания каждой микросхемы на каждой печатной плате, которую они проектируют.

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


Решение

удобно, что такую ​​серьезную проблему можно эффективно решить с помощью простого, широко доступного компонента. Но зачем конденсатор? Простое объяснение состоит в следующем: конденсатор накапливает заряд, который может подаваться на ИС с очень низким последовательным сопротивлением и очень малой последовательной индуктивностью.

Таким образом, переходные токи могут подаваться от шунтирующего конденсатора (через минимальное сопротивление и индуктивность), а не из линии электропередачи (через сравнительно большое сопротивление и индуктивность). Чтобы лучше понять это, нам нужно рассмотреть некоторые основные понятия, связанные с тем, как конденсатор влияет на цепь.

Однако сначала краткое примечание о терминологии: компоненты, обсуждаемые в этой статье, обычно называют как « шунтирующими конденсаторами », так и « развязывающими конденсаторами ».

Здесь есть тонкое различие: «развязка» относится к уменьшению степени влияния одной части схемы на другую, а «обход» относится к обеспечению пути с низким импедансом, который позволяет шуму «обходить» ИС на своем пути. к наземному узлу.

Оба термина можно использовать правильно, потому что шунтирующий/развязывающий конденсатор выполняет обе задачи. Однако в этой статье предпочтение отдается термину «шунтирующий конденсатор», чтобы избежать путаницы с последовательным развязывающим конденсатором, используемым для блокировки постоянной составляющей сигнала.

Стандартный подход

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

конденсатор 10 мкФ в пределах одного или двух дюймов от микросхемы, и

керамический конденсатор емкостью 0,1 мкФ как можно ближе к выводу питания:

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

Если мы включим эти шунтирующие конденсаторы в описанную выше симуляцию с 8 инверторами, звон будет устранен, а величина возмущения напряжения уменьшится с 1 мВ до 20 мкВ , ...


байпас БП, предохранитель


крышка байпаса блока питания


выключатель питания

Приложение B – Проблема с заземлением и ее решение

(1) Проблемы с контуром заземления и как от них избавиться - Томи Энгдаль, 2013 г.

(2) Блок питания RpiZero через 40-контактный разъем питания/GPIO или разъем microUSB

(3) Проблема заземления цепи кнопки Rpi GPIO


заземление adxl


Приложение C. Старая плата прототипа MCP23S17/MCP23017 для тестирования

Я думаю использовать свой старый MCP23S17 или MCP23017, чтобы провести некоторые тесты. Глядя на запутанную проводку моей старой платы MCP23017, я теперь вспоминаю, почему в прошлый раз я отказался от работы с SPI MCP23S17 и переключился на I2C MCP23017, потому что проводка, сделанная своими руками, очень запутана, и ее трудно устранять аппаратными неполадками. Для I2C MCP23S17 есть дешевые прорывные платы, которые говорят, что я много времени занимаюсь проводкой.

проводка mcp23s17


плата mcp23s17


mcp23s17_write_read


mcp23017 жареный


mcp23017_fried


Приложение D. Заметки по настройке макетной платы MCP23s17

mcp3s17 настроен


rpi4b шип 1


Настройка rpi4b spi 1


петлевой тест spi 1


Приложение E. Тестирование SPI 00, 01, 10, 11, 12 Зацикливание и повторная отправка одного байта OK

# Program:
#   spi_loopback_v55.py  tlfong01  2020aug03hkt1220
#
# Function:
#   1. SPI one byte loopback
#   2. SPI repeatedly send one byte
#
# System Config: 
#   Rpi4B buster (r2020may23), python 3.7.3 (r2019dec20), thonny v3.2.7 (r2020jan22)
#   $ date Thu 25 Jun 2020 04:36:13 PM HKT
#   $ uname -a Linux raspberrypi 4.19.118-v7l+ #1311 SMP Mon Apr 27 14:26:42 BST 2020 armv7l GNU/Linux
#   $ ls /dev/ttyUSB* /dev/ttyUSB0
#   $ ls /dev/ttyS0 /dev/ttyS0
#   $ ls /dev/ttyAMA0 /dev/ttyAMA0

# Test Function Definitions:
#
# Test 1 - loopBackTest() - SPI port send and receive one byte.
# Function - Send one byte to MSOI and read it back from MISO.?
# Setup - Connet MOSI pin to MISO pin to form a loop.
#
# Test 2 - repeatSendByte() - SPI port repeatedly send out single bytes. ?
# Function - Repeat many times sending a byte, pause after each byte.

# 1. SPI ports setup notes
# To enable SPI and setup SPI 10, 11, 12 ports, add these two lines to /boot/config.txt
#   dtparam=spi=on
#   dtoverlay=spi1-3cs
# To list SPI devices
#   pi@raspberrypi:~ $ ls /dev/spi*
#   /dev/spidev0.0  /dev/spidev0.1  /dev/spidev1.0  /dev/spidev1.1  /dev/spidev1.2

# 2. Notes of loopback function
#   Call example - testLoopbackOneByte(spiPort00)
#   Function     - send byte 0x5b to SPI MOSI and read byte from MISO
#   Setup        - must connect MOSI pin to MISO pin to loop back
#   Note         - 1. Only checks if MISO echoes MOSI, CS0, CS1, CS2 is not checked
#                  2. To check if SPI 0, CS0, CS1, or SPI1 CS0, CS1, CS2, need a scope to display repeat send bytes 

from time import sleep
import spidev

# *** Setup SPI Ports ***

spiPort00 = spidev.SpiDev()
spiPort00.open(0,0)
spiPort00.max_speed_hz = 100000

spiPort01 = spidev.SpiDev()
spiPort01.open(0,1)
spiPort01.max_speed_hz = 100000

spiPort10 = spidev.SpiDev()
spiPort10.open(1,0)
spiPort10.max_speed_hz = 100000

spiPort11 = spidev.SpiDev()
spiPort11.open(1,1)
spiPort11.max_speed_hz = 100000

spiPort12 = spidev.SpiDev()
spiPort12.open(1,2)
spiPort12.max_speed_hz = 100000

# *** Define SPI Functions ***

def spiSendRecvOneByte(spiPort, sendByte):
  sendByteArray = [sendByte]
  recvByteArray = spiPort.xfer(sendByteArray)  
  return recvByteArray

def loopBackOneByte(spiPort, sendByte):
  recvByteArray = spiSendRecvOneByte(spiPort, sendByte)
  recvByte      = recvByteArray[0]

  print('\nBegin testLoopbackOneByte(),....')
  #print('')
  print('   sendByte = ', hex(sendByte))
  print('   recvByte = ', hex(recvByte))
  #print('')
  print('End testLoopbackOneByte(),....')
  return

def repeatSendOneByte(spiPort, sendByte, pauseTimeBetweenBytes, repeatCount):
  print('\nBegin repeatSendByte(),....')
  print('  Now use a scope to display the SPI signals, MOSI, MISO, CSn, ...')
  for i in range(repeatCount):
    spiSendRecvOneByte(spiPort, sendByte)
    sleep(pauseTimeBetweenBytes)
  print('End   repeatSendByte().')
  return

# *** Test Funtions ***

def testLoopbackOneByte(spiPort, dataByte):
  loopBackOneByte(spiPort, dataByte)
  return

def testRepeatSendOneByte(spiPort, dataByte, pauseSeconds, repeatTimes):
  repeatSendOneByte(spiPort, dataByte, pauseSeconds, repeatTimes)
  return
 
# *** Main ***

# *** Test SPI Loopback Functions, Comment out not required tests ***

print('\n*** testLoopbackOneByte(spiPort00, 0x5b) ***', end = '')
testLoopbackOneByte(spiPort00, 0x5b)

#print('\n*** testLoopbackOneByte(spiPort01, 0x5b) ***', end = '')
#testLoopbackOneByte(spiPort01, 0x5b)

#print('\n*** testLoopbackOneByte(spiPort10, 0x5b) ***', end = '')
#testLoopbackOneByte(spiPort10, 0x5b)

#print('\n*** testLoopbackOneByte(spiPort11, 0x5b) ***', end = '')
#testLoopbackOneByte(spiPort11, 0x5b)

#print('\n*** testLoopbackOneByte(spiPort12, 0x5b) ***', end = '')
#testLoopbackOneByte(spiPort12, 0x5b)


# *** Test SPI Repeat Send One Byte Functions, Comment out not required tests ***

# *** SPI 00, 01 Repeat Send One Byte ***

#print('\n*** testRepeatSendOneByte(spiPort00, 0x5b, 0.001, 200000) ***', end = '')
#testRepeatSendOneByte(spiPort00, 0x5b, 0.001, 200000)

#print('\n*** testRepeatSendOneByte(spiPort01, 0x5b, 0.001, 200000) ***', end = '')
#testRepeatSendOneByte(spiPort01, 0x5b, 0.001, 200000)

# *** SPI Repeat Send One Byte 10, 11, 12 ***

#print('\n*** testRepeatSendOneByte(spiPort10, 0xb5, 0.001, 200000) ***', end = '')
#testRepeatSendOneByte(spiPort10, 0xb5, 0.001, 200000)

#print('\n*** testRepeatSendOneByte(spiPort11, 0xb5, 0.001, 200000) ***', end = '')
#testRepeatSendOneByte(spiPort11, 0xb5, 0.001, 200000)

#print('\n*** testRepeatSendOneByte(spiPort12, 0xb5, 0.001, 200000) ***', end = '')
#testRepeatSendOneByte(spiPort12, 0xb5, 0.001, 200000)


# End of program


''' Smple output tlfong 01 2020aug03hkt1219

>>> %Run spi_loopback_v54.py

*** testLoopbackOneByte(spiPort00, 0x5b) ***
Begin testLoopbackOneByte(),....
   sendByte =  0x5b
   recvByte =  0x5b
End testLoopbackOneByte(),....

*** testLoopbackOneByte(spiPort01, 0x5b) ***
Begin testLoopbackOneByte(),....
   sendByte =  0x5b
   recvByte =  0x5b
End testLoopbackOneByte(),....

*** testLoopbackOneByte(spiPort10, 0x5b) ***
Begin testLoopbackOneByte(),....
   sendByte =  0x5b
   recvByte =  0x5b
End testLoopbackOneByte(),....

*** testLoopbackOneByte(spiPort11, 0x5b) ***
Begin testLoopbackOneByte(),....
   sendByte =  0x5b
   recvByte =  0x5b
End testLoopbackOneByte(),....

*** testLoopbackOneByte(spiPort12, 0x5b) ***
Begin testLoopbackOneByte(),....
   sendByte =  0x5b
   recvByte =  0x5b
End testLoopbackOneByte(),....
>>> 
 
Python 3.7.3 (/usr/bin/python3)
>>> %Run spi_loopback_v54.py

*** testRepeatSendOneByte(spiPort00, 0x5b, 0.001, 200000) ***
Begin repeatSendByte(),....
  Now use a scope to display the SPI signals, MOSI, MISO, CSn, ...

────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Python 3.7.3 (/usr/bin/python3)
>>> %Run spi_loopback_v54.py

*** testRepeatSendOneByte(spiPort01, 0x5b, 0.001, 200000) ***
Begin repeatSendByte(),....
  Now use a scope to display the SPI signals, MOSI, MISO, CSn, ...

────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Python 3.7.3 (/usr/bin/python3)
>>> %Run spi_loopback_v54.py

*** testRepeatSendOneByte(spiPort10, 0xb5, 0.001, 200000) ***
Begin repeatSendByte(),....
  Now use a scope to display the SPI signals, MOSI, MISO, CSn, ...

────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Python 3.7.3 (/usr/bin/python3)
>>> %Run spi_loopback_v54.py

*** testRepeatSendOneByte(spiPort11, 0xb5, 0.001, 200000) ***
Begin repeatSendByte(),....
  Now use a scope to display the SPI signals, MOSI, MISO, CSn, ...

────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Python 3.7.3 (/usr/bin/python3)
>>> %Run spi_loopback_v54.py

*** testRepeatSendOneByte(spiPort12, 0xb5, 0.001, 200000) ***
Begin repeatSendByte(),....
  Now use a scope to display the SPI signals, MOSI, MISO, CSn, ...
End   repeatSendByte().
>>> 
 
'''
 
# *** End ***

Приложение F. Повторите снимки экрана области байтов отправки

повторить отправку байта 1/3


повторить отправку байта 2/3


повторить отправку байта 3/3


Приложение G. Настройка двух плат MCP23S17 Proto

двойной mcp23s17

Конец ответа

Да, я проводил свои тесты на этапе тестирования, на котором порт A является только входом, а порт B - только выходом. Я прочитал ваш комментарий об использовании Raspberry rails для подачи напряжения, и это звучит интересно. Вы первый, кто сослался на этот факт. Я использовал внешний источник 2 дня назад, и с того дня перегрева не было. Я слишком благодарен за ваше большое и подробное описание. Что вы говорите о 3 пункте. Перегрузка по току появляется при перегреве. Это нормальный расход. Мои операции записи и чтения потребляют менее 1 мА. Я все еще читаю весь пост.
Да, еще одна причина не использовать шину питания 5 В Rpi: (1) Если вы одновременно установите много выводов GPIO MCP23S17 с большой нагрузкой, произойдет внезапное большое потребление тока, что приведет к падению мощности Rpi. rail, скажем, если ниже 4,5 В, Rpi может сойти с ума, и может случиться что угодно. Вы видите, что я использую очень большой конденсатор, 10 000 мкФ, чтобы предотвратить колебания источника питания. (2) Один трюк, который вы можете сделать, это не включать/отключать контакты GPIO одновременно, а последовательно делать паузу 1~10 миллисекунд один за другим , поэтому большой ток будет во много раз меньше.
Вы также можете заметить, что я использую вольтметр для контроля источника питания, полипредохранитель и плавкий предохранитель для защиты от перегрузки по току, а также красный выключатель питания, который является чем-то вроде «ручки мертвеца машиниста железнодорожного поезда». Всякий раз, когда я чувствую запах горящего пластика, или поднимается белый дым, я щелкну красным выключателем так же быстро, как молния, как парень, сражающийся в кунг-фу. youtube.com/watch?v=jhUkGIsKvn0 :)
Я не любитель кунг-фу, и мои руки дрожат, почти всегда слишком поздно, чтобы среагировать, когда я вижу белый дым или запах пластика. Поэтому я часто жарю чипсы. Я просмотрел свой лабораторный отчет и нашел один жареный MCP23017 (не спрашивайте меня, сколько MCP23017 я жарил!): raspberrypi.org/forums/… . Ваше здоровье.
Спасибо! Но моя схема не должна иметь большого потребления, все 16 контактов потребляют аж 0,25мА. Я боюсь, что сумасшедшее потребление звучит как внутреннее короткое замыкание (зажимные диоды MCP или TRT, которые не должны включаться, но они включаются, и GND-VDD замыкается). Но вопрос был: зачем или для чего это делается? Поэтому люди предложили мне решить проблемы с технологией CMOS.
Пара коротких вопросов. (Q1) У вас есть другая проводная макетная плата для тестирования подкачки? (Q2) У вас есть более одного чипа MCP23S17 для тестирования подкачки? (Q3) Вы когда-нибудь запитывали MCP23S17 или другие устройства напряжением 5 В и подключали контакты Rpi GPIO к этим устройствам (может вызвать зависание)? (Q4) Есть ли у вас полная схема, показывающая все возможные соединения, например, какой GPIO может подключаться к какому GPIO или заземлению. (В5) Есть ли у вас полный список программ или диаграмма иерархии функций, показывающая, какие функции относятся к MCP23S17?
Я понимаю, что вы можете не захотеть публиковать свой список программ, потому что это конфиденциальная информация компании. (Q6) Можно ли переключиться на SPI 23S08 или I2C MCP23008 или MCP23017. Я играл с MCP23x08 и MCP23x17, потому что я часто где-то застревал и не мог найти причину, поэтому я переключаюсь с I2C на SPI или обратно, просто чтобы проверить, не пропустил ли я что-то важное. (Q7) Возможно ли перейти на ШИМ-контроллер I2C PCA9685?
Извините за длинный список предложений и опечатки. Просто мысли вслух, мозговой штурм. Кстати, еще одна вещь, просто чтобы повторить, если у вас есть электростатический разряд или защелка, почти всегда результатом является мгновенная смерть, и ее невозможно восстановить. Таким образом, ваш случайный, прерывистый перегрев и зависание вряд ли будут запираться, но, возможно, связаны с программным обеспечением, просто дикое предположение, совсем не уверен. Удачи и ура.
И еще одно. Некоторое время назад я обнаружил, что контакты SPI моего Rpi3B+ сгорели, но все остальное все еще работает нормально. С тех пор я всегда тестирую две шины SPI одновременно, так что вы видите, что я тестирую SPI, 00, 01, 10, 11, 12 одновременно. Я обычно начинаю с SPI 0,0 и для устранения неполадок переключаюсь на SPI 1,0, чтобы сравнить и сопоставить. Возможно, вы также можете попробовать SPI 10, 11, 12 или даже SPI 3, 4, 5 и т. д.
Я не понимаю, почему ваша общая нагрузка MCP23S17 составляет всего 0,25 мА. Управляет ли он ULN2803A, который, в свою очередь, управляет реле для асинхронных двигателей переменного тока AC220V с большим током? Тогда у вас могут быть огромные скачки уровня, и вам нужно будет использовать диоды TVS для их подавления. Вам также может понадобиться использовать оптическую изоляцию, чтобы предотвратить передачу скачков напряжения/шумов через линии заземления. Тогда вы можете рассмотреть возможность полной оптической изоляции на стороне реле/твердотельного реле. См. этот пост для более подробной информации: electronics.stackexchange.com/questions/505318/… . Ваше здоровье.
Привет @ tlfong01, мы используем 3,3 В для питания MCP. а) нет, не знаем. б) нет, у нас только один и он на 3,3В. c) Нет, контакты VDD Raspberry Pi подключаются до подачи питания на все. Таким образом, не замечено, что перегрев появляется через несколько часов после того, как он нормально работает без остановки выполнения управляющей программы. г) д) Полная схема - это то, что я загружаю. Провода подключаются во время исполнения так, как это должно быть в реальной работе. пользователи возьмут конец провода и наложат его на другие точки (которые получат входные провода через разъемы). Порт A = входы, ПОРТ B = выходы. Я постараюсь вскоре поделиться кодом Python.
Я использую функции воздержания высокого уровня из библиотеки с открытым исходным кодом MCP23S17.py. Насчет вашего потребления сомнения, я думаю, это очевидная вещь. 3,3 В/100 кОм = 35 мкА (внутренняя подтяжка = 100 кОм). Поскольку выходные нагрузки являются входами одного и того же устройства, общее потребление будет небольшим.
Большое спасибо за ваше разъяснение. Есть еще некоторые вещи, которые мне нужно уточнить, например. ток 3,3 В/100 кОм = 35 мкА . У меня есть ощущение, что у нас могут быть сильные разногласия здесь. Думаю, мне нужно хорошенько подумать, прежде чем излагать свои аргументы.
Небольшая заметка об электростатическом разряде и блокировке. Вы можете прочитать Ref A1.5 в свободное время. Хотя ничего срочного или импортного. Эта статья полезна для меня, потому что я знаю только, возможно, только 20% всей картины или головоломки об ESD и Latch up BTW, я оглядываюсь на ваши старые комментарии и думаю, что вы, возможно, читали подобные статьи и поэтому были видеть 50% и более изображения. Хороших выходных. Ваше здоровье.
Спасибо @ tlfong01, что вы имеете в виду под Ref A1.5? Это название статьи? Я потратил несколько дней, пытаясь воспроизвести срабатывание защелки, но оно больше не возвращалось, даже во время сильной грозы, и ничего плохого не произошло. Я использовал источник Raspberry, но проблема не возникла. Я поставил осциллограф на Vin, чтобы посмотреть, падает напряжение или нет в какой-то момент. Но и этого не произошло. Единственное, чего я не делаю, так это не трогаю провода руками. Может быть, когда я держу прото руками, Вин провода испытали какое-то отсутствие контакта и поэтому у Вин были глюки.
Мне нужно увидеть немного больше и попробовать с прикосновением к проводам. Это мой следующий шаг. Мне нужно посмотреть, упала ли Вин, когда срабатывает "защелкнуть". Но я также прочитаю документ, если найду его. Спасибо.
@Eugenia Suarez, Просто быстрый ответ. (1) Извините, «Ref A 1.5» — это опечатка, в моем списке литературы следует читать «A.15». (2) Я думаю, что «запирание» похоже на лавину снежной горы или на то, чтобы сломать спину верблюда последней соломинкой. Вы не сможете обнаружить поломку триггера или ножки (разрыв mos-перехода внутри чипа), пока не станет слишком поздно. (2) Например, если вы соедините контакт GPIO Rpi с последовательным резистором, скажем, даже 10 МОм на 5 В, ток потребления на контакте GPIO может быть очень маленьким, но для разрушения соединения не нужен большой ток, это маленькая «трещина», которая расширяется до большой катастрофы.
Или вы можете попробовать следующее: «Семь шагов отладки — @Tony Stewart Sunnyskyguy EE75»: electronics.stackexchange.com/questions/516359/… . (1) Исследовать (2) Измерить все, что имеет значение (3) Сравнить со спецификациями компонентов (4) Продолжать до появления ошибки (5) Проанализировать (6) Исправить (7) Проверить, если нет Повторить. Хороших выходных. Или попробуйте мой ленивый парень по устранению неполадок один и только один трюк по устранению неполадок. Удачи и ура.
Однажды я играл с игрушечным счетчиком Гигера для любителей, генерирующим более 2 кВ. Возможно, это может создать для вас статический электрический заряд. Или просто EMI, не уверен: Refs 1: Как искра постоянного тока может создавать электромагнитные волны? electronics.stackexchange.com/questions/517219/…
+1. Хорошая деталь. || Re «… шансы заразиться вирусом ЭСР очень и очень малы». -> Современные ИС, как правило, менее подвержены повреждению от электростатического разряда, чем в «старые добрые времена», НО ЭСР все еще может быть проблематичным в некоторых средах. Можно «повезти» и не осознавать этого, а смена обстановки может нанести ущерб. Использование, например, листов бутилкаучука (используемых для кровельных покрытий) в качестве коврика для стола и еще более дешевого внешнего упаковочного листа обеспечивает столешницу с низким уровнем электростатического разряда. Ковер может быть неприятным - может помочь коврик из бутилкаучука. (Давным-давно у нас был очень большой процент отказов EPROM, которые, как выяснилось, были вызваны электростатическим разрядом.