Как сделать цифровой осциллограф своими руками на базе микроконтроллера STM32. Какие компоненты потребуются. Как подключить и настроить схему. Как запрограммировать микроконтроллер и создать пользовательский интерфейс. На что обратить внимание при разработке.
Необходимые компоненты для сборки осциллографа на STM32
Для создания простого цифрового осциллографа на базе микроконтроллера STM32 потребуются следующие основные компоненты:
- Отладочная плата с микроконтроллером STM32F103C8T6 (например, популярная Blue Pill)
- Дисплей для отображения осциллограмм (например, TFT-экран на контроллере ILI9341)
- Операционные усилители для входных каскадов
- Резисторы и конденсаторы для фильтров и делителей напряжения
- Кварцевый резонатор для тактирования микроконтроллера
- Разъемы для подключения измеряемых сигналов
Также потребуются программатор ST-Link для прошивки микроконтроллера и набор инструментов для пайки и монтажа.
Схема подключения компонентов осциллографа
Схема осциллографа на STM32 состоит из следующих основных блоков:
- Входные каскады на операционных усилителях для согласования уровней сигналов
- Микроконтроллер STM32F103 с подключенным кварцевым резонатором
- Цепи питания и стабилизации напряжения
- Дисплей для отображения осциллограмм и меню
- Кнопки управления для навигации по меню
При разработке схемы важно обеспечить защиту входов от перенапряжения и правильное согласование уровней сигналов. Также необходимо тщательно развести цепи питания и заземления.
Программирование микроконтроллера STM32 для осциллографа
Для программирования микроконтроллера STM32 можно использовать следующие инструменты:
- Среда разработки STM32CubeIDE
- Библиотека HAL для работы с периферией STM32
- Библиотека для работы с выбранным дисплеем
Основные задачи, которые должна решать прошивка осциллографа:
- Настройка и управление АЦП для оцифровки входного сигнала
- Обработка и масштабирование полученных данных
- Отрисовка осциллограмм на дисплее
- Реализация пользовательского интерфейса и обработка нажатий кнопок
- Настройка параметров развертки, чувствительности, триггера и т.д.
Создание пользовательского интерфейса осциллографа
Пользовательский интерфейс осциллографа должен обеспечивать удобное управление всеми функциями прибора. Основные элементы интерфейса:
- Область отображения осциллограмм с координатной сеткой
- Индикация параметров развертки и чувствительности
- Меню для настройки параметров измерений
- Отображение измеренных значений (частота, амплитуда и т.д.)
- Индикаторы режимов работы (автоматический/ждущий запуск и др.)
При разработке интерфейса важно обеспечить интуитивно понятное управление и информативное отображение всех необходимых данных.
Калибровка и настройка осциллографа на STM32
Для обеспечения точности измерений необходимо выполнить калибровку осциллографа. Основные этапы калибровки:
- Калибровка нулевого уровня входных каналов
- Калибровка коэффициентов усиления для разных диапазонов измерений
- Настройка временной развертки
- Калибровка триггера
Калибровку удобно выполнять с помощью эталонного генератора сигналов, подавая на вход осциллографа сигналы с известными параметрами. Процедуру калибровки рекомендуется периодически повторять для поддержания точности измерений.
Расширение функциональности осциллографа на STM32
После создания базовой версии осциллографа можно расширить его функциональность, добавив следующие возможности:
- Режим логического анализатора для работы с цифровыми сигналами
- Функция записи и воспроизведения осциллограмм
- Математические операции с сигналами (сложение, вычитание и т.д.)
- Анализ спектра сигналов с помощью БПФ
- Интерфейс для подключения к компьютеру и передачи данных
Расширение функциональности позволит создать более универсальный измерительный прибор, способный решать широкий спектр задач.
Оптимизация работы осциллографа на STM32
Для повышения производительности и улучшения характеристик осциллографа можно выполнить следующие оптимизации:
- Использование DMA для быстрой передачи данных от АЦП
- Оптимизация алгоритмов обработки и отрисовки сигналов
- Применение методов интерполяции для улучшения отображения сигналов
- Использование прерываний для обработки событий в реальном времени
- Оптимизация энергопотребления для увеличения времени автономной работы
Правильная оптимизация позволит повысить частоту дискретизации, улучшить качество отображения сигналов и снизить энергопотребление устройства.
STM32F103C8T6 — делаем осциллограф. Часть 3 / Хабр
Третья часть (первая и вторая) про то как я делаю осциллограф из отладочной платы ценой менее $3. Демонстрационное видео работы:
А описание некоторых ключевых особенностей под катом.
Аналоговая часть
Почти всё как было описано во второй части, кроме источника двухполярного питания. ОУ потребляют значительный ток (порядка 10 мА) и как не пытался схемами умножителей напряжения на диодах и конденсаторах получить приемлемых результатов — не удалось. Поэтому для положительного напряжения поставил вот такой модуль на основе МТ3608:
настроенный на 10 В выходного напряжения. А отрицательное напряжение получаю путём инвертирования положительного с помощью LT1054.
Про размер кода
В первой части я писал, что памяти потребляется очень много. Теперь я дошёл до того, что программа не влазит в память и изучил этот вопрос подробней.
CooCox CoIDE выводит информацию о размер программы в таком виде:
text data bss dec hex filename 60224 2500 10540 73264 11e30 projectName.elf
где
- text — размер сегмента с кодом, векторами прерываний и константами только на чтение;
- data — размер сегмента с инициализированными не нулём переменными;
- bss — размер сегмента с неинициализированными и инициализированными нулём переменными.
Вся программа занимает:
- флеш — text + data + 10..50 байт
- ОЗУ — data + bss + 10..50 байт
Теперь посмотрим на что тратится память. Делаем новый проект и компилируем:
text data bss dec hex filename 364 1080 32 1476 5c4 test-size.elf
Чтобы подключить файл stm32f10x.h надо в репозитоях добавить компонент STM32F10x_MD_STDLIB, который подтягивает за собой cmsis_core. В итоге для программы, записывающей одно значение в регистр получаем:
text data bss dec hex filename 1316 1104 32 2452 994 test-size.elf
Далее меня интересуют функции типа sprintf и sscanf. Чтобы их использовать надо определить некоторые функции типа _sbrk и возможно некоторых других. Я взял готовый файл (есть в архиве с проектом). Добавляем 1 вызов sscanf и получаем:
Попробуйте угадать сколько, прежде чем смотреть!
text data bss dec hex filename 39312 2264 96 41672 a2c8 test-size.elf
41 кБ флеша! Больше половины, того, что есть в контроллере!
В рабочей же прошивке при использовании printf добавление sscanf увеличивает потребление флеша на 13. 2 кБ. В итоге от sscanf отказался, а команды от ПК стал парсить менее ресурсоёмким методом.
Отказ же от printf позволяет сэкономить ещё 8.3 кБ.
Режимы работы
Реализовал 3 режима по принципу действия: непрерывный, пакетный и логический и 3 по количеству каналов: 1, 2 и 4-х канальный.
МК имеет 9 аналоговых входов, но я не представляю когда мне может понадобиться больше 4-х каналов.
Непрерывный
Тут всё просто: в главном цикле МК считываем данные АЦП и передаём их на ПК, где можем строить непрерывный график. Недостаток — ограничение скорости со стороны канала МК -> ПК. Чтобы его обойти реализовал ещё 2 режима.
Пакетный
В этом режиме МК вначале набирает данные, потом пачкой передаёт на ПК. Опционально его можно разгонять. Про разгон подробно писал в предыдущих частях.
В этом режиме возможна синхронизация. Причём можно анализировать сигнал до выполнения условия. Для реализации такого функционала пришлось изменить режим работы DMA на кольцевой, использовать прерывание заполнения половины буфера и использовать буфер вмещающий в 2 раза больше данных, чем в передаваемом пакете.
В отличие от проекта baghear у меня триггер программный. Преимущества такого решения:
- Меньше деталей, а значит меньше цена и проще монтаж;
- Возможность в будущем реализовать более сложные триггеры, а не просто «сигнал в A канале стал больше Х».
В одноканальном режиме оба АЦП по очереди преобразуют значение одного канала.
В двухканальном — каждый АЦП преобразует свой канал запускаясь одновременно с другим.
В 4-х канальном — у каждого АЦП есть 2 канала, которые он преобразует. Старт обоих АЦП одновременный.
Очевидно, что скорость частота преобразования канала обратнопропорциональна количеству каналов.
Логический анализатор
Самый быстрый режим. Примерно 20 MSPS на каждом канале. Самый быстрый код для этого режима выглядит так:
u32 i = 0; dataBuffer.u8[i] = GPIOA->IDR; dataBuffer.u8[++i] = GPIOA->IDR; dataBuffer.u8[++i] = GPIOA->IDR; dataBuffer.u8[++i] = GPIOA->IDR; dataBuffer.u8[++i] = GPIOA->IDR; dataBuffer.u8[++i] = GPIOA->IDR;
и так далее на весь буфер.
Значение переменной i в этом случае вычисляются на этапе компиляции и в итоге из dataBuffer.u8[++i] = GPIOA->IDR; получается всего 2 операции — загрузить данные в регистр из порта и сохранить данные в память по заранее посчитанному адресу. Никакими циклами такой производительности достичь не получилось.
Программа для ПК
Главные, на мой взгляд, измение — переход на OpenGL. С ним графики рисовать стало проще (для меня это оказалось неожиданно, но там всё действительно просто и кратко!), рисуются они быстрее и получаются гораздо красивей, чем были раньше.
Итог
Проект не завершён, есть глюки, допиливать ещё много чего, но каких-то прорывов уже не предвидится. Для более быстрых систем нужно другое железо, например, отдельный АЦП + ПЛИС + память — а это уже будет гораздо дороже и сложнее монтировать.
Почитав комментарии к статье «История одного осциллографа на stm32» сразу отвечу на некоторые вопросы:
- Дисплей прикручивать не собираюсь т.к.:
- Он стоит денег, а комп есть.
- По качеству будет хуже, чем на большом экране ПК.
- Создавать и изменять пользовательский интерфейс на C# проще, чем паять и перепаивать.
- Я не планирую его доводить коммерческого продукта и продавать.
- Делал для 2-х целей: освоить МК и сделать себе цифровой осциллограф.
Архив с проектом
Если у кого появятся вопросы, а тут не зарегистрированы, пишите в почту: adefikux на gmail точка com.
Осциллограф HS101 STM32 ANDROID (теперь с платой) — Схемка: Электронные Радиосхемы
Ранее уже была ознакомительная статейка по поводу осциллографа HS101, но теперь она будет дополнена и улучшена, а сама приставка собрана на печатной плате с разъемом, а не навесным монтажом.
Купить на
Aliexpress?️ Плата STM32F103C8 с USB Type-C: (2.34+1.88=4.22?): https://ali.ski/3OBPot
?️ Плата STM32F103C8 с USB Type-C: (~4?): https://ali.ski/mz03B
?️ STM32F411CEU6 USB Type-C: (~4?): https://ali.ski/YPXiCv
?️ Плата STM32F103C8T6 Micro-USB (3.87?): https://ali.ski/n3MsP
?️ Blue Pill STM32F103C8T6 Micro-USB (2.32?): https://ali.ski/-cgGP
?️ Плата STM32F030F4P6 Board (1.47?): https://ali.ski/ftgPiv
?️ Плата STM32F030F4P6 48 MHz (1.29?): https://ali.ski/5rwfw
? Мой мультиметр T21D RM113D (13.81?): https://ali.ski/FX0p0C
Схема электрическая принципиальная
В общем-то она не поменялась с того времени, ток чутка подправил.
Печатная плата
Немного переработана с учетом возможности использования компонентов сквозного монтажа.
Была выписана из Китая, подробнее в статье о заказе плат в китайских конторах.
А вот так это должно выглядеть:
Скачать проект в AD: hs101_smd_tht_pcb.zip
(пароль: название сайта)
Компоненты
Новая крутая плата. Известная синяя пилюля ( Blue Pill), но теперь с разъемом USB Type-C, как вы это любите (очевидно вдохновением была MiniF4 STM32F411CE6).
Стоит она дороже, но это того стоит.
Гнездо BNC (bayonet Neill-Concelman) самое простое (говённое кстати ).
Миниатюрные диоды поверхностного монтажа можно найти платах люминесцентных ламп.
Получившаяся приставка
Подключение прошло успешно
Раньше это выглядело не очень, а теперь просто класс :
Подключать и отключать удобно:
Прошивка
С помощью программатора-отладчика
ST-LINK V2Его можно сделать, но проще приобрести. Используется программы STM32CubeProgrammer:
1) Скачать с GitHub весь файл архив (Code -> Download ZIP).
Далее распаковать архив в любую папку.
2) Подключить STLINK к синей пилюле и его через USB к ПК или телефону:
Если была ранее произведена прошивка, то перед подключением зажать кнопку сброса ( NRST) и после подключения отпустить. Нажать Connect, подключение должно пройти успешно (в случае необходимости обновить прошивку стлинка)
3) Нажать Open File и выбрать нужную прошивку.
4) Всё завершено:
С помощью USB-TTL преобразователя
Многим будет проще прошить МК использую обычный USB-COM преобразователь и телефон.
1) Подключить преобразователь так:
RX | PA9 |
TX | PA10 |
5V | 5V |
GND | GND |
2) Перед подачей питания на плате установить перемычки так, а если кнопка, то зажать BOOT перед подключением питания.
3) Скачать приложение STM32 Utils и следовать фотоинструкции:
Ещё фото
Выглядит неплохо.
Подключение к телефону и калибровка
Теперь благодаря использованию разъема USB Type-C
можно подключать осциллограф к телефону напрямую с помощью кабеля USB-C—USB-C без всяких переходников!
Необходимо приложение HScope, урезанная демонстрационная версия бесплатна, для каждого осциллографа своя лицензия, например, HS101 стояло 7$.
Теперь можно удобно подключать щупы:
но для используемого гнезда BNC не все подошли (средний не втыкается):
Сначала желательно провести калибровку нуля. Просто замыкаем контакты щупов и в разделе Calibration жмём Calib Zero Lvl -> Continue:
Всё теперь получаемое значение при нулевом входном сигнале и будет отображено как ноль, если он был сдвинут.
Использование щупов с делителем
В программе предусмотрено умножение получаемых значений на нужный коэффициент, что очень удобно в случае деления входного напряжения, тем более что на многих щупах для этого есть удобный ползунковый переключатель.
Теперь с делителем можно подавать до 200 В:
Проверка работы
Сначала опыт с LC-контуром:
настроив срабатывания по превышению порога, подключив щупы осциллографа и зарядив конденсатор наблюдаются затухающие колебания.
Также подал прямоугольный сигнал 1 кГц, ну что на него просто смотреть, цепляю фильтр низких частот:
При увеличении сопротивления частота среза уменьшается, то де самое можно сделать программно, там есть настройки ФНЧ и ФВЧ.
Но что еще интересней, нажав на кубик можно провести Быстрое Преобразование Фурье:
Проверка на прямоугольном сигнале, это уже было:
Также изменение ширины импульса сигнала по закону синуса:
Здесь же включается ФНЧ с разным порядком:
Ещё здесь есть возможность длительной регистрации значений напряжения ( МИН, МАКС, СРЕДНЕКВАДРАТИЧЕСКОЕ), что также очень полезно.
Видосик
Итого
По итогу этим осликом буду пользоваться часто из-за красивого внешнего вида, относительно удобного управления и простого сохранения осциллограмм, что хорошо для демонстрации и публикации.
Да, опять блютуз версия проверена не будет (хотя HC-06 этом уже имеется), т.к. здесь как-то криво организовано подключение, да и с самими модулями могут быть проблемы.
hs101, осциллограф, андроид осциллограф, hs101 1ch, stm32 hs101, осциллограф stm32 adnroid, hs101 схема, hs101 circuit, hs101 прошивка, hs101 firmware
Как я создаю осциллограф на STM32 и вы тоже можете!
Детали
01
Введение
В этом руководстве описаны этапы создания осциллографа.
Напряжение: 0-3,3 В,
Частота: 1HZ-10 кГц
3 Режимы отбора проб: автоматическое, нормальное и однократное время
2 Режимы триггера: повышение края и падение
02
Environment
. Оборудование: stm32f103, 3.2 inch ILI9341 LCD display
RT-Thread:v3.0.3
IDE: MDK v5.26
03
RT-Thread Inside Part
Kernel: Scheduler, Семафор, очередь сообщений.
Планировщик: Создайте несколько потоков для разных целей.
Семафор: Используется для синхронизации потоков.
Очередь сообщений: Используется для передачи данных между потоками.
04
Аппаратная архитектура
Сигнал генератора сигналов, полученный АЦП, обрабатывается на микросхеме stm32f103 и отображается на 3,2-дюймовом ЖК-экране ILI9341.
05
Архитектура программного обеспечения
06
Программный модуль Введение
Тема:
GetWave_thread:
.
0008Поток выборки волны, определите частоту выборки на основе времени, представленного каждой сеткой на экране настроек, и определите начальную точку выборки в соответствии с порогом запуска и режимом запуска, затем сделайте выборку формы волны и сохраните ее.
PlotWave_thread:
Поток отображения формы волны; Осциллограммы отображаются в соответствии с площадью экрана.
KeyScan_thread:
Поток сканирования ключа; Прочитайте ключевые значения для преобразования и отправьте их в поток настройки.
Setting_thread:
Установите действие для выполнения потока, выполнения операции изменения элемента настроек и обновления отображаемой информации.
Очередь сообщений
setting_data_queue:
Прочитайте поток сканирования ключей и преобразуйте информацию о настройках в поток настроек, чтобы изменить настройки и отобразить обновленную информацию.
getwave_status_queue:
Используется для связи между потоком выборки сигнала и потоком отображения формы сигнала, чтобы обеспечить своевременное отображение сигнала выборки.
key_scan_queue:
Используется для связи между потоками настроек и потоками сканирования ключей, чтобы обеспечить своевременное считывание сигналов клавиш и избежать чрезмерного потребления ресурсов потоками сканирования ключей.
07
Презентация
08
Поймайте код
HTTPS://gitee.com/zhan-min/oscilloscope. Контактная информация:
Веб-сайт | Гитхаб | Твиттер | Facebook | Ютуб
RT-Thread
Проект операционной системы реального времени (RTOS) с открытым исходным кодом!
Подписаться Your feed can be found by clicking on ‘Your account’. We will also email you (max twice a week) to notify you of any new content that is available in your feed. This can be disabled within your account settings.»/>
Проекты
Конфиденциальность и файлы cookie
Файлы cookie — это крошечные файлы данных, которые сохраняются в вашем веб-браузере при посещении веб-сайта. На www.electromaker.io мы используем файлы cookie, чтобы персонализировать ваш опыт и помочь нам выявлять и устранять ошибки.
Использование файлов cookie и аналогичных технологий в течение некоторого времени было обычным явлением, и файлы cookie, в частности, важны для предоставления многих онлайн-услуг. Таким образом, использование таких технологий не запрещено Правилами, но они требуют, чтобы людям сообщали о файлах cookie и предоставляли выбор в отношении того, какие из их действий в Интернете отслеживаются таким образом. (Управление уполномоченных по информации)
Наша политика в отношении файлов cookie
Чтобы в полной мере использовать www.electromaker.io, пользоваться персонализированными функциями и гарантировать, что веб-сайты работают в полную силу, ваш компьютер, планшет или мобильный телефон должны принимать файлы cookie.
Наши файлы cookie не хранят конфиденциальную информацию, такую как ваше имя, адрес или платежные реквизиты: они просто хранят информацию о том, как вы используете наш сайт, чтобы мы могли улучшить ваш опыт и устранить любые ошибки.
Если вы предпочитаете ограничить, заблокировать или удалить файлы cookie с www.electromaker.io или любого другого веб-сайта, вы можете сделать это с помощью своего браузера. Каждый браузер уникален, поэтому проверьте меню «Справка» вашего конкретного браузера (или руководство вашего мобильного телефона), чтобы узнать, как изменить настройки файлов cookie.
Вот список основных файлов cookie, которые мы используем, и для чего мы их используем:
- Electromaker — сеанс входа в систему
- Google Аналитика – Аналитика
- Твиттер – Лента Твиттера
Управление файлами cookie
Каждый веб-браузер по-разному обрабатывает файлы cookie, следуйте инструкциям для выбранного вами браузера:
- Chrome
- Фаерфокс
- ИЭ
- Опера
- Сафари
Применить фильтр
Категория
Сложность
Платформа
Категория
Сложность
Платформа
Загрузите свои проекты
Идентификатор устройства Интеллектуальный счетчик энергии
Он измеряет напряжение, ток, мощность, коэффициент мощности и энергию и в то же время сообщает вам, какое устройство подключено, облачное мониторинг.
Робот-собака Lotp V2
— Разработано с помощью Fusion 360® — Teensy3.5 и Ардуино — Модульная структура (лидар, дрон, обнаружение газа) — Автономный (обход препятствий, поддержание баланса, контроль давления) — ПИ-регулирование — Применяется кинематика и инверсная кинематика — Датчики: лидар, обнаружение газа, датчики давления Гироскоп, GPS, подключение к Wi-Fi, камера
Пивная пивоварня — питание от Raspberry-pi
Человек изобрел пиво. Около 7000 лет спустя я изобрел эту пивоварню, работающую на Raspberry-pi. Если вы хотите построить свою собственную пивоварню, модернизировать существующую или просто интересуетесь этой темой, я надеюсь, что этот проект даст вам некоторое представление и зажжет ваше пламя мастерства.
Многофункциональный кабельный кулачок
Этот кабельный кулачок питается от контроллера двигателя ODESC, он похож на ODrive, но только для одной оси. Поскольку он питается от этого мощного контроллера, существует множество возможностей для модернизации.
Инклинометрсвоими руками с использованием модулей Hexabitz
Этот проект поможет вам измерить угол поверхности по отношению к гравитационному полю Земли с помощью модулей Hexabitz.
Инфракрасный удаленный тестер и декодер
В этом уроке я покажу вам, ребята, как создать простую схему инфракрасного приемника / тестера с использованием TSOP4838
.Гонки на радиоуправляемых автомобилях онлайн от первого лица
Эта система позволяет пользователям создавать радиоуправляемые автомобили, которыми можно управлять через Интернет! Я использовал этот проект, чтобы позволить людям со всего мира участвовать в гонках по трассе, которую я сделал в своем доме, используя камеру от первого лица на машине, чтобы направлять их. Видео о проекте есть на моем канале: www.