Ви не увійшли.
Расскажите, пожалуйста, подробнее, что за микрофлора и сигнал какой частоты вы хотите передавать. Может быть, есть статья на эту тему?
А, да, якщо питання про рівні напруги (3.3В для RPi та 5V для трансівера), то потрібен якийсь перетворювач рівня: https://arduino.ua/cat94-preobrazovateli-yrovnei
Гадаю, що можна включити ресівер напряму через RPi4, щоб RPi працювала на кшталт проксі. Так, принаймні, якщо ви втратите зв'язок, RPi буде це знати. А також така схема могла б дозволити підключити декілька приймачів різної частоти.
Есть три варианта объяснений:
1. Я вообще ничего не понимаю в осциллографах с памятью?
2. Попался неисправный экземпляр?
3. Банальное кидалово?
В подделку верится с трудом, поэтому не исключено, что это был неисправный экземпляр. Но часто первая мысль - она оказывается самой правильной.
Предлагаю продолжить, когда Вы будете иметь подобный осциллограф на руках.
В HANTEK этот режим тоже называется Zoom и включается точно так же, как и в SIGLENT - нажатием на энкодер скорости развёртки. В более старых моделях режим назывался по-другому и вызывать его надо было с помощью команд меню.
DSO2000 Series Digital Storage Oscilloscope User Manual, раздел 2.15.3. Dual-window Mode.
Простое растягивание в режиме Стоп позволяет сколь угодно подробно рассмотреть только центральную часть.
Я правильно понимаю, что вы утверждаете, что при останове захвата задержка синхронизации (trigger delay) не работает для масштабированного сохраненного сигнала? Или что тогда вы называете центральной частью?
Цифровой осцилограф оперирует всего двумя параметрами - частотой дискретизации и доступным объемом памяти. Если у вас 4К ячеек, то при частоте 1Gsa/s можно сохранить только сигнал продолжительностью 1/1G*4K=4 микросекунд. В 14М ячейках при частоте 1Мsa/s можно запомнить 1/1M*14M=14 секунд сигнала. Можно как угодно настраивать развертку осциллографа, но объем и детализация сигнала в конченом счете будут зависеть только от частоты дискретизации и глубины памяти. Значения этих параметров всегда пишутся на экране и для SDS1xxx, и для Hantek DSO2xxx.
Когда синхронизация и, соответственно, захват остановлены, содержимое памяти больше не меняется. Но с ним можно делать, что угодно - прокручивать, масштабировать, сохранять, и пр. Собственно, именно этим и удобны цифровые осциллографы.
Осциллограф автоматически устанавливает максимально возможную частоту дискретизации, исходя из доступной памяти и продолжительности времени, для которого нужно запомнить сигнал. В свою очередь, это время зависит от количества делений на экране и настройки цены одного деления.
Например, если доступная память - 4К, развертка установлена в 1 мс/деление, а количество делений на экране - 16, как у Hantek, то частота дискретизации должна составить:
4K / (16 * 1 ms) = 250 KSa/s
Если же доступная память - 14М, развертка 10 мс/деление, а количество делений на экране - 14, как у Siglent, то максимальная скорость семплирования должна была бы быть:
14M / (14 * 10 ms) = 100 Msa/s
Но на практике, поскольку генератор импульсов не может работать на такой частоте, а только либо на 125MHz, либо 50MHz, то выбирается ближайшая меньшая - 50 MHz. Однако, для такой частоты дискретизации подходит и другой размер памяти:
50 Msa/s * (14 * 10 ms) = 7M
Поэтому реальные параметры на экране будут 50 Msa/s и 7M ячеек. Кстати, память у Siglent имеет размер 14Mpts именно потому, что количество делений на экране равно четырнадцати.
Возвращаясь к вашему вопросу об оценке доступной памяти. Для того, чтобы захватить 8М точек со скоростью 1GSa/s (а это максимально доступная частота дискретизации), необходимо установить настройку горизонтальной развертки в положение:
8M / 16 / 1G = 500 мкс/деление
Таким образом, сам факт того, что вы можете установить эту настройку в 500 мкс/деление, оставив при этом скорость выборки 1Gsa/s, уже говорит о том, что у вас не менее 8М памяти.
Что касается видео. Там не используется режим Zoom.
По сути именно zoom в видео и используется. Формально, то, что на Siglent называется Zoom, на Hantek носит название Dual Window. Но для оценки размера памяти этот режим не нужен.
Захват всегда производится исходя из текущих горизонтальных настроек. Когда захват останавливается (через кнопку Start/Stop или после Trigger - Single), вы можете смотреть только то, что находится в памяти. Для этого автор видео и масштабирует участок под курсором, чтобы оценить количество сохраненных точек и интервал между ними. А в своем предыдущем сообщении я даже подсчитывал, как соотносятся между собой объем памяти, скорость захвата, и горизонтальные настройки.
Получалось ли у автора 8М, я не скажу, но визуально было явно больше 4К
Спасибо за видео. Но ответа на свой вопрос я не увидел.
Ожидал я примерно следующего:
Сохранить сигнал на развёртке 500 мкс/дел (примерно 7 мс на экран);
Включить режим Zoom;
Растянуть нижнее изображение до 10 нс/дел и в точечном режиме дисплея увидеть 10 точек в одной клетке.
Или 5 точек в клетке на развёртке 5 нс/дел.Вместо этого я видел точки с интервалом 2 мкс. То есть в 2000 раз реже.
Хорошо, а когда при 500 мкс/ меняется настройка памяти на 8М, осциллограф показывает, что он поднял скорость выборки до 1GSa/s?
На видео у дядьки все работает. Он захватил сигнал при настройках 20 миллисекунд на деление. Для 4К точек осциллограф поставил скорость выборки 12.50Ksa/s. Это дает возможность запомнить 12500*0.020=250 точек на деление и сохранить 4000/250=16 делений, что соответствует экрану осциллографа. При рассматривании сохраненного сигнала с разрешением 200 µs/ будут доступны всего 250*(200µs/20ms)=2.5 точек на деление. На видео этот эффект виден в 19:48:
Для того же сигнала (20ms/) при глубине памяти 8М скорость выборки составляет 25.00Msa/s, что позволяет хранить уже 8e6*0.020=500K точек на деление и иметь 8M/500K=16 делений. Для тех же 200 µs/ будут доступны 500K*(200µs/20ms)=5000 точек на деление. В 20:28 хорошо видно, что там явно уже не 2.5 точки на деление:
Позвольте полюбопытствовать, а какой же эффект вы ожидали?
UTILITY -> Acquire -> Memory Depth (раздел 2.12.1 руководства)
Я смотрю, что обычные дроны типа DJI тоже достаточно эффективно работают. Однако, не уверен, насколько они чувствительны к средствам РЭБ. Подозреваю, что те работают где-то до 2 ГГц, в то время как рабочая частота для DJI скорее всего 2.4 или 5.5 ГГц.
На современных дронах стоит фазированная решетка с формированием луча. Диапазон - от единиц до десятков гигагерц. Ширину канала я не знаю, но для подобных устройств она наверное, от 100 до 500 МГц. Однако, если готовых решений нет, то на разработку уйдет время. Да и цена будет немалая.
В качестве альтернативы можно что-то простое собрать из двух антенн. Или, если этот беспилотник летит только в одну сторону, то, может быть, будет достаточно и одной. Нужно пробовать. Если что - пишите.
А что за радио?
GetDistance() вызывает StartMeasurementSimplified() в режиме разового опроса.
В коде указанного Вами драйвера есть примеры, которые устанавливают режим работы устройства через SetDeviceMode(), а затем в цикле получают данные через GetMeasurementDataReady() + GetRangingMeasurementData() и сбрасывает линию прерывания. Код выполняется в loop(), но его несложно переделать в ISR и проводить измерения регулярно (режимы VL53L0X_DEVICEMODE_CONTINUOUS_RANGING или VL53L0X_DEVICEMODE_CONTINUOUS_TIMED_RANGING). Обработчик, конечно, должен обладать свойством повторной входимости.
N.B. С этим датчиком я тоже не работал.
В общем схема почти правильная, если не считать "земли" (см. ниже) и пунктира, который лишний.
Ваша "земля" на Ардуино - это OUT- на зарядке, он же IN- на стабилизаторе. К минусу батареи ничего не должно подключаться. Из-за транзисторов защиты Ардуино будет обнаруживать несколько более низкое напряжение - это нормально.
Ключ нужно ставить в разрыв между OUT+ / IN+.
Оттуда же нужно подать напряжение на АЦП Ардуино. Если входное сопротивление АЦП недостаточно высокое и аккумулятор может разряжаться излишне быстро - подайте это напряжение через фильтр RC. Скорость АЦП тут не важна, а снизить ток это позволит. Однако нужно помнить, что у аккумуляторов ток саморазряда может быть несколько микроампер, потому оптимизировать ток через АЦП нужно только в том случае, если это будет имеет смысл.
Ну и, наконец, если зарядка сильно греется и блокируется - просто замените ее на что-то пристойное
А идея у меня такая: скоро наступят холода и я планирую поставить сигнализацию с удаленным запуском, а микроконтроллерное управление нужно чтобы шум мотора не будил соседей и чтобы они мне не спалили мой тазик.
Ого! Понимаю. Дистанционный запуск на машине с подсосом будет, конечно, требовать некоторой системы управления этим самым подсосом. Действительно, Ардуино тут вполне хорошо справится с задачей.
Но, может быть, имеет смысл также рассмотреть установку инжектора на Таврию? Это обеспечило бы не только легкий пуск, но и помогло бы снизить расход? Тем более что некоторые комплекты инжекторов реализованы через Ардуино.
Кстати, может быть кто-то на форме знает готовый открытый проект бортового компьютера для ВАЗ, ЗАЗ, ГАЗ и другой таз? Я встречал достаточно много разных вариантов, но хотелось бы иметь решение, близкое к промышленному.
Я так понимаю, что сервопривод планируется поставить на ручку подсоса в салоне. Однако, учитывая то, что все эти манипуляции с подсосом нужны только для того, чтобы завести и пару минут прогреть машину, установка туда микроконтроллерного управления выглядит, конечно, перебором.
Интересно, что за марка и какой год этого замечательного автомобиля? И нет ли у него проблем с холостым ходом?
Очень малое расстояние работы. На пульте и приёмнике установлен этот модуль (NRF24L01+PA+LNA), максимальное расстояние связи 250 метров, сначала думал что это через то что подключил без адаптера питания 5 вольт, после подключения ничего изменилось, подскажите пожалуйста в чём может быть проблема, и как увеличить расстояние связи. Заранее спасибо)
Если речь идет об увеличении дистанции в 4 раза (с 250 м до 1 км), то нужно изменить баланс мощностей (англ. link budget) приблизительно на +12 дБ:
недостающий бюджет = 20*log10(1000) - 20*log10(250) = 12
А вообще:
принятая мощность = мощность передатчика + усиление - потери
принятая мощность > порог чувствительности приемника
Соответственно, что можно сделать (список не полный, а что-то уже даже было вами реализовано):
Поднять мощность передатчика; какой-то PA (power amplifier) уже установлен на модуле, но nRF24 имеет встроенный усилитель +4 dB, попробуйте задействовать и его. Кроме того, если этот модуль был куплен в Китае за небольшие деньги, то вы получите и такие же небольшие параметры, а PA/LNA бывают разные и могут отличаться друг от друга достаточно сильно. Сильно - это от 5 до 25 дБ.
Поднять чувствительность приемника за счет LNA - low noise amplifier. Какой-то уже стоит, а рекомендации по PA/LNA остаются те же.
Согласовать антенну. Если она плохо согласована, то отдаваемая ею мощность будет невысокой. А если антенна всенаправленная (например, дорожка на плате или внешняя несимметричная антенна), то фактически это означает потери в линии. Плохо согласованная антенна может терять до 20 дБ и даже больше. Я думаю, что PCB антенна на модуле будет более-менее согласована, но если это внешняя антенна - тут лучше проверить.
Заменить антенну на направленную. У какой-нибудь антенны типа "волновой канал" (Яги) коэффициент усиления составит где-то +8 .. +16 дБ в зависимости от ее размера. Более компактные патч-антенны будут иметь КУ около 9 дБ. Патч антенна или антенна Харченко (биквадрат) в параболическом зеркале могут поднять КУ до +20 дБ. Однако, обратная сторона направленной антенны в том, что в других направлениях связь будет намного хуже, поэтому вариант подходит только для стационарных позиций.
Устранить препятствия по пути. В идеале это должна быть прямая видимость, но с учетом зоны Френеля. Для 2.4 ГГц на расстоянии 1 км это должна быть зона радиусом около 6 м. Конечно же дома и деревья, а тем более сложный ландшафт - все это приводит к сильным затуханиям радиосигнала. Обычно в таких случаях рекомендуется поднимать стационарные антенны повыше. Потери от деревьев могут быть на уровне 5-10 дБ, от домов - под 40 дБ.
Использовать помехоустойчивое кодирование. Для данных, которые были переданы с избыточностью, приемник будет иметь возможность восстановить потерянные части пакетов. Например, в BLE Coded Phy один бит данных может быть представлен восемью символами в пакете. Такой подход позволяет увеличить чувствительность приемника иногда где-то на 10 дБ. Также, может оказаться действенным методом использование более широкого спектра.
Перейти на другой канал. Бывает, что рядом находится WiFi или другой мощный передатчик, который мешает. Его тоже можно подвинуть по частоте или убрать вовсе.
Наконец, если дело, например, в ландшафте или препятствиях, которые невозможно устранить, можно просто перейти в другой диапазон (потребуется замена радио модуля). Например, волны 868 МГц имеют бОльшую проникающую способность по сравнению с волнами 2440 МГц. В этом диапазоне работает LoRa, которая, к слову, так же реализует и помехоустойчивое кодирование.
Удачи!
Вычислить диэлектрическую проницаемость можно намного проще и точнее из коэффициента укорочения (velocity factor). Собственно, диэлектрическая проницаемость и показывает, во сколько раз скорость распространения радиоволны в диэлектрике меньше, чем в вакууме:
vp = cl / c = 1 / k = 1 / sqrt(ε)
ε = 1/vp^2
Для данного куска k = 1.35 м / 2.07 м = 0.652 (смотрите выше результаты TDR) и отсюда тривиально:
ε = 1 / 0.652^2 ≈ 2.35
А теперь самое интересное. Этот результат оставляет версию с полистиролом (2.0 - 2.6), но теперь еще добавляет в список подходящих веществ полиэтилен (2.3 - 2.4)
Однако, кусочек изоляции все-таки тонет в воде, а полиэтилен имеет плотность меньше плотности воды и должен был бы плавать. Похоже, что придется проверить версию с полистиролом химическим способом
Что-то типа такого: https://www.thingiverse.com/thing:3520369 ?
А, похоже, я неправильно прочел первый пост! Как я теперь понимаю, сам по себе АЦП показывает некое напряжение на входе, даже если от него отключено вообще все, включая щупы, так?
Действительно, как сказал renoshnik, возможно что-то проходит по питанию. Имеет смысл убедиться, что земля имеет хороший, стабильный ноль, и что питание от Ардуино имеет развязку конденсаторами, обычно это 10 мкФ + 0.1 мкФ. Особенно это актуально, если модуль включен в макетную плату. Можно добавить несколько дополнительных проводов для GND и для более чистого сигнала включить его через отдельный LDO.
... но когда контакты аналоговых входов ADS1115 висят в воздухе, он меряет какие-то наводки, шумы
Не помню, кто из великих сказал: "Есть два типа инженеров: одни создают антенны, а другие тоже создают антенны, но не преднамеренно." :-)
Нельзя просто так оставить просто кусок провода висеть в воздухе. Это волновой вибратор, который принимает на частоте, для которой длина четвертьволны равна длине щупа. Даже когда вы подключите два таких щупа (земля и линия) к устройству, в итоге все равно получится рамочная антенна.
Если это принципиально убрать такой эффект, попробуйте использовать коаксиальный кабель с соответствующим разъемом или витую пару с дифференциальным подключением. Таким образом щупы будут выполнять функцию только волновода.
И, конечно же, шум можно снизить за счет избыточного сэмплирования АЦП, тем более в цепи постоянного тока.
Ну и тут можно еще добавить, что импеданс коаксиального кабеля (пусть это даже "экранированная моножила") зависит от его геометрических размеров и диэлектрической проницаемости вещества между внутренним проводником и оплеткой. Отсюда можно высчитать диэлектрическую проницаемость и предположить, из чего сделан изолятор. Если я измерил достаточно точно, то внутренний диаметр оплетки D = 1.8 мм, а внутренний диаметр центрального проводника d = 0.6 мм.
ε = (138 * lg(D / d) / Z)^2 = (138 * lg(1.8 / 0.6) / 42.1)^2 ≈ 2.45
Полистирол?
Перебирал ящик и наткнулся на обрезок кабеля B из теста выше. В свое время его продавли как экранированный одножильный кабель, то есть без внешней изоляции. Поскольку я так и не замерил его импеданс, то решил сделать это сейчас. Вообще говоря, с помощью VNA делать это не совсем хорошо, но, в принципе, возможно. Обычно же для этих целей используется метод согласования с нагрузкой: с одной стороны подключаются генератор сигналов и осциллограф, а с другой стороны кабель терминируется переменным резистором. Сопротивление резистора, при котором в кабеле не наблюдаются отражения, будет соответствовать характеристическому сопротивлению кабеля.
Векторный анализатор измеряет входной импеданс на тестируемом порту, и это не импеданс самого кабеля. Однако если взять кабель настолько большой длины, чтобы отражения в нем полностью затухали, то можно считать, что входной импеданс будет равен импедансу самого кабеля. Обрезок моего кабеля составил всего 135 см, на такой длине затуханий ожидать не приходится. Да и вообще редко удается найти кабель действительно большой длины, поэтому на практике чаще используются другие методы.
Первый метод основан на том, что на высокой частоте (больше 100 кГц) характеристический импеданс линии передачи практически полностью резистивный (то есть не содержит реактивной составляющей). Тогда исходя из телеграфных уравнений получается, что для линии без потерь:
Z = sqrt(L / C)
Емкость C соответствует обрыву, а индуктивность L - короткозамкнутому состоянию. Важный момент состоит в том, что измерение должно выполнятся на одной и той же частоте при одинаковой длине (формально - соответствует одной и той же фазе) и для L, и для C.
На 5 МГц показатель емкости составил C = 166 пФ, индуктивность L = 351 нГн. На 20 МГц C = 223 пФ, L = 472 нГн. Волновое сопротивление:
Z = sqrt(351e-9 / 166e-12) = 45.98 (Ом) - на частоте 5 МГц
Z = sqrt(472e-9 / 223e-12) = 46.01 (Ом) - на частоте 20 МГц
Второй метод в своей основе такой же, как и предыдущий, но при этом оперирует комплексным значением импеданса и, соответственно, учитывает потери в линии. Так, если Zshort - входной импеданс в короткозамкнутом состоянии, а Zopen - входной импеданс в состоянии обрыва, то:
Z = sqrt(Zshort * Zopen)
И действительно, если импеданс конденсатора в цепи переменного тока Zc = Rc - j / ωC, а катушки Zl = Rl + ωL, то становится понятно, что для идеальных компонентов суть формулы одинаковые. В свою очередь, Zopen и Zshort соотносятся с волновым сопротивлением Z следующим образом:
Zshort = j * tan(β*l) * Z
Zopen = -j * cot(β*l) * Z
sqrt(Zopen*Zshort) = sqrt(-j^2 * Z^2) = Z
Тут β является фазовой постоянной для данной линии на заданной частоте, а l - расстояние от калибровочной плоскости VNA до места обрыва / КЗ.
Сам метод хорошо описан у ON4AA. C практической точки зрения особо интересным является один момент, а именно: если подобрать расстояние l и частоту таким образом, чтобы tan(β*l) ≈ cot(β*l) ≈ 1, то погрешность измерения будет минимальной. Это достигается в условиях, когда длина кабеля соответствует нечетному количеству восьмых длины волны (смотрите расчеты по ссылке):
l = (2 * n + 1) * lambda / 8
Говоря другими словами, для кабеля 135 см можно подобрать такую частоту измерения, при которой этот обрезок укладывался бы ровно в, скажем, 3/8*lambda. И тут нужно сказать, что скорость распространения волны в кабеле отличается от скорости распространения этой же волны в вакууме. Действительно, для расстояния 1.35 м время прохождения сигнала от калибровочной плоскости до конца и обратно должно составить:
t = (1.35 + 1.35) / c ≈ 9e-9 = 9 (нс)
Но измерение на анализаторе (да, в новой версии прошивки стал доступен режим TDR, смотрите меню DISPLAY->TRANSFORM) показывает 13.8 нс, что соответствует длине c * 13.8e-9 / 2 = 2.07 м. Обратите внимание, что NanoVNA также измеряет длину между двумя маркерами и показывает ее как 1.45 м:
Калибровочная плоскость располагается на самом порту VNА. К нему подключен кабель SS405, через который уже включен измеряемый отрезок. Первый всплеск показывает неоднородность соединения между SS405 и измеряемым кабелем. Второй всплеск - обрыв самого кабеля.
Такое расхождение обусловлено не совсем корректной настройкой коэффициента укорочения в VNA (смотрите меню VELOCITY FACTOR). Очевидно, что правильное значение коэффициента должно составить k = 1.35 м / 2.07 м = 65.2%. Соответственно, если принять эту поправку и считать, что кабель имеет длину ровно три восьмых длины волны, то получается, что частота должна быть установлена в такое значение:
f = k * c / (8/3 * lambda) = 1.35 / 2.07 * c / (8/3 * 1.35) = 54310228 (Гц)
Откалибровав анализатор относительно разъема подключения измеряемого кабеля и установив центральную частоту 54.310 МГц, можно измерить фактические значения для Zopen и Zshort и, соответственно, вычислить волновое сопротивление кабеля:
Zopen = 5.74 + 49.2j Ω
Zshort = 4.2 - 35.6j Ω
Z = sqrt((5.74+49.2j) * (4.2-35.6j)) = 42.13+0.03j Ω ≈ 42.1 Ω
Интересно сравнить, насколько велика погрешность у первого метода. Для этого нужно преобразовать значения комплексного импеданса в величины емкости и индуктивности и затем пересчитать волновое сопротивление:
L = Xl / (2 * pi * f) = 49.2 / (2 * pi * 54310200) = 144e-9 = 144 (нГн)
C = 1 / (Xc * 2 * pi * f) = 1 / (35.6 * 2 * pi * 54310200) = 82e-12 = 82 (пФ)
Z = sqrt(144e-9 / 82e-12) = 41.91 (Ω)
Под углом поворота я имел ввиду фазу вращения, в которой находится в данный момент нога. Извините, неудачно подобрал слова.
Касательно того, можно ли обойтись только акселерометрами или нужен будет еще и тензодатчик - сложно сказать, не видя данных. Возможно, если иметь акселерометры на вилке (будь она жесткой или подвешенной), педалях, и если есть задняя подвеска, то и на ней, а так же если иметь дополнительный акселерометр на спортсмене, то их комбинация может и "выстрелить". Поскольку размерность небольшая (всего 4 акселерометра), то нейронная сеть получится тоже компактных размеров и ее можно будет пересчитывать прямо в одном из устройств или на телефоне. Некоторая сложность в том, однако, чтобы синхронизировать разные источники.
Ну и, конечно, вопрос в том, как это будет работать на шоссейном велосипеде и на хорошей дороге. Может быть, адаптивно перестраивать чувствительность акселерометров? Некоторые модели делают это автоматически.
Часто измеритель нагрузки является частью самой системы, будь то шатун, педали, каретка или звезда. В таких устройствах обычно стоят тензодатчики. Так, что бы это было отдельное приспособление, сделать, наверное, можно, но будет ли оно давать достаточно точный результат?
Если все-таки делать отдельно, то, я подозреваю, проще всего будет закрепить тензодатчики в педалях. Там же будет место для батареи и электроники. Сами датчики такие же, какие используются в напольных весах и они должны располагаться на оси каждой педали. Если дополнить их акселерометрами для измерения скорости вращения и определения угла поворота шатуна, а затем откалибровать систему, взяв за основу один из точных существующих датчиков, то, возможно, что-то получится. Также, не стоит забывать про монитор сердечного ритма и акселерометре, которые находятся на спортсмене.