К вопросу о невозможном часть 3
Не так плохо, когда программа не работает и мы не знаем почему. Намного хуже, когда она работает и мы не знаем почему.
Очередная история в стиле Шерлока Омса произошла у нас буквально на днях. Суть проблемы: изделие отказывалось включаться при повышенной температуре. Ну то есть включаться то оно включалось, но нормального функционирование управляющего микроконтроллера (МК) не наблюдалось. Быстро было установлено, что к такому поведению приводил нагрев конкретного компонента схемы — источника питания фирмы «АЕ-Дон» (марки МДМ8). Поскольку я считаюсь (и не без оснований) адептом продукции этой фирмы, Мой Молодой Коллег (ММК) обратился ко мне за помощью. (Спойлер:, а убийца дворецкий источник не виноват).
Первая часть марлезонского балета — выясняем, что происходит.
Для начала убеждаемся, что МК (производства опять таки отечественной фирмы — «Миландр», конкретная модель 1986ВЕ92У) на самом деле не функционирует.
Пнп: с этого момента читателю становится понятно, в интересах какого ведомства поставляется продукция нашего предприятия, поскольку такую связку компонентов в коммерческом продукте Вы не встретите.
Это сделать легко, достаточно просто посмотреть осциллографом сигналы на внешнем кварцевом резонаторе — после сброса он отключен и включается только по команде при выполнении программы (решение несколько спорное, но в данном случае весьма удобное). И действительно, сигналы отсутствуют (то есть оба конца резонатора «висят в воздухе»), гипотеза о «зависании» МК подтверждена.
Выдвигаем гипотезу, что источник питания меняет свои параметры (скорость нарастания выходного напряжения) при изменении температуры, а импульс сброса МК имеет недостаточную длину и попадает в неудачное место питания. Проверяем ее, для чего при поданном питании формируем сигнал сброса — замыкаем вход сброса МК на землю, отпускаем его и … ровным счетом ничего не происходит — МК не начинает работать нормально. Попытка сбросить ядро через отладочный интерфейс также неудачна — программатор не может приконнектиться к МК.
Ладно, предположим, что МК настолько неудачно включился, что попал в такое жуткое место, где даже сброс не помогает. Попробуем по-другому — задавливаем сигнал сброса землей, включаем питание, ждем, пока оно установится и отпускаем сброс — и … ничего на помогает, МК по прежнему не работает. Разумеется, все эти эксперименты проводят при нагретом источнике питания, как только его температура снижается, нормальная работа МК восстанавливается.
Пнп: конечно, все эти очевидные манипуляции ММК провел самостоятельно, я только попросил повторить их в моем присутствии. Начиная с этого момента, задача становится интересной.
Переформулируем проблему — при определенных (пока неизвестных) изменениях в подаче питания МК переходит в некоторое (пока неизвестное) состояние, в котором не функционирует и из которого не выводится сигналом сброса.
AHA! В памяти всплывают смутные обрывки воспоминаний о работе с аналогичным МК (1986ВЕ1Т) и о том, что у него есть конфигурационные ножки, которые фиксируются в регистре в момент включения и не очищаются сбросом. И точно, исследование документации подтверждает наличие таких ножек, правда, описание работы с ними в документации на МК сформулировано весьма невнятно (ну к этому мы уже давно привыкли).
Можно догадаться, что считывается уровень на этих (трех) ногах в момент, наверное, когда входное питание МК превзойдет 2В.
Пнп: что такое «наверное» в предыдущей фразе — в описании МК приводится рисунок нарастания питания с проведенной линией и маркировкой 2В. При этом нигде в параметрах данное значение не указано и его связь с напряжением питания не определена, поэтому и появляются сомнения.
При этом внутри МК к этим ногам подключаются (на время считывания конфигурации, наверное) встроенные резисторы 50к (наверное) на землю, а задача разработчика снабдить эти ноги снаружи, при необходимости, подтяжкой к питанию, способной победить подтяжку к земле. После конфигурирования ножки освобождаются и их можно использовать как gpio.
Смотрим на схему устройства и на одной из конфигурационных ножек обнаруживаем резистор подтяжки к земле 10к (в общем, то, излишний, ну да кашу маслом не испортишь) но, кроме него, светодиод ИПД169А9-Л с ограничивающим ток резистором 200 Ом, подключенный к питанию.
Пнп: тут читателю окончательно стало понятно, в интересах какого ведомства изделия разработано. Не то, чтобы данные светодиоды были плохи, но применять их по доброй воле, учитывая их цену, способен только большой фанат отечественного производителя.
Ага, а не может ли эта схема дать, при определенных условиях, высокий уровень на ножке в момент конфигурации. Проверить эту гипотезу проще простого — отпаять диод (отпаяли токо-ограничивающий резистор) и попытаться включить устройство. И точно, модифицированное устройство стабильно начинает правильное функционирование после включения при любой температуре.
Пнп: конечно, светодиод перестает работать (не светится), и устройство формально неисправно, но это пустяки, причина сбоя установлена.
Вторая часть марлезонского балета — пытаемся понять, как именно происходит то, что происходит.
Напряжение на открытом светодиоде (при прямом токе 10 мА) составляет от 1.5В до 2.8В с типовым 2.6В (так написано в ТУ на ИПД169А9-Л) поэтому ММК попал в (весьма распространенную) ловушку — предположил, что напряжение на ножке МК составит не более, чем напряжение питания (3.3В) минус прямое падение на светодиоде (2.6В), итого 0.7В и будет восприниматься, как низкий уровень. Это предположение отчасти справедливо при протекании через диод требуемого тока (даже при этих условиях отчасти), но совершенно ничего не говорит нам о поведении схемы в иных условиях. Для ответа на интересующий нас вопрос построим вольт-амперную характеристику (ВАХ) светодиода, но настоящую, а не ту картинку, что приведена в разделе приложений к ТУ на компонент.
Вот с этого момента подробнее — в документации на многие светодиоды (в том числе в АЕЯР.432220.765ТУ на данный светодиод, рис. Е.7) производители приводятся арт-объекты (красивое выражение, аналог термина «картинка» или «рисунок»), которые их авторы (по недопониманию или из злого умысла) называют «Зависимость постоянного прямого напряжения от прямого тока для индикаторов …». Отвлечемся от тонкостей терминологии (я бы предпочел «падение напряжения», но это дело вкуса) и для начала установим, что указанный арт-объект может (и должен) быть назван «График, иллюстрирующий зависимость …», поскольку он не устанавливает численные значения в явном виде.
Поэтому обратимся к настоящих техническим параметрам, а это таблица 4.1 «Значения электрических и светотехнических параметров индикатора при приемке и поставке» (еще лучше взять таблицу 4.2 «Значения … в пределах срока службы …», но по падениям напряжения эти две таблицы не отличаются, что не скажешь о светимости, но об этом когда ни будь позже) и получим оттуда честные цифры — при токе 20 мА и НКУ (Пнп: 25°С — вот тут должен явно похвалить авторов документа — даны четкие пределы ±10°С, далеко на все производители настолько щепетильны) падение напряжения на приборе составит от 1.5В до 2.8В. Значит, мы можем провести на графике ВАХ прямую 20 мА и отметить на ней указанные точки. Более того, мы можем провести еще и прямую 7 мА (третья строка таблицы значений) и отложить те же цифры в правдоподобном предположении номер один (ПП1): разброс значений при температуре 25°С будет не больше, чем при 85°С. Мы получили четырехугольник (в данном случае прямогольник, но это просто повезло), в котором расположены возможные сочетания значений тока и напряжения и можем определить области запрета, через которые ВАХ исправного элемента проходить не может, заштрихованы на рисунке (опять таки при ПП2: увеличение падения напряжения на диоде не может привести к уменьшению тока через прибор и наоборот).
Обратим внимание на то, что белая область — это область возможных сочетаний тока и напряжения на светодиоде и она достаточно велика. Попробуем уменьшить ее, для чего проведем прямую тока в 22 мА (максимальный допустимый ток) и заштрихуем область над этой прямой.
Пнп: на самом деле это ограничение ничего не говорит о поведении прибора при токе, превосходящем максимально допустимый, мы просто перестаем интересоваться значениями в запрещенной области, и должны принять все меры, чтобы в нее не попасть.
Еще одно ограничение сверху — рассеиваемая мощность, в данном случае смысла не имеет, поскольку лично я не в силах рассчитать мощность отдаваемого светового потока. Но даже если предположить, что вся подводимая энергия уходит в тепло, то ток из этого ограничения (мощность рассеивания 100 мВт) при напряжении 2.8В не должен превосходить 36 мА, что откровенно больше предельно допустимых 22 мА.
Есть один хитрый трюк — проведем прямую по диагонали нашего квадрата, продолжим ее вправо и (ПП3: дифференциальное сопротивление не растет при увеличении напряжения) сможем заштриховать еще один маленький кусочек белого пространства. К сожалению, в левую часть продолжить нашу диагональ мы не можем, вернее, конечно, можем продлить (согласно одной из аксиом Эвклида), но ничего о поведении прибора мы не узнаем. А левая белая плоскость пока что слишком велика для сколь-либо вменяемых высказываний о поведении прибора при низких токах.
Здесь были бы полезны данные из ТУ относительно выключенного состояния прибора, но нам их любезно не предоставляют, если не считать предельного обратного напряжения (опять таки при неизвестном обратном токе). К счастью, мы можем высказать очередное ПП4: ВАХ прибора точно должна проходить через точку (0,0).
Пнп: скорее всего, данное предположения будет верно относительного любого прибора, на имеющего в своем составе источников энергии.
Тогда мы можем повторить наш трюк, соединить две точки (0,0) и (1.5,7) и, в соответствии с ПП3, заштриховать верхнюю половину белой области. Вот теперь мы получили настоящую ВАХ светодиода, то есть график, на котором указана область всех возможных сочетаний значений тока и падения напряжений на светодиоде, отвечающем требованиям ТУ.
Мы получили следующую картинку:
Пнп: приношу извинения, когда строил картинку во второй раз, взял 2.3В вместо 2.8В, а строить в третий раз уж очень лениво. Кстати, если кто подскажет онлайн сервис для построения подобных рисунков, буду очень признателен)
Уберем все линия построения, воспользуемся полученным рисунком и построим на нем нагрузочную характеристику идеального источника питания с напряжением 3.3В (и 5В про запас) с резистором (в данном случае 50кОм). Красными линиями показаны возможные ВАХ, описываемые сплайнами 3 порядка, две черные ломаные обозначают границы расположения рабочих точек.
Пнп: вообще то, у нас есть еще токо-ограничивающий резистор 200 Ом, так что надо брать значение 50.2кОм, но об этом чуть позже.
И теперь мы можем определить диапазон значений падения напряжения на светодиоде, включенном в нашу схему. Оно составит от приблизительно 0.7В до, не более, чем 2.8В в полном соответствии с построенной ВАХ. Тогда остаточное напряжение на стягивающем на землю резисторе составит при питании 3.3В-(0.7:2.8), то есть от 2.6 до 0.5В, что вполне может быть воспринято, как высокий уровень на входе МК.
А если учесть, что светодиод (как внезапно выяснилось) подключен к питанию 5В, то никаких сомнений в происходящем не остается — при подаче питания на МК ядро считывает высокий уровень на одной из ножек конфигурации и начинает работать в специальном режиме, что не оставляет шансов для выполнения штатной программе.
Пнп: обратим внимание на то, что «я ничего не доказал, а показал» (цитата из совершенно потрясающей книги про Волшебного Двурога из моего детства) и любые картинки должны рассматриваться именно как информация к размышлению.
Реальные же граничные цифры должны рассчитываться аналитически, причем исходя из сочетания наихудших условий, вот тогда и придется учитывать наличие дополнительного резистора, точности задания сопротивлений и допусков на питание. Но, если Вы вступили на скользкий путь точных расчетов и по окончанию вычислений увидели, что при наихудшем сочетании параметров требуемый уровень задается с запасом в 10%, безжалостно меняйте схему, если не хотите приключений. А вот запас 100%, скорее всего, будет достаточен для устойчивой работы, хотя многие предпочтут 200% и будут правы.
А вот тут начинается третья часть марлезонского балета, указанная в эпиграфе.
Вроде как МК не должен оказаться в рабочем режиме никогда, но при НКУ это, тем не менее, происходит. Исследование процесса подачи питания показало, что имеется (не слишком значительная) разница во временной диаграмме включения и при повышенной температуре выходное напряжение источника нарастает несколько (на 30–40%) быстрее и наблюдается полочка напряжения на уровне 2.3В против 1.9В при НКУ длительностью порядка миллисекунд. Скорее всего, получаемого напряжения при повышенной температуре хватает для того, чтобы определить уровень на конфигурационной ножке, как высокий, а при НКУ не хватает. Дальнейшие исследования затруднены тем, что доступа к внутренним сигналам МК у нас нет, да и смысла особенного в них нет — все равно надо менять схемотехнику.
Светодиод перенесен на другую ножку, подправлена программа и все становится на свои места — схема устойчиво функционирует при любых сочетаниях режимов по температуре и входному напряжению. Пришло время делать выводы.
Выводы будут следующие.
Первое — главной (и основной) причиной дефекта являлась неверная схемотехника, которая (в силу не до конца выявленных причин) не проявлялась при НКУ. Тем не менее, не могу не высказать ряд замечаний к документации на использованные в схеме компоненты отечественного производства, обнаруженные в процессе поиска неисправности, а именно:
1. МК — на первой странице руководства по применению (ах да, я забыл, Вы сопротивлялись его у Вас нет) большими буквами должна быть написана фраза вроде следующей «Если Вам дорого душевное спокойствие, никогда не применяйте конфигурационные ножки МК для каких либо иных целей, кроме как для конфигурирования». Тем более, что теперь это легко достижимая цель — если в упомянутом ВЕ1Т конфиг задавался на порту А, который используется для формирования высокоскоростной внешней шины и не имеет альтернативы, то в ВЕ92 конфиг перенесен на порт F, который не имеет уникальных функций.
Ну и было бы совсем неплохо дать в документации нормальное (простое, понятное, полное и не оставляющее места для предположений) описание работы данной части ядра МК. Приятным дополнением к нему (для любителей) было бы обоснование причин, обусловивших именно такое решение.
Пнп: я вроде придумал обоснование, связанное с отладкой программы, но оно весьма сомнительно, так что приводить его не стану, а лучшего у меня нет.
Пнп: кстати, если кто в курсе событий, происходящих на Миландре, можно в комменты (лучше тудаЮ поскольку наверняка многим интересно), можно в личку (если уж совсем ДСП), что там происходит и какие перспективы.
2.Светодиод. Если с параметрами светящегося светодиода все более-менее понятно, (Пнп: более от того, что необходимые параметры указаны, менее — потому, что разброс слишком велик, но документация тут не при чем) то условия отключения светодиода не сформулированы вообще никак. Я бы предпочел увидеть что-нибудь вроде максимального тока при конкретном напряжении, к примеру 1В, поскольку такой параметр однозначно определяет условия отключения прибора, но кого из отечественных производителей интересуют мои хотелки … В данном конкретном случае это нас все равно бы не спасло, но ситуация была бы несколько понятней.
3. Источник питания. Хотя никаких претензий к источнику питания мною не предъявляется, тем не менее должен заметить, что работа данного компонента при подаче питания не определена совсем, от слова «никак».
Пнп: особенно обидно, что речь идет о продукции фирмы, которую я привык более хвалить, нежели ругать.
Единственный имеющийся в документации параметр, относящийся к процессу начала работы устройства, а именно «задержка включения относительно подачи сигнала разрешения работы»: 1) не совсем то, что требуется, 2) приведен для совершенно непонятных условий применения, 3) не приведена методика его измерения 4) приведенное значение (0.1с) несколько превосходит ожидания. То есть, с одной стороны, нам ничего не обещают, но, с другой стороны, реально наблюдаемое нарастание выходного напряжения при работе на конкретную нагрузку с наличием вышеупомянутой «ступеньки» порождает определенные сомнения относительно схемы источника и его работы вообще и в частности.
Резюмирую, при разработке устройства внимательно читаем документацию и обращаем особое внимание на рекомендации по применению (ах да, я забыл, их у Вас нет).
PS. Совершенно неожиданно для себя обнаружил, что завод «Элеконд» подготовил «руководство по применению» минимум для двух серий своих разъемов (СНЦ144 и СНЦ170) и эти документы можно приобрести. Конечно, было бы намного лучше, если бы их можно было скачать, но лиха беда начало. Если при этом документ еще и будет в большей степени соответствовать моему представлению о руководящих материалах (РМ), то вообще нет слов.
PPS. Ну, все не так плохо, как могло бы быть, но и настолько хорошо, как хотелось. Даны рекомендации по монтажу разъемов на кабель, описана конструкция компонент разъемов в разрезе монтажа, есть указания о предельных электрических параметрах соединений. В то же время, как и ожидалось (и это очень грустно), полностью отсутствует информация о частотных параметрах и методах достижения предельных показателей./
Совершенно не по теме, крик души
Просьба о помощи к моим почитателям. Недавно (недели 2) у меня перестал работать любимый (мы с ним уже лет 8) планшет Perfeo. Ну перестал и перестал, фиг бы с ним, я уже присмотрел себе новый (Samsung) и скоро куплю, но неоконченные посты в количестве около 10 штук остались во внутренней памяти (да, я отношусь к той категории, что пока не делает бэкапы) и очень бы хотелось их добыть.
В этой связи вопрос: кто нить умеет (или имеет умеющих друзей) вытащить информацию из сломанного планшета под Android, ну или умеет планшеты чинить, конечно, не безвозмездно.
Пнп: обращался в сервисы, но у всех встретил уныние во взоре и нежелание брать в руки.
Внешнее проявление дефекта — при нажатии на кнопку включения планшет (не всегда) начинает грузиться, при этом на экране появляются листики по кругу, но процесс явно циклится и в концу концов зависает. Вывести из зависания может только утопленный ресет.
Интересное наблюдение — если планшет охладить (в холодильнике) то зависание отдаляется по времени, но загрузка все равно на завершается.
Смотрел внутри — вижу питание подсветки (18В), питание 5В, питание 3.08В, питание 1.1В и еще одно, в процессе работы меняющееся от 1.1В до 1.3В. У меня есть подозрение, что 3.08 как то странно, но увеличивать его не рискнул — схем то никаких нет.