Fnirsi 1013d sd error

Наконец дождался доставки модели из акционной партии. Обещали два канала по 100МГц, частоту дискретизации 1GSa/s, хранение 1000 снимков экрана и снапшотов с возможностью выгрузки первых на ПК. Понятное дело гигасемпл ...

Наконец дождался доставки модели из акционной партии. Обещали два канала по 100МГц, частоту дискретизации 1GSa/s, хранение 1000 снимков экрана и снапшотов с возможностью выгрузки первых на ПК. Понятное дело гигасемпл за такие деньги получить нереально, я даже был готов к тому, что он начнет «давиться» сигналом свыше 50МГц, но по тестам получилось не так плохо. Ну и вишенка на торте, 7″ сенсорный дисплей, который по управлению после DS213 кажется мегаудобным, всё под рукой и настраивается в пару кликов. Довольно удачная модель, с учетом стоимости и придраться особо не к чему.

Характеристики

Ширина канала: 100 МГц * 2
Количество каналов: 2 канала + генератор 1кГц
Максимальная частота дискретизации в реальном времени: 1GSa/s
Вертикальная чувствительность: 50 мВ/див ~ 500 В/Див
Горизонтальный диапазон времени: 50S/div ~ 10 NS/div
Максимальное испытательное напряжение: 40 В (1X зонд), 400 В (10X зонд)
Глубина хранения: 240 кб
Входное сопротивление: 1 м
ADC точность: 8 бит
Режим напряжения: AC/DC
Режим запуска: одиночный, нормальный, автоматический
Тип триггера: Восходящий/нисходящий
Внешнее триггерное напряжение: 0 — 40В
Дисплей: 7 дюймов 800*480
Управление: емкостный сенсорный экран + жесты
Синхронизация: экспорт изображений USB
Источник питания: литиевая батарея 6000 мАч
Размер: 184 мм x 124 мм x 50 мм
Вес: 650 г

Распаковка и внешний вид

Коробка вместо пакета

И уже внутри обмотанная в пупырку заводская упаковка

Запаковали хорошо, да и коробка выглядит симпатично, подарить кому-то будет не стыдно

Внутри пакет с щупами, инструкция, в подиуме сам осциллограф, блок питания и шнурок

Так будет нагляднее. Блок питания 5В 2А, шнур 1.8 метра

Щупы бюджетные, но не худшего качества — регулировать не пришлось, хотя отвертку положили

На лицевой стороне никаких элементов управления нет, только экран

Сзади шильдик с характеристиками и подствака. На фото сдернул с фиксаторов, самопроизвольно не откидывается

Ну и вверху два классических разъема для щупов, контакт генератора 1кГц, пара индикаторов, гнездо microUSB для зарядки и скидывания скриншотов, а так же кнопка включения с арретиром(фиксатором)

Функционирование

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

Триггеры двигаются пальцем

При нажатии на левую или правую часть экрана можно менять развертку по горизонтали в диапазоне 10нс-50с

Для каждого канала вызывается своё меню, в котором можно его включить/выключить, активировать FFT, выбрать режим AC/DC и делитель щупа. Регулировка развертки по вертикали производится после нажатии кнопки «CTRL» отдельно на каждый канал

Рядом с каналами расположили простенькие настройки триггера

В вертикальном меню справа помимо кнопки «Старт/Стоп» и «Автонастройки» есть курсорные измерения

Так же можно включить до 12 параметров для вывода на экран и они практически не будут мешать обзору

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

Тут у нас имеется настройка яркости экрана

И сетки, на гифке стоковые 15% и 100% для сравнения

Чуть ниже фиксация триггера на 50%, калибровка нуля и активация режима X-Y

Режим «X-Y» — специализированный двухканальный режим работы осциллографа, при котором сигнал одного из каналов используется для отклонения луча по горизонтальной оси «X», а сигнал второго канала для его отклонения по вертикальной оси «Y». Режим «X-Y» позволяет отображать на экране прибора зависимость одного физического процесса (сигнал «Y») от другого (сигнал «X»). Например, зависимось давления газа в фиксированном объеме от температуды этого газа. Для этого необходимо преобразовать сигналы обоих процессов в соотвествующие сигналы напряжения для подачи их на входы осциллографа. Простейшим примером использования данного режима в измерительной технике является измерение отношения параметров синусоидальных сигналов двух генераторов с помощью фигур Лиссажу. По форме этих фигур можно определить соотношение частот сигналов, их амплитуд и фазовый сдвиг одного сигнала относительно другого.

Простенький пример

Далее галерея скриншотов

Выбрал случайный файл, разрешение 800х480, размер 781Кб

И снапшотов

В конце вход в режим синхронизации с ПК. Без активации осциллограф будет просто заряжаться

Для тестирования предела измерений сделал генератор на si5351 с ростом частоты от 1 до 100МГц с шагом 1МГц, подключил оба канала. Триггер ставится только на один, так что второй получился малость дерганным, но общая картина видна

DANIU ADS5012H с аналогичной частотой пропускания и заявленной выборкой 500MS/s, сдался на 70Мгц

DS213 даже не подключал, т.к. там «расческа» будет уже на 20МГц

Продавец попросил потянуть с обзором, так что я дождался еще один генератор и публикацию обзора на этот осциллограф от другого автора, ну да ладно, продавцу виднее как лучше )
Выбор пал на модель с ADF4351, которую можно разгонять от 35МГц до 4.4ГГц

Результат тот же. 70МГц отображает нормально

К 80МГц амплитуда уже проседает, но сигнал держится

При 85МГц уже становится дерганным и частота немного прыгает

Ну и на 90МГц поведение лучше покажет гифка

В комментариях к акции скидывали это видео, довольно информационно и по делу.

Автономность

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

За 10 минут до выключения сигнал начало заметно выдирать, вот последние 15 секунд работы без ускорения

Полного заряда определенно должно хватить на 3-4 часа непрерывной работы

Поставил на зарядку, ток потребления порядка 1.5А

При этом начинает светиться красный индикатор в верхней части

Думал он погаснет в конце, но нет, дополнительно загорелся зеленый

Тестер насчитал 5500мАч при 5В на входе, так что около 6000мАч аккумулятор должен быть

Внутренний мир

5 шурупов и корпус без труда разделяется на две части

Плата. «Мозги»: EP4CE6E22C8N от Intel и F1C100S, маркировка АЦП потерта, но скорее всего это пара AD9288, так что гигасемпла тут точно нет, максимум 200MSa/s. В качестве контроллеров заряда использовали пару TP4056, подключенных параллельно. Так же видна память W25Q16JV и полноценный разъем microSD, под рукой была карточка на 16ГБ, работает без проблем, то есть количество хранимых скринов и снапшотов можно увеличить до 16000, но нужно ли? В комментариях к акции UniSoft писал, что скармливал 32ГБ без проблем, кстати, спасибо ему за первые фото и отклик.

С обратной стороны ничего интересного нет

Аккумулятор 3.7В(1S пакет) закрепили не в нише, а на уровне основного корпуса, так что при желании можно легко вставить пакет гораздо крупнее или около 6х18650 параллельно, но нужно ли?

Продавец предоставил купон FNIRSI04, который скидывает 6$

Итоги

Начну с замечания. Частота дискретизации порядка 200MSa/s и при построении сигнала хотя бы по трем точкам, максимальная рабочая частота не должна превышать 70МГц, синус в моем случае выдержал до 80+МГц. Так что да, частоты дискретизации 1GSa/s у данной модели нет. Хотелось бы конечно, но нужно быть реалистами, не за эту цену )

В остальном мне модель понравилась:

+ Очень удобное управление. Подстройка производится в несколько касаний пальцем, все элементы расположены логично и привыкаешь довольно быстро. Новичкам понравится кнопка автоматической настройки. По сравнению с тем же DS213 небо и земля. Собственно, сенсорным экраном и зацепил этот осциллограф, иначе прошел бы мимо.
+ Большой информативный дисплей с хорошими углами обзора и яркостью, на который без труда помещаются два графика, окошко быстрого преобразования Фурье, по 12 окошек измерений на каждый канал и блок курсорных измерений, при этом вид остается вполне читабельным.
+ Два канала с классическими разъемами, есть щуп генератора с меандром 1кГц, который активен постоянно.
+ Хорошая автономность, которую при желании можно увеличить в несколько раз.
+ Есть синхронизация с ПК, при этом скриншоты создает в неплохом разрешении(800х480), при этом можно увеличить хранилище с 1 до 32ГБ, хотя не вижу в этом особого смысла, т.к. места хватает на 1000 файлов.

В комментариях писали, что 50мВ/дел маловато для оценки шума блоков питания, но ведь 50мВ это не минимум, ниже которого будет чистая полоса, можно регистрировать всплески по 5мВ. Я такие сгенерировать не могу, но вот для примера 37мВ

Да, при 10мВ/дел можно поймать всплески от 1мВ и график выглядит лучше

Но я обычно на шум меньше 50мВ внимания не обращаю, хотя конечно многое зависит от рода деятельности.
Так же стоит напомнить о размерах, компактной данную модель назвать сложно и в карман куртки она не поместится, так что это больше вариант для дома/мастерской. У меня стоит на столе рядом с мультиметром-колонкой, смотрятся неплохо )

В данный момент DS213 и DANIU ADS5012H ушли на полку, хотя последний будет частенько использоваться как «выездная модель» из-за своих компактных размеров и схожих с сабжем характеристик. А вот 213 включал только если нужно было сделать много скриншотов, осциллограф неплохой, но к управление это боль, так и не привык к нему.

Как всегда, приветствуется конструктивная критика в комментариях. Всем добра =)

Товар для написания обзора предоставлен магазином. Обзор опубликован в соответствии с п.18 Правил сайта.

Для работы проектов iXBT.com нужны файлы cookie и сервисы аналитики.
Продолжая посещать сайты проектов вы соглашаетесь с нашей
Политикой в отношении файлов cookie

Содержание

  • Упаковка, комплектация, внешний вид и конструкция двухканального осциллографа Fnirsi-1013D
  • Тест двухканального осциллографа Fnirsi-1013D. Часть 1: разоблачение магии
  • Тест двухканального осциллографа Fnirsi-1013D. Часть 2: обо всём понемногу
  • Итоги и выводы (техническая часть)
  • Итоги и выводы (эмоциональная часть)

В обзоре будет рассмотрен крайне интересный двухканальный осциллограф Fnirsi-1013D (aka ADS1013D). Это — новая модель, вышедшая в этом году (2020).

Интересен он во многих отношениях: и большим 7-дюймовым экраном, и автономным питанием, и очень привлекательными для своей цены параметрами.

Но, разумеется, будут сделаны и критические замечания, в том числе и весьма «увесистые». Сеанс магии с разоблачением тоже будет. :)

/изображение с официального сайта производителя/

Начнём, как обычно, с официальных технических параметров.

Технические характеристики планшетного осциллографа Fnirsi-1013D (aka ADS1013D)

/увеличение по клику/

Итого: частота семплирования в 1 ГГц и полоса в 100 МГц в двухканальном осциллографе по цене не сильно выше 100 долларов! Просто магия какая-то!

Вот её разоблачением дальше и придётся заняться.

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

Небольшие дополнительные комментарии к таблице с техническими характеристиками.

1. Предельная чувствительность в 500 Вольт/дел. возможна при применении щупа x100. Собственные пределы чувствительности осциллографа составляют 50 мВ — 5 В.

2. Сохранённые скриншоты можно просматривать как на самом осциллографе, так и на компьютере; а сохранённые осциллограммы — только на осциллографе (для просмотра на компьютере нет программного обеспечения).

Купить этот прибор можно на Алиэкспресс как в официальном магазине Fnirsi, так и у ДРУГОГО ПРОДАВЦА (брать можно, где дешевле, товар одинаковый).

Цена на дату обзора — около $120 — $138 (на распродаже 11.11 — на несколько долларов дешевле). Для осциллографов такая цена — это, в сущности «бюджетный» уровень, что не очень сильно превышает цену бюджетных смартфонов с их условной границей в 100 долларов.

Кроме того, можно поискать точку продажи и на Яндекс.Маркет. Там цена будет несколько выше; но для юридических лиц важнее, чтобы комплект документов был в порядке. :)

Упаковка, комплектация, внешний вид и конструкция двухканального осциллографа Fnirsi-1013D

 Упаковка представляет собой черную коробку из гофрокартона почти без опознавательных знаков:

В комплектацию протестированного экземпляра входили два щупа P6100 на частоты до 100 МГц,  инструкция на английском языке и кабель микро-USB:

Зарядного устройства не было. Ну и ладно: у меня их уже столько, что хоть оптовую торговлю открывай! Да и не только у меня, вероятно, такая ситуация.

 А вот, наконец, и красавец-осциллограф собственной персоной:

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

Так выглядит прибор сзади:

 Задняя панель у него — белоснежная; и я не могу сказать, что это — хорошо.

Это только сначала будет казаться гламурным, а потом на белом фоне любая, даже малейшая грязь, будет очень заметна.

Задняя крышка держится только на пяти винтах, никаких защёлок нет.

Так что разборка девайса будет очень простой задачей; но перед этим посмотрим на осциллограф ещё в паре ракурсов.

Так он выглядит со стороны верхней грани в наклонном ракурсе:

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

Подставку и её канавку можно было бы сделать тоньше; но, что вышло — то вышло.

На верхней грани (которая на фото — снизу) видны два BNC-разъёма для подключения двух каналов сигнала, а между ними — контакт с калибровочным сигналом 1 КГц.

Далее идут два светодиода: зелёный и красный. Красный показывает, что идёт зарядка; а зелёный — что она завершилась (но красный при этом не гаснет).

Затем — разъём микро-USB для зарядки и связи с компьютером.

И, последний в этом ряду — механический выключатель питания.

Теперь последний ракурс — с осциллографом, опирающимся на свою подставку:

Прибор с помощью подставки можно установить только под углом 45 градусов к поверхности стола; фиксации подставки в других положениях не предусмотрено.

И, наконец, прибор во включенном состоянии:

Теперь пора взяться за разборку!

Вся электронная начинка осциллографа расположена на единственной плате, а элементы находятся только с одной стороны платы:

 Разберёмся, что здесь есть и зачем.

 Чуть левее и выше центра платы находится процессор F1C100s компании с пафосным названием AllWinner Tech.

Изначальное предназначение этого процессора — для планшетов и ТВ-приставок; но за счёт универсальности его можно устанавливать где угодно.

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

Это — ПЛИС (программируемая логическая интегральная схема). Их устанавливают в тех случаях, когда процессор не может осилить выполнение каких-то операций программно; ПЛИС-ы же выполняют эти операции аппаратно.

Применённая ПЛИС, скорее всего, является китайским клоном Altera Cyclone IV, которую чаще всего устанавливают в осциллографах и DDS-генераторах.

Справа от ПЛИС — два быстродействующих АЦП.

Маркировки на них нет, но и нет следов её стачивания. 

Вероятнее всего, партия без маркировки была изготовлена по спецзаказу. Цель — скрыть истинные параметры осциллографа, которые по применённым АЦП определяются на «раз-два».

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

 Почти в центре платы находится слот для карты памяти микро-SD. Извлечение карты показало, что её ёмкость составляет 1 ГБ:

Вероятно, на её место можно установить и более ёмкую карту памяти, но зачем?! И так на неё можно записать просто тьму осциллограмм и скриншотов!

Теперь переходим к самому интересному — тестам и разоблачению магии. :)

Тест двухканального осциллографа Fnirsi-1013D. Часть 1: разоблачение магии

 Сначала, как писали в пиратских романах, «ничто не предвещало беды». Но — всё по порядку.

Для тестирования осциллографа использовался DDS-генератор сигналов FY6800 с предельной частотой генерации 60 МГц.

Но для одного из измерений я «выжал» из него частоту 125 МГц. Спойлер — как это сделать:

Нажмите, чтобы развернуть

Как получить 125 МГц из DDS-генератора FY6800 с максимальной частотой 60 МГц

Для этого я воспользовался функцией создания кастомного сигнала и соответствующим ПО осциллографа.

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

В данном случае я записал в качестве одного периода сигнала сразу 4 периода меандра, которые при воспроизведении с частотой 31.25 МГц дали частоту 125 МГц.

Почему выбрана именно такая частота?

Опорная частота генератора FY6800 составляет 250 МГц, т.е. минимальная длительность одного отсчета — 4 нс.

Соответственно, при частоте 125 МГц длительность положительной полуволны и отрицательной полуволны сигнала составят по 4 нс. При попытке повысить частоту ещё выше начнутся пропуски тактов и сигнал «развалится».

Корректность сформированного таким образом сигнала была проверена на осциллографе Hantek 5102P, имеющим частоту семплирования в одноканальном режиме 1 Gsps.

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

Но испытания сигналом 125 МГц были проведены позже, когда стало ясно, что в осциллографе есть незадокументированные «хитрости».

А сначала поданный на осциллограф синусоидальный сигнал с частотой 60 МГц получился удивительно ровным и гладким, как будто бы он действительно оцифрован с высокой частотой. Может быть, и не 1 Gsps (1 ГГц), но уж 500 Msps — точно:

Детальное исследование происхождения такой подозрительной гладкости осциллограммы показало, что на развёртках 10 нс/дел. и 25 нс/дел. при переходе частоты входного сигнала от 43.3 МГц к 43.4 МГц осциллограф начинает превращать любой сигнал в чистейший синус!

Поясню примерами.

Итак, сигнал — меандр, частота 43.3 МГц:

На осциллограмме трудно «опознать» меандр, поскольку сигнал искажен как из-за ограничения полосы пропускания осциллографа, так и из-за несинхронности частоты сигнала и частоты семплирования осциллографа. То есть, такие искажения — вполне естественны.

Частоту сигнала осциллограф определил с небольшой ошибкой (42.9 МГц вместо 43.3 МГц).

Теперь — тот же сигнал, но с частотой 43.4 МГц:

Частота сигнала тоже определена с небольшой ошибкой (43.3 МГц вместо 43.4 МГц), но зато теперь на экране — почти идеальный синус, никакой «болтанки»!

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

Спектр сигнала с частотой 43.3 МГц (на верхней половине экрана):

А теперь — сигнал с частотой 43.4 МГц:

 Вот, заодно посмотрели и на работу БПФ в этом осциллографе.

Теперь — «копаю» дальше: подаю на осциллограф сигнал с частотой 125 МГц.

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

И вот что получилось:

Осциллограф показал, что частота сигнала составила 75 МГц, хотя его реальная частота равна 125 МГц!

Исходя из теоремы Котельникова получается, что реальная частота семплирования (дискретизации) составляет в осциллографе вовсе не обещанные 1 Gsps, а только 200 Msps!

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

В данном случае после увеличения частоты сигнала сверх 1/2 частоты семплирования, изображение сигнала на экране осциллографа переходит на зеркальный «обратный отсчёт»: чем выше реальная частота сигнала, тем ниже она на экране.

Конкретно в этом случае частота на экране получается равной (Fd-Fs), где Fd — частота дискретизации; Fs — частота сигнала.

Небольшие подробности для тех, кто захочет повторить эксперимент: картинка, изображенная на скриншоте, получается только при масштабе по вертикали 2 В/дел. При других масштабах сигнал вырождается в прямую линию; почему — не знаю. :)

Объединять два АЦП в один канал (если второй выключен) прибор не умеет. Соответственно, повысить частоту семплирования до 400 Msps не получится.

Фактически, из-за подмены любого высокочастотного сигнала на синус вместе с фактом частоты семплирования в пять (!) раз хуже заявленной, использование осциллографа для настройки цифровой аппаратуры становится невозможным. Там может быть важным взаимное положение фронтов с точностью в единицы наносекунд, а иногда даже до долей наносекунды, а тут — такой провал… :(

До кучи к «разоблачению магии» — ещё несколько осциллограмм, сделанных на разных горизонтальных развёртках для одного и того же сигнала (синус 40 МГц). Будет продемонстрировано искажение формы сигнала в зависимости от скорости развёртки.

Развёртка 10нс/дел.:

Развёртка 50 нс/дел.:

На этой развёртке «испортилась» не только форма сигнала, но и его амплитуда.

Развёртка 100 нс/дел.:

Здесь амплитуда сигнала восстановилась, но форма по-прежнему искажена.

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

В случае использования кнопки автонастройки «AUTO SET» этот осциллограф, как правило, сам устанавливает правильные параметры; но проконтролировать — не повредит.

Тест двухканального осциллографа Fnirsi-1013D. Часть 2: обо всём понемногу

 Перед проверкой параметров (включая АЧХ) один из щупов был переключен в положение x10 и была произведена его стандартная настройка (по максимально-плоской вершине прямоугольного импульса).

 Теперь — АЧХ.

Она была банально снята по нескольким точкам на тех частотах, которые я счёл наиболее интересными.

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

Если оценивать АЧХ по стандартному уровню -3 дБ (0.71), то ширина полосы получилась около 36 МГц. Это — не те 100 МГц, которые обещал производитель; но всё равно неплохо, т.к. даже хорошо настроенный щуп некоторую часть полосы «съедает».

Теперь — оценим визуально качество осциллограмм на стандартных сигналах.

Импульсы 40 нс, частота 10 МГц:

Синус 1 МГц «крупным планом»:

Треугольник 1 МГц:

Пила 1 МГц:

Обратная пила 1 МГц:

И, в качестве примера реальной осциллограммы — сигнал на дросселе DC-DC преобразователя 5 В — 9 В (обзор):

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

Экран и управление осциллографом

Экран у осциллографа — сенсорный (ёмкостной), без воздушного промежутка между сенсорной поверхностью и собственно экраном (бликует мало).

Чувствительность сенсора — отличная, понимает даже лёгкие касания.

Углы обзора экрана — очень хорошие. Правда, технология экрана не очень похожа на IPS, скорее всего, это нечто похожее на *VA (что тоже очень неплохо).

Управление осциллографом производится только с помощью сенсорного экрана, но есть тонкости.

Первая тонкость — экран (или ПО) не поддерживает мультитач, управление возможно только одним пальцем. Первая же попытка «растянуть» осциллограмму двумя пальцами с треском провалилась. :)

Вторая тонкость — некоторые функции управляются с помощью сенсорных кнопок на экране, а некоторые — тапами и переносом элементов прямо по экрану.

Например, увеличивается масштаб осциллограммы по горизонтали постукиванием по правой стороне экрана, а уменьшается — постукиванием по левой.

Передвинуть осциллограмму в другое место экрана можно, «схватив» её одним пальцем и переместив без отрыва, куда надо. Аналогично происходит управление уровнем триггера.

Несколько особняком стоит изменение чувствительности по вертикали. Для этого надо нажать на кнопку «CTRL» в правом верхнем углу, и тогда на правой стороне экрана откроются кнопки «V+» и «V-».

По кнопкам вызова курсора (по времени и пространству) возникают сразу два курсора, которые можно передвигать пальцем.

Курсоры работают не только по «живому» сигналу, но и по ранее записанному в память сигналу (по скриншотам не работают), пример:

Кстати, встроенных часов в осциллографе нет, и все сохранённые файлы датируются 22 марта 2020 года, 22:48:58. Вероятно — это дата сборки текущей версии прошивки (но более свежих прошивок пока нет).

Определить правильную последовательность снятых осциллограмм позволяет имя файла, которое представляет собой просто номер: 1, 2, 3…

Автономность

Отдельно проверять автономность было лениво, несмотря на простоту такой проверки; но, по личному впечатлению, 3 часа работы точно можно гарантировать. Если сбавить яркость экрана — то ещё немножко можно добавить.

Если и этого будет мало — повербанки никто не отменял!

Итоги и выводы (техническая часть)

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

Хотя, может быть, он и не совсем производитель, а просто наклеил свой шильдик на изделие, выпущенное неизвестным «контрактным производителем».

Но это — не важно. Приклеил свой шильдик — значит, ты и отвечаешь по всей строгости.

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

В то же время, для настройки многих типов аналоговых схем его параметры вполне достаточны.

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

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

Но применение этого прибора в качестве «плавающего осциллографа» (т.е. находящегося под внешним потенциалом) — не лучшая идея, так как на осциллографе есть металлические части, доступные для прикосновения. Одно неверное движение, и Вы — покойник!

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

Теперь — о достоинствах; ибо, как ни странно, они тоже есть!

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

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

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

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

Итоги и выводы (эмоциональная часть)

Предвижу, что многие читатели моего обзора захотели бы задать риторический вопрос: а что Вы хотели за такие деньги?!

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

Остальное продавцы и производители пусть расписывают как угодно.

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

Но технические характеристики должны быть только честными, и никакими другими (ведь могут же, например, Hantek и Rigol честно их писать?!).

Всё остальное — коварный и бессовестный обман. Причём в пять раз, Карл!

За сим всем спасибо за внимание!

Cursor measurements done.

Way simpler code then the original code. Just a case of use your brain and some functions 8)

typedef struct tagTimeCalcData          TIMECALCDATA,         *PTIMECALCDATA;
typedef struct tagVoltCalcData          VOLTCALCDATA,         *PVOLTCALCDATA;

struct tagTimeCalcData
{
  uint32 mul_factor;
  uint8  time_scale;
  uint8  freq_scale;
};

struct tagVoltCalcData
{
  uint32 mul_factor;
  uint8  volt_scale;
};

const TIMECALCDATA time_calc_data[21] =
{
  {    100, 3, 3 },         // 50mS/div
  {  40000, 2, 4 },         // 20mS/div
  {  20000, 2, 4 },         // 10mS/div
  {  10000, 2, 4 },         //  5mS/div
  {   4000, 2, 4 },         //  2mS/div
  {   2000, 2, 4 },         //  1mS/div
  {   1000, 2, 4 },         //500uS/div
  {    400, 2, 4 },         //200uS/div
  {    200, 2, 4 },         //100uS/div
  {    100, 2, 4 },         // 50uS/div
  {  40000, 1, 5 },         // 20uS/div
  {  20000, 1, 5 },         // 10uS/div
  {  10000, 1, 5 },         //  5uS/div
  {   4000, 1, 5 },         //  2uS/div
  {   2000, 1, 5 },         //  1uS/div
  {   1000, 1, 5 },         //500nS/div
  {    500, 1, 5 },         //250nS/div
  {    200, 1, 5 },         //100nS/div
  {    100, 1, 5 },         // 50nS/div
  {  50000, 0, 6 },         // 25nS/div
  {  20000, 0, 6 }          // 10nS/div
};

const VOLTCALCDATA volt_calc_data[3][7] =
{
  { {  10000, 3 },  {  5000, 3 }, {  2000, 3 }, {  1000, 3 }, {  400, 3 }, {  200, 3 }, {  100, 3 } },
  { { 100000, 3 },  { 50000, 3 }, { 20000, 3 }, { 10000, 3 }, { 4000, 3 }, { 2000, 3 }, { 1000, 3 } },
  { {   1000, 4 },  {   500, 4 }, {   200, 4 }, {   100, 4 }, {   40, 4 }, {   20, 4 }, {   10, 4 } }
};

const char *magnitude_scaler[8] = { "p", "n", "u", "m", "", "K", "M", "G"};

void scope_display_cursor_measurements(void)
{
  uint32 height = 5;
  uint32 ch1ypos = 52;
  uint32 ch2ypos = 52;
  uint32 delta;
  char   displaytext[10];

    //Check if need to do anything here
  if(scopesettings.timecursorsenable || (scopesettings.voltcursorsenable && (scopesettings.channel1.enable || scopesettings.channel2.enable)))
  {
    //Check if time cursor is enabled
    if(scopesettings.timecursorsenable)
    {
      //Add height for two text lines
      height += 32;

            //Shift the voltage text positions down
      ch1ypos += 32;
      ch2ypos += 32;
    }

        //Check if volt cursor is enabled
    if(scopesettings.voltcursorsenable)
    {
      //Check if channel 1 is enabled
      if(scopesettings.channel1.enable)
      {
        //Add height for one text line
        height += 16;

                //Shift the channel 2 voltage text down
        ch2ypos += 16;
      }

            //Check if channel 2 is enabled
      if(scopesettings.channel2.enable)
      {
        //Add height for one text line
        height += 16;
      }
    }

      //Set gray background for the cursor measurements
    display_set_fg_color(0x00404040);

    //Draw rounded rectangle depending on what is enabled.
    display_fill_rounded_rect(5, 49, 102, height, 2);

    //Use white text and font_0
    display_set_fg_color(0x00FFFFFF);
    display_set_font(&font_0);

        //Check if time cursor is enabled
    if(scopesettings.timecursorsenable)
    {
      //Time texts are always on the top two lines

      //Get the time delta based on the cursor positions
      delta = scopesettings.timecursor2position - scopesettings.timecursor1position;

            //Get the time calculation data for this time base setting. Only for the short time bases so take of the first 9
      PTIMECALCDATA tcd = (PTIMECALCDATA)&time_calc_data[scopesettings.timeperdiv - 9];

            //For the time multiply with the scaling factor and display based on the time scale
      delta *= tcd->mul_factor;

            //Format the time for displaying
      scope_print_value(displaytext, delta, tcd->time_scale, "T ", "S");
      display_text(10, 52, displaytext);

            //Calculate the frequency for this time. Need to adjust for stay within 32 bits
      delta /= 10;
      delta = 1000000000/ delta;

            //Format the frequency for displaying
      scope_print_value(displaytext, delta, tcd->freq_scale, "F ", "Hz");
      display_text(10, 68, displaytext);
    }

        //Check if volt cursor is enabled
    if(scopesettings.voltcursorsenable)
    {
      PVOLTCALCDATA vcd;
      uint32        volts;

            //Get the volts delta based on the cursor positions
      delta = scopesettings.voltcursor2position - scopesettings.voltcursor1position;

            //Check if channel 1 is enabled
      if(scopesettings.channel1.enable)
      {
        //Calculate the voltage based on the channel 1 settings
        vcd = (PVOLTCALCDATA)&volt_calc_data[scopesettings.channel1.magnification][scopesettings.channel1.voltperdiv];

                //Multiply with the scaling factor for the channel 1 settings
        volts = delta * vcd->mul_factor;

                //Channel 1 text has a variable position
        //Format the voltage for displaying
        scope_print_value(displaytext, volts, vcd->volt_scale, "V1 ", "V");
        display_text(10, ch1ypos, displaytext);
      }

            //Check if channel 2 is enabled
      if(scopesettings.channel2.enable)
      {
        //Calculate the voltage based on the channel 2 settings
        vcd = (PVOLTCALCDATA)&volt_calc_data[scopesettings.channel2.magnification][scopesettings.channel2.voltperdiv];

                //Multiply with the scaling factor for the channel 2 settings
        volts = delta * vcd->mul_factor;

                //Channel 2 text has a variable position
        //Format the voltage for displaying
        scope_print_value(displaytext, volts, vcd->volt_scale, "V2 ", "V");
        display_text(10, ch2ypos, displaytext);
      }
    }
  }
}

//----------------------------------------------------------------------------------------------------------------------------------
//Simple non optimized function for string copy that returns the position of the terminator
//----------------------------------------------------------------------------------------------------------------------------------
char *strcpy(char *dst, const char *src)
{
  while(*src)
  {
    *dst++ = *src++;
  }

    //Terminate the copy
  *dst = 0;

    return(dst);
}

//----------------------------------------------------------------------------------------------------------------------------------

void scope_print_value(char *buffer, uint32 value, uint32 scale, char *header, char *sign)
{
  //Copy the header into the string buffer
  buffer = strcpy(buffer, header);

  //Need to find the magnitude scale for the input
  //The calculations are based on fixed point
  while(value >= 100000)
  {
    //Skip to the next magnitude
    scale++;

        //Bring the value in range
    value /= 1000;
  }

  //Format the remainder for displaying. Only 3 digits are allowed to be displayed
  if(value < 1000)
  {
    //Less then 1000 means x.yy
    buffer = scope_print_decimal(buffer, value, 2);
  }
  else if(value < 10000)
  {
    //More then 1000 but less then 10000 means xx.y
    value /= 10;
    buffer = scope_print_decimal(buffer, value, 1);
  }
  else
  {
    //More then 10000 and less then 100000 means xxx
    value /= 100;
    buffer = scope_print_decimal(buffer, value, 0);
  }

  //Make sure scale is not out of range
  if(scale > 7)
  {
    scale = 7;
  }

    //Add the magnitude scaler
  buffer = strcpy(buffer, magnitude_scaler[scale]);

    //Add the type of measurement sign
  strcpy(buffer, sign);
}

//----------------------------------------------------------------------------------------------------------------------------------

char *scope_print_decimal(char *buffer, uint32 value, uint32 decimals)
{
  char    b[12];
  uint32  i = 12;   //Start beyond the array since the index is pre decremented
  uint32  s;

  //For value 0 no need to do the work
  if(value == 0)
  {
    //Value is zero so just set 0 character
    b[--i] = '0';
  }
  else
  {
    //Process the digits
    while(value)
    {
      //Set current digit to decreased index
      b[--i] = (value % 10) + '0';

      //Check if decimal point needs to be placed
      if(i == 12 - decimals)
      {
        //If so put it in
        b[--i] = '.';
      }

            //Take of the current digit
      value /= 10;
    }
  }

  //Determine the size of the string
  s = 12 - i;

    //Copy to the buffer
  memcpy(buffer, &b[i], s);

    //terminate the string
  buffer[s] = 0;

    //Return the position of the terminator to allow appending
  return(&buffer[s]);
}

Tried using assembly versions of strcpy and strlen, but for some reason it did not work on the target. No problem under linux with the standard library functions, so I wrote my own strcpy, that returns a pointer to the end of the destination string instead of the beginning.

Checked it with different settings and cursor positions and it looks good.

So on to the next bit.

Implemented so far

  • System setup
  • Timer interrupt
  • Touch panel interface
  • Flash reading and writing
  • SD card functionality based on FatFs
  • FPGA interface functions
  • Display library
  • Battery charge measurement
  • Power off interrupt for settings save
  • Saving and loading of the settings to and from flash
  • Cursor measurements display
  • User interface
    • The main screen with all the menus
    • The picture view screen with picture view almost done. (Still needs displaying of the trace data)
    • The waveform view screen with waveform view almost done. (Still needs displaying of the trace data)
    • Saving of pictures and waveforms
  • Trace data handling and displaying
    • Long time base settings 50S-100mS. (This is in roll mode and fully done)
    • Short time base settings 50mS-10nS. (This is partially implemented. Channel 1 data is fetched and displayed raw. Only part of the processing is implemented.)

Still to do

  • USB interface
  • Finish the picture and waveform single item view. Needs the trace data processing functionality
  • Trace processing and displaying for the short time bases (50mS-10nS)
  • Calibration
  • Auto set
  • Measurements calculations and displaying
  • FFT calculation and displaying
  • Firmware update (This means both code within my version as creating an actual firmware update that can be loaded on a scope)

FNIRSI_1013D_Firmware

New firmware for the FNIRSI-1013D osciloscope.

This new firmware is offered without any warrenty and I take no responsibility for any damage.

This repository is a result of the hacking of the original FNIRSI 1013D firmware. To make it easier to just get the new firmware code, this repository is created.

During the hacking and development phase discoveries where made that there are differences between the oscilloscopes in the field. An important one is the different displays that are used. To make it work with these different models a sector on the SD card has been allocated to hold the display configuration. To this moment only one major deviation needed this mod. The more standard types can use the default configuration.

In the «fnirsi_1013d_scope» dist folder there are the configuration files for both the deviated and the standard one. In the «How_to_load_scope.txt» file you can find the instructions for loading these files to the SD card. The file «configuration_file.txt» explains the configuration file.

In version 0.004 extra settings are added to the display configuration file to allow for swapping the touch coordinates.

Firmware is at this location: https://github.com/pecostm32/FNIRSI_1013D_Firmware/tree/main/fnirsi_1013d_scope/dist/Debug/GNU_ARM-Linux

There are four folders with source code projects of which a minimum of two are needed to build a binary that can be loaded onto the SD card that is housed in the scope.

For a version with a startup screen that shows PECOs sCOPE three projects are needed:

  1. «fnirsi_1013d_sd_card_bootloader» which loads the startup screen code and executes that
  2. «fnirsi_1013d_startup_screen» which shows the startup screen and loads and executes the actual scope code
  3. «fnirsi_1013d_scope» this is the actual scope code

For a version without the startup screen only two projects are needed:

  1. «fnirsi_1013d_startup_from_sd_card» which starts the FPGA and loads and executes the actual scope code
  2. «fnirsi_1013d_scope» this is the actual scope code

The second option is the fastest since it does not wait to show the startup screen, but this project has not been adapted for the new display configuration setup nor has it been tested with the latest code.

!!! Be aware that all dd actions with the SD card mentioned below are done on the block device and not a partition. So for example /dev/sdc and not /dev/sdc1. The umount command has to be done on the partition(s) !!!

To load the new firmware on the scope one has to make sure the SD card is partioned correctly.

  1. Connect the scope to the computer via USB.
  2. Turn on the scope and start the USB connection via the main menu option.
  3. Wait until the file manager window opens. (Only if auto mount is working properly)
  4. Close the file manager window.
  5. Open a terminal window (ctrl + alt + t) and type the «lsblk» command (!do not use the quotes!) and check which device the scope is on. (~8GB disk)
  6. Copy the files from the card to have a backup on your computer.
  7. Un-mount the partition. («sudo umount /dev/sdc1» in my case)
  8. Just to be more safe make a backup with dd. («sudo dd bs=4M if=/dev/sdc of=sd_card_backup.bin» again in my case)
  9. Open gparted and check if the device is properly formated. (Use right mouse and information to see the sector info)
  10. If not delete the partition and make a new one leaving 1M free at the start. Format is fat32.
  11. When the partition remounts after the previous step un-mount it again.
  12. Use dd to place the firmware package on the SD card. («sudo dd if=fnirsi_1013d.bin of=/dev/sdc bs=1024 seek=8»)
  13. This will re-mount the partition. Un-mount the partition again. («sudo umount /dev/sdc1» in my case)
  14. Turn of the scope and turn it back on. This will start the new scope firmware

Removing the new firmware is easy:

  1. Perform the first steps of the install. (1,2,3,4,5,7)
  2. Remove the program with «sudo dd if=/dev/zero of=/dev/sdc bs=1024 seek=8 count=1»

Further updates of the firmware don’t require the partitioning, since that is already correctly setup for the first time of loading the new firmware.
So skip steps 6,8,9,10,11.

When using a SD card reader/writer directly coupled to your Linux machine don’t forget to use the umount command. It is needed to have dd work properly.

For more information take a look here:

  1. https://www.eevblog.com/forum/testgear/fnirsi-1013d-100mhz-tablet-oscilloscope/msg3807689/#msg3807689
  2. https://www.eevblog.com/forum/testgear/fnirsi-1013d-100mhz-tablet-oscilloscope/msg3809966/#msg3809966
  3. https://www.eevblog.com/forum/testgear/fnirsi-1013d-100mhz-tablet-oscilloscope/msg3908555/#msg3908555

For a view at the history and the flash file packer tool look here:
https://github.com/pecostm32/FNIRSI-1013D-Hack

The V0.005_Windows.7z file is from an external source and is not verified by me but EEVBlog members have used it.


Januari 12 2023
Merged in a change made Michal Derkacz (ziutek) who improved on the RMS measurement. This brings the version op to
V0.006. There is no image file for it like the V0.005_Windows.7z file, so the binary https://github.com/pecostm32/FNIRSI_1013D_Firmware/tree/main/fnirsi_1013d_scope/dist/Debug/GNU_ARM-Linux/fnirsi_1013d.bin needs to be used.

Понравилась статья? Поделить с друзьями:
  • Fnaf gmod error
  • Fn run stream read error
  • Fmt001315 отсутствует родительская запись как исправить
  • Fmt001314 гис жкх как исправить
  • Fmt001313 ошибка проверки листа conf