Защита микроконтроллера от внешних наводок.

В общем возникла потребность считать импульсы со считывателя, который находится далеко от микроконтроллера. Длинна линии внушительная и может достигать до 300 метров. Причем к МК подлючено до 18 таких считывателей, которые находятся в разных местах. Получается, есть у нас плата с нашим МК. К плате приходит нехилый пучек кабелей, которые проложены неизвестно где и неизвестно как.

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


Как видим на линии всегда дежурит 5 вольт. Как только человек поднес ключ, считыватель начинает посылать код ключа по протоколу Wiegand26. При этом провал импульса может быть от 20 до 200 мкс.
В ключе 26 бит информации. На самом деле у считывателя 2 линии данных. Но это не суть. Считыватель начинает подсаживать линию на землю. Ну и МК должен посчитать эти импульсы. Вот созрела такая схема защиты из супрессоров и диода шотки. Почему шотки? Быстродействие то у него побыстрее будет чем у обычного.

Вопрос в зал:
1. Достаточно ли защиты которая на схеме?
2. Есть ли у кого идеи, как улучшить, модернезировать защиту?

Нарыл промышленный контроллер доступа, работающий так же по Weigand26, но там плата 4х-слойная. Разобраться что куда идет, тяжко. Но там вроде видны супрессоры, резисторы. Оптопар нету.

Комментарии (118)

RSS свернуть / развернуть
Для связи на больших расстояниях, да еще в условиях наводок используется или витая пара с развязкой или токовая петля. Без развязки наводки по сигналу могут дойти до нескольких вольт. Насчет защиты: супрессор спасет контроллер, вот только не факт, что ошибок не будет.
На плате этой точно нет развязки? Может емкостные изоляторы?
0
Для Weigand витую пару не рекомендуют. К тому же жилы там тонкие. На большую длину надо кабель 0.8 сечением где то. А почему должны быть ошибки? Из-за емкости супрессора?
0
Не могу спорить насчет витой пары, но тогда настаиваю на развязке. Ниже писали про адм485, хотя как его прилепить к вейганду, тоже сразу не сказать. Лучше просто пару оптопар или каких-нибудь iso722x. Или отвязывать контроллер с линией от интерфейса, но тогда и питание надо развязать.
Проблема будет снята, так как земля будет прыгать вместе с сигналом и логический уровень сохранится. почему иначе будут ошибки? Вы передаете низкий уровень, а прилетает помеха положительная. Супрессор ее ограничит, но на уровне… какой там у него порог. В общем, нуля никак не будет. Напротив, отрицательная помеха будет класть линию на землю и создавать ошибочные нули
0
См. схему ниже. Как то так будет.
0
ИМХО, надо как минимум резистор между сапрессором и линией.
0
  • avatar
  • Vga
  • 27 июня 2013, 18:17
Интересно узнать — зачем?
0
Ну надо же ток через сапрессор лимитировать… Хотя не уверен, потому и «ИМХО».
0
Вы не уверены, что ж…
Важным качеством таких параллельных защит как раз и является их низкое сопротивление. Если ставить токоограничивающий резистор, то в линию непосредственно перед саппрессором. (Будь то разрядник, стабилитрон, диод Шоттки, варистор или современный полупроводниковый саппрессор.)
0
Если ставить токоограничивающий резистор, то в линию непосредственно перед саппрессором.
А чем этот вариант отличается от предложенного мной?
0
Если что, я предлагал вставить резюк между входной клеммой и точкой соединения сапрессора и входа МК, а не последовательно с самим сапрессором.
0
А, значит, я неправильно понял ваше выражение «резистор между саппрессором и линией». Значит, резистор в разрыв линии до подхода к саппрессору. Тогда верно. Но этот резистор необязательно ставить.
0
Вот здеся тема про защиту RS485 линию. Там супрессоры на схемах так стоят без резисторов. Значит идея рабочая. И емкость же вроде не влияет на передачу данных.
0
Сапрессоры проектируются с минимальной емкостью, как раз, чтобы не влиять на линию пока все в порядке.
0
Вам нужно защититься от перенапряжений по входу или от ошибок в данных? Это задачи разного класса.
Или вам нужно «и того, и другого, и можно без хлеба»?
0
Нужно и то и другое. Смысл от устройства, если оно защищено, но принимать адвекватно данные не может? Без защиты тоже толку мало. Поэтому и то и другое, ну а хлеб как получится. Кстати очень даже интересная мысль что это задачи разного класса. Возможно совместить?
0
Видите ли, есть несколько классов или уровней защит.
Например, чтобы при близком разряде молнии ваше устройство не взорвалось, не обожгло людей и не подожгло дом.
Второе, чтобы контроллер не выгорел, а хотя бы просто пересбросился.
Третье, чтобы не было ни одного ошибочного бита в данных.
Скажем, вот ваши саппрессоры никак не помогут правильной передаче данных, а, скорее, защитят от выгорания микроконтроллера или пожара в здании.
0
Диод шотки стоит оставить или резистора хватит?
А как можно в данном случае уменьшить ошибочность данных? Я так понимаю что супрессор никак не ухудшает ситуацию. Его ж сопротивление очень велико когда напруга ниже предела срабатывания.
0
Нет волшебной пилюли от всех болезней. Разные уровни задач решаются разными средствами.
Могу порекомендовать кое-что почитать на тему физической защиты устройств:
Барнс Дж. Электронное конструирование: Методы борьбы с помехами = John R. Barnes. Electronic System Design: Interference And Noise Control Techniques. — Prentice-Hall, 1987. — Пер. с англ. — М.: Мир, 1990. ISBN 5-03-001369-5 (рус.), ISBN 0-13-252123-7 (англ.)
Некоторые вопросы использования газоразрядных приборов для защиты линий Ethernet.
Классификация и испытание грозозащит.
Диодная защита.
Защита данных от ошибок решается правильным выбором интерфейса, например RS-485 или Ethernet+TCP/IP, и программным декодированием и исправлением ошибок.
+3
Заберу в защёчные мешки, пригодится. Спасибо.
0
Если гшоворить конкретно о виганде-26, то от ошибок его защищают два контрольных бита и слоупочность интерфейса (позволяющая фильтровать помеху просто по продолжительности).
0
Дополню книги по теме помех:
Henry W. Ott Методы подавления шумов и помех в электронных системах

Книги Барнса и Отта (как говорят старожилы) были единственными в СССР, которые описывали проблемы и методы борьбы с помехами
+3
Книга Барнса у меня есть и в бумажном виде, и в электронном, а вот Отта не было ни в каком. Теперь есть. Спасибо.
0
Кое-что на тему защиты от помех есть у Хоровица и Хилла в «Искусстве схемотехники». Для аналоговых схем: т. 2, с. 72—82, для цифровых: т. 2, с. 219—233.
0
А еще надо перенести эту запись в личный блог.
0
Перенес. А про защиту что скажешь?
-1
Я бы взял RS485 с развязкой, например ADM2582 — в ней есть встроенный DC/DC и эта самая гальваноразвязка.
0
Ты имеешь ввиду перед пинами МК поставить ADM2582? Передача данных только односторонняя, от считывателя к МК.
0
Да, на одной земле находится МК и половинка ADM2582, на второй земле — дифференциальная линия. Если передача односторонняя — тогда половина микросхемы RS485 будет стоять без дела, ну и что.
0
В таком варианте к каждому считывателю придется ставить преобразователь виганд-рс485. Так ли это надо, если и сам виганд рассчитан на 150-250м (согласно википедии)?
0
Ну тогда ставим трансивер «виганд» и все довольны? :) Такого же нет, я так понял, вот и предлагаю RS485.
0
оптопарой
0
присоединяюсь к вопросу выше — оптопары не рассматриваешь в принципе? вообще говоря, такое решение довольно стандартно. для 20мкс провала должно хватить даже убогой PC817C. а по деньгам — так, наверное, и подешевле будет:) зато, если транзистор оптопары поставишь непосредственно около МК, со стороны считывателя сразу получаешь дубовую линию связи, как с точки хрения помехозащищенности, так и с точки хрения гальваноразвязки.
0
Я вот тоже подумал, опторазвязка чуток дороговата, но начиная с некоторого порога становится очень выгодной.
0
камрад, да где ж дороже-то?:) тут ведь не надо охеренно шустрых оптронов, можно всё слепить из говна и палок:) а так — у нас на работе, например, где сигналы довольно тормозные — везде оптопары стоЯт (РС817С), ибо в воздухе постоянно чувствуется зАпах 10кВ-товых наводок от высоковольтных емкостных накопителей:) и надо сказать, от наводок они весьма неплохо спасают
0
О, ну так и отлично! Так и флаг им в руки, особливо там где 10 кВ наводками пахнет! Потому я и говорю, что очень быстро опторазвязки становятся выгодными.
0
очень быстро опторазвязки становятся выгодными

ну, тут не поспоришь, да:)
0
pc817 не спасет от 10кВ. Надо делать на отдельных светодиоде + транзистор с соответствующим зазором. До идеи не шибко дороже выйдет, но вот попариться с изоляцией (свето и токо) прийдется.
0
речь не щла о 10кВ, попадающих в кабель. речь о мощных наводках, которые появляются в момент разряда на низкоомную нагрузку батареи конденсаторов, заряженных до 10кВ. если б 10кВ было непосредственно в кабеле — там только с выбором марки прОвода была бы веселуха:)
0
оптопары не рассматриваешь в принципе?
Ну почему же, рассматриваю. Просто на фото выше в пром. контроллере нет ничего такого. Хотя это не означает что это правильно и надо этому следовать. А какую бы ты схему использовал для моего случая?
0
А какую бы ты схему использовал

дык — известно какую:) или такую (инвертирует сигнал):



или такую (не инвертирует):



номиналы резисторов можно пересчитать под конкретный дывайс, плюс если уж нужно — навешать дополнительной защиты на кирпич:)
+1
плюс если уж нужно — навешать дополнительной защиты на кирпич:)

Извини не понял, это как?
0
Что есть кирпич?
0
кирпич — от слова «камень», т.е. МК:)
0
IMHO, картинка «A3» — это лучшее, что можно предложить. Ну разве что супрессоры добавить с резюками на входе.
0
Сигнал тащить к контроллеру ПАРОЙ линий. На землю девайса не расчитывать и не подключаться к ней, как на второй схеме.
0
на второй схеме вся «земля» (это которая треугольная) представлена на показанном рисунке:) по сути — это то же самое, что и на схеме «А3», просто не захотелось делать «паутину» из проводников на рисунке:)
0
точно, был невнимателен — не разглядел, что там разные «земли» есть :)
0
На землю девайса не расчитывать и не подключаться к ней, как на второй схеме.
К сожалению так не выйдет ибо сами считыватели питаются от контроллера. Земля как ни крути будет общая. Ну и + питания тоже общий. Вот как то так выйдет.
0
Если считыватели потребляют мало — есть специальные микрухи гальванической развязки сигнала вместе с питанием. Как раз для таких случаев. Я в своё время делал такое для удалённого датчика тока, который сидит на высоковольтной линии.
0
потребляют около 100мА, много?
0
А что за микрухи? дорогие?
0
разные ADUM1201, ISO7221 и т.д.

глянь электрическую почту — я тебе пример схемы скинул
0
разные ADUM1201, ISO7221 и т.д.

хотя, стОят, конечно, недешево:)
0
Хорошая идея но не подходит ибо, считыватель на 12 вольт, а на эти микрухи ADUM1201, ISO7221 можно подавать только 5V.
0
да не, идея, прямо скажем, не фонтан (для твоего случая) :) высланная схема — она просто для иллюстрации, какие чипы и пример включения:)
0
Ну да я понял, кстати схемку я доделываю, скоро вышлю для рассмотрения.
0
Стоит заметить, они ориентированы на высокоскоростные сигналы. Дорогие и всего вольт на 500 (по крайней мере те, у которых конденсаторная изоляция, насчет индуктивных ADUM не знаю, но вроде тоже не 3кВ, как у оптопар). Для столь тормозного интерфейса, как виганд их использовать все равно, что из пушки по воробьям.
0
ну так и я о том же:)
0
А не надо в такой схеме добавить что-то для уравнивания (ну или лимитирования разности) потенциала земель?
0
Земли и минус питания?
0
хрен знает, никогда ничего не предпринимали. да и зачем, казалось бы?:) имеется в виду — если разность потенциалов земель не превышает пробивного напряжения оптопары.
0
Ну если они изолированы — чтобы, например, из-за статики не накопилось выше 3кВ между землями.
ЕМНИП в эзернете принимаются меры, чтобы уравнивать потенциалы по разные стороны от трансформатора — вроде обмотки со стороны гнезда подтягиваются резисторами на землю.
0
из-за статики не накопилось выше 3кВ между землями

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

Такая схема (особенно если не ставить шоттки) не защищает от подачи на линию 12 вольт, например, потому что сапрессор начнет срабатывать только на 7-8 вольтах и то неторопливо, и успеет сдохнуть все остальное (я пробовал подавать даже 220 в системе с rs485 — у восстаналиваемого предохранителяя (включенного до P6KE) ноги красиво летали по комнате, а если подать 20 вольт — сгорало все остальное нафиг).

Но это все от подыхания электроники защита — помехоустойчивости оно не добавит ВООБЩЕ никак.

Правильная схема должна быть дифференциальной и, в идеале, гальванически развяязанной. Оптопара с мелочевкой обвязки:
— проще и стабильнее добывается, чем конкретные шоттки и сапрессоры в нужных корпусах (боже упаси ставить туда SMD сапрессоры или вообще микросборки для USB). Подозреваю, что стоить будет тоже сравнимо.
— за счет дифференциальности линии наводки идут на оба провода и мало сказываютсяя на сигнале
— за счет большого диапазона тока для оптопары (от тока только быстродействие зависит по сути) можно сделать универсальный 5-12 вольт интерфейс
— гальваническая развязка позволяет не париться на тему «в цехе отгорела земля, остановились станки и по всему предприятию не работают двери, потому что через эемлю пошла фаза на контроллер дверей, а через него на все остальные двери и все сгорело». Вообще, идеяя кидать землю хрен знает куда за пределы своего изделия — бяка и фу (если только мы не уверены, что с той стороны «сухой контакт»).

Короче, бери оптопару, делай токовую петлю и не парься.
Только не надо надеяться на «нафига мне подтяжка транзистора на массу/питание, у меняя pullup/pulldown в порту есть». Нету его практически, с внешним резистором подтяжки больше тока будет кушать, но быстродействие возрастет на порядок, да и помехоустойчивость будет получше.
+4
Спасибо очень дельные мысли.
Только не надо надеяться на «нафига мне подтяжка транзистора на массу/питание, у меняя pullup/pulldown в порту есть».
С эти полностью согласен, я всегда внешнюю подтяжку ставлю, это даже не обсуждается.
+1
Вообще, если по уму — то тащить 5 вольт на 100-300 метров это не правильно. Работой со считывателем должен заниматься локальный контроллер с локальным питанием. А дальше уже данные пускаются по нормальному интерфейсу, предназначенному для передачи данных по длинным линиям. Из опыта работы со считывателями и СКУД — максимум считывателей, который имеет смысл вешать на 1 контроллер — 4 штуки и то в крайнем случае (допустим для обслуживания 2х рядом стоящих турникетов). Но с точки зрения надежности системы в идеале 1 контроллер на одно устройство. Заводить весь охранный кластер на 1 контроллер — это перебор.
0
* 1 контроллер на 1 устройство — я имел ввиду 1 контроллер на 1 точку прохода (2 считывателя)
0
Ну предположим (все чисто условно) в здании 50 дверей. На каждой двери стоит такой считыватель с локальным контроллером. Если допустим какая нибудь дамочка потерял ключ, то надо с ноутбуком к каждой двери ходить и удалять ключ? Так к концу 50ой двери настроение навряд ли будет бодрым. Через пару часов дамочка нашла ключ, опять все 50 дверей обходить? А так у тебя один контроллер который контролирует все. Зараз базу данных обновил и дело в шляпе. Так как у главного контроллера есть USART ы, то можно вообще его сетевым сделать. В офисе сидиш попердывая, кнопочки нажимаешь на ноутбуке и все. По сети его загружаешь новыми ключами и медленно кофе через зубы цедишь. Локальный контроллер ИМХО удобно когда 1-3 двери, но если дверей вагон?
0
Локальный контроллер с сетевым режимом. Пусть будет вам одна централизованная база, но и каждый контроллер имеет свою копию акетуальных для него данных.
Это необходимо так как:
1) централизованная обработка ключей (та дамочка потерявшая ключ — бродкаст на все дочерние устройства о анулировании ключа).
2) каждое помещение должно иметь возможность работать автономно (выход сервера из строя, сплит сети — из за пожара ли или ещё чего).
3) Хоть здание у вас и единое, но комнаты его всё же индивидульны. Вам разве понравится, если в вашу квартиру сможет заходить дворник/сантехник/электрик только потому что он прикреплен к вашему подъезду? Где гарантия что он не спиздит/сломает что-нибудь? Как вы потом докажите что это он?

Таким образом идеально локальный контроллер на помещение, и объединение их в сеть с центральным блоком. Где понадобится изоляция — ставится запрет на сеть.
+2
2) каждое помещение должно иметь возможность работать автономно (выход сервера из строя, сплит сети — из за пожара ли или ещё чего).
В моем случае это все не актуально. Главный контроллер он один на 18 дверей. Компьютера как сервера как такового вообще не будет. Если надо изменить базу данных о ключах, то либо ты подходишь с ноутом к самому контроллеру и загружаешь за раз все изменения. Либо если сделаю контроллер сетевым то с офиса (но останется возможным и локально если вдруг сетка сдохнет и т.п.).
3) Хоть здание у вас и единое, но комнаты его всё же индивидульны.
Не вижу проблемы. В контроллере на каждый считыватель будут прописаны свои ключи + еще и временные зоны на каждый считыватель. Так что дворник/сантехник/электрик сможет войти только в ту дверь в которую пустит его контроллер и то только в установленное время.

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

Но самое интересное вовсе не это. На фото в статье это контроллер доступа NSTAR всего на две двери. Такая шняжка стоит 700 евро. 700 евро за две двери не жирно ли? Меня лично жаба душит со страшной силой. Правда к контроллеру еще прилагается трансформатор, и ящик ужасного качества. Ну и очень кривой беплатный софт. Который всех уже достал. Да и контроллеры глючноваты. Навороченный до ужаса, а толку мало. Я уж лучше сделаю 10 контроллеров доступа на Atmega1280 на 18 дверей в контроллере, стоимость всех этих 10 контроллеров будет меньше чем одного этого Nstara. Даже если в год будет лететь по одному самопальному контроллеру, замена выйдет дешевле чем покупать один на две двери за 700 евро. Понятно что это крайний вариант. Поэтому сейчас я исследую вопрос чтоб плату сделать нормальную с опторазвязкой, чтоб проработала лет 10.
0
есть промышленные контроллеры стоимостью 100-150 баксов. причем сетевые. причем к ним есть готовое ПО. Если делать на самопале — распределенная сеть так же выйдет дешевле.
То что написано в паспорте это хорошо, и что wegand будет работать и работает до 300 метров — тоже хорошо. Но идеологически Ваш подход неверный. Не стоит забывать про старую пословицу: «Скупой платит дважды, а то и трижды». Дешево и сердито не бывает. Только одно из 2х.
0
UPD. Если не проблема сделать 10 контроллеров, то в чем проблема сделать 50 и объединить их сетью? И обязательно надо сделать нормальное комповое приложение для администрирования ключей и пользователей. Вы видимо еще не представляете, какой геморой запуск, настройка и сопровождение системы СКУД емкостью хотя бы 5 дверей и 50 человек пользователей. Про большее я вообще молчу.
0
Вы видимо еще не представляете
Как раз таки представляю. На 600 человек делал несколько лет назад. Но нормальное комповое приложение отсутствует. Ибо я не софтовик и передо мной такую задачу не ставили, сказали что так сойдет. Сейчас там один человек занимается всем этим. Не жалуется.
UPD. Если не проблема сделать 10 контроллеров
Всего навсего будет один контроллер в системе и все, зачем себе усложнять жизнь? Один контроллер и 16 считывателей, вот и вся система. Кстати где то я видал подобную коммерческую систему, там типа центральной материнки в которую втыкаешь платы. Сколько то плат воткнул, столько то дверей получил. На самом деле согласен, если есть комп с софтом, то это все упрощает жизнь бабушке которая будет вбивать ключи. Но в нашем случае все по другому. Компа не будет, софта тоже. Некоторое неудобство есть, согласен. Мы это осознаем, зато избавляемся от других головняков.
0
Ну, как говориться: хозяин — барин. Наше дело предложить…
0
Компьютера как сервера как такового вообще не будет.
Под сервером понимается сервер, а не ПК. Сервер может быть и на МК. Его задача — централизация управления, организация сети, осуществление доступа, предоставление данных и пр. Это то самое средство, которое позволит централизованно добавлять/удалять ключи для всех контроллеров доступа. А какими средствами будет реализована задача (МК, ПК, ПЛИС, роутер, мобильник...) не принципиально.
Тот же ноут, с которым будут подходить для обновления, тоже можно обозвать сервером, только недоступным абсолютную часть времени работы системы.
P.S.: Мдя. Определение сервера с вики было бы дать проще. Единственное, что там больше в сторону «компьютер».
+1
Собственно angel5a все правильно написал. для управления большими зданиями используется АРМ, который имеет все нужные базы данных, визуализацию зон доступа, добавление/удаление/администрирование пользователей и ключей. Все контроллеры подключаются к этому АРМу посредством сети (Ethernet, RS485, etc) и получают актуальную для себя информацию, которую сохраняют в своей собственной базе.
Да это удорожает стоимость оборудования и стоимость установки системы. Зато значительно упрощает и удешевляет ее дальнейшее обслуживание.
+1
Каждому свое. В данной ситуации мы решили избавится от компьютера, так как именно с ним (железом) и с ПО было больше всего проблем и головняков. Теперь вся база данных будет находится внутри контроллера. Кстати подобную систему я уже делал несколько лет назад. Правда контроллер был на 6 дверей, делал на Atmega16. Все контроллеры посадил на Ethernet. Всего 6 таких контроллеров объединил в сеть. Прогу для контроллеров тогда писал еще на асме. Данные, контроллеры по Modbus сбрасывают на прогу верхнего уровня MasterScada через OPC сервер Lectus. Но сейчас я хочу опторазвязку сделать, чтоб надежнее было. И всего будет один такой контроллер в системе. Не слишком сложно все.
0
Вообще, если по уму — то тащить 5 вольт на 100-300 метров это не правильно.
Так в паспорте написано к самому считывателю «максимальная длинна линии 100 метров» так почему не правильно то? А в фирме мужики которые занимаются этими системами мне сказали что до 300 метров будет работать если кабель хороший. 6 лет назад к контроллеру (который на фото) тащил кабель, длинна где то от считывателя до контроллера метров 150-200. До сих пор работает. Кабель KLMA 0.8x4.
0
Выход из-за печки:
Как пикейный жилет, я вот что надумал по поводу этого Weigand, про который только что нагуглил: Этот весьма низкоскоростной интерфейс возможно сам по себе помехозащищен, т.к. суть его — очень редкие сигналы 0-го напряжения на фоне запитанной 5V линии (будем считать, что запитана она хорошо и с запасом напруги, и никаких левых провалов напряжения на ней не бывает). Что представляет собой помеха-наводка на подобной линии, но с нормальным 0-м напряжением и напряжением сигнала, например 5V? Это как белый лист и на нем калиграф рисует сигнал в виде редких линий, а помеха, как упячко-мэн, набрызгивает кляксы и машет кисточкой с тушью периодически по бумаге. Но в случае Weigand — все наоборот — калиграф пишет редкие линии белой тушью по черной бумаге, но кроме помехи — она так и машет кисточкой с черной тушью. В данном случае вероятность помехи на порядок меньше, а может и больше. Кроме того, сигнал на не постоянно запитанной линии будет энергетически угасать по амплитуде + произойдет завал фронтов, а на постоянно запитанной линии(постоянно подпитанной энергией) с инверсным сигналом произойдет только завал его фронтов.
0
И что же вы нагуглили: Weigand или Wiegand?
0
Скопипастил название Weigand26 из самой статьи, но каким-то чудом google выдал мне это Wiegand :D

Я не понял какие там ужасные помехи/наводки у него на постоянно запитанных линиях и зачем ставить от этого TVS — его задача защитить от бросков перенапряжения или ESD. Кстати, TVS все ставят в таких случаях bidirectional, например народный SM712.
0
каким-то чудом google выдал мне это Wiegand
Ага, именно так, верно поправил.
0
Импульсы уширить до максимума(200 мкс), чтобы щели сигнала не слиплись на конце длинной линии, можно и расстояние между импульсами увеличить до 1000-2000 мкс и будет щасТЕ
0
в большинстве случаев считыватель выдает уже готовые к использованию импульсы и менять их длину — это переделывать весь считыватель.
+1
Если Вы имели дело с этим интерфейсом, что можете сказать?

Про этот Wiegand вроде написано, что он рассчитан на макс 150-250 м, и видимо, я подозреваю, по причине затухания и искажения сигнала на длинной линии, а не из-за каких-то «наводок». Кстати, там используются не согласованные линии? Резистор R1=1K, хотя он вроде бы должен быть ~ Z(волнов.сопротивлению линии) =80..150 Ом.

И зачем, вообще, диод Шоттки — какова его функция?
0
давно это было… я электронную часть особо не ковырял, больше работал как установщик готовых решений. Надо было как-то обучить ему самопальный контроллер, вроде обучил. А так старался свести длину линии к минимуму. Длинные использовал только тогда, когда физически невозможно было установить оборудование ближе. Но все равно старался не выходить по длине за пару десятков метров.
0


Кстати, декодер такого сигнала сделать элементарно:

1. 2 формирователя сигнала на триггерах Шмитта отдельно для Data_0 и Data_1 на входе

2. Далее Data_0 и Data_1 поступают на 2-х входовый элемент И-НЕ, т.е. суммируются на нем и суммированный сигнал инвертируется — получаем сигнал синхронизации CLK

3. Кроме того Data_0 и Data_1 поступают на RS-триггер с инверсными(активными при лог 0) входами R и S. Data_0 поступает на вход R(Reset), а Data_1 поступает на вход S(Set). С прямого выхода RS-триггера имеем готовый сигнал DATA.

4. Синхронизация сигнала DATA происходит по спаду(отриц.фронту) сигнала CLK

5. Ну а дальше видимо: DATA на дискретный вход, а CLK на вход прерывания(по спаду сигнала) MCU
0
2 = исключающее или;
3+4+5 = заводим clk на прерывание и один из дат, например Data_1, налюбой пин. Элемент логики уже дает нам наличие данных только на одной линии, на тригер нам всё-равно.

1+2+3+4+5 = заводим линии на МК (там уже тригеры шмитта есть) и по прерыванию считываем данные. Если это STM8 то не важно на какие пины заводить — прерывание по порту. Если это AVR то поподбирать пины.

Это я к чему. Декодер, эквивалентный приведенному вами, можно сделать ещё элементарнее и проще. Но вопрос не в декодере, а в защите линии от помех. И если помеха наведёт нолик на линию, то ваш декодер её (помеху) молча проглотит, в частности не обратив внивания на нарушение временных параметров сигнала. Это контролируется на МК, но вы об этом ничего не сказали. Вот вам и «элементарно».
0
xor там не нужен — хватит и-не
0
Наводка пойманная на обе линии — ложное срабатывание. Замыкание в линии — ложное срабатывание. Разницы между ставить и-не или ксор со стороны схемотехники — нет, а со стороны защищенности есть.
Даже заходя со стороны что два нуля недопустимое состояние линии, которое не должно обрабатываться (ошибка должна быть сформирована). Ваш декодер его кушает и обрабатывает некорректно. ксор хотя бы не будет ложные данные формировать. Вот вам и элементарный декодер.
0
Не трудно показать, что xor тоже даст неверные данные от помех, например положительная помеха, которая превратит 0 на одной линии в 1, но естественно не изменит 1 в 0 на второй. Рисунок помех можно подобрать любой, чтобы помеха прошла и через xor, и через и-не, а в случае сильной помехи он, вообще, будет представлять собой некий сложный меандр, вместо полезных данных. Впрочем, xor имеет выигрыш в случае одиночной, одновременной 0-й помехи.

Суть и цель работы этого очень простого автомата(схематичеcкого алгоритма) не в защите от помех, а только в выделении из потока сигналов CLK и DATA. Помехозащищенность и достоверность информации должна проверятся на других уровнях или другими механизмами, как и тайминги сигнала и подсчет битов(CLK).
0
Кстати, о моем любимом XOR. XOR — это сцуть логическое умножение. А теперь вспомним, что такое функция взаимной корреляции. В вашем случае, это окно, движущееся во времени, и умножающее на себя тот кусок записи, который оказался в одном времненном промежутке с собой. Пол-дела сделано, а дальше суммируем все ненулевые биты — и вот она, АКФ (АКФ — это потому, что вы все время сворачиваете с одним и тем же ядром/ядрами). И вот, вигланд, или как его там, засылает одну из своих известных вам команд, а вы его передискретизируете и XOR и сумматором выдаете одну циферку. Потом ту циферку сравниваете с пороговым значением и принимаете решение — ноль или единица. Таким образом, соотношение сигнал/помеха растет как максимальная частота вигланда/число выборок на этот минимальный период. То есть, вам нужен однобитный АЦП — суть логический анализатор. При достаточной (в теории — бесконечной) частоте выборок вы можете класть на все помехи, лишь бы интерфейс не выбило и получите гарантию (так же 100% в теории) что команда будет считана правильно. Число таких выборок — это только вопрос производительности контроллера. В вашем случае хватит тупой меги ни 16 МГц.
0
Соврамши: «Таким образом, соотношение сигнал/помеха растет как максимальная частота вигланда/число выборок на этот минимальный период», из этого надо корень взять.

PS: почему тут нельзя редактировать? :) Если обосрался, то сразу по полной? :)
0
XOR — это сцуть логическое умножение.
Неправда ваша, дяденька, это сложение по модулю 2.
+1
Это называется «кто на что учился», дяденька. Расширяй кругозор, епт :)
-1
Не груби.
0
Бро :)
0
пруф будет?
0
пруф будет?
Что это?
0
Это сообщение адресовано не Вам.

П.С. пруф — подтверждение, доказательство сказанного.
0
Мне тоже очень интересно было бы посмотреть на такое АКФ устр-во/алгоритм.
0
Не понял, пруф чего? Если интересен подход увеличения соотношения сигнал/шум с использованием корреляционных методов, то можно мосмотреть примеры из цифровой КВ радиосвязи, там всякие протоколы обмена (MFSK, Olivia, Hellshreiber) поднимают сигнал из ничего. Из той же серии можно заценить кодек Баркера, но только там длина псевдослучайной последовательности короткая. Лучшее из последовательностей (ИМХО) — это дополнительные последовательности, по крайней мере в теории — в «хвосте» они дают чистый ноль.
Но вообще, тема с КВ мне не особо близка, для меня гораздо ближе тема с приемом слабых сейсмических сигналов. Тут традиционно пользуются свип-сигналами. Тут Остапа понесло :)
В общем, задайте вопрос конкретнее.
0
То есть, вам нужен однобитный АЦП
Мало что понял, но жутно интересно. Можете прояснить или простую схемку или алгоритм работы такого устройства описать кратко?
0
Имелось в виду конечно устройство описанного Вами декодера, естественно.
0
Устройство такое, точнее алгоритм:

1) Дискретизируем входной сигнал однобитным АЦП (компаратором) с периодом дискретизации dt.
2) Выход компаратора пишем в память.
3) С памятью непрерывно коррелируем ядро — набор единиц и нулей. Ядро не постоянно, оно меняется по нескольким наборам этих самых единиц и нулей — эти наборы соответствуют вашим командам.
4) Коррелируем, как XOR и берем сумму ненулевых битов. Тут я сделаю лирическое отступление :) ФВК (функцию взаимной корреляции) можно сравнить с двумя расческами, у которых обломаны зубья в произвольном порядке. За каждый такт работы компаратора, вы сдвигаете верхнюю, короткую расческу (ядро) и пытаетесь всунуть ее в нижнюю расческу (содержимое памяти). Как только расческа вставится — зубья совпадут с дырками — вы кричите «НАЛИВАЙ» или еще чего-нибудь :) Максимум ФВК будет находиться на данном временном дискрете dt.
5) Коррелировать надо с частотой, меньшей, чем время выхода одной команды/число всех команд — так успеем окучить всех.
0
После крика «НАЛИВАЙ» я сам налил и забыл уточнить :) Когда расчески вставились друг-в-друга, надо посчитать число совпадений целых зубьев с целыми и отсутствующих с отсутствующими. Если общее число таких совпадений оказалось равно длине ядра, то это чистый максимум ФВК. В реале такого, конечно, не бывает, за тем и юзаем эту корреляцию вообще. По-этому решение о срабатывании надо принимать на основе какого-то порогового значения ФВК.
Для лучшего понимания, советую провести небольшую лабораторную работу :)
1) Сгенерируйте в wav М-последовательность в звуковом диапазоне длиной 65536 элемента, скажем на частоте 1кГц, проще всего это сделать матлабом.
2) Запишите ее на свой сотовый телефон.
3) На компе включите микрофон на запись в каком нибудь звуковом редакторе.
4) Выйдите из комнаты за дверь и проиграйте запись на телефоне. Проигрываться будет 6.5 сек — это не ваш реальный временной промежуток для вигланда, это просто для лучшего заценивания возможностей метода :)
5) Вернитесь в комнату и сохраните файл в звуковом редакторе на компе.
6) В матлабе откройте записанный файл (wavread). Тут можно просмотреть его в виде графика — посмотрите и удивитесь, какая записалась каша (один шум). В этот момент вам может показаться, что ничего не получится :) Это подгон.
7) Скоррелируйте с ранее запасенным ядром, вашу запись. Корреляцию можно (и нужно) делать с помощью быстрого преобразования Фурье. То есть, перемножать результат БПФ от первичной записи с комплексно-сопряженным БПФ ядра. Тут надо помнить, что БПФ (кроме алгорима винограда, но в матлабе точно не он) работает только с числом элементов 2^n. Так что вам будет необходимо дополнить ваши эти два ряда нулями, так, чтобы длина обоих была 2^n (дополнить, короче, ну понятно, да? меньше брать нельзя).

(в матлабе, ну типа того):

M=[M;zeros(2^20-size(M),1)];
C=[C;zeros(2^20-size(C),1)];
Corr = abs(fft(M).*conj(fft(C))); %M — memory, C — core, .* — это в матлабе так обозначается поэлементное умножение, % — комментарий.

8) Постройте график Corr и приофигейте от резульата — должны получиться четкие иголки на уровне шума в те моменты времени, когда вы жали на телефоне кнопку play.
0
Блин, ну тут нельзя писать ничего конкретного, если не пишешь статью сам. Даешь редактирование!
От Corr ведь надо еще ifft взять — обратное преобразование…
0
Тут неточность. Одну из последовательностей надо взять с инверсией (а то целый зуб расчески ведь никогда не вставиться в целый).
0
Суть этого простого автомата в искажении данных путём сокрытия факта ошибки. Линии данных идут рядом, вероятность навести на них синфазную помеху выше. Вы же не будите обводить одну линию по правой стене, а другую по левой.
Если так жалко выводы внешнего прерывания, то следует сделать схему выделения фронтов и завести её через или на прерывание, а на простые пины завести обе линии данных.
Если так хочется иметь дата + клок, то следует добавить и третий вывод ошибки.
Скрывать ошибки только потому что так проще — это вредная практика.
0
Про xor я знал изначально, он часто используется в кодерах/декодерах последовательных сигналов(например M-II). Но для внешней схемы это потребует лишний корпус.

Кроме того, и это самое главное: с xor надо быть очень осторожным в чисто комбинационных схемах — не допустим перекос 2-х сигналов по времени на входе xor. В данном случае — синфазная 0-я помеха все равно наведется на оба провода, но с расхождение на передних и задних фронтах на 3-50 ns, т.е. в итоге мы получим, не профит, а 2 пичка(иголки), которые легко схавает последующая логика(в данном случае вход прерывания MCU), такие пички вообще не допустимы в линии CLK, которая по своей сути — формирует именно фронты для чтения DATA.

В случае «и-не» — ошибочный, пропущенный сигнал помехи будет в ширину помехи, т.е. значительно шире этих пичков(на 2-4 порядка).

Если завести CLK и на второй вход прерывания, но уже не по переднему фронту, а по заднему фронту(срезу) сигнала, то можно проверять тайминги(допустимую ширину) самих сигналов и промежутки между ними, т.е. офильтровывать их на основании допустимого шаблона и таким образом обеспечить помехозащищенность + их подсчет(==26) + контроль четности уже в готовом принятом 26-битовом слове.

P.S. «сделать схему выделения фронтов» — какая схема имелась в виду?
0
«сделать схему выделения фронтов» — какая схема имелась в виду?
Одновибратор что-ли?
0
Элементы, и/или/ксор имеются в сот-23-5.
«Пички» могут быть и в схеме на «или», там тоже надо ставить фильтры.
Выделение фронтов буффер + ксор. ну или передний/задний отдельно элементами и/или — принутительное формирование тех самых задержек из-за которых пички. Если взамен фронтов определять «удержание» (с кондерами например), то можно уменьшить время реакции схемы и получить 2 в одном (фильтр тот же).

Вообще разговор ни о чем.
0
Если взамен фронтов определять «удержание» (с кондерами например), то можно уменьшить время реакции схемы и получить 2 в одном (фильтр тот же).
В схеме не хватает именно фильтров на линиях Data_0 и Data_1, которые должны пропускать только 0-ые импульсы с шириной 20-200 мкс — это избавит от львиной доли помех-пичков и более длинных по времени помех, но менее 20 мкс, которые обработать и отфильтровать средствами MCU или просто не возможно, или трудно/затратно. Т.е. они сделают то, что MCU не под силу или просто разгрузят MCU, а с другими таймингами и шаблоном сигнала этого стандарта Wiegand MCU справится.

Такие фильтры возможно сделать на счетчиках, нужен еще внешний меандр для них с периодом 20 мкс/4(или 8) + еще рассыпуха. Главное не погрязнуть в этой 74_glue олдскульной логике в борьбе за идеал сверхчистого от помех сигнала на входе MCU. Тем более, что это обычно очень простая и дешевой платка в таких устр-вах.

Схемы Wiegand в инете, вообще, используют только 2 входа MCU напрямую и проверяют сигналы в циклах while do, и это все работает вроде, а ты уперся в эти помехи, что говорить тогда о наносекундных помехах.

В составе PSoC кроме MCU есть кое-какая программ.логика(что удобно в таких случаях), и то не много. Но технологии PSoC еще не стали стандартом MCU и относительно дороги.
0
В принципе, хватит и одного фильтра на выходе CLK(сразу после «И-НЕ» вентиля, т.к. он суммирует(объединяет) инверсные сигналы Data_0 и Data_1). После него отфильтрованные импульсы CLK длинной 20-200 мкс поступают на вход MCU, настроенный на обработку прерывания по срезу сигнала.

MCU проверяет допустимые пределы периода импульсов СCLK(300-3000 мкс) и устанавливает флаг ошибки, если он нарушен, а так же подсчитывает кол-во импульсов CLK(битов) в посылке(кадре).

Сигнал DATA с RS-триггера с инверсными входами на 2-х элементах «И-НЕ» поступает на другой вход MCU и значение с него считывается по прерыванию от сигнала CLK.

Затем выдерживается миним. межпосылочный интервал в 50 мс, он не должен быть нарушен(не началась новая посылка), кроме того аналогично подсчитывается его длина и перед посылкой(она должна быть >=50 мс) в начале алгоритма, иначе устанавливается флаг ошибки.

Если число битов равно 26 и проверка битов четности прошла успешно, то все ОК, иначе — устанавливается флаг ошибки.

Если в итоге флаг ошибки не установлен — посылка считается верной и ее данные можно использовать, иначе она бракуется.
0
А теперь поднимаемся вверх по истории и читаем:
1+2+3+4+5 = заводим линии на МК (там уже тригеры шмитта есть) и по прерыванию считываем данные. Если это STM8 то не важно на какие пины заводить — прерывание по порту. Если это AVR то поподбирать пины.

Это я к чему. Декодер, эквивалентный приведенному вами, можно сделать ещё элементарнее и проще. Но вопрос не в декодере, а в защите линии от помех.
1) Ваш декодер не имеет смысла, поскольку без него можно обойтись, сохранив целостность данных при этом.
2) Топик о помехозащищенности и ваш декодер является оффтопиком в данном контексте.
Но вы, конечно, можете продолжать защищать свое детище, а мне надоело :)
0
Я вобщем-то писал это все для себя, что бы потом не забылось :D

Из всего надо пытаться извлекать пользу: кто-то сказал про xor, и вовремя напомнил про синфазную 0-ю помеху — важное замечание, но как оказалось при внимательном рассмотрении — xor там и не нужен совсем, хотя легко можно было бы исправить и на xor или еще что усвоить полезное из сказанного — гордыня и высокомерие, я думаю, здесь не уместны!

Даже из сумбурного и мало понятного поста Baatezu можно извлечь пользу, в частности из фразы «нужен однобитный АЦП», под чем имелась в виду, как я понял(он не прокомментировал подробно свой пост), необходимость выполнять выборку зашумленного в/ч помехой сигнала с линии с частотой в несколько(4,8 и т.д.) раз большей частоты самого сигнала и одновременной некой Цифровой Обработкой этого Сигнала(возможно примитивной, ввиду ограничений 74_glue_logic design) для фильтрации этой в/ч помехи (см. пост ниже).

P.S. Иногда происходят интересные вещи — я давно видел здесь статью про Wiegand, но не удосужился даже тогда прочитать ее: зачем мне все эти карточки и этот Wiegand?

Сейчас же уперся в этом топике в этот примитивный и идиотский Wiegand, который скорее всего мне и не понадобится никогда. Тем более занявшись таким идиотским ныне занятием, как 74_logic.

It's the true radioljubitelski(rus.) fun & time killing
0
Такие фильтры возможно сделать на счетчиках, нужен еще внешний меандр для них с периодом 20 мкс/4

Намного проще(и меньше элементов) сделать такой фильтр на регистре:



DD1 531ТЛ3 (74HC132) 4 2-х вх. И-НЕ c ТШ входами
DD2 555ТМ8 (74HC175) 4 D-триггера
DD3 555ЛА1 (74HC20) 2 4-х вх. И-НЕ
DD4 555ЛА3 (74HC00) 4 2-х вх. И-НЕ

На CLKx4 надо подать меандр с MCU с периодом в 4 раза меньше, чем миним. период CLK, т.е. 20/4=5 мкс
Надо учесть, что здесь сигнал CLK, подаваемый на вход прерывания MCU, инвертированный, т.е. прерывание должно быть по фронту.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.