Pull to refresh

Comments 32

AS3935 не смотрели? Готовый модуль с ним стоит 15$, под капотом определением расстояния до молнии и i2c/spi шина.

Смотрели. Не понятно как фиксировать время для алгоритма TDoA. + хочется поэкспериментировать с антеннами.

 под капотом определением расстояния до молнии

нет понимания каков алгоритм?

Ровно то, чем Попов занимался.

Ему было сложнее..

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

Это все настолько прекрасно насколько и ужасно. Высокоскоростной АЦП но на частоте дискретизации 500кГц 10 бит (я не ошибся?) который оцифровывается по заветам проца 8080, считывая gpio, даже без DMA. В то время когда в микроконтроллеры легко имеют 1-2 АЦП 12 бит на 1 или 5 МГц. Я точно правильно понял это материал?

Микроконтроллеры неудобны когда речь заходит о хранениии данных, о ТСР стеке, о веб сервере. В одноплатнике все есть что нам нужно.

да я догадывался об этом, но есть же stm32f4 с ethernet

просто не могу слышать что одно ядро загружено на 100% все время, постараюсь это "развидеть" :)

В чем тут проблема? Ничего не перегревается. Температура в норме. Система простаивает и ничего не делает кроме этого цикла.

В чем тут проблема? 

да можно и долларами камин топить, микроскопом гвозди забивать в одноразовый вейп stm32 с экраном ставить:) Если цена сопоставима, речь про масштабируемость не идет, а работает нормально - почему бы и нет. Просто, несбалансированное решение, если че то допиливать это может аукнуться.

Не нужно бояться цифры в 100%. Это показатель того что это ядро занято на 100% времени и система не может его использовать. Даже если применить STM, потребуется: добавить microsd для хранения сигналов, добавить построцессинг для отправки данных на сервер, не понятно как удаленно обновлять прошивку ( тут же обновление идет через наш репозиторий), нет полноценного стека TCP/IP из коробки. Ну и тп. Т.е. как ни крути STMу рядом для удобства пришлось бы ставить тот же самый одноплатник. От чего ушли, туда же и приходим.

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

В stm32 тоже ядро занято, все время крутится цикл. Просто нам не показывают его загрузку нигде, "собака не видит, не лает". Тут же мы видим загрузку, все о чем нам это говорит: ОС, не используй это ядро, оно занято, у тебя есть еще 3 не нагруженных, помещай процессы в них. Не понимаем почему рекомендуя stm32 или иной микроконтроллер забываете, что там аналогичный цикл.

Мы открыты, покажите своим примером "как правильно". Будем опираться на Ваш опыт! Этого нам не хватает. Подсмотреть пока негде.

ядро занято, все время крутится цикл

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

При этом например любой SDR делает по сути тоже самое, только с манипуляцией ПЧ и на более высокой скорости (полосу хочется побольше), плюс IQ-магия. Тут обычно хотят большие мегагерцы. Однако для более узкой полосы есть даже пример на проце 6502 (вот там то ядро загружено! наверное), https://github.com/AndersBNielsen/PhaseLoom но и то автор опомнился и сделал АЦП на STM32F103 https://github.com/AndersBNielsen/PhaseLatchMini.

А для stm32 решения чуть ли не штатные, гуглом думаю несложно найти "ADC DMA STM32" - вот немного не то но почти https://habr.com/ru/companies/ruvds/articles/694640/ https://habr.com/ru/articles/543686/ https://habr.com/ru/articles/468393/ https://habr.com/ru/articles/588594/. более того - можно так не только STM но и другие контроллеры, включая отечественные

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

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

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

Загрузка одноплатника
Загрузка одноплатника

Дополнительно можем запускать стрим сигнала с ФНЧ и децимацией (все в одном ядре) с удаленного детектора к себе на ПК. И вот уже пара ядер в сотку. Но одноплатнику все еще норм. У него целых 2 ядра простаивает, температура не растет.

Стримминг сигнала с удаленного детектора, с одновременным отловом молний
Стримминг сигнала с удаленного детектора, с одновременным отловом молний

С точки зрения архитектуры любой системы нагрузка 100% само по себе не хорошо - всегда должен быть запас по мощности/прочности. Но в данном случае надо просто какой то неширокий поток байтов бросать, нечему там грузить мощное ядро - а оно нагружено на 100%, почему? Нет 100% контроля над системой. Решается задача которая требует реального времени , но используется ОС которая может в любой момент может это ядро тормознуть. Любой глитч систему не разрушит, но в потоке данных будет заметен. В данном случае да, "ачетакого" - это ничего не стОит. Если бы система питалась от батарейки - уже было смысл смотреть че там ее "выжирает". А создание более ответственных систем я бы Вам не доверил с таким подходом, при том что в математике Вы скорее всего в разы лучше меня понимаете.

там похоже питон используют... ну и что линукс не RTOS - тоже не интересно.

там похоже питон используют...

ПО детектирования - C++

ПО WEB-консоли - Python

Тестовые утилиты для отладки - Python + C++

и что линукс не RTOS - тоже не интересно

на данном этапе развития проекта - не интересно

А создание более ответственных систем я бы Вам не доверил с таким подходом

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

Вы судите по прототипу о том

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

100% ядра процессора без вашего контроля - это ненормально.
Оставлю это здесь для примера:
https://www.oscill.com/rus/forum.html?task=viewtopic&pid=4139#p4139
АЦП почти как у вас (но 8 бит), загрузка процессора 100%, вот только
- частота дискретизации - 32Mвыб/с
- процессор 8051
- 2кб RAM
- и проект делался 20 лет назад.

Так основная проблема в текущем виде - цена, даже если не заморачиваться со своей платой, то можно уложиться в сильно меньшую стоимость, чем брать любой одноплатник, заведомо отъедая одно ядро на мало эффективную работу. И как тут люди заметили, при грамотном подходе с DMA вы получите и лучшие показатели по скорости АЦП и ядро будет в простое почти все время, можно его спокойно нагрузить ещё чем-нибудь.

Так основная проблема в текущем виде - цена, даже если не заморачиваться со своей платой, то можно уложиться в сильно меньшую стоимость

Не соглашусь с ценобразованием. Одноплатник стоит 1500р-2000р с али. Сколько будет стоить разработка и поддержка ПО для МК (ПО должно выполнять все те же функции, что сейчас выполняет наш детектор)? Сколько будет стоить инженерка? Сколько будет стоить ошибка в инженерке или ПО?

заведомо отъедая одно ядро на мало эффективную работу

Это осознанный шаг. Баланс между простотой реализации и удобством поддержки. Аргументы против нашего решения:

  • ОС не может использовать это одно ядро

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

  • малая энергоэффективность

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

  • на МК можно делать все то же самое, но лучше

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

  • цена

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

Разработка на одноплатник тоже не бесплатная же, по части плат (если не берём ST-шные, а любой Китай) будет не дороже. В целом как прототип - ок, но добиться лучшей разрешающей способности по дальности, а как я понял, то больше интересует именно детекция дистанции до грозы, то тут уже повозиться придется, если оно конечно нужно вообще, условно что-то обесточить и ошибки в 300 метров вполне можно простить

Трансформатроный БП с линейным стабилизатором в 2025 ? монструозно. Хотя, реально все впихнуть внутрь "антенны", на базе микроконтроллера со встроенным ацп, ethernet и запитать через PoE.
Даже если очень хочется линукса - почти тоже самое, *PI-SBC + SPI-ADC + PoE.
Кстати, как чтение gpio реализовано? userspace или драйвер ядра ?
какое поличество семплов получается относительно периода PPS? стабильное значение или разброс ?

так написано же

С GPIO работаем напрямую, читая и записывая память ОЗУ, через /dev/mem

исходников нет, но судя по тому что есть - userspace. Неудивительно, что загрузка 1 ядра 100% и разброс 25мкс при синхонизации по времени.

Трансформатроный БП с линейным стабилизатором в 2025 ? монструозно

Зато шумит меньше

Хотя, реально все впихнуть внутрь "антенны", на базе микроконтроллера со встроенным ацп, ethernet и запитать через PoE

Всё так, у нас не было такой цели

чтение gpio реализовано? userspace или драйвер ядра

userspace, лезем через /dev/mem. Пробовали писать драйвер ядра на прерываниях, получили в районе 100 кГц. Знаем, что можно быстрее, не хотелось с этим возиться, Если уж писать драйвер для такого, проще уходить на МК

какое поличество семплов получается относительно периода PPS? стабильное значение или разброс

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

Сеплы между PPS (ticks), длина импульса до спада сигнала (ticks down)
Сеплы между PPS (ticks), длина импульса до спада сигнала (ticks down)
Вывод работы модуля ядра pps-gpio
Вывод работы модуля ядра pps-gpio

Зато шумит меньше

У вас, судя по схеме, питание АЦП берется от от 3.3в gpio апельсина. Там, так-то тоже импульсный преобразователь. Ну и сама плата SBC тоже может шуметь во всех диапазонах.

Не реально впихнуть все внутрь антенны.

  • антенна принимает сигналы до 90кГц

  • преобразователи питания (которые обязательно есть в POE) работают на частотах до 200кГц и частота можем меняться и быть не стабильной, т.е. мы антенной будем принимать свой преобразователь (более того, антенна слышит чужие РоЕ преобразователи находящиеся вдали от нее, например от видео камер, что будет если такое поставить прямо рядом с антенной - жуть)

  • добавляются требования к витой паре, потому что она начинает быть излучающей сигнал антенной, так как РоЕ преобразователь будет давать сигнал в нее и она будет его излучать, экранирование витой пары поможет, но насколько именно ослабит - нужно делать замеры

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

Выводы очевидны: простыми способами разместить все на антенне довольно сложно.

Sign up to leave a comment.

Articles