Двухканальный usb осциллограф на stm32 – miniscope v2c

Двухканальный USB осциллограф на STM32 – Miniscope v2c

Ниже представлен проект недорого 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 запроса, изменение аналогового усиления).

Список радиоэлементов

ОбозначениеТипНоминалКоличествоПримечаниеМагазинМой блокнотIC1D1-D4C1C2C3, C4, C6-C9, C13C5C10, C12C11, C14C15, C16R1-R3, R7, R10R4, R8R5, R6R9Q1L1SG1S1, S2X1JP2JP3
Микроконтроллер STM32F10XCXT6 1 STM32F103? Поиск в Utsource В блокнот
Линейный регулятор LF33 1 Поиск в Utsource В блокнот
Диод Шоттки BAT42 4 Поиск в Utsource В блокнот
Электролитический конденсатор 10 мкФ 1 Поиск в Utsource В блокнот
Электролитический конденсатор 100 мкФ 1 Поиск в Utsource В блокнот
Конденсатор 100 нФ 7 Поиск в Utsource В блокнот
Электролитический конденсатор 22 мкФ 1 Поиск в Utsource В блокнот
Конденсатор 2 Поиск в Utsource В блокнот
Конденсатор 47 пФ 2 Поиск в Utsource В блокнот
Конденсатор 22 пФ 2 Поиск в Utsource В блокнот
Резистор 10 кОм 5 Поиск в Utsource В блокнот
Резистор 27 Ом 2 Поиск в Utsource В блокнот
Резистор 100 Ом 2 Поиск в Utsource В блокнот
Резистор 1.5 кОм 1 Поиск в Utsource В блокнот
Кварц 8 МГц 1 Поиск в Utsource В блокнот
Дроссель BL01RN1A 1 Поиск в Utsource В блокнот
Пьезоизлучатель F/TMB 1 Поиск в Utsource В блокнот
Кнопка Замыкающая 2 Поиск в Utsource В блокнот
Разъём USB 1 Поиск в Utsource В блокнот
Разъём PLS-4 1 Входы Поиск в Utsource В блокнот
Разъём PLS-3 1 UART Поиск в Utsource В блокнот
Добавить все

Скачать список элементов (PDF)

Оригинал статьи

Прикрепленные файлы:

  • stm32scope.rar (729 Кб)
  • miniscope_v2c_20120416.zip (65 Кб)

Источник: http://cxem.net/izmer/izmer103.php

Ниже представлен проект недорого 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 запроса, изменение аналогового усиления).

Скачать файлы проекта

Оригинал статьи на английском языке (перевод: Александр Касьянов для сайта cxem.net)

Источник: http://shemopedia.ru/dvuhkanalnyiy-usb-ostsillograf-na-stm32-miniscope-v2c.html

STM32F103C8T6 — первые шаги. Начинаем делать осциллограф

3 октября 2015 в 02:11 (МСК) | сохранено3 октября 2015 в 13:26 (МСК)<\p>

О радостях и трудностях первого знакомства с STM32 после AVR. Как я реализовывал простейшую задачу — передачу данных на ПК.

Имея некий опыт работы с AVR, хочется сравнить приехавшие контроллеры (которые по отдельности стоят 1.7$/шт) с близкими к ним по цене ATMEGA328 (1.4 $/шт).

ATMEGA328STM32F103C8T6Выигрыш, разFlash, кБОЗУ, кБМаксимальная частота, МГцСкорость АЦП, kSPS
32 64 2
2 20 10
20 72 3.6
15 2*1000 (можно разогнать) 133

На фоне роста показателей производительности в 10-100 раз, Flash увеличилась всего в 2 раза. Причём, эти 64 кБ расходуются чуть ли не быстрей, чем 32 на AVR.

Логично применять такие контроллеры там, где нужна высокая производительность, но нет кодоёмких алгоритмов… например, осциллограф. Внешний вид отладочных плат:Слева направо:

  • Arduino UNO (ATmega328P), 3.59$;
  • Наша плата, которую будем мучить (STM32F103C8T6), 4.97$;
  • Ещё одна отладочная плата на STM32F103C8T6, 3.92$;
  • Arduino Nano (ATmega328P), 2.23 — 2.56$.

Сред программирования STM32 великое множество — IAR, Keil, Coocox… поначалу кажется, что это хорошо и точно найдёшь что-то подходящее. Потом приходит понимание как такой зоопарк образовался. Просто кто-то сделал не очень хорошую IDE. Остальные на это посмотрели и решили, что они могут сделать лучше. И сделали. В чём-то получилось лучше, в чём-то хуже.

Почитав обзоры и попробовав IAR, остановился на Coocox. Есть ещё одна программа — STM32CubeMX. Дело в том, что периферии в STM32 гораздо больше, чем в AVR. Инициализировать её гораздо сложнее. STM32CubeMX позволяет выбрать контроллер, потыкать мышкой и сгенерировать код инициализации.

Даже если мы не хотим использовать этот сгенерированный код, в STM32CubeMX удобно посмотреть распиновку и схему тактирования, подобрать делители, множители и вручную их прописать в своём коде! Очень рекомендую всем начинающим! STMStudio — программа позволяющая в реальном времени наблюдать значения переменных в МК.

В качестве программатора решил использовать дешёвый ST-Link V2 за 2.6$.

Подключается всё очень просто. Берём распиновку JTAG,смотрим рисунок на ST-Link,и соединяем одноимённые выводы. Запускаем CoIDE, пишемBlink#include “stm32f10x.

h”
int main(void)
{ RCC->APB2ENR |= RCC_APB2Periph_GPIOC; // включаем тактирование порта GPIOC->CRH |= (0x3 CRH &= (~(0xC BSRR = GPIO_BSRR_BR13; for(i = 0; i < 1000*1000*5; i++){;}; GPIOC->BSRR = GPIO_BSRR_BS13; for(i = 0; i < 1000*1000*5; i++){;}; } }
Не сильно сложней, чем в AVR, однако, занимает программа 2264 байта во Flash… Это при том, что на AVR весь код металлоискателя занимал меньше. Ради интереса удалил весь код и скомпилировал пустую программу — 2176 байт. Отключил STDLIB — 1476 байт.компилируем, прошиваем… и всё сразу заработало! Безо всяких танцев с бубном! Даже внутрисхемный отладчик заработал! Запускаем STMStudio — и она работает. Строит графики переменных во время работы МК! На плате есть перемычки, но ничего переключать, чтобы запрограммировать/запустить МК не надо! Прям как с Arduino! Ну не может же быть всё так хорошо… да не может. В моих мечтах осциллограф должен был работать следующим образом: Оба АЦП одновременно обрабатывают сигнал со скоростью 1-2 MSPS. Далее 2 варианта:

  1. Всё это в реальном времени передаётся на ПК по USB и там принимается решение о том, что с этим делать (запомнить, построить график, как-то обработать, …);
  2. После каждого преобразования происходит прерывание. В обработчике прерываний мы принимаем решение: ждать ещё или начать запоминать данные (например, хотим чтобы сигнал на экране начинался с некого уровня, как в аналоговом осциллографе, или чуть раньше этого уровня). В этом же обработчике складируем данные в буфер и по его заполнению отправляем на ПК.

Оба эти варианта реализовать не удалось. Первый потому, что я не смог запустить USB. Вернее смог только сгенерировав проект в STM32CubeMX. Но после экспорта его в CoIDE потребовалось перемычками менять загрузчик для программирования/работы, что не удобно. Поэтому от этого варианта отказался. Ну и вдобавок скорость USB всего 12 МБит/с. Данные на высокой скорости в реальном времени всё равно не влезут. Чтобы хоть как-то передавать данные на комп, подключил преобразователь USB UARTкупленный в своё время для программирования Arduino Pro Mini. Второй вариант накрылся т.к. обработчик прерывания работает дольше, чем АЦП. Скорость ограничилась всего 340-500 kSPS, что в разы меньше ожидаемой. Единственным рабочим высокоскоростным вариантом оказался такой: АЦП непрерывно работают, когда нам нужен замер, включаем DMA, ждём наполнения буфера, отключаем DMA и потихоньку передаём данные на ПК через USART. Этот вариант превзошёл все ожидания. МК можно разогнать так, что получается 9 MSPS с двух АЦП! Т.е. в 4.5 раза больше, чем по документации! При этом достаточно комфортно наблюдать сигнал частотой до 1 МГц. По сравнению с тем, что удалось достичь раньше на Arduino (10 kSPS) результат очень хороший — скорость увеличил в 900 раз! Однако, с разгоном не всё так радостно. В дальнейшем, чтобы мог работать USB, частоту придётся снизить в 16/9 = 1.8 раз и тогда получится всего 5 MSPS.

Пока пытался разобраться с USB и прочей периферией осознал существенный недостаток этих контроллеров — очень мало информации в интернете. Если на AVR есть куча всего, то тут найти пример одновременной работы двух АЦП в режиме Fast interleaved оказалось не так просто.

В качестве генератора сигналов для теста осциллографа был выбран… Arduino UNO! Не потому что он хороший или ещё что… просто это очень быстро.Написать 8 строк: void setup() { pinMode(2, OUTPUT); long d = 10; for(;;){ PORTD = 255; delayMicroseconds(d); PORTD = 0; delayMicroseconds(d); }
} void loop() { }

Подключить USB + 1 проводок (чтобы 3.

3 вольтный STM32 не умер от 5 вольтного сигнала, сигнал подан через резистор в 2 кОм) и готово! Получилось следующее (под каждым изображением фотография этого же сигнала на экране аналогового осциллографа):
Период сигнала 0.9 мкс. 1 замер = 10 пикселей. На осциллографе 1 деление = 0.5мкс.
Период сигнала 10 мкс. 1 замер = 5 пикселей. На осциллографе 1 деление = 2мкс.

Верхушки обрублены из-за превышения сигналом опорного напряжения АЦП. В планах:

  1. Победить USB, чтобы отказаться от преобразователя USB USART;
  2. Доделать аналоговую часть, чтобы диапазон входных напряжений был не 0 — 3.3 В, а более приличным;
  3. Сделать многоканальный режим;
  4. Реализовать управление с ПК;
  5. Сделать законченное устройство в корпусе.

В заключение обращаю внимание на два вскрывшихся недостатка STM32 по сравнению с AVR:

  1. Повышенный расход Flash памяти;
  2. Сложная инициализация периферии, которая усугубляется нехваткой материалов.

На случай, если кому понадобится: проект CoIDE и рисовалка графика на C#. Код везде сырой. Не знаю как, но на такую простую задачу, ушло 31 кБ Flash.

Схема отладочной платы (найти было не просто).

Источник статей: Хабр.

Время указано в том часовом поясе, который установлен на Вашем устройстве.

Версия сайта: 0.8.
Об ошибках, предложениях, пожалуйста, сообщайте через Telegram пользователю @leenr, по e-mail i@leenr.ru или с помощью других способов связаться.

Источник: https://sohabr.net/habr/post/384723/?version=122979

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.

Источник: http://www.pvsm.ru/stm32/155269

Небольшой обзор USB осциллографа Hantek 6022BE. Сравненение с самодельным осциллографом на базе STM32

Вceм привeт. Сeгoдня я xoчу рaccкaзaть o дocтaтoчнo дocтупнoм USB ocциллoгрaфe Hantek 6022BE. Дaнный прибoр, будeт oчeнь пoлeзeн (зaчacтую нeзaмeним) вceм тeм ктo зaнимaeтcя рaдиoлюбитeльcтвoм и дo cиx пoр нe имeeт ocциллoгрaфa.

Рaccкaз буду вecти c тoчки тoчки зрeния любитeля, ocoбo нe рaбoтaвшeгo c ocциллoгрaфaми рaнee. Пoexaли!

Сeй aппaрaт был куплeн, ecли вeрить нaзвaнию, в oфициaльнoм мaгaзинe Hantek нa aliexpress, c выбoрoм лoкaльнoй дocтaвки co cклaдa в Рoccии.

Цeнник у прoдaвцa нa мoмeнт пoкупки был вecьмa гумaнный и ocтaлcя тaким жe пo ceй дeнь. Дocтaвкa зaнялa oкoлo нeдeли (Нижeгoрoдcкaя oблacть). Тoвaр вручил курьeр.

Сaмoe интeрecнoe и cмeшнoe, тo чтo aппaрaт c дocтaвкoй из Китaя cтoил дaжe чуть дoрoжe (пoчти нa 100р) чeм c лoкaльнoй, бoлee быcтрoй дocтaвкoй. Сeйчac вce тoчнo тaк жe, нe ocoбo пoнятнo пoчeму, вeдь лoкaльнaя дocтaвкa oбычнo дoрoжe…

Внeшний вид прибoрa:

Видeo рacпaкoвки:

Сoри зa мeдлeнный aвтoфoкуc.

Один из щупoв (втoрoй тoчнo тaкoй жe):

Мaнуaл oт щупa:

Питaниe:

Крacный кoннeктoр вeрoятнo cдeлaн для уcтрoйcтв выдaющиx oчeнь мaлeнький тoк пo USB (нaпримeр кaкиx тo cтaрыx нoутбукoв). Нa мoeй мaтeринкe, кoтoрaя выдaeт cтрoгo пo cтaндaрту USB 2.0 нe бoлee 500мА тoкa, вce нoрмaльнo зaвoдитcя при пoдключeнии лишь чeрнoгo кoннeктoрa (oн жe и интeрфeйcный).

Оcнoвныe xaрaктeриcтики:

Кaнaлы: 2 Пoлoca прoпуcкaния: 20 МГц (рaзряднocть 8 бит). Чacтoтa диcкрeтизaции: 48 Ms/s. Рaзмeр буфeрa — 1Ms. Тoчнocть ±3 %. Мaкc.вxoд ±5В. (Пикoвaя зaщитa вxoдa 35В). Интeрфeйc: USB 2.0 (питaниe oт USB). Щуп: PP-80 *2 Гaбaриты: 200мм*100мм*35мм

Вec: 0.3 кг.

Уcтaнoвкa и инcтрукция пo экcплуaтaции.

Я тecтирoвaл прибoр пoд Windows 7. Судя пo oтзывaм, c дрoвaми пoд Windows 10 мoгут вoзникнуть прoблeмы (нe прoвeрял).
В кoмплeктe c прибoрoм идeт нeбoльшoй диcк, нo тaк кaк привoд у мeня ecть лишь нa oднoм из cтaрыx кoмпoв, a пeрecтaвлять eгo лeнь, cкaчaл вce нeoбxoдимoe пo ccылкe нa мaйкрocoвтoвcкую фaйлxрaнилку: !107

Кaк видим, вce нeoбxoдимoe ecть. Дрaйвeр вcтaeт бeз прoблeм. Нa caйтe hantek.ru мoжнo cкaчaть руccкoязычную инcтрукцию: www.hantek.ru/products/mans/HT6022BL_RUS.pdf

Пoдключeниe и кaлибрoвкa прибoрa.

Зaпуcкaeм утилиту.

Пocлe уcтaнoвки дрaйвeрa и ПО, coглacнo инcтрукции, нeoбxoдимo прoизвecти кaлибрoвку прибoрa пo вcтрoeннoму кaлибрoвoчнoму гeнeрaтoру. Отoбрaжeниe cигнaлa дo кaлибрoвки:

Бeрeм пoдcтрoeчную крутилку и пoдкручивaeм рeгулятoр в щупe. Дeлитeль щупa в пoлoжeнии X10 (при вceм мoиx измeрeнияx пoкaзaнныx в дaннoм oбзoрe дeлитeль x10).

Дoбивaeмcя примeрнo тaкoй кaртинки:

Прибoр гoтoв к экcплуaтaции.

Отмeчу, чтo ecть вoзмoжнocть зaпуcкa eщe нecкoлькo мoдeрнизирoвaннoй вeрcии утилиты:

В кaчecтвe прoвeрoчнoгo тecтирoвaния, я иccлeдую ШИМ cигнaл пoлучeнный c Arduino.
Зa ocнoву взят прocтeнький кoд c измeнeниeм яркocти cвeтoдиoдa пo coпрoтивлeнию пeрeмeннoгo рeзиcтoрa. Здecь дaннaя oпция нe нужнa, пoэтoму я зaкoммeнтирую нeнужнoe и прoпишу знaчeниe для ШИМ в ручную.

int ledPin = 9; // LED connected to digital pin 9 //int analogPin = 3; // potentiometer connected to analog pin 3 int val = 0; // variable to store the read value void setup() { pinMode(ledPin, OUTPUT); // sets the pin as output } void loop() { //val = analogRead(analogPin); // read the input pin val = 256; analogWrite(ledPin, val / 4); // =64 analogRead values go from 0 to 1023, analogWrite values from 0 to 255 }

Вoт чтo пoлучилocь:

Вce рaбoтaeт тaк кaк и дoлжнo.

Крoмe этoгo прибoрчикa, у мeня имeeтcя caмoдeльный ocциллoгрaф нa STM32, coбрaнный пo cxeмe oт Tomasz Ostrowski: tomeko.net/index.php?lang=en, o кoтoрoм я кaк тo упoминaл здecь.

Оcциллoгрaф STM32

Вoт руccкaя вeрcия cтaтьи прo ocциллoгрaф co cxeмoй: cxem.net/izmer/izmer103.php

Кaк виднo, дeтaлeй oчeнь мaлo. Мoжнo взять зa ocнoву гoтoвый мoдуль нa ocнoвe STM32F103C8T6, кoтoрый cтoит вceгo 100рублeй, нo пoтрeбуeтcя eщe и прoгрaммaтoр: aliexpress.com/item/ST-Link-st-link-V2-for-STM8S-STM8L-STM32-Cortex-M0-Cortex-M3-SWIM-JTAG-SWD/32322884886.html

Зa пoл чaca мoжнo будeт «изгoтoвить» этoт ocциллoгрaф.

Дeлaл (ecли мoжнo тaк cкaзaть, тaк кaк рaбoты крoмe прoгрaммирoвaния плaты пoчти нeт) я этoт ocциллoгрaф c гoд нaзaд, пo быcтрoму, рaди тecтa вoзмoжнocтeй и cпoртивнoгo интeрeca, пoэтoму выглядит oн вecьмa нe брeжнo и oчeнь пeчaльнo, нo рaбoтaeт:

Дeлaйтe cрaзу нoрмaльнo!

Сo врeмeнeм, нaчaл питaть eгo oт бaнки 18650 и гoтoвoгo линeйнoгo cтaбa нa 3.3В нa AMS1117, к кoтoрoму пoдпaял элeктрoлит нeбoльшoй eмкocти, тaк кaк этo минимизирoвaлo пoмexи, дaжe c учeтoм тoгo кaк тяп ляп coбрaн ceй дeвaйc, нe имeющий кoрпуca (ecть плacтикoвый a нaдo бы aлюминиeвый).

Тaк жe, пoвecил нeбoльшoй oтeчecтвeнный кoндeнcaтoр пo питaнию нa caму плaту. Дeлитeли в oбoиx кaнaлax вoт тaкиe:
P.S. Утилитa oбрaбoтчик рaccчитaнa нa дeлитeли укaзaнныe в cxeмe.

Диoды кaк нa cxeмe нe пaял, нужнo будeт нaйти пoxoжиe и дoдeлaть вce кaк прeдпoлaгaлocь.

Рaбoтaeт aппaрaт тaк жe в двуx кaнaльнoм рeжимe, c мaкcимaльнoй чacтoтoй диcкрeтизaции 450Khz. Вcтрoeнный USB кoнтрoллeр coвмecтим лишь co cтaндaртoм USB 1.1.

И тaк, рeшил cрaвнить caмoдeлку и oбoзрeвaeмый зaвoдcкoй прибoр:

Кaк виднo, при тaкиx дocтaтoчнo прocтыx измeрeнияx, рeзультaты пoxoжи. Еcтecтвeннo вoзмoжнocти caмoдeлки и удoбcтвo oгрaничeны.

Пocлe пoлучeния прибoрa кaк рaз пoдвeрнулcя cлучaй eгo прoвeрки, друг принec aвтoмaгнитoлу (пo cути кoмп) c бoльшим жк диcплeeм, в кoтoрoй пoчeму тo пeрecтaлa рaбoтaть пoдcвeткa. С пoмoщью ocциллoгрaфa «пoщупaл» зaтвoры трaнзиcтoрoв, пoнял чтo питaниe нa ниx нe пoдaeтcя, т.e. выявил чтo прoблeмa тoчнo нe в ниx.

Итoг. Пoдвoдя чeрту, мoгу cкaзaть чтo прибoр вecьмa гoдный, мнe eщe тoлькo прeдcтoит изучить вce вoзмoжнocти дaннoгo aппaрaтa при пoдxoдящeм cлучae.

Кoнeчнo жe, я пoнимaю чтo этo дocтaтoчнo прocтoй прибoрчик, имeющий cкрoмныe xaрaктeриcтики и нe cпocoбный тягaтьcя дaжe c любитeльcкими, нe пoвeрeнными мoдeлями cтoимocтью oт ~12к (у Китaйцeв c aли). Нo нaчинaть c чeгo тo нужнo, и этoт aппaрaт лучшe чeм ничeгo, ocoбeннo ecли пoкa чтo нeт нужды в чeм тo бoлee мoщнoм.

Дaнный прибoр явнo cущecтвeннo лучшe тoгo жe DSO138, пocтрoeнныx нa STM32, xoть и cтoит пoчти в три рaзa дoрoжe. Считaю чтo лучшe взять имeннo Hantek 6022BE ecли нужeн гoтoвый aппaрaт, либo coбрaть нa «пoбaлoвaтьcя» caмoдeльный ocциллoгрaф нa STM32, кoтoрый oбoйдeтcя вecьмa дeшeвo и будeт быcтр в изгoтoвлeнии, и пo cути будeт нeким бюджeтным aнaлoгoм DSO138, и нeмнoгo прoкaчaeт вaши нaвыки.

Вeрoятнo, прибoр в тaкoй рeaлизaции тaк жe бoлee выгoдeн чeм зaвoдcкиe пoртaтивныe ocциллoгрaфы, нaпримeр DS202, cтoимocть кoтoрoгo в двa рaзa вышe.

К минуcaм прибoрa, я мoгу oтнecти узкий диaпaзoн измeрeния нaпряжeния, дo 50В в oбe cтoрoны (нacкoлькo я пoнимaю увeличить нeльзя, тaк кaк нe фaкт чтo щупы c бoльшим дeлитeлeм пoдoйдут к прибoру).

Нo, cпрaвeдливocти рaди, вeрoятнo нe вceм пoтрeбуeтcя измeрять нaпряжeниe бoльшe 50В. Пoлoca прoпуcкaния зaвиcит oт выбрaннoгo знaчeния вoльт/дeлeниe (чeм мeньшe знaчeниe тeм ужe пoлoca).

Тaк жe, кaк я пoнял, нeт рaзвязки пo пeрeмeннoму тoку и внeшнeй cинxрoнизaции.

Источник: http://musku.ru/nebolshoj-obzor-usb-ostsillografa-hantek-6022be-sravnenenie-s-samodelnym-ostsillografom-na-baze-stm32/

Небольшой обзор USB осциллографа Hantek 6022BE. Сравненение с самодельным осциллографом на базе STM32

Всем привет. Сегодня я хочу рассказать о достаточно доступном USB осциллографе Hantek 6022BE.

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

Рассказ буду вести с точки точки зрения любителя, особо не работавшего с осциллографами ранее. Поехали!

onedrive.live.com/?cid=6c60a056648d9011&id=6C60A056648D9011!107

Как видим, всё необходимое есть. Драйвер встаёт без проблем. На сайте hantek.ru можно скачать русскоязычную инструкцию: www.hantek.ru/products/mans/HT6022BL_RUS.pdf

Подключение и калибровка прибора.

Запускаем утилиту.

После установки драйвера и ПО, согласно инструкции, необходимо произвести калибровку прибора по встроенному калибровочному генератору.

Отображение сигнала до калибровки:

Берём подстроечную крутилку и подкручиваем регулятор в щупе. Делитель щупа в положении X10 (при всем моих измерениях показанных в данном обзоре делитель x10).

Добиваемся примерно такой картинки:

Прибор готов к эксплуатации.

Отмечу, что есть возможность запуска ещё несколько модернизированной версии утилиты:

В качестве проверочного тестирования, я исследую ШИМ сигнал полученный с Arduino.

За основу взят простенький код с изменением яркости светодиода по сопротивлению переменного резистора. Здесь данная опция не нужна, поэтому я закомментирую ненужное и пропишу значение для ШИМ в ручную.

int ledPin = 9; // LED connected to digital pin 9 //int analogPin = 3; // potentiometer connected to analog pin 3 int val = 0; // variable to store the read value void setup() { pinMode(ledPin, OUTPUT); // sets the pin as output } void loop() { //val = analogRead(analogPin); // read the input pin val = 256; analogWrite(ledPin, val / 4); // =64 analogRead values go from 0 to 1023, analogWrite values from 0 to 255 }

Вот что получилось:

Всё работает так как и должно.

Кроме этого приборчика, у меня имеется самодельный осциллограф на STM32, собранный по схеме от Tomasz Ostrowski: tomeko.net/index.php?lang=en, о котором я как то упоминал здесь.

Осциллограф STM32

Вот русская версия статьи про осциллограф со схемой: cxem.net/izmer/izmer103.php

Как видно, деталей очень мало. Можно взять за основу готовый модуль на основе STM32F103C8T6, который стоит всего 100рублей, но потребуется ещё и программатор: aliexpress.com/item/ST-Link-st-link-V2-for-STM8S-STM8L-STM32-Cortex-M0-Cortex-M3-SWIM-JTAG-SWD/32322884886.html

За пол часа можно будет «изготовить» этот осциллограф.

Делал (если можно так сказать, так как работы кроме программирования платы почти нет) я этот осциллограф с год назад, по быстрому, ради теста возможностей и спортивного интереса, поэтому выглядит он весьма не брежно и очень печально, но работает:

Делайте сразу нормально!

Со временем, начал питать его от банки 18650 и готового линейного стаба на 3.3В на AMS1117, к которому подпаял электролит небольшой ёмкости, так как это минимизировало помехи, даже с учётом того как тяп ляп собран сей девайс, не имеющий корпуса (есть пластиковый а надо бы алюминиевый).

Так же, повесил небольшой отечественный конденсатор по питанию на саму плату. Делители в обоих каналах вот такие:

P.S. Утилита обработчик рассчитана на делители указанные в схеме.

Диоды как на схеме не паял, нужно будет найти похожие и доделать всё как предполагалось.

Работает аппарат так же в двух канальном режиме, с максимальной частотой дискретизации 450Khz. Встроенный USB контроллер совместим лишь со стандартом USB 1.1.

И так, решил сравнить самоделку и обозреваемый заводской прибор:

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

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

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

Конечно же, я понимаю что это достаточно простой приборчик, имеющий скромные характеристики и не способный тягаться даже с любительскими, не поверенными моделями стоимостью от ~12к (у Китайцев с али). Но начинать с чего то нужно, и этот аппарат лучше чем ничего, особенно если пока что нет нужды в чём то более мощном.

Данный прибор явно существенно лучше того же DSO138, построенных на STM32, хоть и стоит почти в три раза дороже. Считаю что лучше взять именно Hantek 6022BE если нужен готовый аппарат, либо собрать на «побаловаться» самодельный осциллограф на STM32, который обойдётся весьма дёшево и будет быстр в изготовлении, и по сути будет неким бюджетным аналогом DSO138, и немного прокачает ваши навыки.

Вероятно, прибор в такой реализации так же более выгоден чем заводские портативные осциллографы, например DS202, стоимость которого в два раза выше.

К минусам прибора, я могу отнести узкий диапазон измерения напряжения, до 50В в обе стороны (насколько я понимаю увеличить нельзя, так как не факт что щупы с большим делителем подойдут к прибору). Но, справедливости ради, вероятно не всем потребуется измерять напряжение больше 50В. Полоса пропускания зависит от выбранного значения вольт/деление (чем меньше значение тем уже полоса).

Так же, как я понял, нет развязки по переменному току и внешней синхронизации.

Источник: https://ongroup.ru/nebol_shoy_obzor_usb_oscillografa_hantek_6022be_sravnenenie_s_samodel_nym_oscillografom_na_baze_stm32.html

Neil Scope 3

Источник: http://hobby-research.at.ua/publ/razrabotki/izmerenija/neil_scope_3/4-1-0-42

Двухканальный USB осциллограф на STM32 — Miniscope v2c

Двухканальный USB осциллограф на STM32 — Miniscope v2c

Ниже представлен проект дешево 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 запроса, изменение аналогового усиления).

Перечень радиоэлементов

Обозначение Тип Номинал Количество ПримечаниеМагазинМой блокнот МикроконтроллерSTM32F10XCXT61 STM32F103?Поиск в win-sourceВ блокнотIC1 Линейный регуляторLF331 Поиск в win-sourceВ блокнотD1-D4 Диодик Шоттки BAT42 4 Поиск в win-sourceВ блокнотC1 Электролитический конденсатор10 мкФ1 Поиск в win-sourceВ блокнотC2 Электролитический конденсатор100 мкФ1 Поиск в win-sourceВ блокнотC3, C4, C6-C9, C13 Конденсатор100 нФ7 Поиск в win-sourceВ блокнотC5 Электролитический конденсатор22 мкФ1 Поиск в win-sourceВ блокнотC10, C12 Конденсатор2 Поиск в win-sourceВ блокнотC11, C14 Конденсатор47 пФ2 Поиск в win-sourceВ блокнотC15, C16 Конденсатор22 пФ2 Поиск в win-sourceВ блокнотR1-R3, R7, R10 Резистор 10 кОм 5 Поиск в win-sourceВ блокнотR4, R8 Резистор 27 Ом 2 Поиск в win-sourceВ блокнотR5, R6 Резистор 100 Ом 2 Поиск в win-sourceВ блокнотR9 Резистор 1.5 кОм 1 Поиск в win-sourceВ блокнотQ1 Кварц8 МГц1 Поиск в win-sourceВ блокнотL1 ДроссельBL01RN1A1 Поиск в win-sourceВ блокнотSG1 ПьезоизлучательF/TMB1 Поиск в win-sourceВ блокнотS1, S2 КнопкаЗамыкающая2 Поиск в win-sourceВ блокнотX1 РазъёмUSB1 Поиск в win-sourceВ блокнотJP2 РазъёмPLS-41 ВходыПоиск в win-sourceВ блокнотJP3 РазъёмPLS-31 UARTПоиск в win-sourceВ блокнотДобавить все

Скачать перечень частей (PDF)

stm32scope. rar (729 Кб) miniscope_v2c_20120416.zip (65 Кб)
CooCox CoIDE Eagle Микроконтроллер STM32 USB Осциллограф

Источник: http://bloggoda.ru/2017/11/01/dvuxkanalnyj-usb-oscillograf-na-stm32-miniscope-v2c/

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var debugMode="undefined"!=typeof debugFlatPM&&debugFlatPM,duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM,countMode="undefined"!=typeof countFlatPM&&countFlatPM;document["wri"+"te"]=function(a){let b=document.createElement("div");jQuery(document.currentScript).after(b),flatPM_setHTML(b,a),jQuery(b).contents().unwrap()};function flatPM_sticky(c,d,e=0){function f(){if(null==a){let b=getComputedStyle(g,""),c="";for(let a=0;a=b.top-h?b.top-h{const d=c.split("=");return d[0]===a?decodeURIComponent(d[1]):b},""),c=""==b?void 0:b;return c}function flatPM_testCookie(){let a="test_56445";try{return localStorage.setItem(a,a),localStorage.removeItem(a),!0}catch(a){return!1}}function flatPM_grep(a,b,c){return jQuery.grep(a,(a,d)=>c?d==b:0==(d+1)%b)}function flatPM_random(a,b){return Math.floor(Math.random()*(b-a+1))+a}
");let k=document.querySelector(".flat_pm_modal[data-id-modal=\""+a.ID+"\"]");if(-1===d.indexOf("go"+"oglesyndication")?flatPM_setHTML(k,d):jQuery(k).html(b+d),"px"==a.how.popup.px_s)e.bind(h,()=>{e.scrollTop()>a.how.popup.after&&(e.unbind(h),f.unbind(i),j())}),void 0!==a.how.popup.close_window&&"true"==a.how.popup.close_window&&f.bind(i,()=>{e.unbind(h),f.unbind(i),j()});else{let b=setTimeout(()=>{f.unbind(i),j()},1e3*a.how.popup.after);void 0!==a.how.popup.close_window&&"true"==a.how.popup.close_window&&f.bind(i,()=>{clearTimeout(b),f.unbind(i),j()})}f.on("click",".flat_pm_modal .flat_pm_crs",()=>{jQuery.arcticmodal("close")})}if(void 0!==a.how.outgoing){let b,c="0"==a.how.outgoing.indent?"":" style=\"bottom:"+a.how.outgoing.indent+"px\"",e="true"==a.how.outgoing.cross?"":"",f=jQuery(window),g="scroll.out"+a.ID,h=void 0===flatPM_getCookie("flat_out_"+a.ID+"_mb")||"false"!=flatPM_getCookie("flat_out_"+a.ID+"_mb"),i=document.createElement("div"),j=jQuery("body"),k=()=>{void 0!==a.how.outgoing.cookie&&"false"==a.how.outgoing.cookie&&h&&(jQuery(".flat_pm_out[data-id-out=\""+a.ID+"\"]").addClass("show"),j.on("click",".flat_pm_out[data-id-out=\""+a.ID+"\"] .flat_pm_crs",function(){flatPM_setCookie("flat_out_"+a.ID+"_mb",!1)})),(void 0===a.how.outgoing.cookie||"false"!=a.how.outgoing.cookie)&&jQuery(".flat_pm_out[data-id-out=\""+a.ID+"\"]").addClass("show")};switch(a.how.outgoing.whence){case"1":b="top";break;case"2":b="bottom";break;case"3":b="left";break;case"4":b="right";}jQuery("body > *").eq(0).before("
"+e+"
");let m=document.querySelector(".flat_pm_out[data-id-out=\""+a.ID+"\"]");-1===d.indexOf("go"+"oglesyndication")?flatPM_setHTML(m,d):jQuery(m).html(e+d),"px"==a.how.outgoing.px_s?f.bind(g,()=>{f.scrollTop()>a.how.outgoing.after&&(f.unbind(g),k())}):setTimeout(()=>{k()},1e3*a.how.outgoing.after),j.on("click",".flat_pm_out .flat_pm_crs",function(){jQuery(this).parent().removeClass("show").addClass("closed")})}countMode&&(flat_count["block_"+a.ID]={},flat_count["block_"+a.ID].count=1,flat_count["block_"+a.ID].click=0,flat_count["block_"+a.ID].id=a.ID)}catch(a){console.warn(a)}}function flatPM_start(){let a=flat_pm_arr.length;if(0==a)return flat_pm_arr=[],void jQuery(".flat_pm_start, .flat_pm_end").remove();flat_body=flat_body||jQuery("body"),!flat_counter&&countMode&&(flat_counter=!0,flat_body.on("click","[data-flat-id]",function(){let a=jQuery(this),b=a.attr("data-flat-id");flat_count["block_"+b].click++}),flat_body.on("mouseenter","[data-flat-id] iframe",function(){let a=jQuery(this),b=a.closest("[data-flat-id]").attr("data-flat-id");flat_iframe=b}).on("mouseleave","[data-flat-id] iframe",function(){flat_iframe=-1}),jQuery(window).on("beforeunload",()=>{jQuery.isEmptyObject(flat_count)||jQuery.ajax({async:!1,type:"POST",url:ajaxUrlFlatPM,dataType:"json",data:{action:"flat_pm_ajax",data_me:{method:"flat_pm_block_counter",arr:flat_count}}})}).on("blur",()=>{-1!=flat_iframe&&flat_count["block_"+flat_iframe].click++})),flat_userVars.init();for(let b=0;bflat_userVars.textlen||void 0!==a.chapter_sub&&a.chapter_subflat_userVars.titlelen||void 0!==a.title_sub&&a.title_subc&&cc&&c>d&&(b=flatPM_addDays(b,-1)),b>e||cd||c-1!=flat_userVars.referer.indexOf(a))||void 0!==a.referer.referer_disabled&&-1!=a.referer.referer_disabled.findIndex(a=>-1!=flat_userVars.referer.indexOf(a)))&&(c=!0),c||void 0===a.browser||(void 0===a.browser.browser_enabled||-1!=a.browser.browser_enabled.indexOf(flat_userVars.browser))&&(void 0===a.browser.browser_disabled||-1==a.browser.browser_disabled.indexOf(flat_userVars.browser)))){if(c&&void 0!==a.browser&&void 0!==a.browser.browser_enabled&&-1!=a.browser.browser_enabled.indexOf(flat_userVars.browser)&&(c=!1),!c&&(void 0!==a.geo||void 0!==a.role)&&(""==flat_userVars.ccode||""==flat_userVars.country||""==flat_userVars.city||""==flat_userVars.role)){flat_pm_then.push(a),flatPM_setWrap(a),flat_body.hasClass("flat_pm_block_geo_role")||(flat_body.addClass("flat_pm_block_geo_role"),flatPM_ajax("flat_pm_block_geo_role")),c=!0}c||(flatPM_setWrap(a),flatPM_next(a))}}}let b=jQuery(".flatPM_sticky");b.each(function(){let a=jQuery(this),b=a.data("height")||350,c=a.data("top");a.wrap("
");let d=a.parent()[0];flatPM_sticky(this,d,c)}),debugMode||countMode||jQuery("[data-flat-id]:not([data-id-out]):not([data-id-modal])").contents().unwrap(),flat_pm_arr=[],jQuery(".flat_pm_start, .flat_pm_end").remove()}


                          Neil Scope 3

Основные характеристики осциллографа:

Полоса пропускания аналога 20 МГц
Разрядность АЦП 8 бит
Частота дискретизации на канал 100Mвыб/с
Минимальная чувствительность 50 В/дел*
Максимальная чувствительность 10 мВ/дел
Предельное входное напряжение 100 В*
Объем ОЗУ 256 Кбайт на каждый канал
Интерфейс связи с ПК USB 2.0 FullSpeed

* максимальное входное напряжение зависит от максимального напряжения пасивных элементов входного делителя.

Набор основных функций:

  • авто/ждущая/ручная/ развертки;
  • произвольное соотношение пред- и поствыборок;
  • 12-ти позиционный аппаратный аттенюатор; 
  • закрытый/открытый вход; 
  • произвольный уровень синхронизации, синхронизация по уровню, по перепаду, по окну.
  • синхронизация от логических каналов, в том числе по всем видам синхронизации логического анализатора; 
  • растяжка осциллограммы по вертикали и горизонтали;
  • линейная интерполяция, режим макс./мин.<\p>

Режимы работы прибора:

  • Двухканальный осциллограф, макс. частота семплирования каждого канала 100МГц;
  • Логический анализатор, 8 входов, макс. частота семплирования 100МГц;
  • Одноканальный осциллограф + лог. Анализатор, макс. частота семплирования каждого канала 100МГц;

Экранные измерения, выделение области для измерений:

  • измерения постоянного, пикового и среднего значений напряжения;
  • вольтметр переменного тока: СКЗ (True RMS); 
  • измерение длительности, скважности, частоты;
  • измерения времени нарастания/спада, выбросов посредством курсоров;
  • измерение напряжения в точках курсоров;
  • измерение максимального и минимального значений напряжения;

Блок-схема осциллографа:

Входной аттенюатор представляет из себя двух позиционный частотно компенсированный делитель с коэффициентами передачи 1:1 и 1:100.

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

Далее сигнал поступает на вход управляемого аттенюатора выполненного на широкодоступном 8-ми канальном аналоговом мультиплексоре 74HC4052.

Драйвер АЦП выполнен на ОУ AD8129 в неинвертирующем включении с коэффициентом усиления 10, на его специальный вывод REF подается напряжение смещения, которое формируется посредством интеграции и фильтрации сигнала ШИМ поступающего с микроконтроллера STM32F103RBT6.

АЦП AD9288-100, представляет собой сдвоенный, 8-ми битный АЦП с максимальной скоростью преобразования 100 миллионов отсчетов за секунду, данные с АЦП поступают непосредственно на входы ПЛИС — EPM570 фирмы Altera, к ПЛИС подсоединена буферная статическая память объемом 256 тысяч слов шириной 16 бит для хранения отсчетов.

Основной блок управления выполнен на микроконтроллере STM32F103RBT6 производства STMicroelectronics, микроконтроллер управляет работой осциллографа и отображает результаты на жидкокристаллическом дисплее ST032D6C-E00 c контроллером HX8352, также МК имеет связь с ПК посредством протокола UART через преобразователь USBUART выполненный на микросхеме СР2102 производства Silicon Laboratories Inc.

Для питание «цифровой части» осциллографа используется линейный стабилизатор ADP1710-3.3, его можно заменить без каких либо изменений печатной платы на MAX6329 с индексами TP/TL/TH/SP/SL/SH, также на NCP584 или LP2985-3.3.

Для аналоговых компонентов установлен такой же линейный стабилизатор , с теми же возможными заменами и инвертор напряжения на переключаемых конденсаторах — TPS60400/TPS60403 для формирования отрицательного напряжения -3.3В.

Для управления зарядом аккумулятора применена микросхема MCP73812T-420I/OT.

Важное замечание –при использовании ADP1710-3.3 или МАХ6329 С52 и С72 устанавливать на плату не нужно, в случае применения NCP584 вместо этих конденсаторов нужно впаять перемычки.

Принципиальная схема осциллографа

Сборка, прошивка, наладка.

Осциллограф не требует каких либо специальных и/или сложных методов наладки, необходимо только проконтролировать форму прямоугольного сигнала подстраивая конденсаторы VC1, VC2 и VC3, VC4 в входных аттенюаторов обеих каналов.

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

При первом включении осциллографа рекомендую использовать лабораторный БП с регулировкой уровня срабатывания защиты по току, осциллограф при не прошитых МК и ПЛИС потребляет около 190мА. Пока МК не прошит питание осциллографа пропадает при отпускании кнопки ON1.

После включения нужно проконтролировать основные питающие напряжения, обозначения по схеме – +3.3, +3.3VA, -3.3VA, если все в порядке можно дополнительно проконтролировать напряжения на входах АЦП, на ADC REFOUT 1.25V должно быть +1.25В, на INADC А+ и INADC B+ около +3В, на INADC А- и INADC B- около +0.99В.

Процедура прошивки микроконтроллера довольно проста и не требует наличия какого либо программатора. После сборки, естественно проверяем правильность сборки и отсутствие непропаев и/или замыканий между дорожками, далее подсоединяем осциллограф к ПК USB кабелем, устанавливаем драйвера виртуального COM – http://www.silabs.com/products/mcu/Pages/USBtoUARTBridgeVCPDrivers.

aspx, после установки, убеждаемся что ПК видит и правильно определяет устройство как виртуальный СОМ порт. Скачиваем утилиту прошивки МК по UART с сайта ST – Flash Loader Demonstrator.

Отключаем осцилл и переставляем джампер JP1 в положение boot mode, подсоединяем питание, нажимаем, и удерживаем кнопку питания осцилла(удерживать нужно для того что бы питание при отпускании кнопки не пропало так как МК еще не прошит и не может “защелкнуть” этот управляющий сигнал), запускаем утилиту Flash Loader Demonstrator.

Утилита должна увидеть и правильно определить МК. Открываем файл прошивки и прошиваем, после прошивки отпускаем кнопку питания ON1, выключаем осцилл, переставляем джампер в положение normal mode. Все, на этом процедуру прошивки МК можно считать оконченой.

Для прошивки ПЛИС нужен программатор, вариантов программаторов для данной микросхемы много, можно использовать любой из них, схемы можно посмотреть на сайте www.marsohod.org, процедура прошивки тоже достаточно проста.

Если МК уже прошит, подсоединяем программатор к ПЛИС и к ПК, включаем питание осциллографа коротким нажатием ON1, запускаем на ПК Quartus II Stand-Alone Programmer — https://www.altera.com/download/software/prog-software, в которой открываем файл прошивки и прошиваем ПЛИС.

После достаточно выключить питание, отсоединить программатор. После этого осциллограф готов к работе.

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

Все вопросы, последние версии прошивки и т.д в главной ветке по осциллографу.