Сообщество - Arduino & Pi
Добавить пост

Arduino & Pi

1 378 постов 20 575 подписчиков

Популярные теги в сообществе:

Прошивка для платы управления двигателем RMD-X8 Pro

В рамках создания комплекса экзокисти под управлением нейрокомпьютерного интерфейса написал прошивку для Arduino Mega, которая через CAN-контроллер управляет серводвигателем RMD-X8 Pro, приводящим в движение механизм экзокисти. Модель экзокисти создавали наши студенты, прошивка представляла собой скетч, вырезанный из другого проекта, двигатель мог управляться только с помощью джойстика. Причем джойстик при движении вперед раскручивал двигатель вперед, а при отклонении джойстика в обратную сторону постепенно останавливал его и начинал неконтролируемые движение в обратном направлении. При остановке джойстика движение также не прекращалось. Контроля углов вращения не было.

Прошивка для платы управления двигателем RMD-X8 Pro Arduino, Json, Сервопривод, Прошивка, Экзоскелет, Программирование, Вертикальное видео, Видео, Длиннопост

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


Для двигателя есть настроечная программа, которая работает по протоколу serial-232, имеются варианты интерфейса двигателей с RS485 у которого больше возможностей, чем у CAN, который через один датафрейм может передать максимум 8 байт. В тестовой вкладке программы настройки примеры интерфейса управлением двигателя работают не так, как хотелось бы, но зато оказалось, что там есть команды, не описанные в документации. При использовании тестовых режимов программа указывает, какие данные она пересылает в датафрейме, и стало видно, что кроме команд позиционирования А1-А6 также используются команды А7 и А8, и последняя команда как раз подошла для нашей задачи.

Сейчас прошивка реализована следующим образом: от джойстика или от внешней управляющей программы (в итоге это будет нейрокомпьютерный интерфейс) приходит команда, что нужно выставить угол экзокисти в заданное значение. Прошивка определяет текущее положение двигателя, если угол больше, то подается команда на движение в обратную сторону, положение кисти постоянно контролируется.

Энкодер двигателя очень чувствительный – он позволяет позиционировать двигатель с точностью до сотых долей градуса. При команде на остановку двигатель по инерции проходит еще несколько сотых градуса, и без усреднения данных положения энкодер постоянно пытался бы вернуть двигатель точно в заданное положение, опять бы проскакивал его по инерции и т.д., что вызывало бы постоянное дерганье. Усреднил показания позиции, разделил их на 100 и отбросил дробную часть, чтобы сравнивались только целые градусы углов, поскольку точность в 1 градус вполне достаточна, а лишних дерганий удается избежать.


Добавил в прошивку подстраховку, что в случае неисполнения двигателем команды на остановку она будет посылаться снова и снова, пока двигатель не остановится. Кроме того, есть команда на аварийное отключение двигателя, если что-то идет не так.

Также добавил в прошивку работу с внешними интерфейсами через последовательный порт в формате JSON, через которые прошивка будет получать команды от внешней управляющей программы. На Java написана ретранслирующая программа, которая принимает пакеты по протоколу UDP, пересылает их в Ардуино по serial, с последовательного же порта получает ответ от платы и пересылает его обратно в управляющую программу высокого уровня по UDP. Это необходимо для обратной совместимости со сторонним программным обеспечением.

Показать полностью 1 1

Электроника для новичков: разводка плат, заказ сборки, прошивка

Привет, Пикабу! Делюсь подробнейшим двухчасовым гайдом по разводке плат в бесплатном редакторе EasyEDA с особенностями разводки под микроконтроллер (на примере AVR), а также рассмотрим заказ сборки платы силами китайцев, прошивку МК и работу с ним в среде Arduino.


Уроки направлены в первую очередь на новичков, которые хотят научиться делать платы под свои электронные поделки. Объясняю всё максимально простыми словами, как сам бы хотел слышать будучи новичком. Прикладываю план уроков, чтобы было понятно, о чём идёт речь:


Первая часть с канала AlexGyver - общий подробный гайд по работе в EasyEDA, включает в себя:

00:01:14 - Обзор возможностей программы

00:04:21 - О сайте и оффлайн версии

00:06:07 - Менеджер проектов и библиотек

00:12:00 - Ещё немного по интерфейсу

00:14:39 - Обзор инструментов рисования

00:16:30 - ВКЛЮЧАЕМ РУССКИЙ ЯЗЫК

00:17:39 - Обзор инструментов создания схемы

00:23:22 - Настройки в верхнем меню, экспорт схемы

00:24:50 - Продолжаем делать схему

00:27:50 - Доделываю свою схему

00:30:29 - Конвертируем схему в плату

00:31:00 - Верхнее меню PCB

00:34:14 - Правое меню PCB

00:38:01 - Инструменты разводки и оформления платы

00:47:25 - Готовимся к разводке

00:18:16 - Автотрассер, настройки

00:52:08 - Земляной полигон

00:56:01 - По поводу силовых частей платы

01:01:29 - Вставка компонентов в плату

01:02:58 - Привязываем 3D модели

01:06:04 - Создаём компонент схемы

01:08:00 - Создаём компонент платы

01:10:12 - Продолжаем делать его

01:10:28 - Привязываем футпринт к компоненту

01:11:50 - Режим симуляции

01:13:58 - Вывод картинки платы для ЛУТ

01:14:54 - Панелизация плат и заказ с JLCPCB

01:18:10 - Обзор полученных плат

01:20:09 - Переделал свою плату, обзор

01:21:58 - Создание "модуля"

01:22:49 - Пытаемся выгодно заказать платы =)

01:24:30 - Делаем плату для проекта из модулей


Вторая часть с канала Заметки Ардуинщика ориентирована на работу с микроконтроллером, особенности разводки платы, тактирования и прошивки при помощи программатора и bootloader'а.

01:51 - Зачем делать проект на плате?

04:22 - Три главных момента

04:57 - Тактирование

06:18 - Переходим в EasyEDA

08:24 - Частота тактирования

09:03 - Конденсатор и питание

09:45 - Кнопка перезагрузки

10:11 - Рекомендации по разводке платы

10:43 - Пример с ATtiny

10:51 - Прошивка

11:50 - Выводим UART

12:36 - Добавляю светодиоды

13:05 - Как прошиваться по USB?

13:57 - JLCPCB SMT сервис

14:43 - Заказ плат и сборки на JLCPCB

18:00 - Настройка Arduino IDE, ядра

18:45 - Фьюзы

20:51 - Немного о ксенофобии

22:31 - Обзор плат

23:52 - Ещё немного о тактировании

24:56 - Плата с ATtiny

26:34 - Плата с ATmega


Также прикладываю список "работы над ошибками и неточностями" из комментариев под видео:

Первая часть:

1. У инструмента "полигон" для печатной платы в настройках можно поставить "вырез" - тогда он сделает физически вырез в плате (при заказе у китайца), например так можно отделить высоковольтную часть, посмотрите например на ардуиновское реле

2. Русский язык в программе есть, смотрите дальше

3. Дорожки после неудачной разводки можно убрать при помощи Ctrl+Z

4. Всё дорожки с платы можно убрать из меню Edit/Unroute all

5. Можно вывести одиночную плату и сделать panel непосредственно на сайте jlcpcb (указать сколько штук). Выходит на несколько центов дешевле, чем заказывать плату с панелизацией EasyEda :)


Вторая часть:

1. "Минимальное количество компонентов" не всегда соответствует, чаще всего можно заказать пару штук при указанных 100+

2. USB-UART можно поставить CH340C - ей не нужен внешний кварц

3. 9:00 есть там в Basic кварц SMD на 8 МГц

4. 14:30 для SMT не V-cut, а второй способ, с отверстиями

5. Резистор на RST можно не ставить, если от RST не идёт длинная дорожка и/или нет кнопки

6. Электролиты и прочие емкости ставить до стабилизатора

7. Можно включить "Confirm Production file" - перед производством вам вышлют подтверждение и файлы для проверки, все ли в порядке

8. В "ядрах" нельзя писать чисто PB PD как в видео! Эти слова задефайнены на номера в порте, то есть PB0 и PD0 равны 0. Читайте описание ядер, в миникоре например нужно дописать PIN_ для работы с дигиталрайтом, например digitalWrite(PIN_PB5, HIGH)

9. Земля балластных конденсаторов от кварца должна идти отдельной дорогой (не полигоном) к ближайшей земляной ноге, чтобы прочие токи через нее не текли

10. Конденсатор 0.01 мкФ надо размещать рядом с каждым выводом питания, а для Avcc еще и бусинку последовательно добавить или хотя бы резистор

Показать полностью 1

RP2040 - разбираем даташиты. Часть 2.1.2: Доступ к атомарному регистру

Содержание:

Часть 1: Введение

Часть 1.3: Чип

Часть 1.4: Распиновка

Часть 2: Описание системы

Часть 2.1.1: Матрица AHB-Lite


Каждому блоку периферийных регистров выделяется 4 КБ адресного пространства, доступ к регистрам осуществляется одним из 4 методов, выбранных посредством декодирования адреса.


Addr + 0x0000: нормальный доступ для чтения и записи

Addr + 0x1000: атомарное исключающее "или" при записи

Addr + 0x2000: установка атомарной битовой маски при записи

Addr + 0x3000: очистка атомарной битовой маски при записи


Это позволяет изменять отдельные поля регистра управления без выполнения последовательности чтения-изменения-записи в программном обеспечении: вместо этого изменения отправляются на периферийное устройство и выполняются на месте. Без этой возможности трудно безопасно получить доступ к регистрам ввода-вывода, когда подпрограмма обслуживания прерывания выполняется одновременно с кодом, выполняемым на переднем плане, или когда два процессора выполняют код параллельно.


Четыре псевдонима атомарного доступа занимают в общей сложности 16 КБ. Большинство периферийных устройств на RP2040 обеспечивают эту функциональность изначально, а атомарная запись имеет те же временные характеристики, что и обычный доступ для чтения/записи. Некоторые периферийные устройства (I2C, UART, SPI и SSI) вместо этого имеют эту функциональность, добавленную с помощью промежуточного устройства шины, которое переводит восходящие атомарные записи в нисходящие последовательности чтения-изменения-записи на уровне периферийного устройства. Это увеличивает время доступа на два системных тактовых цикла.


SIO (Часть 2.3.1), одноцикловый блок ввода-вывода, подключенный непосредственно к портам ввода/вывода ядер, не поддерживает атомарный доступ на уровне шины, хотя некоторые отдельные регистры (например, интерфейс ввода/вывода общего назначения) имеют псевдонимы set / clear / xor.


2.1.3. Мост APB


Мост APB связывает высокоскоростное основное соединение AHB-Lite с периферийными устройствами с более низкой пропускной способностью. В то время как матрица AHB-Lite предлагает доступ с нулевым временем ожидания повсюду, доступ к APB имеет штраф за цикл:

- Доступ к шине APB занимает минимум два цикла (фаза настройки и фаза доступа)

- Мост добавляет дополнительный цикл для доступа на чтение, так как запрос и ответ шины регистрируются.

- Мост добавляет два дополнительных цикла для доступа к записи, так как этап настройки APB не может начаться, пока данные записи AHB-Lite не станут действительными.


В результате пропускная способность части APB структуры шины несколько ниже, чем у части AHB-Lite. Однако пропускной способности более чем достаточно для насыщения последовательной периферии APB.


2.1.4. "Узкая" запись в регистр ввода/вывода


Отображенные в память регистры ввода/вывода на RP2040 игнорируют ширину доступа для чтения/записи по шине. Они обрабатывают все записи, как если бы они были размером 32 бита. Это означает, что программное обеспечение не может использовать запись байтов или полуслов для изменения части регистра ввода-вывода: любая запись по адресу, где 30 старших битов адресов совпадают с адресом регистра, повлияет на содержимое всего регистра.


Для обновления части регистра ввода-вывода без последовательности чтения-изменения-записи лучшим решением на RP2040 является атомарные set/clear/XOR (см. Раздел 2.1.2). Обратите внимание, что это более гибко, чем запись байтов или полуслов, так как любая комбинация полей может быть обновлена за одну операцию.


После 8-битной или 16-битной записи (такой как инструкция strb на Cortex-M0+) регистр ввода-вывода будет производить выборку всей 32-битной шины данных записи. Cortex-M0+ и контроллер прямого доступа к памяти на RP2040 всегда будут реплицировать "узкие" данные по шине:


https://ideone.com/Qk6Vxz (код с комментариями и выводом на русском)


https://github.com/raspberrypi/pico-examples/blob/2fb08a028f... (оригинальный код)

Показать полностью

RP2040 - разбираем даташиты. Часть 2.1.1: Матрица AHB-Lite

Содержание:

Часть 1: Введение

Часть 1.3: Чип

Часть 1.4: Распиновка

Часть 2: Описание системы


В центре шины RP2040 находится полносвязная матрица 4:10. Её 4 восходящих порта подключены к 4 мастерам системной шины, а 10 нисходящих портов подключаются к ведомым устройствам AHB-Lite с самой высокой пропускной способностью (а именно, интерфейсам памяти) и к нижним уровням структуры. На рисунке 5 показана структура матрицы AHB-Lite 2:3, устроенная аналогично матрице 4:10 на RP2040, но ее легче показать на схеме.

RP2040 - разбираем даташиты. Часть 2.1.1: Матрица AHB-Lite Спецификация, Datasheet, Raspberry pi, Перевод, Длиннопост

Матрица состоит из двух компонентов:


Разветвители:

- Выполняют декодирование адреса

- Маршрутизируют запросы (адреса, запись данных) в нисходящий порт, указанный при декодировании начального адреса

- Маршрутизируют ответы (чтение данных, ошибки шины) от правильного арбитра обратно на восходящий порт

Арбитры:

- Управляют одновременными запросами к нисходящему порту

- Маршрутизируют ответы (чтение данных, ошибки шины) на правильный разветвитель

- Реализуют правила приоритета шины


Основная матрица на RP2040 состоит из 4 разветвителей 1:10 и 10 арбитров 4: 1 с сеткой из 40 каналов шины AHB-Lite между ними. Обратите внимание, что, поскольку AHB-Lite является конвейерной шиной, разветвитель может направлять обратно ответ на предыдущий запрос от нисходящего порта A, в то время как новый запрос к нисходящему порту B уже выполняется. Это не влечет за собой никаких штрафов за цикл.


2.1.1.1. Приоритет шины


Арбитры в главной матрице AHB-Lite реализуют двухуровневую схему приоритета шины. Уровни приоритета настраиваются предварительно, при помощи регистра BUS_PRIORITY в блоке регистров BUSCTRL.


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


ПРИМЕЧАНИЕ

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


При доступе к ведомому устройству с нулевыми состояниями ожидания, таким как SRAM (т.е. к нему можно получить доступ один раз за цикл системной тактовой частоты), ведущие устройства с высоким приоритетом никогда не будут наблюдать никакого замедления или других эффектов синхронизации, вызванных доступом от низкоприоритетных мастеров. Это обеспечивает гарантированную задержку и пропускную способность для случаев использования с гарантированной работой в режиме реального времени; однако это означает, что мастер с низким приоритетом может остановиться до тех пор, пока не будет свободного цикла.


2.1.1.2. Счетчики производительности шины


Счетчики производительности автоматически подсчитывают количество обращений к основным арбитрам AHB-Lite. Это может помочь в диагностике проблем с производительностью в случаях использования в проектах с высоким трафиком.


Есть четыре счетчика производительности. Каждый из них представляет собой 24-битный счетчик насыщения. Значения счетчика можно прочитать из BUSCTRL_PERFCTRx и очистить, записав любое значение в BUSCTRL_PERFCTRx. Каждый счетчик может одновременно подсчитывать одно из 20 доступных событий, выбранных в BUSCTRL_PERFSELx. Доступны следующие события шины:

RP2040 - разбираем даташиты. Часть 2.1.1: Матрица AHB-Lite Спецификация, Datasheet, Raspberry pi, Перевод, Длиннопост
Показать полностью 2

Уроки Ардуино. Прерывания таймера

В этом уроке расскажу для чего нужны прерывания таймера и как ими пользоваться.

RP2040 - разбираем даташиты. Часть 2: Описание системы

Содержание:

Часть 1: Введение

Часть 1.3: Чип

Часть 1.4: Распиновка


В этой главе описаны ключевые особенности системы RP2040, включая процессор, память, способ подключения блоков, тактовую частоту, сброс, питание и ввод-вывод. См. обзорную диаграмму на Рисунке 2.


2.1 Шина данных


Шина RP2040 маршрутизирует адреса и данные через микросхему.


На рисунке 4 показана высокоуровневая структура коммутационной сети шины. Основная матрица AHB-Lite направляет адреса и данные между своими 4 восходящими портами и 10 нисходящими портами: в каждом цикле может происходить до четырех передач по шине. Все тракты данных имеют ширину 32 бита. Устройства памяти имеют выделенные порты на главной панели, чтобы удовлетворить их требования к высокой пропускной способности. Периферийные устройства AHB-Lite с высокой пропускной способностью имеют общий порт на кросс-панели, а мост APB обеспечивает доступ по шине к регистрам управления системой и периферийным устройствам с низкой пропускной способностью.

RP2040 - разбираем даташиты. Часть 2: Описание системы Спецификация, Datasheet, Raspberry pi, Перевод

Структура шины соединяет 4 мастера AHB-Lite, то есть устройства, которые генерируют адреса:

- Ядро процессора 0

- Ядро процессора 1

- Порт чтения на контроллере прямого доступа к памяти

- Порт записи на контроллере прямого доступа к памяти


Они соединены с 10 нисходящими портами на главной шине:

- Постоянное запоминающее устройство (ПЗУ)

- Память с поддержкой функции исполнения на месте (Flash XIP)

- Статическая память с произвольным доступом (SRAM) по одному модулю на порт (0-5)

- Периферийные устройства Fast AHB-Lite: контроллеры программируемого ввода/вывода (PIO0, PIO1), универсальная последовательная шина (USB), регистры управления прямым доступом к памяти и исполнению на месте (один общий порт)

- Мост ко всем периферийным устройствам APB и регистрам управления системой


Четыре мастера шины могут получить доступ к любым четырем различным портам матрицы одновременно, структура шины не добавляет состояния ожидания при любом принудительном доступе через AHB-Lite. Таким образом, при системной частоте 125 МГц, максимальная устойчивая пропускная способность шины составляет 2,0 ГБ/с. Карта адресов системы организована таким образом, чтобы сделать эту параллельную полосу пропускания доступной как можно большему количеству программных вариантов использования - например, чередующийся псевдоним SRAM (раздел 2.6.2) распределяет доступ к основной памяти по четырем портам матрицы (SRAM0… 3), поэтому большее количество обращений к памяти может происходить параллельно.

Показать полностью 1

GSM900 для arduino - need help

Всем привет, уважаемые члены сообщества Arduino & Pi, разрешите обратиться к нашему коллективному разуму и ПЗУ - сравнительно недавно, хотя может и пару лет прошло, впрочем неважно: я видел или здесь у нас на Пикабу или возможно на Ю-тюбе - решение проблемы включения GSM900 shield (картинка из инета, ни на что не претендую).

GSM900 для arduino - need help Arduino, YouTube, Помощь

В общем суть сводилась к тому, что недобросовестные китайцы при копировании оригинального шилда, забывали допаять один из smd резисторов и модуль тупо не стартовал, хотя и бодренько помаргивал светодиодами регистрации в сети...


Внимание вопрос - кто-то может сталкивался с подобным или видел этот пост на Пикабу / ролик на Ю-тюбе и помнит расположение данного резистора и номинал?


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

Показать полностью 1

RP2040 - разбираем даташиты. Часть 1.4: Распиновка

Содержание:

Часть 1: Введение

Часть 1.3: Чип


В этом разделе содержится краткий справочник по распиновке и функциям контактов. Полную информацию, включая электрические характеристики и чертежи корпуса можно найти в части 5.


1.4.1. Расположение контактов

RP2040 - разбираем даташиты. Часть 1.4: Распиновка Спецификация, Datasheet, Перевод, Raspberry pi, Длиннопост

1.4.2. Описание контактов

RP2040 - разбираем даташиты. Часть 1.4: Распиновка Спецификация, Datasheet, Перевод, Raspberry pi, Длиннопост

1.4.3. Функции контактов интерфейса ввода/вывода общего назначения


Каждый отдельный вывод интерфейса ввода/вывода общего назначения может быть подключен к внутреннему периферийному устройству с помощью функций интерфейса ввода/вывода общего назначения, определенных ниже. Некоторые внутренние периферийные соединения присутствуют в нескольких местах, чтобы обеспечить некоторую гибкость на системном уровне. SIO, PIO0 и PIO1 могут подключаться к любому контакту GPIO и управляются программным обеспечением (или конечными автоматами с программным управлением), поэтому могут использоваться для реализации многих функций.

RP2040 - разбираем даташиты. Часть 1.4: Распиновка Спецификация, Datasheet, Перевод, Raspberry pi, Длиннопост
RP2040 - разбираем даташиты. Часть 1.4: Распиновка Спецификация, Datasheet, Перевод, Raspberry pi, Длиннопост
Показать полностью 4
Отличная работа, все прочитано!