Jump to content

    
Sign in to follow this  
NikP

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

Recommended Posts

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

Столкнулись с ситуацией, когда устройство на МК (делали сами), подключённое к ПК через  преобразователь 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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this