faqs.org.ru

 Главная > Электроника и компоненты >

EMBEDDED FAQ: Конструирование

Ответы на вопросы о конструировании

Вопросы по помехам

Q: Что такое EFT помехи и как с ними бороться ?
Q: Как имитировать мощные помехи ?
Q: Каковы требования для сертификации устройств ?
Q: Что еще почитать на эту тему ?

Вопросы по WDT

Q: Как использовать WDT ?

Способы повышения помехоустойчивости

Q: Зачем и в каких случаях нужно применять дополнительные меры по повышению надежности устройств на базе микроконтроллеров ?
Q: В чем отличие аппаратных и программных методов повышения надежности? Какой из этих методов важнее?
Q: От чего прежде всего защищаться?
Q: Какие есть программные методы защиты ?
Q: И насколько все это помогает ?

Вопросы по помехам

>Q: Что такое EFT помехи и как с ними бороться ?

A:Алексей Кузнецов
EFT значит electric fast transient. По воздействию они ближе всего к электростатическим разрядам. Стандарты на электромагнитную совместимость требуют чтобы при испытании на устойчивость к EFT к любому внешнему кабелю устройства через "конденсаторный" зажим (а для сетевых проводов - прямая инжекция) подавались импульсы с нарастанием 10нс, спадом 50нс, частотой 5кГц и имплитудой не менее 500В. Хорошо сконструированное устройство выдерживает EFT до 2кВ и более. Типичное устройство, сконструированное тем, кто с EFT ранее дела не имел, сбоит и зависает при EFT в 100-200В.

Конденсаторы по питанию от EFT не помогают. Помогает только правильное конструирование печатной платы и специальные меры предосторожности в схеме. Есть несколько простых "доморощенных" правил:
- Не пытайся "сопротивляться" EFT, помеха имеет такую амплитуду что проходит через все искусственные препятствия вроде дросселей и пр. Наоборот, надо ей "поддаться" и обеспечить обеспечить свободное прохождение - но МИМО чувствительных цепей. Например, если в устройство приходят два экранированных кабеля - соедини их оплетки вместе, а уж потом соединяй их с землей устройства. Или сделай "обводной" контур "грязной" земли по краю платы, и соедини его с "чистой" землей внутри платы в одной точке. Или сделай "обводной" контур земли вокруг "грязной" части схемы (которая генерит EFT, например реле и драйверы двигателей) и соедини его с чистой землей в одной точке.
- Все сигнальные цепи соединяющие "чистую" и "грязную" части должны иметь последовательно включенный резистор не менее 100 Ом. Задача резистора - не саму EFT остановить, а уменьшить ток, протекающий по чувствительной части и вызванный падением напряжения EFT помехи в "грязной" земле. Желательно еще с чистого конца этого резистора на чистую же землю навесить малую емкость пик так в 100. Эта емкость пустит в распыл остаток помехи. Вообще-то каждая нога у микросхемы уже имеет емкость 5-50 пик на землю, часто и этого бывает достаточно.
- Спектр EFT помехи настолько широк, что даже недлинные (несколько см) печатные проводники работают как эффективные передающие и принимающие антенны. Мораль: ставь упомянутые резисторы поближе к микроконтроллеру, а будет такая возможность - ставь два и более резистора последовательно и тем самым шинкуй проводники как капусту.
- Все свободные места на печатке заливай землей, но соединяй ее не абы как, а с умом (см. выше). Пользуй вместо односторонней платы - двухстороннюю, вместо двухсторонней - многослойную...

>Q: Как имитировать мощные помехи ?

A:Алексей Кузнецов

прихожу домой с работы, ставлю рашпиль у стены...

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

Ноне трудов великих нету кому хошь посёрфить в Интернете и нарыть десяток - другой загранишных машинок, специяльно всякими премудрыми хитрознатцами сотворенными на предмет испытания на помеху. Кои машинки попросче, кои позакрутистей, ин каждая поди фунт сухих рублей стоит, а то и поболее. А трудовым рублем зазря разбрасывать не следоват, лутше на него гостинцы дитю купить.

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

Много чего тут можно было б полезного в пример привесть, и релюшки самогенеряшшие, и пьзо-зажигалки от газовых плит приспособленные искру давать, и т.д. Одако ж по справедливости уделим внимание, братие, незатейливой, но жуть какой ядреной поделке из напильника. Для начала берешь изолируюший сетевой трансформатор, все ж какая-никакая а защита. Хорошо б ему еще фильтрок какой на вход присобачить, а то ведь как пойдет машинка помеху пускать, так в округе все приборы и протчие компунтели и коньки отбросить могут. Еще нужна индуктивная нагрузка, моторчик там, или ЛАТР, в обсчем чего под рукой будет.

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

Работать с ним так. Перво-наперво встаешь на изолирующий коврик, суешь одну руку в карман свой (обычно пустой и с дыркой, но енто к делу не отностится), и пока тестируешь руку из кармана не вынай, дабы ненароком ею за что не ухватиться. Ежели устройство проверяемое питание от сети получает то включаешь его во вторичную ентого изолирующего транса. Кладешь свое устройство неподалеку от напильника, включаешь сеть и начинаешь отверткой об напильник шваркать. ЛАТР икает, из-под отвертки искры летят, но бледные такие, посколь чрез индуктивную нагрузку ток невелик. Однако ж спектр у помех от искр от ентих - ого-го. И по эфиру машинка излучает, и в сеть пускает. А ежели ЛАТР помощнее - то машинка и форму сетевой синусоиды сбивает порой так что пересечение сети через ноль скачет как ошалелое на пару миллисекунд от свово законного месту. Ежели какой вентилятор заместо ЛАТРа пользовать то сеть не калечится, зато высокочастотные помехи бывают и покруче чем от ЛАТРа.

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

А уж на реальном объекте пахать все будет без сучка и задоринки.

>Q: Каковы требования для сертификации устройств ?

A:Алексей Кузнецов

смерть врагам империализма!

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

Как это спокон веков водится, тон всему задали спесивые англичане с немцами. Стали они бурчать: безобразие, мол, наделали тут разной электроники всякие пеньки неотесанные, радио стало нельзя спокойно послушать, все хрипит и завывает. Давайте, грят, мы им, неграмошным, хвост прижмем, введем такие законы чтоб из устройств их похабных грязь электромагнитная не выпирала никуда, ни в эфир, ни по проводам сетевым. И по этим законам коль нечистое устройство обнаружится, то с компании сразу штраф в тыщ в двести зеленых иль около, а с козла-менеджера который подписал это устройство к производству - хоть половину того, да зато с личного его, паскуды, счета, пущай знает почем фунт лиха. Тут хитрожопые с вопросами приступили - а ежели енто устройство не здесь произведено, а закуплено во всяких слаборазвитых странах, и на разработчиков-изготовителей их где сядешь там и слезешь? А ничего, грят им, мы тогда деньгу будем лупить с того кто енту мерзость в наших благодатных странах продает.

И навязали-таки трудовому народу эти злыдни законы свои суровые, наплодили стандартов столько что и в три дня не усрешь. Ввели их по всей Европе, а потом и другие страны стали примазываться, окромя, конечно, штатов, которым всякие европейцы - не указ. Контролировать требуют двояко: на частотах от 150 кГц до 30 МГц - контактным способом, а выше 30 МГц и до 2 гиг - антеннами разными навороченными.

По сетевым проводам так делают: ставят фильтр-нормализатор, он приходящие из сети побочные помехи глушит и создает для проверяемого устройства стандартную нагрузку по ВЧ, ом так в 50. Цепляют к сетевым проводам со стороны проверяемого устройства специально переделанный анализатор спектра, у которого селективность и квазипиковый детектор подогнаны под типичную характеристику обычного АМ радиоприемника. И смотрят где проверяемое устройство зудит более всего. И для бытового устройства требуют не более 66 дБмкВ (т.е. 2мВ на ентом сраном квазипиковом), а для устройства ВТ типа компунтеля дают послабление до 72 дБмкВ (т.е. 4мВ), причем проверяют и на фазном проводе и на нейтрали относительно земли. К любым другим железякам/проводам торчащим из устройства тоже цепляют анализатор и меряют помеху через согласующую цепочку, а уровень тоёй помехи должон быть кажись не более 80 дБмкВ.

С частотами ж выше 30 МГц прет,братие, чистая радиотехника: антенны, парализации и протчее колдовство. С внешними помехами злыдни вот чего удумали: сначала меряют уровень EMI при выключенном проверяемом устройстве, потом при включенном, а потом вычитают одно из другого. И вставляют каждое лыко в строку, не усредняют по спектру, а выбирают самый худший результат из намерянного и злорадно тычут его тебе в харю.

Развели по всем ентим странам тестовых лабораторий видимо-невидимо. Кои из ентой нечисти аккредитованные, кои нет, но у всех гонору много, и за полный тест тысчонку зеленых состричь не упустят. Вот суешь ты им деньги, представляешь устройство с инструкцией как пользоваться, они все это хвать - и в норку. А опосля вылезают оттеда и дают тебе свой сраный "репорт". Смотришь ты в его как баран, и только что и могешь уразуметь что, скажем не прошел ты по ентим законам бесчеловечным на таком-то тесте на такой-то частоте. И что теперь? Лезешь в устройство, подправляешь, делаешь кажись все путём. Но дальше-то чего? Опять идешь к кровососам, опять они тебя стригут как овцу, опять чего-то заваливается. И так можно деньги спускать почище чем в казино.

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

Сказка - ложь, да в ней намек, добрым молодцам урок.

A: Сергей Забелин

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

Вторая часть требований включает в себя два нормируемых пункта:
1) кондукция ЭМП в токопроводящие конструкции и линии связи (сеть, телефонная линия), меряется в микровольтах в диапазоне частот от 0.15 до 100 МГц (в некоторых случаях - до 30 МГц)
2)излучение РП в пространство, меряется в мкВ/м (то есть антенной) в диапазоне частот от 0.15 до 500 МГц (в некоторых случаях - до 30 МГц)
Конкретные цифры в зависимости от частоты установлены ГОСТом и определяются классом устройства - эксплуатируемое вне жилых зданий, в жилых зданиях и вблизи со служебными радиоприемными устройствами.

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

Что касается первой части требований (устойчивость к воздействию помех), то тут хуже. Требования сильно зависят от класса устройства, и бывает выполнить их проблематично. По устойчивости устройства делятся на 5 групп жесткости, первая - самая халявная, пятая - способна работать в условиях ядерного взрыва, видимо. Мне, максимально, удавалось достичь третьей группы:

Требования таковы:
1) Устойчивость к ЭМП, распространяющейся по проводам и проводящим конструкциям (разряд конденсатора на корпус устройства). Hапряжение по группам 500-1000-2000-4000-??? В. Длительность импульсов 50 мкс.
2) Похоже, но такое же напряжение подается в сеть электропитания (пачки импульсов наносекундной длительности). При этом обычно горят конденсаторы сетевого фильтра, и после этого устойство не проходит по уровню излучения в сеть :)
3) Те же пачки импульсов, но напряжение в два раза меньше, зато подается в сигнальные цепи (выходящие наружу, естественно). При этом горит все, что не защищено, всякие мелкопроцессоры ведут себя... Hу, понятно, как ведут.
4) Кратковременные многократные прерывания напряжения питания. Длительность прерываний по группам - 2-4-6-8-8 полупериодов 50Гц.
5) Длительные прерывания напряжения питания (10-50 полупериодов 50Гц)
6) Устойчивость к ЭМП, распространяющейся в пространстве (конденсатор 150пф разряжают на 330 Ом в воздухе, вблизи устройства). Hапряжение по группам 2-4-6-8-?? кВ (контактный разряд) или 2-4-8-15-?? кВ (воздушный разряд). Этот пункт обычно проходится легко.
7) То же ЭМП в пространстве, но не разряжают конденсатор, а устройство помещают в электромагнитное поле 3-10 В/м, в диапазоне 0.1-500 МГц. Это тоже легко, если устройство - не радиоприемник.
8) Еще вроде бы была имитация разряда молнии, подробностей не помню. Это как в пункте 2, но напряжение - несколько киловольт, зато импульс однократный.

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

>Q: Что еще почитать на эту тему ?

A: Алексей Кузнецов
Вот полезная серия статей. особенно Design Techniques for EMC: http://www.emc-journal.co.uk/archive1/


Вопросы по WDT

>Q: Как использовать WDT ?

A: Алексей Кузнецов

Применение WDT для отладки

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

Возможным исключением из этого правила являются плохо детерменированные алгоритмы и очень сложные машины состояний, реализованные в программе. Для таких случаев вполне разумно на каких-то этапах(!) отладки использовать статистические методы, то есть наделать много-много прототипов и гонять их в условиях приближенных к реальным. В таких случаях эмуляторов на каждый макет не напасешься, так что простые встроенные средства отладки с использованием WDT будут вполне оправданы. Правда, почти тех же результатов можно добиться применяя обычные (т.е. без участия WDT ) отладочные мониторы, ловушки и трассеры, но WDT добавляет к ним только одно (но важное!) свойство - вышибает программы из мертвых зацикливаний, тем самым гарантируя вывод накопленной отладочной информации.

Отдельно стоит вопрос отладки аппаратуры, особенно в тех случаях когда надо минимизировать железо (стоимость, вес и пр.) и приходится применять рискованные решения - такие как упрощенные источники питания, дешевые схемы сброса и минимальная защита от помех. В таких случаях опять приходится использовать реальные макеты устройств, т.к. к примеру эмулятор не везде засунешь, да и жалко если погорит... Опять же, вопрос - а в чем выгоды использования WDT в таких случаях?

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

Применение WDT для повышения надежности системы

Запущенное в производство и работающее на "объектах заказчика" изделие все же как правило еще имеет программные ошибки. Подноготная этого явления должна быть всем понятна, см., например, В.В.Липаев "Отладка сложных программ", М. Энергоатомиздат, 1993. WDT позволяет залатать такие программные дыры своеобразной "заплаткой". Логичным усилением функций "заплатки" будет добавка каких-то встроенных отладочных кусков (см.выше) - при условии обеспечения доступа к накопленной информации.

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

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

Вопрос о способах "правильного" применения WDT обширен. Во многом решение его зависит от того какие сбои ожидаются. Например, для случаев когда программа и железо вылизаны и тщательно оттестированы, наиболее вероятны будут устранимые сбои вызванные "невесть какими" причинами. В общем случае можно считать что такой сбой перебрасывает любой один триггер в противоположное состояние, будь то бит памяти, направление или содержимое порта, бит управления прерыванием или состояние самого WDT. Исходя из такой посылки становится очевидным что WDT не является "палочкой-выручалочкой" и не поможет исправить систему если она изначально была плохо продумана и сделана тяп-ляп. Можно указать на некоторые другие простые приемы повышения надежности систем:
- регулярное обновление содержимого регистров управления (не надейтесь что железо инициализированное при включении питания сохранит свое состояние через 10 лет круглосуточной работы)
- иммунность к "диким" значениям переменных (не ленитесь отрезать неиспользуемые биты - даже если значение переменных хорошо определено и "не может быть больше чем...")
- проверки, проверки и перепроверки (т.е. по сути - фильтрация помеховых значений)...
- и т.д.

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

Способы повышения помехоустойчивости

>Q: Зачем и в каких случаях нужно применять дополнительные меры по повышению надежности устройств на базе микроконтроллеров ?

A: Андрей Мозжевилов
Устройства на базе микроконтроллеров, как правило, не требуют вмешательства пользователя при работе. В отличие от персональных компьютеров, где сбой программы или аппаратной части может быть в большинстве случаев устранен достаточно быстро простым переключением питания, МК-устройства могут располагаться в местах, где нет обслуживающего персонала или затруднен его доступ. Очень часто такие устройства предназначены для функционирования в непрерывном режиме, в сложных условиях (большой диапазон температур, вибрация, разного рода помехи и т.д.). Поэтому к ним предъявляются более высокие требования к бесперебойной работе без вмешательства извне. Для повышения помехоустойчивости и снижения вероятности "подвисания" применяются различные методы, которые можно разделить на два типа - аппаратные и программные. Принятие дополнительных мер в конечном итоге увеличивает стоимость устройства и срок его разработки, поэтому использование тех или иных методов - прежде всего компромисс между требованиями, предъявляемыми к устройствам этого класса, себестоимостью и сроками, отпущенными на разработку.

>Q: В чем отличие аппаратных и программных методов повышения надежности? Какой из этих методов важнее?

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

>Q: От чего прежде всего защищаться?

A: Андрей Мозжевилов
Поскольку любое устройство, в состав которого входят интегральные схемы требует источника питания, который нельзя считать идеальным, то в простейших случаях, как минимум, нужно защищаться от сбоев, вызываемых провалами питающего напряжения. В зависимости от специфики и области применения устройства может существовать множество различного рода помех, для которых подбираются способы их ослабления. В любом случае нужно помнить, что нельзя создать устройство со 100% гарантией защиты от любых сбойных ситуаций, потому как существуют объективные причины, препятствующие этому: определенный процент брака применяемых элементов, далеко не нулевая вероятность ошибки в программе МК и т.д.

>Q: Какие есть программные методы защиты ?

A: Андрей Мозжевилов
Я WDT сбpасываю только тогда, когда yстанавливался флаг, что пpогpамма побывала в пpеpывании от таймеpа, отсчитывающего системное вpемя. Я всегда ввожy в пpогpаммy пеpеинициализацию UART и его таймеpа, если по каналy связи нет ничего вpазyмительного в течение некотоpого вpемени. Я иногда запpещаю все пpеpывания на опpеделенном кyске кода, хотя точно знаю, что именно то, котоpое тyт может помешать, в данный момент запpещено. Я ввожy в пpогpаммy пеpеинициализацию pегистpов напpавления/pull-up поpтов в основном цикле.

A: Владислав Балясов
Еще полезно в самом конце памяти поставить пеpеход на полную пеpеинициализацию, и туда же можно и неиспользуемые вектоpы пpеpываний пеpенацелить...

A: Сергей Королев
Всю свободную программную память заполняю rjmp $0 или аналогом. Еще - "многоступенчатый" сброс WDT, когда каждая критическая процедура или прерывание выставляют свой флажок и сброс WDT происходит только при отработке всех.

A: Сергей
Программе ПОЛЕЗHО периодически устраивать самой себе аппаратный RESET/RESTART. Это время может быть больше или меньше в каждом конкретном случае, но по любому, чрезвычайно полезно передвигать нулевую точку отсчета "вперед" всякий раз когда это возможно, как бы начиная "новую жизнь" :)

A: Александр Лушников
Если не поджимают лимиты, неплохо оpганизовать поpт, и выкидывать туда код, котоpый опpеделяет, из какой ловушки этот код выпал... Хоть пpимеpно вычислить кусок, котоpый сбоит. Только не теpять этот код по сбpосу... Пpи отладке замечательно, но и пpи pаботе не вpедно.

A: Дмитрий Кузнецов
Эти методы наиболее востребованы в "непрерывно работающих" и "ответственных системах". Поэтому сразу можно говорить об возможности не сильно экономить на производительности процессора и объемах памяти (немного перезаложиться). Принимаем, что система подвержена вредным воздействиям: (вероятностно) однократным сбоям (типа *** пролетело и ***) и возникновению неисправностей (дефект и/или деградация кристалла). "Искуственный излишек" производительности и памяти при этом используется для разного рода самопроверок.
Если устройство попадает в "экстремальные условия" (наличие вблизи сбоегенератора, деградация от времени или перегрева, проявление дефекта), то полезно даже увеличить вероятность ВЫЯВЛЕHИЯ такой неправильности. Короче, сделать сбои больше и раньше заметными. Hо не на основной задаче, а желательно на более ПРЕДСКАЗУЕМЫХ операциях.
1) Прогон одновременно с основной задачей тестовых операций.
Для тестовых задач следует задействовать реальные данные из основной задачи. Конкретно для проверки достоверности реальных данных.

  Пример: надо вычислить Z = X * Y
    T = X * Y
    T / X == Y (проверка)
    T / Y == X (проверка)
    Z = T
    T - Z == 0 (проверка)
Здесь 3 раза проверяется достоверность предыдущей операции. 2 раза - умножения и 1 раз - присваивания. Hесмотря на то что сама операция проверки может сбойнуть, вероятность одиночной ошибки намного выше множественных и проявятся они раньше.
Отметим, что проверочные операции не идентичны основным и следовательно даже если ошибки произойдут как при умножении, так и при делении, эти ошибки также не идентичны и вряд ли скомпенсируют друг друга (здесь предполагается, что обе операции абсолютно обратны, либо эта неабсолютность как-нибудь учитывается при проверке).
2) Перед каждой операцией со встроенной и/или удаленной периферией проверить (если возможно, считать состояние) ее установки и сравнить их с копией в памяти.
3) Периодически считать сигнатуру равномерно раскиданных участков ОЗУ заполненных псевдослучайным кодом. Также сканировать и ПЗУ (FLASH). Когда он "поплывет", то на случайном коде быстрее проявится, чем на больших массивах 0x00 или 0xFF. Случайный код больше похож на рабочие данные. Кто знает, вдруг сплошные 0x00 или 0xFF окажутся более устойчивы. А ведь нам нужно выявить эту "деградацию" пораньше. А для программной памяти следует использовать код, который бы с некоторой гарантией инициировал процедуру обнаружения сбоя.
4) Меры после обнаружения сбоя должны дублироваться. Типа сразу при выявлении взводить некий бит (зажечь светодиод). Тогда, даже если процедура будет не завершена, то ближайшая/штатная/внешняя диагностика должна его заметить.

A: Владимир Василевский
Как правило, любое устройство имеет несколько состояний, или режимов работы. Hапример: SetUp, Test и нормальный рабочий режим. Под влиянием каких-то причин программа может выскочить из рабочего режима в SetUp или Test, да и остаться там навечно. Hадо делать так, чтобы все вспомогательные состояния, кроме основного рабочего режима имели выход, например, по таймауту. И если таймаут наступил, логично будет сделать Reset системе.
Полезно также проверять корректность аргументов на входе в функции, если не корректно - пересброс.
Полезно также проверять указатель стека в различных местах программы - если он не такой, как должен быть - пересброс. Это говорит о том, что мы пришли в данную точку неизвестно каким путем.
Еще типичная ситуация: ожидание какого-нибудь бита готовности чего-то в цикле. Всегда надо иметь таймаут - защиту. Да и вообще писать следует так, чтобы ни в каких случаях ни при каких параметрах невозможны были бы бесконечные циклы.
A: Дмитрий Тимченко
Лучше всё это делать по прерываниям (если нужно минимальное время реакции) или по опросу в обработчике прерывания от таймера (если время ответа не так критично). Получается чуть сложнее, но надежнее и "правильнее". И никаких паразитных "ожиданий": готово? - делаем, нет? - идем дальше, проверим в следующем прерывании.

A: Алексей Бугров
Контpольнyю сyммy кода (CRC либо еще что) нyжно пеpесчитывать после Power-On-Reset и после WatchDog-reset'а. Тyт же пpедyсмотpеть пpовеpкy (если есть возможность) pаботоспособности и текyщего состояния аппаpатной части, не использyя пpоцедypы и подпpогpаммы основного кода.
Hеиспользyемые yчастки кода забиваются пеpеходами на Power-On-Reset-вектоp (а еще лyчше на вектоp WDT). Тyда же напpавляем все вектоpа неиспользyемых пpеpываний.
Контpоль стека лyчше пpоизводить. pазмещая его (если это возможно) в начале адpесного пpостpанства, дно выpовнять на адpес 2**х. В этом слyчае легко ловится его пеpеполнение (yказатель стал отpицательным), либо выход за пpеделы (накладывая маскy на yказатель). Можно pазместить стек в конце памяти, тогда пpовеpки дна и пеpеполнения бyдyт соответственно обpатные. Пpовеpки стека pазyмнее делать после входа и/или пеpед выходом из пpоцедypы. Пpи несовпадении yказателя пеpеход на вектоp WDT.
В обработчике WDT пpедyсмотpеть хотя бы пpимитивный анализ ситyации, возможно это позволит в некотоpых слyчаях обходить слyчайные сбои пpозpачно для системы в целом.

A: Кирилл Гайдученко
Часто сбой контроллера приводит к зависанию основного тела программы, при этом прерывания продолжают отрабатываться нормально... Можно организовать всю программу в качестве обработчика прерывания. При этом вся основная программа делится на кванты одинаковой длительности - например, по 100 мс. Кванты выполняются по прерыванию от внешнего источника или таймера. В каждом кванте выполняется специальный менеджер, который, сравнив контрольные суммы или другие признаки в ОЗУ до и после кванта программы, точно знает, когда произошел сбой и выберет решение - перезапуск или повторение шага... В случае сбоя в момент расчета будет то же самое - можно использовать пару-тройку флагов и после наступления прерывания/срабатыванния WDT просто произойдет перезапуск. Этот принцип реализован в Ultralogic (Прософт) для генерации управляющих программ для контроллеров Адам и др...

>Q: И насколько все это помогает ?

A: Александр Голов
Нельзя переоценивать все эти методы. Сколько я не беседовал с людьми, работавшими в реальных "safety critical" проектах, ничего другого кроме троирования ресурсов никто и слышать не хотел (я же пытался направить обсуждение на перекрётную диагностику). Аргументы были просты - легко придумывается пример единичного сбоя, который в другом варианте (кроме троирования) не распознаётся. Естественно, про какие-то там таймеры даже серьёзно разговоры не велись.

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

A: Владимир Клочко
Почти все обнаруженные сбои имеют первопричиной помехи по земле и/или питанию: неконтакт (или непропай, но это совсем грубо и из другой оперы), безграмотная разводка этих цепей, недостаток/избыток блокировочных конденсаторов, плохая реакция (звон/выбросы) источника питания на переходные процессы в сети или в нагрузке.
Обеспечить корректное (или хотя бы просто предсказуемое) поведение системы при не предсказуемой (не нравится - читай "отечественной") сети сложнее, чем обеспечить резервное (автономное) питание.


Дополнения, пожелания присылайте Алексею Владимирову, avlad@mailbox.riga.lv

Вернуться в раздел "Электроника и компоненты" - Обсудить эту статью на Форуме
Главная - Поиск по сайту - О проекте - Форум - Обратная связь

© faqs.org.ru