Сообщество - Arduino & Pi

Arduino & Pi

1 493 поста 20 825 подписчиков

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

27

RP2040 - разбираем даташиты. Часть 1: Введение

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


RP2040 - дебютный микроконтроллер от Raspberry Pi. Он демонстрирует наши наши фирменные ценности: высокую производительность, низкую стоимость, и простоту использования в среде микроконтроллеров.


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


С подробной документацией, безупречной поддержкой MicroPython и загрузчиком UF2 в ПЗУ, он имеет минимально возможный порог вхождения как для начинающих пользователей, так и для  любителей.


RP2040 - это устройство без сохранения состояния с поддержкой технологии кэшированного выполнения на месте (XIP) из внешней памяти QSPI. Это архитектурное решение позволяет вам выбрать подходящую плотность энергонезависимой памяти для вашего проекта и извлечь выгоду из возможности использования дешёвой Flash-памяти.

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


Ключевые особенности:

- Два ядра ARM Cortex-M0+ @ 133МГц

- 264 КБ встроенной статической памяти с произвольным доступом в шести независимых банках

- Поддержка до 16 МБ внешней флэш-памяти через выделенную шину QSPI

- Контроллер с технологией прямого доступа к памяти

- Полносвязная коммутационная матрица AHB

- Периферийные устройства интерполяции и целочисленного деления

- Встроенный программируемый стабилизатор с низким падением напряжения для генерации напряжения ядра

- 2 встроенных петли фазовой подстройки частоты для генерации тактовой частоты USB и ядра

- 30 контактов интерфейса ввода/вывода общего назначения, 4 из которых могут использоваться как аналоговые входы

- Периферия:

- 2 универсальных асинхронных приёмопередатчика

- 2 контроллера последовательного периферийного интерфейса

- 2 контроллера I2C

- 16 каналов с широтно-импульсной модуляцией

- контроллер USB 1.1 с PHY, поддерживающий режимы как хоста, так и устройства

-  8 конечных автоматов подсистемы программируемого ввода-вывода


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


1.1. Почему чип был назван RP2040?


Цифры в названии обозначают следующее (Рис. 1):

1. Количество ядер процессора (2)

2. Тип используемого процессора (M0+)

3. floor(log2(ram / 16k)) (целая часть от логарифма по основанию 2 частного объёма оперативной памяти и 16 000)

4. floor(log2(nonvolatile / 16k)) (целая часть от логарифма по основанию 2 частного объёма энергонезависимой памяти и 16 000 или 0, если нет встроенной энергонезависимой памяти)

RP2040 - разбираем даташиты. Часть 1: Введение

1.2. Основные сведения


RP2040 - это недорогой высокопроизводительный микроконтроллер с гибкими цифровыми интерфейсами. Ключевые особенности:


- Два ядра процессора Cortex M0 +, до 133 МГц

- 264 КБ встроенной статической памяти с произвольным доступом в 6 банках

- 30 линий интерфейса ввода/вывода общего назначения

- 6 выделенных линий ввода/вывода SPI Flash (с поддержкой выполнения на месте)

- Специальное оборудование для часто используемых периферийных устройств

- Программируемый ввод/вывод для расширения поддерживаемых периферийных устройств

- 4-канальный аналогово-цифровой преобразователь с встроенным датчиком температуры, 500 000 выборок в секунду с разрешением 12-бит

- USB 1.1 в режиме хоста или устройства


(Это была первая часть планируемой серии об этом чипе. В дальнейшем, мы разберём его архитектуру, строение, распиновку, варианты применения, внутренние функции и многое-многое другое. Оставайтесь на связи!)

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

Автоматическая кормушка для домашних животных

Всем привет! У меня тут к сезону отпусков есть две версии автоматических кормушек для котанов и прочей домашней живности. Обе версии на базе Ардуино, сантеха и шнекового типа подачи сухого корма из бункера. Вторая версия прошла боевые испытания и кормила котов больше двух месяцев: не стал выключать после отпуска, потому что коты к ней привыкли.

Скоро планирую сделать третью версию с весами и управлением через Web!

Вот схемы обеих версий, а вся информация по сборке как обычно в видео, страницы проектов на гитхаб соответственно версия 1 и версия 2.

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

Уроки Ардуино. Управление переменным током

В этом уроке разберём управление нагрузкой переменного тока при помощи Ардуино. Как релейное, так и плавное при помощи симистора и твердотельного реле при помощи различных алгоритмов и костылей =)

13

RP2040 - разбираем даташиты

RP2040 - разбираем даташиты

Эта статья - вводная в цикле переводов даташита на чип RP2040, которые будут появляться здесь. Надеюсь, это будет интересно и познавательно для Вас, и Вы сможете узнать для себя что-то новое.


Raspberry Pi Foundation всегда знает чем порадовать или удивить нас, а так же как подталкивать других производителей на интересные шаги и решения для хорошей конкуренции.

В четверг (рыбный день, кстати) 21-ого января 2021 года был анонсирован выпуск нового микроконтроллера RP2040.


Честно говоря, я прочитал эту новость и не планировал ничего делать по этому поводу. Но потом случайно заметил несколько особенностей этого микроконтроллера, что разбудило любопытство во мне. Очень привлекло наличие PIO блоков и множество PWM. Справедливости ради, PWM можно как-то решить, а вот с PIO есть смысл поиграться.


Приведу часть технических характеристик:

Два ядра Arm Cortex-M0+ @ 133 МГц

264 КБ памяти (284 КБ если отключить XIP кеширование и использовать память USB)

2 МБ флеш-память с XIP кешированием. В RP2040 нет встроенной флеш-памяти, поэтому чип распаян на плате. У RP2040 есть поддержка до 16 МБ внешней флеш-памяти

DMA контроллер

4 x 12-разрядных аналоговых входа (на Pico доступно для пользователя 3 из них)

2 × UART

2 × SPI

2 × I2C

16 × PWM каналов

Встроенный сенсор температуры

Всего 30 GPIO пинов (3,3 вольта)

MicroUSB B порт с USB 1.1 контроллером и поддержкой хоста

2 × PIO блока для своих собственных интерфейсов

2 x PLL (один для USB, второй для остального)

Поддержка UF2 для загрузки бинарников

Поддержка SWD для загрузки и отладки

Поддержка спящих режимов и пониженной частоты для снижения потребления


PIO блоки дают возможность создавать свои интерфейсы. Например, можно запрограммировать интерфейс WS2812, добавить I2S, SDIO или VGA и т.п.


Ещё одна интересная штука: ядро Cortex-M0+ не содержит в себе блока вычислений с плавающей запятой. Обычно это эмулируется библиотеками GCC, но тут Raspberry Pi использует более быстрое оптимизированное решение от автора Qfplib, которое лицензировано для использования на RP2040.

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

Ответ на пост «20 способов помигать светодиодом на Arduino»1

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

Регулировать будем без использования библиотеке и модулей – максимально понятными командами.


Немного теории о ШИМ-регулировании.

1. Если часто мигать светодиодом, то глаз человека не сможет заметить мерцания, картинка станет непрерывной, как кино с плёнки. У гомо сапиенс этот предел равен 24 картинки в секунду. Опытным путем я установил, что при существующей инерции кристалла светодиода и скорости Ардуины, если мигать светодиодом с паузой 23 мс, то уже мерцания не видно.

2. Изменять яркость светодиода можно зажигая его не НЕНАДОЛГО. Например, если быстро-быстро включать и выключать светодиод с равными паузами, то в него «вольётся» половина мощности (по сравнению с постоянно включенным), а за счет быстрой-быстрой смены состояний глаз не заметит мерцания, но увидит уменьшение яркости.

3. Изменяя длину паузы в выключенном состоянии и длину паузы во включенном можно менять и вкачиваемую мощность, например, 1 «тик» светодиод включен и 99 «тиков» выключено итого вкачается 1% мощности. Кстати, соотношение паузы «ОТКЛ» к паузе «ВКЛ» характеризуется скважностью импульсов.

4. Регулировать мощность (не только светодиодов) можно аналоговым способом (например, меняя уровень напряжения на выходе) или цифровым – быстро-быстро подавая в нагрузку либо полный ток, либо полное отсутствие тока. Второй метод намного экономичнее – так как на закрытом транзисторе не теряется мощность, а на открытом теряется минимально.

5. Наконец, простые методы изменения скважности (то есть, цифровой регулировки мощности) бывают со строгой частотой (это ШИМ) и с плавающей (это ЧМ). Широтно-импульсная модуляция отличается от частотной только тем, что в первой изменяется одновременно и длина паузы «ВКЛ» и длина паузы «ОТКЛ» причем так, чтобы их сумма составляла некую константу - тогда частоты периода будет всегда одинакова (нам это важно, чтобы глазу не было видно мерцания, а в электронике это удешевляет настройку фильтров); во второй же – меняется пауза только одного состояния.

Теперь, описание скетча.

Первая строка «#define ledPin 13» - лишняя, номер пина можно указывать прямо в коде, но он там встречается 6 раз, что при переназначении неудобно (см. видеоролик).

В блоке «setup» мы просто задаём режим работы пина – как выход.

Наконец, в блоке «loop» сначала запускаем цикл, где от меняем паузу включения от 0 до 22 мс, одновременно рассчитываем паузу включения от 23 до 1 мс – суммарно каждый период составляет всегда 23 мс. На последнем шаге этого цикла светодиод мы зажигаем на 22 мс, а гасим на 1 мс – то есть максимальная ШИМ-яркость.


Для удобства группирования участков кода в этом «уроке» я позволил себе разместить по два оператора в строке.

После завершения первого цикла светодиод погаснет на 1 мс и уже не включится, так как цикл закончился, поэтому зажигаем его принудительно и оставляем в таком состоянии на 200 мс (подобрано опытным путём – это приятная пауза на пике максимальной яркости).

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

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

20 способов помигать светодиодом на Arduino1

Шуточный первоапрельский урок про различные способы мигания светодиодом на Arduino: от стандартных примеров до костылей с перезагрузкой и ассемблером!

528

Большой урок по цифровой фильтрации данных

В уроке разобраны самые простые и популярные цифровые фильтры данных применительно к C++ и Ардуино:

- Среднее арифметическое

- Скользящее среднее

- Медианный фильтр

- Упрощённый Калман

- Линеаризация наименьшими квадратами

Фильтры протестированы на синтетическом "шумном" сигнале

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

Строим графики в Arduino IDE

В этом уроке покажу как пользоваться встроенным в Arduino IDE плоттером. Он поддерживает вывод нескольких графиков, вывод подписей, а также ввод данных обратно в программу!

Отличная работа, все прочитано!