Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Удаленная работа
Помощь проекту


Калькулятор ошибки бодрейта UART



Ошибка бодрейта

Реальная скорость UART и её отклонение от заданной при целочисленном делителе тактовой частоты. Большая ошибка (>2–3%) ломает связь. Подберите тактовую или скорость.

бод

Как работает калькулятор ошибки бодрейта

Модуль UART внутри микроконтроллера не умеет выдавать произвольную скорость напрямую: он делит тактовую частоту периферии на целое число и получает опорную частоту приёмопередатчика. Из-за этого точно попасть в стандартную скорость (9600, 115200 бод и т. д.) удаётся далеко не с любым кварцем. Калькулятор берёт тактовую частоту, требуемую скорость и коэффициент овердискретизации, находит ближайший целый делитель, восстанавливает реальную скорость на линии и показывает, насколько она отклоняется от заданной. Величина этого отклонения и решает, будет связь работать или начнёт сыпать битыми кадрами. Родственную арифметику самого кадра — старт-бит, данные, паритет, стоп-биты и время передачи — считает калькулятор кадра UART.

Делитель div = округлить( fтакт / (OS · baud) )
Факт. скорость = fтакт / (OS · div)    Ошибка = (факт − нужная) / нужная · 100%

Здесь fтакт — тактовая частота, питающая модуль UART, baud — желаемая скорость в бодах, а OS (oversampling) — во сколько раз внутренний счётчик работает быстрее битового потока, чтобы сэмплировать бит в его середине. Идеальный делитель fтакт/(OS·baud) почти всегда дробный, а в регистр можно записать только целое, поэтому его округляют. Именно округление и порождает ошибку: чем крупнее делитель, тем мельче шаг между соседними достижимыми скоростями и тем меньше отклонение. На высоких скоростях делитель становится маленьким (единицы), шаг — грубым, и ошибка резко растёт.

Сколько ошибки можно терпеть

UART асинхронный: у приёмника и передатчика нет общего тактового провода, они лишь договорились о номинальной скорости. Приёмник ловит спад старт-бита и дальше сэмплирует каждый следующий бит по своему таймеру. Если его частота чуть отличается от передатчика, точка выборки медленно уползает от центра бита к краю. За типовой кадр из десяти бит накопленный уход не должен вытолкнуть выборку последнего бита за его границу, иначе стоп-бит прочитается неверно и появится framing error. Отсюда практический порог: суммарная ошибка двух сторон должна укладываться примерно в ±5%, а на каждую сторону закладывают запас ±2%. Значение от 2 до 3% — пограничное: в одиночку ещё работает, но встретившись с такой же ошибкой партнёра, уже рвёт связь. Выше 3% канал считают ненадёжным. Калькулятор подсвечивает эти зоны цветом на шкале: зелёная точка — ошибка в пределах ±2%, оранжевая — на грани, красная — за порогом.

На запас влияет и сама овердискретизация. При 16× приёмник делит битовый интервал на шестнадцать отсчётов и берёт выборку около восьмого — то есть у него есть половина бита, чтобы «переждать» накопленный сдвиг. При 8× шагов вдвое меньше, точка выборки грубее и допустимая ошибка сокращается; режим 1× (прямой BRG без передискретизации) вообще не даёт запаса на дрожание фронтов, поэтому применяется редко и только на коротких надёжных линиях. Поэтому одну и ту же тактовую при 16× можно считать приемлемой, а при 8× — уже рискованной, и калькулятор честно пересчитывает делитель под выбранный режим.

«Удобные» кварцы и выбор тактовой

Стандартный ряд скоростей UART кратен 1200, поэтому нулевую ошибку дают тактовые частоты, нацело делящиеся на эти числа с учётом овердискретизации. Классика — кварцы 1,8432; 3,6864; 7,3728; 11,0592 и 14,7456 МГц: все они кратны 921600 = 8·115200, и на любой стандартной скорости при OS = 16 делитель получается целым, а ошибка равна нулю. Именно поэтому такие «некруглые» номиналы десятилетиями стоят в платах с последовательными портами: производитель заранее заложил их так, чтобы деление на стандартный ряд скоростей давало целый результат без остатка. «Круглые» же 16 или 20 МГц удобны для ядра и таймеров, но для UART дают заметную ошибку на верхних скоростях. Выхода два: поставить специальный кварц под UART либо снизить рабочую скорость до той, где ошибка приемлема. Если частоту задаёт не кварц, а внутренний RC-генератор, добавьте его собственный разброс (обычно ±1…2%) к расчётной ошибке — калькулятор считает идеальную тактовую, а реальный RC гуляет с температурой. Подобрать делители и предделители под нужную частоту помогает расчёт таймера и прескейлера МК, а кварцевую обвязку — калькулятор конденсаторов кварца.

Ошибка стандартных скоростей при 16 МГц

В таблице — что получается на популярной тактовой 16 МГц при овердискретизации 16×. Видно, как до 38400 бод ошибка исчезающе мала, а начиная с 57600 округление делителя резко её раздувает.

Скорость, бодДелительФакт., бодОшибка
96001049615+0,16%
192005219231+0,16%
384002638462+0,16%
576001758824+2,12%
1152009111111−3,55%
2304004250000+8,51%

Где применяют — и где не годится

Расчёт нужен всякий раз, когда настраивают последовательный порт микроконтроллера, USB-UART мост, модуль GPS, GSM или Bluetooth: перед прошивкой полезно убедиться, что выбранная пара «кварц + скорость» вообще стыкуется. Та же логика делителя работает в промышленных линиях RS-485, где несколько устройств на одной шине должны попадать в общую скорость с запасом на разброс. Модель применима только к асинхронному UART с целочисленным делителем: она не описывает синхронные интерфейсы с отдельным тактовым проводом и не годится для шин с битовым таймингом и сегментами выборки — там своя арифметика, например битовый тайминг CAN. Не путайте бодрейт (символы в секунду на линии) с полезной пропускной способностью: реальный поток данных за вычетом старт-, стоп- и служебных бит оценивает калькулятор битрейта потока. Наконец, некоторые современные UART умеют дробный делитель (fractional baud) — для них эта простая формула даёт пессимистичную, завышенную ошибку.

Пример

На значениях по умолчанию (fтакт = 16 МГц, скорость = 115200 бод, овердискретизация 16×) идеальный делитель равен 16·10⁶/(16·115200) = 8,68, округляем до 9. Реальная скорость получается 16·10⁶/(16·9) = 111111 бод, а отклонение (111111 − 115200)/115200 · 100% = −3,55% — за порогом надёжности, калькулятор красит точку красным и выдаёт предупреждение. Если взять «удобный» кварц 14,7456 МГц, делитель выйдет ровным (14745600/(16·115200) = 8), реальная скорость совпадёт с заданной, и ошибка станет 0%. Это наглядно показывает, почему для скоростного UART предпочитают некруглые тактовые. Поменяйте в полях частоту, скорость или овердискретизацию — и калькулятор мгновенно пересчитает делитель, реальную скорость и ошибку, а цветная шкала подскажет, остаётесь вы в безопасной зоне или уже вышли за неё.

См. также: кадр UART · таймер/прескейлер МК · битовый тайминг CAN · битрейт потока · RS-485 линия · все калькуляторы


Частые вопросы

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

Скорость UART получают целочисленным делением тактовой частоты, поэтому точно попасть в стандартный бодрейт удаётся не всегда. Отклонение более ~2–3% (суммарно с партнёром) ломает связь. Например, 16 МГц на 115200 бод даёт ошибку −3,5%.

Какой кварц выбрать для UART?

«Часовые для UART» частоты 11,0592 и 14,7456 МГц дают нулевую ошибку на стандартных скоростях (9600…115200), потому что делятся нацело. Их и ставят, если важна безошибочная связь.


Похожие калькуляторы — Embedded / интерфейсы
Pull-up I2C  ·  RS-485 линия  ·  ADC ↔ напряжение  ·  ШИМ (скважность)  ·  Таймер/прескейлер МК  ·  ШИМ-ЦАП фильтр  ·  все калькуляторы →


© 2003—2026 «KAZUS.RUN - Электронный портал»