Найти тему
Электроника, ESP32, Arduino

Еще один повод выбросить Arduino на AVR

Скорость обмена данными у интерфейса UART ограничена 2'000'000 бод в секунду и точка. Откуда цифра? Заглянем в документацию на ATMega328P, на базе которого работают самые популярные платы Arduino Nano и UNO.

Здесь нас интересует выделенная формула. Скорость работы UART определяется числом которое мы запишем в регистр UBRRn. Число меньше нуля у нас туда записать не выйдет. На платах Arduino микроконтроллер тактируется внешним кварцем c тактовой частотой 16 МГц.

Итого BAUD = 16'000'000 / 8*(0 + 1) = 2'000'000 бит в секунду. С учетом того, что помимо информационных битов, UART автоматически вставляет в поток синхронизирующие метки, так называемые стартовый(англ. Start bit) и стоповый(англ. Stop bit) биты со скоростью получается совсем грустно.

Для связи с внешним миром на платы ставят USB-UART мост на микросхеме CH340 у которой скорость также передачи также ограничена 2'000'000 бод

-2

На хабр-е есть интересная статья про UART мосты:

Неизвестный UART: микросхемы

Там же можно найти вот такую интересную табличку:

https://habr.com/ru/articles/751060/
https://habr.com/ru/articles/751060/

Для Arduino применение CH340 необходимо и достаточно. Более того ардуиновский терминал встроенный в среду Arduino IDE также не поддерживает скорость отправки более 2'000'000 бод

-4

Приплыли!?

-5

Понятно, что для более высоких скоростей потребуется Arduino, но не на AVR, а поскольку стоят эти Ардуины каких-то конских денег - попробуем воспользоваться ESP32. Что там у нас!?

ESP32 has three UART interfaces, i.e., UART0, UART1, and UART2, which provide asynchronous communication (RS232 and RS485) and IrDA support, communicating at a speed of up to 5 Mbps. UART provides hardware management of the CTS and RTS signals and software flow control (XON and XOFF). All of
the interfaces can be accessed by the DMA controller or directly by the CPU

5 Mbps - звучит заманчиво, вот только реализованы ли такие скорости в среде IDE Arduino Wiring или придется стучать в бубен грызть документацию.

Приходим к рубрике ээээээксперименты. Для них потребуется программа терминал, в которой можно выставлять скорость UART интерфейса произвольно. Нашел в Интернет какой-то Terminal-v.1.9b

Для того чтобы протестировать UART-мост на CH340 покупать отдельно такой переходник совсем не обязательно - Китайская Arduino c этим мостом превращается в такой переходник установкой перемычки RST-GND. Порты Rx-Tx замыкаем между собой еще одной перемычкой (данные с Тх читаем ножкой Rx)

-6

Запускаем терминал, ставим скорость 2'000'000 и отправляем любое слово на латинице.

-7

UART мост исправен (используя перемычку RST-GND можно настраивать другое оборудование используя плату Ардуино в качестве переходника USB-UART).

Скидываем перемычки и заливаем скетч:

-8

Отправка символа A зажигает встроенный светодиод, отправка символа B гасит. Символ при этом возвращается обратно в терминал.

-9

На 2 Mbps в секунду все работает отлично. При установке значения больше 2 Mbps - программа перестает работать нормально - в терминал возвращается какая-то фигня, а светодиод перестает зажигаться/гаснуть.

-10

С Ардуино все понятно. Переходим к тесту ESP32. Заливаем тот-же скетч и.....

-11

то, что работало в Arduino в ESP32 на скорости 2 Mbps вообще не работает. Почему?

Открываем диспетчер устройств на компьютере.

-12

USB-UART мост, через который прошивается ESP32 выполнен на микросхеме CP210x. Открываем документацию:

-13

Более того, USB-адаптеры с чипсетами CP210x по умолчанию допускают только 32 стандартные скорости передачи данных UART - максимум 921600 bps

-14

Что делать? Искать другой USB-UART переходник. Пошел в местный магазинчик.

-15

Сайта у магазина нет, и как выбрать нужный? - не гуглить же все подряд стоя у витрины. На самом деле все просто. Вот он!

-16

Почему? Для стабильной работы интерфейса UATR нужна точность, которая определяется генератором тактов. Многие микросхемы предназначенные для работы как USB-UART мосты имеют встроенные источники тактового сигнала, но их точность не позволяет работать на больших скоростях, а тут такая набалдашина да еще и с частотой 12МГц (кстати на Ардуино внешний кварц тоже ставят не от хорошей жизни - внутренний источник тактирования в AVR весьма не стабилен).

-17

С самой микросхемой PL2303 есть прикол - производитель давно снял её с производства, но хитрые китайские мастера начали выпускать их копии (это вам не шильдики переклеивать). Производителю это жутко не понравилось и поэтому если установить драйвер через центр обновления Windows

-18

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

-19

Можно идти дальше. В ESP32 у нас 3 аппаратных UART. 1-й используется для связи с компьютером, а 2-й в среде Arduino IDE привязан к IO17, IO16

Схема подключения:

-20

ESP32 питается через USB, и через него же прошивается, а через переходник мы будем общаться с компьютером, через программу терминал.

-21

Загружаем и все работает на 5'000'000 bps.

-22

Большую скорость можно использовать как для общения плат между собой, так для и передачи больших объёмов данных с компьютера. Благо программу позволяющую написать свой вывод в COM порт совсем несложно

Остальные поводы выкинуть ардуину вы найдете в этой статье.

Оглавление канала тут

Если статья вам понравилась, не забываете поддержать канал лайком, в противном случае материал больше никто не увидит - Дзен так устроен.

Всем удачи.