Цифровая часть приемопередатчика
После долгих экспериментов я пришел к выводу, что простой и надежный приемник для RS232 сделать трудно. Для RS232 надо мастерить что-то вроде схемы «привязки к уровню черного (или белого?)» — как в телевидении. Простыми средствами мне это сделать не удалось. Потому было принято решение перейти к импульсно-кодовому представлению сигналов RS232 и передаче информации импульсами. Такая система давно разработана и называется IRDA. Но по условию задачи связь должна быть через ком-порт. Где-то в и-нете я видел микросхемы (буржуйские, разумеется) которые подключаются прямо к ком-порту, а на выходе у них импульсная последовательность или даже просто оптический сигнал. И приемник встроен в ту же микросхему. Мне эта штука не понравилась по двум причинам: относительная дороговизна и жесткая привязка к фиксированной скорости ком-порта. Т.е. если вы (или какая-то умная программа) решили перенастроить порт на другую скорость — вам надо менять тактовую частоту на входе микросхемы. По всем эти причинам я решил смастерить что-то похожее на IRDA, но более простое и независимое от скорости работы порта. Вот что получилось.
Стандарт FIRDA
Каждый фронт в сигнале RS232 кодируется коротким однополярным импульсом, который передается по оптическому каналу. Hа приемнике эти импульсы поступают на вход триггера, работающего в счетном режиме. Hа выходе триггера получаем (в идеале) сигнал RS232. В принципе, это все. У это чудесного по своей простоте алгоритма есть лишь один существенный недостаток, который заключается в том, что при пропуске хотя бы одного импульса, на выходе триггера начинает появляться инверсия сигнала RS232. Конечно, можно сказать, что при потере стартового фронта в RS232 (или первого импульса в пачке IRDA) тоже произойдет сбой синхронизации, который при плотном потоке информации может быть ликвидирован не скоро. Но, в предлагаемой системе потеря любого (а не лишь первого) импульса приводит к неприятностям. Грубо говоря, помехоустойчивость FIRDA раз в 8-10 хуже IRDA или RS232. В принципе, это было бы не так страшно (считаем, что ошибки появляются достаточно редко), если бы с течением времени FIRDA выходил на нормальный режим работы, как это происходит с его именитыми прототипами. Но, если не предусмотреть специальных мер, FIRDA так и будет гнать инвертированный поток, пока не произойдет ещё одного сбоя ;)) Именно длительная инверсная работа мне казалась главным недостатком FIRDA и я дополнил его маленькой добавкой, которая в последствии меня самого удивила своей эффективностью и практически решила все проблемы. Добавка очень простая: если в течении некоторого времени (ну например 0.1 сек) на выходе триггера присутствует «1», то следует принудительно перевести его в нулевое состояние (считаем, что в паузах передачи на выходе RS232 — ноль). Теперь для полного счастья надо дергать готовность ком-порта передатчика один раз в 10 сек, прерывая передачу на 0.1 сек, с тем чтобы триггер приемника установился в исходное состояние. Очевидно, в данном примере потери в скорости передачи — 1процент. Вот теперь, действительно все. Как показала практика, дергать готовность ком-порта передатчика не надо. Многочисленные эксперименты показали, что при реальной работе через ком возникает множество естественных пауз различной длительности. (были проверены несколько сетевых игрушек, сеть между двумя Вин98, терминалки с разными протоколами. Действительно плотный поток оказался лишь у терминалок, работающих через Z-модем). В моей версии линка время принудительной установки триггера выбрано около 5 миллисекунд. Такие паузы встречаются очень часто. Правда, это ограничивает снизу используемые скорости передачи (в моем случае — не меньше 2400). Зато никаких проблем ни с каким софтом я не имел во всем диапазоне скоростей 2400..115200.
Описание принципиальной схемы
Сигнал Тх с выхода ком-порта через ограничивающий резистор R1 поступает на схему выделения фронтов, собранную на элементах DD1.1, DD1.2. Hа выводе 4 элемента DD1.2 присутствуют импульсы длительностью около 1 микросекунды. Временные параметры этих импульсов не достаточно стабильны, поэтому в схему включен генератор нормированных по длительности импульсов, собранный на триггере Т2. Он формирует импульсы длительностью около 3-4 микросекунд. При необходимости длительность подстраивается резистором R3. Для тех, кому важна стабильность/надежность/дальность работы линка и допустима максимальная скорость работы 57600, я бы посоветовал удвоить номинал С2 и тем самым увеличить длительность нормированного импульса до 8 миллисекунд. Можно использовать специальный переключатель максимальных скоростей 115200-57600. подключающий дополнительную емкость С2. (длина проводников до переключателя должна быть минимальна.) Схема цифровой части приемника содержит триггер Т1 с элементами R4,R5,C3,V2, задающими максимальную длительность единицы на выходе триггера. При указанных на схеме номиналах, она равна примерно 5 миллисекундам. Если кто-то собирается работать лишь с большими скоростями, имеет смысл уменьшить это время путем уменьшения С3. Hа элементах DD1.3, DD1.4 собран выходной усилитель, сигнал с которого поступает на вход Rx ком-порта. Это на всякий случай. У меня все прекрасно работало на перепутанном мотке проводов длинной 20 метров, когда я брал неусиленный сигнал (через резистор 1К) прямо с вывода 1 триггера Т1.
Теперь несколько слов о настройке схемы. К счастью, цифровая часть приемопередатчика является совершенно самостоятельной и самодостаточной схемой, допускающей полную настройку и отладку без всяких лазеров и аналоговой части. Порядок настройки. Создайте файл килобайт на 300, содержащий один символ (мне понравился Y). Создайте батник, который засылает этот файл в ком-порт, а потом вызывает сам себя 😉 Запустите его. Проконтролируйте длительности и формы импульсов в передатчике.(лучше это делать на максимальной скорости, поскольку импульсы короткие). Закройте батник. Замкните выход передачика на вход приемника, а выход приемника подайте на вход Rx того же самого ком-порта. Войдите в любую терминальную программу ( я пользовался DN-ской терминалкой) Попробуйте понажимать на клавиши. Вы должны увидеть нажимаемые символы на экране. Если этого не происходит, попробуйте просто замкнуть Rx и Tx и добиться описанного эффекта настройкой терминальной программы, после чего снова попытайтесь сделать то же самое через приемопередатчик. И наконец, последнее, самое важное испытание. Тут потребуется уже два компьютера. Соедините их ком-порты тремя проводами по классической схеме. Запустите какой-нибудь софт,использующий этот линк. Убедитесь, что все работает. Теперь попробуйте в разрыв одного сигнального провода вставить цифровой приемопередатчик. Попробуйте поработать с этим же софтом через эту железку и убедитесь, что FIRDA вас вполне устраивает, поимитируйте помехи в передаче доступными вам способами. После этого можно переходить к постройке аналоговой части линка.
Передатчик
Особых пояснений, как мне кажется, он не требует. Лазерный диод является коллекторной нагрузкой первого транзистора. Резистор в его эмиттерной цепи ограничивает ток через этот транзистор и создает условия для работы второго транзистора, который является фактически (совместно с R1) управляемым делителем входного напряжения. Второй транзистор управляется фототоком диода, встроенного в лазер для организации схемы ограничения температурного дрейфа его параметров. С увеличением светового потока увеличивается базовый ток второго транзистора, и он шунтирует входной сигнал на уровне, безопасном для лазера. Подстроечный резистор R3 предназначен для регулировки допустимого уровня излучения лазера. Номиналы схемы подобраны так, что при комнатной температуре можно уменьшить его сопротивление до нуля и это не приводит к фатальным последствиям для лазерного диода (по крайней мере у меня проблем не было). Настройка передатчика сводится к измерению амплитуды сигнала на резисторе R2 (при подключенной и работающей цифровой части) и установление подстроечным резистором амплитуды импульсов, соответствующей импульсному току 30-35 ма (при комнатной температуре).(Речь идет о 5-и милливаттных указках). Для надежности можно уточнить эти цифры для конкретной указки путем измерения тока через нее при свежезаряженных аккумуляторах (до разборки). Эту величину можно в дальнейшем принять за номинальный импульсный ток через указку. Если в схеме используется R4 (у меня его нет), и часть тока всегда течет через этот резистор, на соответствующую величину надо уменьшить выставляемый ток через R2, так что бы суммарный импульсный ток оказался в указанных выше пределах. При изменении температуры параметры излучения, конечно, будут плавать, но разброс значений будет существенно снижен за счет отрицательной обратной связи по световому потоку через фотодиод и второй транзистор. Резистором R4 можно выставить начальный уровень тока через лазер в отсутствие сигнала. Считается, что это повышает живучесть лазерного диода. С1 с этой же целью сглаживает переходные процессы при включении/выключении лазера. К питанию особых требований нет, можно взять +5В из компьютера. В заключение пару слов о разборке указки и ее цоколевке. Могу рассказать лишь о своей паре указок. Насколько это типично — не знаю. Сначала я делал надпил корпуса надфилем по периметру указки на уровне кнопки включения указки. Часть с батарейками отламывается. Становится видна маленькая печатная платка, на которой крепится кнопка. Платка припаяна прямо к выводам лазерного диода. Иголкой измерил глубину до втулки, в которую запрессован собственно лазер. Сделал второй надрез, стараясь попасть на уровень втулки, в результате чего получил обрубок указки с полностью сохраненной оптической частью, а с другой (обрубленной )стороны торчали три вывода с платкой, которую я отпаял. Итак, остались три вывода, торчащие из обрезанной части указки. Они расположены треугольником. Один из них соединен с корпусом лазерного диода. Это общий вывод лазерного диода и фотодиода. Предположим, что этот вывод соответствует верхнему углу треугольника. Тогда справа внизу будет расположен вывод фотодиода, а слева внизу — вывод лазерного диода. Перед разборкой полезно провести исследование расходимости луча лазера без оптической системы. Это вам понадобится при оценке чувствительности вашего приемника и дальности работы вашего линка. Для этого надо осторожно вывернуть оптическую систему из передней части указки и замерить диаметр пятна, который получается на расстоянии от указки в интервале 5-25 см. Теперь можно переходить к построению самой важной части линка — аналоговой части приемника.
Приемник. Аналоговая часть
Этот блок требует наибольшей аккуратности и, я бы сказал схемотехнической культуры при построении и наладке. Питание лучше брать не из компьютера, а от отдельного стабилизированного блока питания. Длина проводников должна быть минимальна. Фильтрующие питание конденсаторы C1,C2.C4,C5 д.б. расположены максимально близко к выводам операционного усилителя. Особенно важно близкое расположение к ОУ элементов входной цепи С3,VD1,R4. Желательно компактное расположение и экранирование всей конструкции. При грамотной схемотехнике у вас не должно быть никаких проблем с настройкой. У меня на столе не было выполнено ни одно из перечисленных выше требований и тем не менее все успешно работает. Так что есть надежда, что если сделать все правильно,то у вас тоже будет работать
Пару слов о самой схеме. Она предельно проста. Соблюдайте полярность фотодиода! Резистор R4 влияет на амплитуду сигнала с фотодиода и на его форму/частотные характеристики. Чем меньше номинал резистора, тем меньше сигнал с фотодиода и тем лучше его форма. У меня получались вполне приличные результаты при увеличении резистора до 4.7 К. Но спешить с его увеличением я бы не советовал. И вообще, первое, что вы должны добиться — это работа приемника на какой-нибудь умеренной скорости, ну например 57600. Это лучше делать в следующем порядке. Итак, после десятой проверки монтажа выводим сопротивление подстроечника R1 в ноль и включаем питание. Подключаем к ком-порту собранный передатчик (цифровую и аналоговую части), запускаем батник (предварительно установив скорость работы порта 57600), позволяющий наблюдать непрерывную картинку передачи одного байта (о нем шла речь в первой части трилогии), располагаем лазер со снятой оптической системой в 2-х-3-х сантиметрах от фотодиода, подключаем осциллограф к выходу приемника и начинаем медленно увеличивать сопротивление R1. Через некоторое время транзистор Т1 начнет приоткрываться, и на выходе приемника появится гребенка импульсов. Оптимальное значение сопротивления R1 определяется в ходе экспериментов визуально по форме и амплитуде импульсов на выходе приемника. При выключении передатчика амплитуда шумов на выходе приемника не должна превышать 1-2 вольта. Транзистор Т1 должен быть лишь слегка приоткрыт. Типичное значение напряжения на его коллекторной нагрузке- 1-2 вольта. После достижения успеха на этом первом этапе можно двигаться дальше — постепенно раздвигать приемник и передатчик, находить их наилучшее взаимное положение и, подстраивая R1, получать гребенку импульсов амплитудой почти равной амплитуде питания +12В. Форма у них может быть не совсем прямоугольной, но амплитуда должна быть хорошей. При максимально возможной раздвижке передатчика и приемника надо определить диаметр расфокусированного пятна лазера. Этот диаметр даст вам представление о максимальной дальности, на которой будет работать ваш линк. У меня этот диаметр равнялся примерно 20 см, что примерно соответствует динамическому диапазону в 33 дБ. Как мне кажется, этого вполне должно хватить для уверенной связи на расстоянии 100 метров без применения входных линз или на расстоянии 200 метров, если использовать светодиод типа ФД320 в виде красной пластмассовой линзочки диаметром около сантиметра на прямоугольном основании. А при наличии входной оптики… Впрочем, при больших дальностях уже другие проблемы… Вернемся к настройке приемника. Теперь полезно попробовать настройку для разных скоростей ком-порта. И, наконец, можно подключить цифровую часть приемника и повторить опыты, описанные в первой части данной трилогии. Я специально ничего не говорил о конструктивном оформлении приемника. Да, наверно полезно иметь какие-нибудь бленды на входных светодиодах. Вообще-то приемник весьма устойчив к засветкам разного рода. Обычная засветка лампочкой 60 ватт с расстояния 70 см под углом в 30 градусов никак не влияла на работу схемы. Конденсатор C3 очень хорошо «режет» все низкочастотные помехи.