Jump to content

    

подстройка скорости UART

Доброго всем дня!

Столкнулись с ситуацией, когда устройство на МК (делали сами), подключённое к ПК через  преобразователь UART-USB одной модели, не видно при подключении через преобразователь UART-USB другой модели (скорость выбрана одинаковая)- приходится ручками перенастраивать скорость обмена.

Вопросов два:

1. Какие допуски на рассогласование установленных скоростей обмена для UART ? ( Я не нашёл- может плохо искал)

2. Можно ли сделать автоподстройку частоты обмена в прошивке (вроде стандартного модуля)?

Share this post


Link to post
Share on other sites
1 час назад, NikP сказал:

Какие допуски на рассогласование установленных скоростей обмена для UART?

Не думаю, что вообще есть какие-то нормативные документы для времянок UART. В основном, все определяется количеством семплов на один передаваемый бит.

Часто в даташитах на используемый контроллер пишут формулы для расчета как скоростей, так и вероятности возникновения ошибок как раз из-за разницы частот.

 

1 час назад, NikP сказал:

Можно ли сделать автоподстройку частоты обмена в прошивке (вроде стандартного модуля)?

А почему бы и нет? Только это все-таки некий алгоритм, работа которого предусматривает совместное творчество обеих сторон.

Например, узел A должен отправлять определенную последовательность символов узлу B до тех пор, пока не получит корректный ответ.

Share this post


Link to post
Share on other sites
1 час назад, NikP сказал:

1. Какие допуски на рассогласование установленных скоростей обмена для UART ? ( Я не нашёл- может плохо искал)

Не более 4%

Вы бы хоть скорости написали, а то вдруг один на 5 Мбит работает, а другой только на 2 Мбит :)

Share this post


Link to post
Share on other sites
2 часа назад, NikP сказал:

приходится ручками перенастраивать скорость обмена.

А можно с этого места поподробнее. Какими средствами перенастраивали и в каких пределах?

Share this post


Link to post
Share on other sites
1 час назад, Arlleex сказал:

А почему бы и нет? Только это все-таки некий алгоритм, работа которого предусматривает совместное творчество обеих сторон.

Например, узел A должен отправлять определенную последовательность символов узлу B до тех пор, пока не получит корректный ответ.

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

Share this post


Link to post
Share on other sites

А какая все таки скорость? Из стандартного ряда? Большинство преобразователей поддерживают ограниченный набор скоростей, и при настройке COM-порта выбирают ближайшую к требуемой. Смотреть надо в документации на преобразователь, или на микросхему моста, на которой он построен.

Share this post


Link to post
Share on other sites
2 часа назад, NikP сказал:

устройство на МК (делали сами)

Может и его UART тоже сами, т.е. программный? Вообще, для больших скоростей UART у МК бывает обгрызанный, с минимумом выборок — такому подстраиваться под гуляющую частоту попросту нечем.

Share this post


Link to post
Share on other sites
3 hours ago, NikP said:

(делали сами)

Непонятно, что за устройство, в смысле на чём. Но, в старых микрочипах, например, особо не разгонишься - при соответствующем выборе константы скорости можно было уложиться в 0,16% погрешности, с учетом ухода частоты внутреннего генератора отклонение составляло до 2,6 % (если частота отклонялась на 100 кГц при 4 МГц). Если же изменить константу на 1, то отклонение уже составляло порядка 3,7%. Не припомню, чтоб были проблемы из-за этого, подключали к порту ПК через уровни и через USB-преобразователи.

Автоподстройка ... хз. Я б сделал через через уровни портов: 00 - расчетная скорость, 01 - +1 к значению скорости, 10 - -1 от значения скорости. Если есть свободные ноги или через кнопочку, жмём и крутим по кругу.

Share this post


Link to post
Share on other sites
3 часа назад, NikP сказал:

Столкнулись с ситуацией, когда устройство на МК (делали сами), подключённое к ПК через  преобразователь UART-USB одной модели, не видно при подключении через преобразователь UART-USB другой модели (скорость выбрана одинаковая)- приходится ручками перенастраивать скорость обмена.

99.9% вероятности что ошибка кроется в проектировании "МК (делали сами)" или его firmware.

Share this post


Link to post
Share on other sites

1. Скорость выбрана стандартная  - 256000

2. Для подключения использовались MOXA UPort1130 и UPort1450.

3. Подстраивали настройками  UPort1450 (с UPort1130 работало нормально - приём, передача шли без вопросов). Понизили для него скорость до 220000 - заработало.

4. Насчёт автоподстройки понятно, что это надо делать в прошивке МК. Варианты возможны разные, просто интересно: может это уже кто-то реализовывал.

 

Share this post


Link to post
Share on other sites
37 минут назад, NikP сказал:

может это уже кто-то реализовывал

Так давно уже реализовали. Однако, у Вас скорость большая, поэтому надо аппаратную часть смотреть осциллографом. Может, витая пара плохо скручена. 

Share this post


Link to post
Share on other sites
2 часа назад, iosifk сказал:

Точно не помню, но кажется так. "узел A должен отправлять" посылку, в которой все биты идут тем же уровнем, что и стартовый...

ИМХО, не обязательно. Можно перебором от минимальной до некоторой максимальной скорости из ряда стандартных отправлять в линию символ и ждать ответ.

Не ответили? Значит не та скорость. Ответили - пробуем отправить строку (например, "Device Connect"). Удаленный узел на это присылает, например, "Device Connected".

Прислал - значит скорость верна и сообщение сформировано намеренно, а не как-либо еще.

А нестандартные скорости в топку, ибо не универсально.

Share this post


Link to post
Share on other sites
3 часа назад, NikP сказал:

2. Для подключения использовались MOXA UPort1130 и UPort1450.

Вы всех запутали. UPort1450 - это не UART-USB, а UART-RS232. Разница огромная. Так как многие драйвера высоковольтной части не тянут скорости выше 115 или 230 кбод на передачу - заваливают фронты.

Сталкивался с такой проблемой не раз на USB-RS232.

С преобразователями именно UART-USB такой проблемы нет: практически все работают до 1Мбод и выше.

Смотрите что за драйвер RS232 стоит в вашем девайсе и смотрите осциллограммы его TXD.

Share this post


Link to post
Share on other sites

Спасибо wim   за ссылку. Это интересно.

Для конкретики:

1. UART  контроллера соединяется с ПК через SN175ALS180 (RS485). По даташиту SN175ALS180 должна работать до 25 Мбод.

2.  UPort1450 : 4-портовый преобразователь USB в RS-232/422/485 .

 

Share this post


Link to post
Share on other sites
3 минуты назад, NikP сказал:

1. UART  контроллера соединяется с ПК через SN175ALS180 (RS485). По даташиту SN175ALS180 должна работать до 25 Мбод.

На 2-м десятке постов наконец-то выясняется, что речь идёт о RS-485. И всё надо начинать сначала... Да уж....  :russian_ru:

Вы и разработку так же ведёте - сперва что-то делаете-делаете, а потом только выясняете - а что же нужно было делать?  :biggrin:

PS: Проверяйте терминирующие резисторы.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this