Ниже представлен проект недорого USB осциллографа с применением STM32 микроконтроллера. Особенности устройства:
— использование очень дешевых STM32F103 микроконтроллеров в LQFP48 корпусе.
— односторонняя печатная плата, удобная для изготовления в домашних условиях.
— выборка 2x461kSps (2x300kSps в старых версиях), 8 бит, передача данных по USB в реальном времени.
— прошивка по UART.
— диапазон рабочих напряжений 0 — 6.6 Вольт. Нестандартное входное сопротивление 20 кОм (к несчастью, большее значение вызывает помехи на АЦП. Возможно, это можно исправить использованием ОУ. Обратите внимание: сопротивление может быть увеличено при использовании новой прошивки, которая использует отдельный АЦП для каждого канала).
Сигнал 300 мВ снятый при помощи miniscope v4:
Общая стоимость компонентов не превысила 10$.
Принципиальная схема USB-осциллографа:
Печатная плата — односторонняя, размер 66мм x 36мм.
Среда разработки
Для разработки miniscope v2 необходимо было выбрать среду разработки для STM микроконтроллеров. В этом файле лежат примеры проекта для IAR, Keil, RIDE, HiTop и TrueSTUDIO. К сожалению, не один из них мне не подошел. RIDE и HiTop требуют покупки лицензии через 7 дней. Пробные версии IAR и Keil имеют ограничение на размер кода и забирают очень много дискового пространства. То же самое с TrueSTUDIO.
В результате я выбрал CooCox, дистрибутив которого весит 115 МБ и около ~ 800 МБ после установки и распространяется бесплатно.
Прошивка микроконтроллера
На плате нет JTAG/SWD разъема, так как прошивка должна быть загружена по UART. Чтобы войти в режим загрузки, нажмите и удерживайте кнопку BOOT при нажатии кнопки RESET. Программа STM «Flash Loader Demo» без проблем работает с USB-UART переходником. Нормальное напряжение на выводах микроконтроллера 5В, поэтому можно использовать 5 или 3.3В RS232-UART/USB-UART переходник.
Кнопка RESET может быть удалена — микроконтроллер переходит в режим загрузки при нажатой кнопке BOOT если USB подключен.
Так как USB подключено без 1.5 кОм подтягивающих резисторов, его необходимо заново подключить после прошивки.
Проект для тестирования микроконтроллера и зуммер: stm32scopeTest.7z
Советы по передаче данных по USB
Используйте CDC в качестве шаблона. Есть две конечных точки BULK. Для повышения скорости CDC потребуются небольшие изменения.
1. Уменьшите значение VCOMPORT_IN_FRAME_INTERVAL. Я не уверен, что значение = 1 подходит при двунаправленной передаче, поэтому я поставил значение = 2.
2. Увеличение значения USART_RX_DATA_SIZE. Я использовал 8192 байт (2 х 4 Кб), но я думаю, что существенной разницы при использовании 4096 байт.
3. Изменение Handle_USBAsynchXfer, т.к. он не будет передавать данные, если USART_Rx_Buffer будет полный. Таким образом, после каждого номера SOF будет отправлен максимальный по номеру байт.
Убедитесь, что на ПК приложение постоянно готово к приему данных. Убедитесь, что приоритет чтения для него выше, чем у других приложений. Я использовал libusb, поэтому я использовал сочетания usb_submit_async / usb_reap_async для задания очереди запросов чтения.
Я не интересовался высокой скорость передачи данных с ПК, поэтому у меня нет советов по этому поводу. Miniscope v2c оправляет данные на ПК с максимально возможной скоростью. Данные отправляемые с ПК незначительны (ID запроса, изменение аналогового усиления).
Список радиоэлементов
Обозначение | Тип | Номинал | Количество | Примечание | Магазин | Мой блокнот |
---|---|---|---|---|---|---|
Микроконтроллер | STM32F10XCXT6 | 1 | STM32F103? | |||
IC1 | Линейный регулятор | LF33 | 1 | |||
D1-D4 | Диод Шоттки | BAT42 | 4 | |||
C1 | Электролитический конденсатор | 10 мкФ | 1 | |||
C2 | Электролитический конденсатор | 100 мкФ | 1 | |||
C3, C4, C6-C9, C13 | Конденсатор | 100 нФ | 7 | |||
C5 | Электролитический конденсатор | 22 мкФ | 1 | |||
C10, C12 | Конденсатор | 2 | ||||
C11, C14 | Конденсатор | 47 пФ | 2 | |||
C15, C16 | Конденсатор | 22 пФ | 2 | |||
R1-R3, R7, R10 | Резистор | 10 кОм | 5 | |||
R4, R8 | Резистор | 27 Ом | 2 | |||
R5, R6 | Резистор | 100 Ом | 2 | |||
R9 | Резистор | 1.5 кОм | 1 | |||
Q1 | Кварц | 8 МГц | 1 | |||
L1 | Дроссель | BL01RN1A | 1 | |||
SG1 | Пьезоизлучатель | F/TMB | 1 | |||
S1, S2 | Кнопка | Замыкающая | 2 | |||
X1 | Разъём | USB | 1 | |||
JP2 | Разъём | PLS-4 | 1 | Входы | ||
JP3 | Разъём | PLS-3 | 1 | UART | ||