Карманный осциллограф «лори» на микроконтроллере stm32f103

Содержание

Проверка на железе

Подключив два щупа осциллографа к MCU (один к пину DAC/ADC IN1, другой к выходу TIM3_CH1) Можем наблюдать следующее изображение:

Желтый — сигнал с DAC, зеленый — выход TIM3_CH1

На осциллограмме каждое переключение зеленого сигнала является моментом измерения. Можно увидеть, что присутствует разброс по времени между измерениями.

Теперь перенесем измеренные значения ADC на график и посмотрим, что получилось:

Результат измерения, по горизонтальной оси значения CCR, по вертикальной оцифрованные значения DAC

Как видим, измеренные значения расположенные по времени измерения сигнала образуют прямую линию, доказывая то, что сигнал был оцифрован и измерен корректно, и данный метод работает.

Я попытался повторить тот же самый трюк на STM32F103C8T6, но к сожалению мне не удалось добиться такого же эффекта. Как только происходит первое событие по сравнению с CCR, MCU тот час же пытается оцифровать сразу все запрошенное количество, не дожидаясь следующих событий. Если у кого-то получится это реализовать, я с радостью добавлю в статью.

Код

Запишем нулевое значение в DAC и включим его. Далее в тестовом примере будет написана функция, которая постепенно увеличивает выходное значение DAC до достижения им потолка (4095).

Создадим массив для CCR значений и запишем в него случайные возрастающие значения, которые меньше чем значение, хранящееся в ARR, чтобы провести все измерения за один цикл таймера. Случайные значения взяты для того, чтобы глазами можно было убедиться в том, что сигнал действительно измеряется в разные не периодические моменты времени.

Далее необходимо положить первое значение из массива в регистр CCR1, а также на всякий случай остановим таймер и сбросим его счетчик. Опционально включаются прерывания таймера по CC1 и заморозка счетчика в режиме отладки.

После этого запускаем преобразования ADC с DMA. ADC теперь будет ждать события от таймера.

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

Осталось запустить на железке и проверить.

Программное обеспечение для приставок

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

Также некоторые из подобных приборов могут работать не только с устройствами под управлением операционной системы «Андроид», но также и с более дорогими «яблочными» девайсам. В таком случае программа будет однозначно находиться в AppStore, поскольку другой вариант установки не предусмотрен. Сделав осциллограф из планшета, не забудьте проверить точность показаний и, при необходимости, откалибровать прибор.

USB-осциллографы

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

Однако, учитывая его ограничения, этот вариант подойдет далеко не всем. В таком случае может использоваться USB-осциллограф, который обеспечит такие же характеристики, как и приставка с передачей сигнала по Wi-Fi. Стоит отметить, что такие приборы иногда работают с некоторыми планшетами, которые поддерживают технологию подключения внешних устройств OTG. Само собой, ЮСБ-осциллограф также пытаются сделать самостоятельно, причем довольно успешно. По крайней мере, именно этой поделке посвящено большое количество тем на форумах.

Принцип действия

Половина текста программы — это всевозможные инициализации. Принцип действия цифрового осциллографа прост и очевиден.

АЦП производит серию непрерывных последовательных измерений уровня сигнала. Полученные значения складываются в память средствами DMA. Каждый раз мы засекаем время и определяем продолжительность серии замеров. Так мы узнаём цену деления оси времени.

Анализируя записанные значения уровня сигнала, ищем первый экстремум, после чего рисуем сигнал на экране. Так мы пытаемся сделать подобие синхронизации. Она неплохо работает на гладких сигналах и практически бесполезна на широкополосных.

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

Текст программы (некоторые называют его «скетч»)

  • main.c
  • lcd7735.c — Дисплей и SPI. Инициализация и функции.
  • delay.c — Счётчик: инициализация, функции пауз.
  • ADC.c — АЦП и DMA.
  • font7x15.h — Шрифт.

Для компиляции я использую среду CooCox CoIDE. Не выложил сюда Кокс-проект, поскольку он содержит абсолютные пути к файлам. Проще создать новый, чем править все пути. После создания проекта не забудьте подключить библиотеки: RCC, GPIO, DMA, SPI, TIM, ADC.

Как создать CooCox CoIDE проект

  1. Запускаем IDE. Из меню: Project > New Project
  2. Вводим имя, запоминаем где лежит проект.
  3. Выбираем «Board» , жмём «Next >»
  4. STM32 > STM32F103x > STM32F103C8T6 Core Development Board
  5. В окне «Repository» выбираем вкладку «Peripherals» , подключаем библиотеки (см. рис.)
  6. Чтобы Кокс не ругался на stdio.h , задаём: View > Configuration > Link > Library: «Use Base C Library» .
  7. Распаковываем скачанные файлы в папку проекта.
  8. Жмём «F7» .
  9. Ликуем.
  10. Чтобы автор порадовался вашему триумфу, переводим ему 50 рублей на пиво.

Прошивал при помощи программатора-отладчика ST-Link V2. Можно и без него, через USB-Serial адаптер.

Если у вас есть комментарий по существу, дополнение, которое поможет сделать проект лучше или просто хотите поделиться фотографией своего изделия — присылайте.

  • Максимальная частота оцифровки 4.27 мГц (Интерлив, ДМА, 120 мГц тактовая частота)
  • Синхронизация: фронт, спад, max, min
  • Входное напряжение 0

Дисплей SPI TFT 2.2″ (2.4″)) 320×240
Цифровой люминофор ( 0.1сек/дел

10сек/дел)

FFT спектр сигнала
Заморозка экрана (Freezing)
Генератор прямоугольных импульсов 0.1Гц

20мГц

Пять кнопок управления

Firmware and miniscope v4 dll interface

  • 2012.04.16 Initial release, NOT RECOMMENDED:stm32scope_20120416.7zminiscope_v2c_dll_20120416.7z
  • 2012.04.21 Lots of fixes to both dll and firmware:stm32scope_20120421.7zminiscope_v2c_dll_20120421.7z
    • FIXED: framing error in dll code causing trace discontinuity when
      recording and displaying multiple continuous data buffers,
    • few fixes and improvements related to USB TX queue (i.e. more optimal
      memory allocation between ADC buffer and USB TX FIFO) in firmware and RX queue
      in dll,
    • extended buffer sizes list to 128 kB.
  • 2012.04.28 miniscope_v2c_dll_20120428.7z

    FIXED: if trigger was in continuous mode but stopped (Run/Stop) single
    manual trigger caused working as if Run was pressed.

  • 2012.04.29 Putting available hardware to better use — using both ADCs in simultaneous
    mode allowed to increase sampling speed from 2×300 to 2×461 kSps and increasing
    S/H time to 13.5 cycles at the same time. Although ADCs can still work faster increasing
    speed further would not allow to keep real-time USB full-speed streaming to PC which is
    essential feature making it possible to use large sample buffer sizes and record signal
    continuously.stm32scope_20120429.7zminiscope_v2c_dll_20120429.7z
  • 2012.06.07 FIXED: no buzzer sound at startup (delay loops removed at o3 optimization).stm32scope_20120607.7z
  • 2012.10.06 Thanks to Openmoko assigning USB PIDs to open
    source projects miniscope v2c has got it’s own unique
    .
    stm32scope_20121006.7zminiscope_v2c_dll_20121006.7z

  • 2012.12.16 Added device library built with Code::Blocks/MinGW,
    stm32scope_cb.7z as a reference project.
    Tested only for a moment, previous (Turbo C++ project) library version should
    be preferred in general.

    2020.07.15 Updated Code::Blocks/MinGW project source: stm32scope_cb_20200714.7z.
    As newest Code::Blocks 20 comes with 64-bit MinGW and is missing 32-bit Windows libraries — use Code::Blocks 16.

  • 2013.09.16 Updated device library, miniscope_v2c_dll_20130916.7z:
    • FIXED: occasional data loss (with log: «RX FIFO overflow») observed when thread
      was suspended by OS for larger times than requested; strangely this was behavior
      was observed with no consistency, with light system load and when debugger/IDE was not running,
    • extended samples buffer sizes list up to 1MS (x 2 channels).
  • 2017.01.21 Updated device library, miniscope_v2c_dll_20170121.zip,
    DLL is now partially configurable without recompiling as sensitivity ranges can be changed using JSON file created in dll directory (miniscope_v2c_capabilities.cfg).
    This is default file content, that defines single gain range (25.78 mV/bit or 6.6V/256 per bit):
    {
       "Capabilities" : {
          "Coupling" : ,
          "Sensitivity" : 
       },
       "Other" : {
          "bitsPerSample" : 9,
          "signalInverted" : false,
          "signalOffset" : 0
       }
    }    
        

    File below adds two additional sensitivity ranges (50 mV/bit and 100 mV/bit — without firmware support it relies only on some manual switch),
    accepts inverted signal with «0» in the middle (inverting amplifier that shifts voltage so oscilloscope can measure positive and negative voltages),
    using value = 127 — value formula for samples received from device.
    There is also AC coupling added (just for reference, not making much sense without support in firmware actually).

    {
       "Capabilities" : {
          "Coupling" : ,
          "Sensitivity" : 
       },
       "Other" : {
          "bitsPerSample" : 8,
          "signalInverted" : true,
          "signalOffset" : 127
       }
    }    
        

    Using JSON editor is recommended as invalid JSON content would be overwritten by DLL.

    Note: floating point numbers with lots of not-so-significant digits are actually effect of reading and writing back by JSON library in DLL with lack
    of proper rounding.

    Note 2: in this setup «bitsPerSample» reported to GUI is changed to 8 bits, that is real number of ADC bits used.
    9 bits in default setup just give better default zoom when oscilloscope is able to measure only positive voltages. This also sets correct range for trigger level.

    In this version slope trigger was also changed to simpler one, with less filtering. While previous version
    might be more stable in time it was also prone to not firing with some signals, in particular slowly changing.

  • 2019.08.10 Firmware as EmBitz project: stm32scope_embitz_20190810.zip
  • 2019.08.11 Firmware + dll set with base sampling frequency lowered to 292kSps (this seems to eliminate FIFO/USB overflow problems resulting in lack of data continuity):
    stm32scope_embitz_20190811.zip, miniscope_v2c_dll_20190811.zip.

Although windows driver (libusb-win32) is included in dll archive using Zadig is actually easier and
it is only sensible option for 64-bit Win8/Win10:

Important: make sure libusb-win32 is selected as driver in Zadig (WinUSB might be default).

Готовые варианты приставок с Bluetooth

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

  • Предел измеряемой частоты: 1МГц.
  • Напряжение на щупе: до 10 В.
  • Радиус действия: около 10 м.

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

История одного осциллографа на stm32 +23

  • 07.07.16 14:18


baghear

#278198

Гиктаймс


Из песочницы

11700

Производство и разработка электроники


Чуть больше года назад, мне в голову пришла мысль о том, что хорошо бы было сделать осциллограф. Тогда мне хотелось, чтобы это было независимое устройство с собственным TFT дисплеем, да и вообще, идея разобраться с TFT дисплеями, мне казалась очень перспективной. Спустя некоторое время на али был заказан TFT размером 3.2 дюйма с драйвером SSD1289.
На тот момент у меня уже был опыт программирования микроконтроллеров AVR, поэтому решил запустить дисплей на моём любимом Atmega16. Дойдёт ли дело до создания осциллографа тогда ещё не знал, но то что буду в своих проектах использовать TFT знал точно, поэтому не стал искать сторонние библиотеки, а решил написать свою, которой пользуюсь и по сей день. 
После того, как получилось инициализировать дисплей, стало понятно, что на Atmega16 сделать осциллограф не получится. Уж очень медленный он для дисплея такого размера. И что-то внутри подсказывало мне, что пора переходить на STM32, но оно же и останавливало меня. В общем, процесс обдумывания был недолгим и на али была заказана плата с STM32F103VET6 на борту. Но кроме причины описанной выше, была ещё одна причина перейти на STM32 – встроенный 12 битный АЦП на 1Msps, который можно использовать для оцифровки сигнала.
 
К моему удивлению, после нескольких недель работы с STM32 стало понятно, что в них нет ничего сложного и я перестал понимать, почему не перешёл на них раньше. Перенести код, написанный для AVR, на STM32, не составило труда, но не давала покоя мысль о том, что мне необходимо, чтобы дисплей работал на максимальной скорости, а для этого надо было разобраться с FSMC. На самом деле и тут оказалось всё просто — это заняло у меня одни выходные. На этом подготовительные мероприятия с дисплеем были закончены и можно было переходить непосредственно к реализации осциллографа.
 
Первоочередной задачей было научиться выводить сигнал на дисплей, для этого накапливал необходимое количество выборок АЦП, затем выводил их на экран, заливал экран чёрным цветом и так по кругу. Кстати, уже тогда для сохранения данных в буфер использовал DMA.
 
Первый шаг был сделан и меня переполняла радость и гордость за проделанную работу. Далее, хотелось, чтобы синусоида не бежала, а стояла, для этого надо было научиться запускать преобразование АЦП по триггеру.
Сделать это можно с помощью обычного компаратора, как показано на схеме ниже.

Компаратор на ОУ.Фрагмент схемы DSO 138.Что делает этот кусочек схемы?+VREF-VREFАЦПДля чего столько точек?Так а для чего всё-таки кольцевой буфер?

  1. накапливаем нужное количество предвыборок;
  2. разрешаем внешние прерывания;
  3. МК начинает выполнение каких-то сторонних задач, до тех пор, пока не придёт сигнал внешнего прерывания.

https://youtube.com/watch?v=YSC2J1qom2g

Что мог прототип осциллографа на тот момент?(а что он что-то мог?)Для того чтобы реализовать остальные функции пришлось снова вернуться к железу. И думаю у многих возник вопрос, почему не заюзать всю схему от DSO138?В итоге получилось сделать осциллограф обладающий следующими характеристиками:

https://youtube.com/watch?v=XunPF4EfLps

Инструкция и описание работы программы.

 Порядок настройки устройства:
   1) прошиваем контроллер прошивкой из папки stm32f103c8_bin_hex;
   2) устанавливаем драйвера если есть необходимость для USB-UART конвертера;
   3) собираем устройство согласно схеме, питание для отладочной платы можно взять от USB-UART конвертера и подключаем к компьютеру;
   4) запускаем программу Oscilloscope_AAW_v00.exe из папки Oscilloscope_AAW_v00, если установлен антивирус то он может запустить проверку так как данной программы нет в его базе, для исключения данной процедуры добавьте программу в его исключение;
   5) если сделано вами всё правильно то программа автоматически найдёт подключенное устройство, настроит его и отобразит к какому COM порту было подключено. Если этого не произошло проверьте соединение и питание устройства, исправьте ошибки и нажмите кнопку CONNECT, должен все настроится;

 Описание элементов индикации и управления.

 Описание элементов:
   1) информация подключение к COM порту и кнопка подключения, если при старте программы или во время работы произойдет разрыв связи нажмите её, программа попытается переподключиться;
   2) индикатор сканирование, зелёный цвет идёт сканирование и красный нет;
   3) информация генератора, кнопка со стрелкой включение-выключения и выбор частоты 1KHz, 10KHz и 100KHz;
   4) выбор режима работы осциллографа:
      AUTO-автоматический или непрерывное сканирование;
      TRIGG UP-старт сканирования по возрастанию сигнала;
      TRIGG DOWN-старт сканирования по спаду сигнала;
   5) делитель входного сигнала через резисторы;
   6) информация о продолжительность задержки и ручка управления ей;
   7) множитель для ручки управления задержкой;
   8) режим работы:
      RUN-обычная работа осциллографа;
      PAUSE-сканирование остановлено, осциллограф в ожидание, можно использовать для одиночных пусков захвата или логического анализатора. Запуск одиночного сканирования осуществляется с помощью нажатия на кнопки AUTO, TRIGG UP и TRIGG DPOWN.
   9) при наведение стрелки мыши на осциллограмму можно изменять:
      a) нажатие на правую кнопку мыши и перетаскивая осциллограмму влево или право можно просмотреть её в буфере размером 3000 выборок;
      b) нажатие на левую кнопку мыши можно перетащить осциллограмму вверх или вниз;
      c) колёсиком мыши регулируется программное увеличение или уменьшение осциллограммы, нажатие на него возвращает истинный размер.
 Для использования генератора подключите его выход PA6 к входу осциллографа, так вы сможете проверить его работу.

Сигнал какой частоты можно увидеть?

Теоретически можно увидеть 477 кГц. Отличить меандр от пилы, теоретически, можно на частотах 350 кГц и ниже. Практически же, более-менее комфортно можно наблюдать сигналы до 200 кГц. Размер клетки: 20 x 20 px.

«Частота развёртки» нашего осциллографа зависит от быстродействия АЦП. В STM32F103 разрядность АЦП фиксирована и равна 12. Это в полтора раза больше, чем нам нужно. В STM32F407, например, разрядность можно уменьшить, что сократит время измерений. АЦП STM32F407 можно перевести в режим triple interleaved mode и получить скорость измерений 7.2 MSPS (грубо рисовать сигналы до 1 MHz). Но F407 в три раза дороже F103, а плата с ним (development board) — раз в 6.

АЦП, встроенные в микроконтроллеры, обычно не отличаются высоким быстродействием, хотя есть, например, LPC4370 (12-bit at 80 MSPS). Очевидно, что когда нужна скорость, следует использовать специализированные микросхемы, например AD9283. Но быстро измерить сигнал недостаточно, полученные данные нужно успеть куда-то сохранить за время измерения. Те, у кого есть время и деньги, могут поэкспериментировать с AD9226 (65 MSPS) и STM32F103VCT6 + FPGA.

И тут нам поможет System Tick Timer! Настраиваем его, отключаем прерывания, не включаем Watchdog (чтоб проц не отвлекался на что-то иное кроме выполнения). Переходим в отладчик, выполняем инструкции по шагам и сравниваем сколько успел насчитать таймер во время выполнения инструкции. Берем два абсолютно одинаковых куска кода и сравниваем кол-во тактов на инструкцию:

Оригинал (STM32F030):

«Китайское» (HK32F030):

Вот блин бабушка и приехали… Инструкции LDR/STR выполняются в полтора раза дольше и те же инструкции тратят на один такт больше если используем Immediate Value… и мало того, — по сути идентичные инструкции выполняются разное кол-во тактов, и ещё опа, — времени банально не хватает на текущую реализацию… Пусть, ядро может работать на 72 MHz, пробуем.

Меняем множитель с 6 на 9. И в теории, времени теперь навалом, а по факту впритык, потому что проц пожирает массу времени на часто используемые команды, подгоняем реализацию под нужные временные интервалы антинаучным методом «подбора» и «научного тыка». И теперь оно работает.

Осциллографы-приставки с передачей данных по Wi-Fi

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

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

Характеристики осциллографа для в виде приставки с Wi-Fi подключением вырастают в несколько раз, по сравнению с предыдущими вариантами. Подобные осциллографы имеют диапазон измерения до 50 МГц, при этом их можно модифицировать посредством разнообразных переходников. Зачастую в них установлены аккумуляторы для автономного питания, с целью максимально разгрузить рабочее место от ненужных проводов.

Дешёвый и простой USB осциллограф на STM32F103C8.

Ссылка на видео в YouTube Данный проект это своего рода подарок для тех у кого нет возможности приобрести осциллограф, что бы его реализовать вам понадобится настольный компьютер, дешевая отладочная плата на STM32F103C8, USB-UART конвертер, пары диодов шоттки и не много резисторов.
 Для тех заинтересовался качаем архив от сюда Oscilloscope_AAW_v00 или с Яндекс диск в котором находится программа под WINDOWS( на 7 и 10 работает точно), два файла прошивки контроллера HEX и BIN.
 Основные параметрами осциллографа это то, что частота выборки от 2.222KHz до 4MHz и исследуемые напряжения могут находится в диапазоне от 0 до 50 вольт, о возможностях читаем ниже в описании программы.
 Ознакомление начнём конечно со схемы которая очень проста.

Внимание! Должен быть установлен .NET Framework 4.5 и выше, разрешение монитора 1280х768 и выше, если не отображаются боковые кнопки управления значит не установлен видеодрайвер.  Компоненты:
  1) отладочная плата на STM32F103C8;
  2) USB-UART конвертер для обмена информацией между контроллером и компьютером, желательно на микросхеме CH340G;
  3) входной резистор для ограничения тока 4.7K и мощностью не меньше 2Вт;
  4) два диода шоттки 1N5819 для защиты от перенапряжения и обратных выбросов тока;
  5) делителей напряжение состоящий из четырёх маломощных резисторов 550, 1.2К, 2.3К и 4.7К;

 Компоненты:
  1) отладочная плата на STM32F103C8;
  2) USB-UART конвертер для обмена информацией между контроллером и компьютером, желательно на микросхеме CH340G;
  3) входной резистор для ограничения тока 4.7K и мощностью не меньше 2Вт;
  4) два диода шоттки 1N5819 для защиты от перенапряжения и обратных выбросов тока;
  5) делителей напряжение состоящий из четырёх маломощных резисторов 550, 1.2К, 2.3К и 4.7К;

Реализация защиты, экранирования сигнала и снижения погрешности

Для того чтобы частично защитить свое устройство от возможного выхода из строя, а также стабилизировать сигнал и расширить диапазон входных напряжений, может использоваться схема простого осциллографа для планшета, которая уже долгое время успешно применяется для сборки приборов для компьютера. В ней применяются дешевые компоненты, среди которых стабилитроны КС119А и два резистора на 10 и 100 кОм. Стабилитроны и первый резистор подключаются параллельно, а второй, более мощный, резистор используется на входе схемы, чтобы расширить максимально возможный диапазон напряжений. В результате пропадает большое количество помех, а напряжение повышается до 12 В.

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

Аналоговая часть (плата)

В аналоговой части в оригинале используется операционный усилитель TL084 с паспортной полосой пропускания где-то в районе 4 МГц. Понятно, что, если мы хотим хотя бы видеть сигнал частотой 8 МГц, то эту микросхему также придется поменять на более широкополосную. Переделки аналоговой части (Рис.6) собственно и сводятся к такой замене и сопутствующим изменениям в номиналах элементов входного тракта.

Итак, меняем TL084 на любой счетверенный усилитель с полосой от 100 МГц в подходящем корпусе. В моем случае я остановился на AD8054 (другой вариант, например, TL974). Полоса пропускания у этих микросхем по паспорту – 150 МГц, хорошо, и для наших целей более чем достаточно.

Далее, сразу же выяснилось, что смещение нуля в общем случае для AD8054 существенно больше, и, соответственно, оставлять вход усилителя совсем открытым без подтяжки резистором к земле, как в оригинальной схеме, не получится, что собственно и привело к изменениям схемотехники входной части. На вход операционного усилителя был добавлен резистор 110 кОм. 

Рис.6. Изменения входной части аналогового тракта.

В нашем случае ставить большой делитель на этом диапазоне 10 мВ равносильно неприемлемо большой потере в точности и качестве обработки этого сигнала АЦП, либо необходимости введения каким-то образом дополнительного усиления в тракте, что приводит к уже существенным переделкам платы. Поэтому в предположении, что основной фронт работ – это цифровая схемотехника, для которой этот диапазон не является основным рабочим, я ограничился делением на 2, что далее компенсируется в программе, и входным сопротивлением 200 кОм, что конечно плохо, но приемлемо.

Еще одно компромиссное решение – сделать входное сопротивление 1 МОм именно для диапазона 1В, что позволяло бы использовать на этом диапазоне щуп с делителем 1:10 с точным делением, для диапазона 0,1В я счел это не столь актуальным. При этом для диапазона 0,1В входное сопротивление получается 660 кОм, тоже плохо, но приемлемо.

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

В зависимости от того, какой усилитель будет использован, возможно, будет необходимо добавить в схему питания ОУ еще один преобразователь для получения отрицательного напряжения параллельно уже существующему. В схеме в оригинале используется ICL7660 для получения отрицательного напряжения. Данная микросхема допускает параллельное соединение неограниченного числа таких преобразователей для увеличения выходного тока. Если окажется, что одного преобразователя ICL7660 недостаточно для питания выбранного ОУ, то на свободное место на плате надо будет установить еще одну микросхему ICL7660 с двумя электролитическими конденсаторами 100 мкФ соединенными аналогично U2, C12, C13, и подключить ее параллельно существующей.

Проконтролировать необходимость такой установки просто по значению напряжения «V-» в контрольной точке TP8, в идеале это напряжение должно быть по значению не меньше -3В, еще лучше — -3,5В. Если измеренное напряжение существенно меньше, то поставить еще один ICL7660 необходимо.    

Заключение

Результат для работы с цифровыми микроконтроллерными устройствами хотел бы признать достаточно хорошим. Программой и инструкцией к ней, само собой, готов поделиться со всеми желающими (пока бесплатно).  Несколько слов об экономике:

1)      DSO138 mini от 1000 руб. на Али (в комплекте со щупом и корпусом где-то в районе 1500 руб.);

2)      STM32F303CBT6 от 300 руб. (тоже на Али);

3)      AD8054ARZ от 30 руб. (там же);

4)      ICL7660 от 40 руб. за партию в 5 шт. (там же);

5)      Остальная рассыпуха не более 50 – 100 руб;

6)      Программа – пока бесплатно, если будет коммерческий интерес, т.е. большое число желающих, то буду брать за лицензию деньги, но не дороже 1000 рублей.

Таким образом можно уложиться в 2000, максимум 3000 рублей. Что-то подобное по характеристикам и возможностью применения для отладки микроконтроллерных устройств скорее всего будет USB-приставкой к компьютеру, а не полноценным автономным прибором, и с ценником в районе 7 тысяч рублей.

Итоги

Итог и результат трудов — на Рис.8. На вход подан меандр частотой 1 МГц.

Рис.8. Меандр частотой 1 МГц.

Сигнал 2 МГц тоже вполне четко видно, но разглядеть подробности уже совсем не получится. Наличие/отсутствие сигнала можно спокойно увидеть для достаточно высоких частот, по крайней мере 25 МГц на ножках кварца микроконтроллера видно четко (Рис.9). При этом наблюдаем весьма коварный эффект биений между частотой дискретизации (в данном случае 12 МГц) и частотой сигнала – 25 МГц, который обязательно возникает, если частота дискретизации кратно меньше частоты сигнала.  Сигнал выглядит как будто он имеет частоту 1 МГц, но это как раз разность между удвоенной частотой дискретизации и сигналом.

Также отметим, что щуп пришлось поставить в положение 1:10, так как входное сопротивление в 220 кОм, подключенное к ножке кварца напрямую, естественно, срывает генерацию. Коэффициент деления получается при этом 9,1 МОм + 220 кОм / 220 кОм = 42, т.е. в клетке примерно 420 мВ.

Рис.9. Сигнал с кварцевого резонатора 25 МГц.

Русской душе хочется всегда чего-то большего, чем то, что достижимо. Прикинув теоретическую максимально достижимую скорость дискретизации с точки зрения входа АЦП, а это определяется минимальным временем открытия УВХ, которое в нашем случае 1,5 такта х (1 / 72 МГц) = 20,8 наносекунд , что дает 48 MSPS, стал думать, а можно ли как-то этого достичь при имеющемся железе?

И вот, в итоге все же удалось посредством некоторого, но вполне законного фокуса, перепрыгнуть через голову и получить для некоторых, не для всех конечно, вариаций входного сигнала, эффективные 48 MSPS и время развертки 500 и 200 наносекунд на клетку, не без искусственных артефактов (Рис.10), но иногда и вообще абсолютно чисто (Рис.11)! Но, фокус работает только для правильно-периодических сигналов, и разглядывать так сигналы частотой сильно выше 1 МГц все равно, увы, не получится. Про все это далее в отдельной публикации…       

Рис.10. 48 MSPS. Меандр 1 МГц. С артефактами.Рис.11. 48MSPS. Меандр 1 МГц.