Осциллограф на стм32: STM32F103C8T6 — делаем осциллограф. Часть 3 / Хабр

Содержание

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

Чтобы использовать макросы типа GPIO_BSRR_BS9 надо подключить файл stm32f10x.h.


Чтобы подключить файл 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-CUSB-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) с открытым исходным кодом!

Подписаться Проекты

Конфиденциальность и файлы 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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *