Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: RS232 тюнер
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
Sir Jon
Возникла такая задача: на ходу определять скорость приемо-передачи rs232....ну скажем до 115200 бод.
Может кто сталкивался с такой задачей и знает как ее решить наиболее просто и красиво? Хочу отметить, что вариант использования простенького MC, видимо отпадает из-за требуемых внутренних высоких частот и как следствие высокой стоимости.
ipc
Задача очень странная потому как rs232 не шинный интерфейс и в общем случае в такой сети может быть только два устройства один мастер и один слейв.
Неужели нельзя заранее определится со скоростями.
В любом случае если скорость одна из стандартных(1200,2400,4800,9600 итд) и известно количество стоповых и стартовых битов то можно обойтись перебором скоростей снизу вверх.
rezident
Скорость передачи обычно определяют путем измерения длительности стартового бита при передаче символа 0xFF.
Sir Jon
Наверное я не очень полно описал задачу. Прошу прощения. Такая задача возникает при разработке преобразователя rs232 -> любой полудуплексный интерфейс (rs485 например), когда необходимо управлять переключением прием/передача...с установленными тайм-аутами (как правило в знаках, 1.5-3.5 знака). Поэтому и возникает задача определять скорость автоматом....ну и щелкать приемопередатчиком соответственно.
rezident
В нашем конверторе RS232-RS485, например, с помощью SMD-switch скорость выбирается. В сети RS485 обычно один мастер и на одной скорости общение идет. Обоснуйте необходимость автоматического определения скорости передачи. ИМХО это конечно удобно, но не совсем целесообразно.
Sir Jon
Сделать обычный rs232 -> rs485 задача тривиальная. С ручным переключением скоростей - интересная. С автоматическим определением - достойная подражания ИМХО это уже реализовано не у одного производителя. Разобрав дешевый ICP-DAS I-7xxx, я не увиделел ничего интересного, кроме одной микрухи...которая и служит тюнером rs323, т.е. вычисляет (замеряет) скорость приемо/передачи и соотв. щелкает приемо-передатчиком. Отсюда и интерес КАК?
ipc
Цитата(Sir Jon @ Apr 5 2006, 07:24) *
Сделать обычный rs232 -> rs485 задача тривиальная. С ручным переключением скоростей - интересная. С автоматическим определением - достойная подражания ИМХО это уже реализовано не у одного производителя. Разобрав дешевый ICP-DAS I-7xxx, я не увиделел ничего интересного, кроме одной микрухи...которая и служит тюнером rs323, т.е. вычисляет (замеряет) скорость приемо/передачи и соотв. щелкает приемо-передатчиком. Отсюда и интерес КАК?

Я тоже разбирал айсипиконы (помоему i7520),действительно там стоит заказной чипак который решает проблему.
Если подумать то конструкция такого устройства выглядит примерно так
Драйвер RS232<->Процессор<->Драйвер RS-485
Скорее всего Процессор это просто ретранслятор которому побарабану какая частота,какие данные.Появился перепад с одной стороны и он его ретранслирует на другую(а там уже драйвер сам разбираецца что с ним делать).Скорее всего параллельно мерица частота сигнала и высчитываеца таймаут по истечении которого он выключает передатчик на стороне RS-485 чтобы быть готовым к приему.
Главное понять как посчитать этот таймаут.

Цитата(rezident @ Apr 5 2006, 03:17) *
В нашем конверторе RS232-RS485, например, с помощью SMD-switch скорость выбирается. В сети RS485 обычно один мастер и на одной скорости общение идет. Обоснуйте необходимость автоматического определения скорости передачи. ИМХО это конечно удобно, но не совсем целесообразно.


Да чего там обосновывать,действительно очень удобно когда конвертер незадает глупых вопросов и нетребует дополнительной настройки и самое главное не заставляет щелкать RTS.
plan
А может имеет смысл сделать преобразователь usb-rs485 (использовать ft232bm и adm483).FTDI имеет вывод для переключения направления передачи.В компе эта система будет видеться как обычный ком порт и направлением передачи не надо управлять - всё работает в автомате.
ipc
Цитата(plan @ Apr 5 2006, 09:03) *
А может имеет смысл сделать преобразователь usb-rs485 (использовать ft232bm и adm483).FTDI имеет вывод для переключения направления передачи.В компе эта система будет видеться как обычный ком порт и направлением передачи не надо управлять - всё работает в автомате.

Если дело только в спортивном интересе и повышении экспириенса то можно сделать все и даже более целесообразно использовать USB потому как RS-232 уходит в прошлое но если планируется коммерческая состовляющая то проще купить потому как все это уже придумано и очень широко представлено на рынке и врятли можно будет сделать дешевле и быстрее.
plan
Цитата(ipc @ Apr 5 2006, 09:21) *
Если дело только в спортивном интересе и повышении экспириенса то можно сделать все и даже более целесообразно использовать USB потому как RS-232 уходит в прошлое но если планируется коммерческая состовляющая то проще купить потому как все это уже придумано и очень широко представлено на рынке и врятли можно будет сделать дешевле и быстрее.

По поводу коммерческой составляющей- FTDI(3$)+ST485N(1$)+2$ рассыпуха и никакого гемороя с поиском чипа который будет определять скорость.На практике сделал порядка 20 экземпляров-всё работает окей.Если покупать на фирме то rs232-rs485 и usb-rs485 будут стоить примерно одинаково-100$.
ipc
Цитата(plan @ Apr 5 2006, 10:00) *
Цитата(ipc @ Apr 5 2006, 09:21) *

Если дело только в спортивном интересе и повышении экспириенса то можно сделать все и даже более целесообразно использовать USB потому как RS-232 уходит в прошлое но если планируется коммерческая состовляющая то проще купить потому как все это уже придумано и очень широко представлено на рынке и врятли можно будет сделать дешевле и быстрее.

По поводу коммерческой составляющей- FTDI(3$)+ST485N(1$)+2$ рассыпуха и никакого гемороя с поиском чипа который будет определять скорость.На практике сделал порядка 20 экземпляров-всё работает окей.Если покупать на фирме то rs232-rs485 и usb-rs485 будут стоить примерно одинаково-100$.

Если делать дома на коленках то может быть.Но обычно считают так
1.Стоимость комплектации
2.Стоимость платы
3.Стоимость корпуса и разьемов
4.Стоимость упаковки и документации
5.Зарплата разработчику
6.Зарплата менеджера по закупкам
7.Зарплата бухгалтерии за оформление бумаг и безналичных расчетов
8.Амортизация оборудования
9.Стоимость средств связи и интернета
10.Стоимость производства
11.Какой никакой но нужен навар
Намеренно опускаю лицензионные и сертификационные затраты.Хотя они стоят недохло.
Может что забыл но в нашей лавке все так грустно и печально
Кроме того насколько я помню конвертеры уже подешевели до 50$(само собой с учетом скидок тех фирм где мы постоянно закупаемся)
Sir Jon
Цитата(plan @ Apr 5 2006, 08:03) *
А может имеет смысл сделать преобразователь usb-rs485 (использовать ft232bm и adm483).


Лечить больную голову путем ее отсечения - не есть гуманный выход smile.gif Извините за шутку. Rs232 имеет кучу своих достоинств, продолжает широко использоваться и встраивается не только в PC.

Цитата(plan @ Apr 5 2006, 08:03) *
FTDI имеет вывод для переключения направления передачи.В компе эта система будет видеться как обычный ком порт и направлением передачи не надо управлять - всё работает в автомате.


Если Вы внимательно посмотрите на настройки того же самого виртуального ком-порта, то увидите, что имеют место быть таймауты приемо-передачи. А это как раз не "автомат".

Мои соображения по поводу того, что микруха в I-7xxx является микроконтроллером:
1. Если она и микроконтроллер, то без кварца, и тогда с внутренним RC. Выше 4MHz я внутренние точные кварцы не видал. Отсюда получается, что на высоких скоростях (115200 бод) прога для этой микрухи весьма критична к циклу замера и ретрансляции. Поэтому думаю, что задача решена не в лоб - замером длительности.
2. Скорее имеет место быть логическая цепочка....например на заранее определенные скорости, возможно задействован как-то АЦП. Но логика эта пока для меня не прозрачна.

Подумаем вместе?
plan
Цитата(Sir Jon @ Apr 5 2006, 10:21) *
Если Вы внимательно посмотрите на настройки того же самого виртуального ком-порта, то увидите, что имеют место быть таймауты приемо-передачи. А это как раз не "автомат".

Я имел ввиду,что пока передаваемый байт не вылезеть весь наружу из приёмопередатчика чип будет удерживать вывод направления передачи в 1. После этого система переводится в состояние приёма.
rezident
Определить условие для переключения драйвера RS485 на передачу не хитро (отловил перепад 1->0 на входе и переключай), а вот как узнать сколько времени удерживать драйвер RS485 в состоянии вывода? Для посимвольной передачи - чем быстрее тем лучше. А для RTU-ной пакетной передачи желательно не менее 3,5 символов удерживать. Чтобы помехи при переключении линии не попали в пакет.
Потому я и просил обосновать необходимость автоматическоого переключения передачи при том, что неизвестен заранее алгоритм переключения и тип протокола связи.
Abo
А у нас сделали просто - поставили перезапускаемый одновибратор на 555АГ3 или АГ4(уже не помню) с коммутатором времязадающих RC цепей, подобрали длительность импульса равным длительности передачи байта для необходимых скоростей. Текущая скорость выбиралась состоянием ног DTR и RTS. Выход одновибратора - на вход управления драйвером RS485. И все. Но это было лет 7 назад. На сегодня конечно лучше FTDI и в USB (IMHO).
Sir Jon
Цитата(rezident @ Apr 5 2006, 16:12) *
Для посимвольной передачи - чем быстрее тем лучше. А для RTU-ной пакетной передачи желательно не менее 3,5 символов удерживать. Чтобы помехи при переключении линии не попали в пакет.
Потому я и просил обосновать необходимость автоматическоого переключения передачи при том, что неизвестен заранее алгоритм переключения и тип протокола связи.


В том и интерес, что адаптер заранее не знает, что и как Вы собираетесь передавать. Можно лишь наложить некие ограничения на формат передаваемых данных. Но мы удалились от проблемы...
Сопоставляя цену адаптера (50$) и базу используемых компонентов - потихоньку начинаю склояться к мысли, что задача решена все таки аналогово и возможно очень просто.

Подумаем еще?

Цитата(Abo @ Apr 5 2006, 17:13) *
Текущая скорость выбиралась состоянием ног DTR и RTS.


Прошу прощения за тугодумство, но это как? Логически - и четыре доступные скорости или как-то еще?
rezident
Цитата(Sir Jon @ Apr 5 2006, 21:15) *
В том и интерес, что адаптер заранее не знает, что и как Вы собираетесь передавать. Можно лишь наложить некие ограничения на формат передаваемых данных.

Угу. Вот уже началось. Ограничения. smile.gif
Цитата(Sir Jon @ Apr 5 2006, 21:15) *
Сопоставляя цену адаптера (50$) и базу используемых компонентов - потихоньку начинаю склояться к мысли, что задача решена все таки аналогово и возможно очень просто.

Ну еще вариант. Складывайте в ОЗУ битовую последовательность с временами интервалов между переходами 1->0 и 0->1. Затем анализируйте минимальный интервал времени в этой последовательности и делайте вывод о скорости передачи. Глубину выборки не подскажу. Это опять же зависит от формата используемого протокола и диапазона поддерживаемых конвертором скоростей передачи.
Кстати, напомню еще об одном нюансе RS485. Для качественной связи посредством RS485 нужно не только определенное время удерживать драйвер RS485 в состоянии передачи, но еще и задерживать битовую последовательность в самом начале после переключения драйвера с приема на передачу. Потому что переключение драйвера может привести к переходному процессу в линии, который воспримется приемником как ошибочно принятый символ или первый символ будет принят неверно. Частично эта проблема решается введением "растяжки" линии (к линии A pull-up резистор, а к линии B pull-down), но это не панацея. Введение задержки на передачу битового потока это более корректное решение. Тут опять же вопрос возникает, а на сколько задерживать битовый поток? Очевидно, что для того же RTU-ного протокола не менее 3,5 символа. Для посимвольной передачи, достаточно 1,2-1,5 символа. А когда протокол заранее не известен? rolleyes.gif

Итого имеем, что автомат конвертора RS233-RS485 должен выполнять как минимум три функции.
1. задерживать битовый поток при передаче от RS232 в линию RS485
2. удерживать линию RS485 в состоянии передачи после окончания битового потока на его выходе
3. определять скорость передачи и/или частоту битового потока (для реализации первых двух функций)

P.S. еще забыл функцию блокирования локального "эха"
Sir Jon
Цитата(rezident @ Apr 5 2006, 23:22) *
3. определять скорость передачи и/или частоту битового потока (для реализации первых двух функций)


Отлично. Я так понимаю склоняемся к варианту, что тюнер - дешевый МС.
Я рассуждал так.
1. Берем дешевенький MC - например PIC12f629 с внутренним тактовым генератором 4MHz
2. Для того, чтобы вычислять длительность - нужен таймер.
3. У пика приращение таймера 1/4*Fosc = 1MHz
4. Берем критичную максимальную (но не самую) скорость обмена 115200.
5. Отсюда, для замера длительности и на все про все нам отведено максимум 1000000/115200 = 8 инструкций
6. Напрашивается вывод - это не реально. Нужен MC с частотой как минимум в 10 раз выше. А это уже другая ценовая категория.

P.S Я все-таки подцеплю виртуальник к I-7520 и проверю как он нормирует длительность в разных режимах.

Думаем дальше?
rezident
Цитата(Sir Jon @ Apr 6 2006, 09:44) *
Думаем дальше?

Думайте. smile.gif У нас и такие как есть (с SMD-switch для выбора скорости) продаются cheers.gif
P.S. ИМХО конверторы USB<->RS485 с гальваноразвязкой сейчас более актуальны.
GrayCat
Смотрели мы ICP-какой-то там с "автоопределением скорости"... Там внутре совершенно тупая схема: вход передатчика RS-485 просто положен на землю, а приходящий по RS-232 сигнал TX включает (в линию передается "0") и выключает ("передается" с помощью растягивающих резисторов "1") передатчик. Что-то наподобие "Общего коллектора" в ТТЛ wink.gif .

А мы долго удивлялись, почему у нас связь барахлила в полевых условиях, пока не глянули осциллографом на несимметричные сигналы... ;(
rezident
GrayCat, ну дык я "это" и называю "настольный" вариант конвертора biggrin.gif
Sir Jon
Итак, ясность наступила. После прощупывания I-7520 виртуальником родился ответ. RS232 тюнер по всей видимости обычная "логика". GrayCat - respect cheers.gif . Теперь вход передатчика не "положен на землю". Сделано все по-модному и как полагается - вход заведен на чип-тюнер. Однако смысл остался прежний. Девайс постоянно работает на прием, но как только начинается передача, а точнее низкий уровень - передатчик переключается на передачу. Осцилограммы прилагаю. Дальше без комментариев.


Всем спасибо за интересную дискуссию. Тема закрыта.
Sir Jon
Небольшое пояснение к осцилограммам. Верхний сигнал - "передача" на одном рисунке и "прием" на другом. Нижний сигнал - управление "прием/передача" на обоих рисунках.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.