К вопросу о RS485

«Мы любознательны, но не любопытны.»

Недавно, при отладке одного устройства, внезапно выяснилось, что RS485 не хочет работать (вернее, работает через раз), если два устройства не связаны землей, от слова совсем. Вообще то данный факт не является откровением и я в своих кабелях земли протаскиваю, но в данном конкретном случае имел место обрыв провода. Но после того, как дефект был обнаружен и устранен, внезапно возник вопрос -, а как вообще устроен приемник сигналов, если в соответствии со стандартом он должен правильно обрабатывать сигналы, имеющие общее напряжение (Vcm) от -7В до 12В, питаясь при этом от 3.3В (ну или от 5В) относительно земли. Да, я знаю о существовании операционных усилителей (а компаратор — то же ОУ), способных обрабатывать сигналы «rail-to-rail» (импорто-замещенное обозначение «от шины до шины» мне не нравится, можете пожаловаться кому следует), но в данном случае входные сигналы откровенно за шины (землю и питание) выходят.

Если Вам тоже интересно, Вам сюда.

Вариант с формированием внутренних значительных напряжений питания (в том числе отрицательного) оставим на крайний случай, это будет очень дорого. Сначала попробуем преобразовать входные сигналы в приемлемый диапазон (глубоко внутри значений от земли до питания) простыми средствами. Варианты с ограничением входного напряжения нам явно не подходят, поскольку мы будем сравнивать преобразованные сигналы между собой, значит проектируем делитель со сдвигом, рисунок 1.

Мы имеем схему с тремя изменяемыми параметрами (два номинала резисторов и напряжение смещения), а ограничений только два — на краях диапазона, причем мы должны их задать сами. Примем минимальное обрабатываемое напряжение за 0.2В, а максимальное за 2.0В. Можно составить 2 уравнения с 2 неизвестными (отношение резисторов и смещение) и честно решить эту систему, но можно пойти легким путем. Если входному диапазону изменения напряжения в 12В-(-7В)=19В соответствует выходной диапазон изменения напряжения в 2.0–0.2=1.8В, то коэффициент передачи (коэффициент деления на резистивной схеме) составит k=1.8/19~1/10. Отсюда соотношение резисторов получается автоматом r1=(k-1)*r2=9*r2. Тогда из левой точки диапазона со входным значением -7В и требуемым значением 0.2В легко найти
Us=(0.2+7/10)*10/9=(0.2*10+7)/9=9/9=1.0В.
Зададимся r1=10кОм и можем расставить на схеме 1 номиналы. Пнп: задаемся входным резистором, исходя из требований стандарта к входному сопротивлению приемника.

Вообще то, эта схема не вполне рабочая, поскольку получение напряжения смещения осталось за скобками. Конечно, можно поставить ограничитель напряжения и сделать смещение из питания, тогда потребуется стабилитрон именно на нужное напряжение, но есть способ намного интереснее. Добавим к схеме на рисунке 1 еще один резистор и воспользуемся принципом суперпозиции (теорема Тевенина, если память мне не изменяет, проверять в Гугле принципиально не буду, пусть мне будет стыдно, если ошибусь), тогда
U=UiR2'/(r1+R2')+UpR3'/(r2+R3'), где r2'=r2||r3, r3'=r1||r3.
Пнп: я честно попытался переписать это в виде формулы, но совершенно дикие отступы сверху и снизу меня огорчили, так что формулы остались в текстовом виде.
Тогда при соответствующих значениях r2 и r3 получим требуемое значение напряжения смещения (второй член суммы) в 1В (хотя следует твердо понимать, что это не 1В, а питание напряжением 3.3В, деленное на 3.3). Считая, что r1>>r3, легко найти соотношение резисторов k2=r2/r3, а потом составить и решить уравнение
k*r1=r2||r3=k2*r3||r3=k2*r3*r3/(k2*r3+r3)=k2*r3/(k2+1),
откуда r3=(r1*k)(k2+1)/k2 и можно расставить номиналы.
Пнп: воспользуемся одним из правил Кирхгофа (равенством суммы токов нулю), что приводит к уравнению (U1-Ux)/r1+(U2-Ux)/r2+(U3-Ux0)/r3=0, которое после несложных преобразований, в предположении r2=r3 и U3=0, превратится в простое выражение
Ux=U1*r2/(r2+2*r1)+U2*r1/(r2+2*r1)
или, при r1>>r2
Ux=½*U1*r2/r1+½*U2.

Пнп: все-таки не удержался, посмотрел, теорема Тевенина немного о другом, но тоже где-то рядом, так что оставлю в тексте, как было.

На этом следовало бы закончить, но, как известно, «любопытство погубило кошку». Возникает желание проверить свое решения и посмотреть, а как входной каскад реализован в выпускаемых серийно микросхемах приемников RS485. После ряда безуспешных попыток (ну не желают определенные производители открывать свои секреты) я все-таки нашел схему входного каскада в описании микросхемы SN65LBC108A от Texas Instrument — смотри рисунок 3 (спасибо, коллеги, я всегда в Вас верил, хотя историю с Luminary «не забудем, не простим»).

Рис. 3 SN65LBC180A

Рис. 3 SN65LBC180A

Смотрим на схему и видим, что законы электроники (вообще то, электротехники) работают точно так же в штате Техас, как и вокруг меня, и схема вполне соответствует ожидаемой. Если не обращать внимание на защитные диоды на входе, растяжку линий для обеспечения гарантированного уровня при простое передатчика (100кОм) и еще один защитный диод вместе с загадочным кружочком (эмиттерным повторителем?) на выходе (все лишнее обведено красным), то в сухом остатке будут все те же три резистора, хотя и немного других номиналов. В общем, «здесь зрители начинают аплодировать …аплодируют … аплодируют … аплодируют … кончили аплодировать».

Обратим внимание на один немаловажный аспект — хотя абсолютные значение резисторов не столь важны и мы можемсебе позволить значительные (единицы процентов) отклонения в коэффициенте передачи, расхождение этих параметров в двух каналах (у нас ведь два провода, Вы не забыли, воут?) совершенно недопустимо. Дело в том, что мы должны выделить разницу в 200 мВ между входами, в условиях присутствия общего напряжения от -7 до +12В. Соответственно, общее напряжение должно быть подавлено таким образом, чтобы не «перекосить» разницу. Чтобы изменение общего напряжения на 20В на входе не перекосило разницу в 200 мВ, нам нужно подавление общего напряжения более, чем в 100 раз или на 40 дБ. А последнее требование означает, что резисторы в обоих делителях должны иметь точность в 0.5% минимум, лучше 0.1%. Я никоим образом не специалист в производстве микросхем, но, как мне кажется, задача весьма нетривиальная. Пнп: вообще то, задача о точности коэффициента передачи резистивного делителя интересна сама по себе, смотри опрос в конце поста.

Возвращаемся к рассматриваемому вопросу и выясняем, почему зрители внезапно перестали аплодировать — дело в том, что это была не первая схема входного каскада приемника RS485, которую я обнаружил, и даже не вторая. Второй была схема на рисунке 4 из микросхемы SN75179B, и вот она коренным образом отличается от моей и от первой — она содержит в себе 2 транзистора, 2 диода и 5 резисторов.

Рис 4 SN75179B

Рис 4 SN75179B

Вариант ответа, что разработчикам TI платят за количество транзисторов, отметаем с негодованием, как недостойный, и, тем не менее, видим то, что видим. Ладно, идем на любимый сайт falstad.com, рисуем схему и запускаем моделирование. Видим, в общем то, ожидаемую картину — входной сигнал ослабляется в 16 раз во всем диапазоне за исключением небольшой (0.9В) зоны вблизи напряжения смещения 2.5В, где ослабление падает до 4 — смотри рисунок 5.

Рис5. Передаточная характеристика схемы на рисунке 4

Рис5. Передаточная характеристика схемы на рисунке 4

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

На самом деле все еще хуже, потому что первая схема, которую я увидел, представлена на рисунке 6 и она имеется в микросхеме AM26LV32.

Рис. 6 AM26LV326

Рис. 6 AM26LV326

Исследуем ее аналогичным способом и получаем следующую переходную характеристику, из которой видно, что схема работает, как делитель с коэффициентом 1.5/2/(1.5/2+15)~1/21 и смещением 0.6, но это до точки закрывания верхнего транзистора (входное напряжение около 9В), где она превращается в делитель с коэффициентом 1.5/(1.5+15)=1/11 и смещением практически 0. Очень странное решение, особенно если учесть, что рабочий диапазон входных напряжения установлен документацией на эту микросхему в -0.5В : 5.5В (что, на секундочку, не соответствует стандарту) и указанное превышение над 9 вольтами нас никак не должно волновать.

Рис.7 Передаточная характеристика схемы на рисунке 6

Рис. 7 Передаточная характеристика схемы на рисунке 6

Но модели моделями, а давайте теоретически разберемся в работе данной схемы. Нижний транзистор в режиме насыщения (это гипотеза), верхний в активном режиме (еще одна), диоды смещены в прямом направлении. Тогда Ub2=0.6В, Ub1=ub2+2*Udf =1.8В, Ib1< Ir2=0.6/7.2к~0.1 мА, Ir1=(3.3–1.8)/7.2к~0/2 мА, ib2=Ir1-Ir2=0.1 мА, Ie1=Ik2=(Ue1-uK2)/(r3+r4)=1.2/3~0.4mA, Ik2<=1.2*31~23В. Как то не соответствует наблюдениям на модели, смотрим на нее внимательнее и обнаруживаем, что падения на диодах составляют не ожидаемые 0.6В, а всего лишь по 0.35В в силу очень малых токов, через них протекающих, отчего и получается расхождение с расчетом. Маловероятно, чтобы такой тонкий эффект лежал в основе схемы, скорее все таки прямое напряжение на диодах в реальном изделии составит 0.6 и в пределах диапазона допустимых входных напряжений излома передаточной характеристики не будет.

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

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

Единственное, что внушает оптимизм — это то, что «правильная» схема с тремя резисторами применена в последней по времени из трех представленных микросхем (документация датирована 1990, 1995 и 2000 годами соответственно) и просто разработчики TI нащупали методом проб и ошибок верное решение, которое автором поста было придумано сразу. На этой радостной ноте я, пожалуй, и закончу обзор темы.

© Habrahabr.ru