Калькулятор скорости UART

Укажите тактовую частоту, нужную скорость и передискретизацию.

Частота на входе генератора скорости UART, после делителей тактирования периферии.
МГц
Нужная скорость
бод

Фактическая скорость (бод)

111 111,11

Эффективный делитель D9
Отклонение от нужной скорости-3,54938 %

Читайте объяснение ниже

Почему UART работает не ровно на заданной скорости

Две платы микроконтроллеров соединены последовательной линией, к одной подключён логический анализатор

UART передаёт биты через одинаковые промежутки времени. Во многих микроконтроллерах эти промежутки задаёт целочисленный делитель тактовой частоты. Для произвольной пары «частота и нужная скорость» подходящего целого числа может не оказаться. Поэтому записанные в настройках 115200 бод иногда превращаются в 111111 или 117647 бод на физическом выводе.

Калькулятор подбирает эффективный целый делитель D, который даёт наименьшее абсолютное отклонение от нужной скорости при выбранной передискретизации. Он показывает получившуюся скорость и знак ошибки: плюс означает передачу быстрее заданной, минус медленнее. Результат помогает сравнить тактирование и режимы 8×/16×, прежде чем разбираться с нечитаемыми символами в терминале.

Модель относится к генератору скорости с целым положительным D. Дробные делители, отдельные регистры мантиссы и дробной части, автоматическое определение скорости и ограничения конкретного регистра здесь не рассчитываются. Полученное число сначала сопоставляют с устройством UART своей микросхемы.

Какую частоту и передискретизацию вводить

Нужна частота тактирования именно блока UART, выраженная в мегагерцах. Она может отличаться от частоты процессора: тактирование периферии бывает взято с другой шины, после отдельного предделителя или от независимого генератора. Если процессор работает на 80 МГц, а UART получает 40 МГц, вводить нужно 40. Ошибка здесь изменит всю расчётную скорость вдвое.

Один мегагерц равен миллиону герц. Для генератора 11 059 200 Гц введите 11,0592 МГц. Десятичная запятая допустима. Скорость задаётся в бодах: для обычной двоичной линии UART одному символу соответствует один передаваемый бит, поэтому численные значения бод и бит/с совпадают. Скорость полезных байтов будет меньше из-за обрамления кадра.

Передискретизация N задаёт множитель в генераторе тактов приёмника. В рассматриваемой модели доступны 16× и 8×. Выбирайте режим, который поддерживается и включён в контроллере. Переключение числа в расчёте само по себе не изменяет регистры устройства. Уменьшение N позволяет получить другой целый делитель, но также меняет работу приёмника, поэтому выбирать режим только по меньшему проценту ошибки недостаточно.

Как выбирается целый делитель

B=fclkNDB=\frac{f_{\mathrm{clk}}}{ND}
ε=100(BBtarget−1)%\varepsilon=100\left(\frac{B}{B_{\mathrm{target}}}-1\right)\%

В первой формуле частота f выражена в герцах, B в бодах, N и D безразмерны. Идеальный делитель получается из нужной скорости: f/(N·B). Если он целый, номинальная ошибка деления равна нулю. Если дробный, калькулятор сравнивает два соседних целых значения, не меньших единицы, и выбирает то, у которого ошибка скорости меньше по модулю.

Округлить дробный делитель до ближайшего целого не всегда достаточно. Скорость зависит от обратной величины D. Например, при идеальном делителе 1,4 значение D = 1 увеличивает скорость на 40%, а D = 2 уменьшает на 30%. Второй вариант ближе к нужной скорости, хотя обычное округление числа 1,4 выбрало бы первый.

Эффективный делитель и содержимое регистра могут различаться. В классической формуле асинхронного AVR используется D = UBRR + 1: результат D = 104 соответствует UBRR = 103. Для другого семейства эту связь нужно прочитать в документации. Кроме формата регистра проверьте его разрядность: математически допустимое целое число может не поместиться в аппаратный делитель.

Что можно изменить в настройке

Обычный терминал на 9600 бод. При 16 МГц и N = 16 получается D = 104, скорость 9615,3846 бод и ошибка +0,16025641%. Этот результат показывает величину отклонения самого генератора скорости. Если связь нестабильна, у ошибки делителя теперь есть конкретное число, с которым можно сравнить остальные причины.

Более быстрый обмен на той же плате. Для 16 МГц, 115200 бод и N = 16 оптимален D = 9. Фактическая скорость составит 111111,11 бод, отклонение −3,5493827%. Простая замена 9600 на 115200 в программе оставляет ту же частоту генератора, но заметно ухудшает точность деления. Это повод проверить другой режим или частоту.

Переход к восьмикратной передискретизации. При тех же 16 МГц и 115200 бод, но N = 8, получаем D = 17 и 117647,06 бод. Ошибка становится +2,124183%. Её модуль меньше, однако знак изменился. Для решения о пригодности нужно учитывать скорость второго устройства и требования приёмника, а не только сравнить два процента.

Генератор под стандартную скорость. Частота 11,0592 МГц при N = 16 даёт ровно 115200 бод с D = 6. Номинальная ошибка деления равна нулю. Это объясняет, зачем выбирать внешне неудобную дробную частоту вместо круглых 11 или 12 МГц. Собственная погрешность физического генератора при этом сохраняется.

Делитель возле единицы. Для 22,4 МГц, 1 000 000 бод и N = 16 идеальный D равен 1,4. Выбор D = 2 даёт 700000 бод и −30%; D = 1 дал бы 1400000 бод и +40%. Калькулятор выбирает меньшую ошибку, но столь большой остаток ясно показывает, что одного подбора целого D для этой настройки мало.

Скорость выше доступного предела. При 16 МГц и N = 16 самый быстрый вариант D = 1 даёт 1 000 000 бод. Если запросить 2 000 000 бод, ответ останется 1 000 000 с отклонением −50%. Делитель не может стать половиной в целочисленной модели. Нужно менять тактирование, поддерживаемый режим или саму задачу.

Что ещё влияет на связь

Процент на странице относится к одной стороне соединения и к заданной частоте её генератора. Реальная линия соединяет два устройства со своими ошибками. Если одно передаёт быстрее, а другое ожидает биты медленнее, расхождение увеличивается. Если оба одинаково отклонились от номинала, их взаимная ошибка может быть меньше ошибки относительно стандартного числа.

Универсального порога «до 2% всё работает» для любого UART нет. Допуск зависит от структуры приёмника, передискретизации, длины кадра, количества информационных битов и чётности. Свою долю добавляет нестабильность тактового источника. Эти ограничения проверяют по документации обеих сторон, затем проверяют обмен в условиях работы устройства.

При использовании кварца подбор нагрузочных конденсаторов относится к отдельной задаче генератора. А при измерении линии логическим анализатором важна его частота отсчётов: наложение частот при дискретизации объясняет, почему медленное измерение способно показать другой сигнал. Калькулятор UART не заменяет проверку формы импульсов и электрических уровней.

У I²C другая электрическая задача: пассивная подтяжка должна одновременно обеспечивать достаточно быстрый фронт и допустимый ток низкого уровня. Её решает калькулятор резисторов I²C; скорость UART и сопротивление подтяжки нельзя пересчитывать друг в друга.

Скорость обмена и настройка контроллера

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

Сколько байтов в секунду получится при 115200 бод?

В кадре 8N1 передаются стартовый бит, восемь битов данных и один стоповый: всего десять битов на байт. При непрерывной передаче 115200 бод это 11520 полезных байтов в секунду до накладных расходов протокола. Паузы, подтверждения и текстовое представление чисел уменьшают фактическую скорость полезных данных.

Нужно ли складывать ошибки передатчика и приёмника?

Для точного сравнения используйте отношение их фактических скоростей. Если ошибки относительно общего номинала равны e₁ и e₂ в долях, относительное расхождение равно (1+e₁)/(1+e₂)−1. При малых ошибках оно близко к e₁−e₂. Например, +1% и −1% дают около +2,0202%, а одинаковые +1% дают нулевое взаимное расхождение.

Равна ли ошибка длительности бита ошибке скорости?

Знак меняется, а точный модуль отличается, поскольку длительность обратно пропорциональна скорости. При ошибке скорости e длительность относительно нужной равна 1/(1+e). Например, скорость на 10% выше означает биты примерно на 9,09091% короче. Для расчёта накопленного сдвига нельзя безусловно умножать процент скорости на число битов.

Как повлияет погрешность генератора 100 ppm?

При неизменных N и D скорость пропорциональна тактовой частоте. Отклонение генератора +100 ppm, то есть +0,01%, увеличит фактическую скорость на ту же относительную величину. Если ошибка деления уже есть, два множителя перемножаются. Нулевой результат для номинальной частоты не отменяет допуск, температурный уход и старение генератора.

Почему тот же делитель перестал подходить после изменения частоты процессора?

Если вместе с процессором изменилась частота, поступающая в UART, скорость изменилась пропорционально ей. Например, переход периферии с 16 на 8 МГц при прежних N и D уменьшает скорость вдвое. Проверьте фактическое дерево тактирования, выбранный источник UART и момент обновления настроек, особенно после перехода в режим энергосбережения.

Подойдёт ли расчёт для UART с дробным делителем?

Он покажет только лучший целочисленный вариант рассматриваемой формулы. Дробный генератор может приблизиться к нужной скорости точнее, но допустимые дроби и кодирование регистров зависят от микросхемы. Например, возможность задать 8,5 вместо целых 8 или 9 меняет набор кандидатов. Переносить показанный D в такой регистр без его формулы нельзя.

Как проверить фактическую скорость осциллографом?

Передайте последовательность с известными переходами, например повторяющийся байт 0x55, и измерьте длительность бита. Скорость равна обратной длительности: 10 мкс соответствуют 100000 бод. Убедитесь, что измеряете один бит, а не паузу между кадрами или группу одинаковых битов; отдельные стартовые и стоповые участки могут иметь другую последовательность переходов.

Похожие калькуляторы

Возможно вам пригодятся ещё несколько калькуляторов по данной теме:

Есть что добавить?

Напишите своё мнение, комментарий или предложение.