На колу висит мочало

… начинаем всё с начала.

Очередные грабли возникли на опторазвязке — даже быстрые оптопары H11L1 не смогли обеспечить быстродействие. Суть вот в чём.

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

Всё бы ничего, но нужна скорость. Поэтому классические LT817 были забракованы как медленные. Порывшись в загашниках Промэлектроники я обнаружил быстрые H11L1. Закупил десяток. Проверил на скорость передачей меандра — отлично работают даже на частоте в 1 МГц! И это со мной сыграло злую шутку.

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

Вот кусок автобуса схемы, где используются эти оптопары для управления внешним АЦП.

IMG_0280

Подключение к АЦП MCP3201 очень простое. На схеме видно, что нужно обеспечить только два сигнала к АЦП (сигнал CS, сигнал CLK) и получить из него данные (сигнал DOUT). То есть нужны всего три оптопары.

Выходы оптопар имеют тип «открытый коллектор», поэтому их нужно подтянуть в Vcc. Сразу предупреждаю, что номиналы резисторов (10к) указанные на схеме, не совсем корректные. С этими номиналами схема тоже работает, но нарастающие фронты затягиваются на 1-2 мкс. В процессе работы я заменил резисторы на 1 кОм. Фронты стали примерно по 100 нс.

Что еще? Между базой и эмиттером у BC857 обязательно должен стоять резистор, который «рассасывает» заряды из области базы. (в принципе, достаточно 10 кОм). Без него транзистор «долго» закрывается.

Вроде бы должно было работать. Вот пример осциллограммы, на которой показан сигнал синхронизации CLK на выходе микроконтроллера (желтый луч) и на входе АЦП (розовый)

AZH-0264

Что мы видим на осциллограмме?

Осциллограмма нам показывает, что фронты сигналов как входного в оптопару, так и выходного из оптопары, — очень даже крутые. Есть даже некоторый запас по частоте вверх. Это внушает доверие к оптопарам.

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

АЦП тут не причем! Проблема в оптопарах. Следите за руками!

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

— Вот это поворот! — как сказал бы Гоблин.

То есть на выходе оптопары мы имеем сигнал, сдвинутый аж на половину периода частоты, то есть на 0.7 и 1.0 мкс в зависимости от фронта (нарастающий или спадающий).

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

AZH-0263

Первый (отрицательный) импульс вообще на выход оптопары не прошёл. Второй и последующий импульсы вышли с диким опозданием — от 0.7 до 1.0 мкс.

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

Вот общий вид на синхропоследовательность

AZH-0262

Тут-то чётко видно, что благородные сантехники-профессионалы одну секцию батареи отопления однозначно спиз списали за ненадобностью.

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

А вот как выглядит осциллограмма напряжения на входе оптопары

AZH-0260

Желтый луч — нога микроконтроллера, розовый — напряжение между светодиодом оптопары и токоограничивающим резистором.

Включение светодиода осуществляется «нулем».

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

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

Да. Казалось бы, снизив скорость передачи в два, а лучше в три раза, можно получить достоверный результат. Фиг там! Не получите! Я уже пробовал.

Мы забыли, что передача данных тоже проходит через такую же весёлую оптопару. А поскольку мы можем считать валидные данные только тогда, когда сигнал данных пройдет через оптопару от АЦП к МК. Но это произойдет когда в свою очередь синхроимпульс пройдет через оптопару от МК к АЦП. А это произойдет когда, мы закончим формировать предыдущий синхроимпульс и сформируем неактивный полупериод сигнала синхронизации… В общем, потеря быстродействия составляет по очень оптимистичным оценкам 4-5 раз. Реально и с учетом надежности, это наверняка будет еще больше, то есть что-то в пределах 5-10 раз.

Вот и я говорю — ого!

Резюме этого урока состоит в том, что даже успешное испытание оптопары H11L1 на меандре не дает гарантии, что на другом, отличном от меандра сигнале, оптопара будет исправно работать.

Есть ли выход из ситуации и если есть, то какой?

Выход есть. Нужно применять относительно дорогие цифровые оптоизоляторы ADuM (от Analog Devices) или ISO (от Teaxa Instruments). Есть еще какие-то Si84xx от Silicon Labs.

Вчера съездил в Промэлектронику, купил на последние деньги ADuM1301. Сегодня буду перепахивать схему цифровых барьеров.

К стати, кто-нибудь уже использовал цифровые барьеры? В чем-нибудь ощущается практическая разница между ADuM1301 и ISO7231?

Установка ADuM1301 дала следующие результаты.

Здесь так же как и на предыдущих осциллограммах тактового сигнала CLK: желтый луч — выход МК, розовый вход АЦП.

AZH-0267

Как видим, ни один импульс не пропал. Всё на месте. Немного большее время у третьего и четвертого импульса объясняется работой программы МК. Это не баг, это нормально.

Начало синхропоследовательности:

AZH-0265

Тактирование идет на мегагерцовой частоте, половина периода — 500 нс.

Рассмотрим запаздывание фронтов.

AZH-0266

Запаздывание спадающего фронта —примерно 80 нс, нарастающего — 70 нс. Очень даже не плохой результат.

А что с данными, которые поступают из АЦП в МК?

На осциллограмме розовый луч — это вход МК:

AZH-0268

Ну, вроде бы как не плохо. Специфика работы MCP3201 говорит о том, что во время третьего импульса синхронизации уровень на DOUT должен быть нулевым. Так оно и есть!

Сигнал данных должен меняться по спадающему фронту тактового импульса. Тоже вроде бы выполняется. Давайте приблизим!

AZH-0269

Здесь видно, что после 200 нс после спадающего фронта синхросигнала происходит смена состояния на DOUT.

Микроконтроллер осуществляет считываение данных после формирования нарастающего фронта синхросигнала. Мы видим, что после нарастающего фронта синхросигнала и до спадающего изменение данных не происходит.

Иначе говоря, всё должно работать. Но это еще не 100% уверенность, что всё работает, как задумывалось. Конечный результат оцифровки аналоговой величины нужно ещё передать в компьютер и убедиться в валидности показаний. Чем сейчас и займусь.

4 responses to “На колу висит мочало

  1. Да, я использую по полной программе. На RS485 до 2мб/с ADUM1401, на развяке VGA — ISO7220. хоршая и удобная хрень. Но, когда в один из объектов шандарахнула молния, ISO и ADUM погорели все. Вторая модицикация контроллеров, в котороый развяки выполнены на оптронах а не на изоляторах, там стоят 6N136 — проверенное и надежное решение, многие остались живы. С уважением, успехов коллега !

    • Спасибо.
      Молнии мне не грозят, под землёй их не бывает. А вот скорость передачи — это принципиально.

  2. Разницы между адму и исо пока не обнаруживалось. По крайней мере очевидной, или приводящей к каким-либо решениям в пользу одних или других.

    • угу. Еще раз спасибо.

      Ладно, потом как-нибудь по возможности сам поиграюсь и с теми, и с другими. Цоколёвка у них вроде-как совпадает, значит можно безболезненно заменять одно на другое.

Ответить на zhevak Отменить ответ