Raspberry Pi Pico редко воспринимают как инструмент для серьёзных измерений.
Чаще всего его ADC используют «по-ардуиновски»: один analogRead() в основном цикле, иногда — в таймере. В таком режиме Pico действительно выглядит посредственно.
Но если подключить DMA, правильно настроить FIFO ADC и убрать ядра из критического пути, Pico неожиданно превращается в вполне серьёзный инструмент сбора данных — вплоть до сотен тысяч измерений в секунду.
Разберём, что на самом деле скрывается внутри ADC RP2040 / RP2350 и где проходит граница реальных возможностей.
Что представляет собой ADC в Pico на самом деле
Основные характеристики (которые все знают)
- 12-битный SAR ADC
- до 500 kS/s (теоретически)
- 4 внешних канала + температурный датчик
- один ADC на оба ядра
На бумаге — ничего выдающегося. Но есть нюансы.
FIFO — ключ к скорости
ADC в Pico не выдаёт данные напрямую в регистр.
Все измерения складываются в FIFO буфер, откуда их можно читать:
- ядром CPU
- или DMA-контроллером
И вот здесь начинается самое интересное.
FIFO позволяет:
- буферизовать до 4 измерений
- автоматически сигнализировать DMA
- минимизировать задержки чтения
- полностью убрать CPU из цепочки измерений
Это принципиально отличает Pico от большинства бюджетных MCU.
DMA: почему без него Pico «медленный»
Если читать ADC в цикле:
- ядро тратит десятки тактов на каждое чтение
- появляются джиттер и пропуски
- реальная скорость падает до ~50–80 kS/s
С DMA картина меняется радикально:
- ADC сам кладёт данные в FIFO
- DMA переносит их в RAM
- CPU вообще не участвует
Итог:
- стабильная частота дискретизации
- нулевой джиттер со стороны софта
- линейный поток данных в памяти
Это ровно тот же подход, что используется в осциллографах и SDR.
Реальные скорости: без маркетинга
На практике (RP2040):
| Режим | Реальная скорость |
|---|---|
| CPU polling | 50–80 kS/s |
| IRQ | ~120 kS/s |
| ADC + DMA | 300–450 kS/s |
| ADC + DMA + overclock | до ~500 kS/s |
Но есть ограничения:
- один канал за раз
- нет аппаратного триггера по уровню
- нет дифференциального входа
Что можно измерять на таких скоростях
Аудиосигналы
- 44.1 / 48 kHz — без проблем
- простой аудиорекордер
- спектроанализатор (FFT на втором ядре)
Вибрации и датчики
- акселерометры без цифрового интерфейса
- диагностика двигателей
- измерение шумов питания
Радиолюбительские эксперименты
- OOK / ASK сигналы
- простейшие FSK
- приём ИК / ультразвука
Логгеры данных
- быстрые переходные процессы
- токовые шунты
- фотодиоды
Многоканальные измерения: подводные камни
ADC в Pico — один, мультиплексированный.
Это означает:
- каналы читаются по очереди
- между каналами есть задержка
- фаза между каналами не сохраняется
Практика:
- для 2 каналов — скорость делится на 2
- для 4 каналов — на 4
- синхронных измерений нет
Если нужен настоящий многоканальный АЦП — внешний чип неизбежен.
RP2350: стало ли лучше?
В RP2350 архитектура ADC осталась похожей, но есть улучшения:
- стабильнее работа с DMA
- меньше конфликтов по памяти
- выше предсказуемость таймингов
- лучше масштабируется под RTOS
Это не «новый ADC», но более зрелая платформа для измерительных задач.
Чего Pico не умеет (и не стоит ждать)
Чтобы не было иллюзий:
— нет аппаратного sample&hold на каналах
— нет дифференциальных входов
— нет PGA (усилителя)
— нет аппаратных триггеров по уровню
— нет антиалиас-фильтра
Pico — это сырой, честный АЦП, и всю аналоговую часть придётся делать самому.
Почему это всё-таки «скрытая возможность»
Потому что:
- документация почти не акцентирует внимание на ADC+DMA
- примеры в SDK — минимальные
- большинство проектов используют ADC неправильно
- реальный потенциал раскрывается только при правильной архитектуре
Pico не заменит профессиональный осциллограф.
Но он может стать отличным измерительным ядром для собственных приборов.
Итог
Raspberry Pi Pico — это не «плохой АЦП», а АЦП, который нужно уметь готовить.
С правильной настройкой:
- DMA берёт на себя поток данных
- CPU занимается обработкой
- второе ядро — визуализацией или связью
Именно в таких задачах Pico раскрывается как инженерный микроконтроллер, а не игрушка.