Перейти к содержанию
    

arhiv6

Свой
  • Постов

    1 039
  • Зарегистрирован

  • Посещение

Весь контент arhiv6


  1. LNA 10GHz

    Но это не значит, что добавлением МШУ с усилением 50дБ получится изменить чувствительность с -90дБм до -140дБм. Давайте попробуем посмотреть, как изменится чувствительность приёмника при добавлении двух CMD263P3. Т.к. входных данных слишком мало (не хватает значения ширины полосы приёма (демодуляции) и текущего значения Кш приёмника), попробую поугадывать. Текущая чувствительность -90дБм реализуема при следующих возможных вариантах ПП/Кш: 200МГц/1дБ, 20МГц/11дБ, 2МГц/21дБ, 200кГц/31дБ, 20кГц/41дБ, 2кГц/51дБ, 200Гц/61дБ и т.д. Для первого варианта добавлять МШУ бессмысленно, Кш приёмника только ухудшится (станет 1.41дБ). Для второго варианта и далее чувствительность станет соответственно: -99.44дБм, -109.42дБм, -119.28дБм, -128.09дБм, -132.79дБм, -133.73дБм. Если дальше так же продолжать, всё равно упрётесь примерно в -134дБм, ниже с такими МШУ никак не получить. Вот, я для себя когда-то калькулятор писал https://sourceforge.net/projects/rxcalc/files/RxCalc-0.6.8_installer.exe/download Он помогает оценить динамику, чувствительность приёмника и т.д. Попробуйте сами в нём свой тракт собрать. Вот пример расчёта для варианта 20МГц/11дБ:
  2. Это обычный планировщик задач, где каждая задача это run-to-complete функция, которая вызывается по какому-то событию. Сам когда-то подобный использовал и знаю как минимум одну ОС, которая работает с таким типом задач (uSmartX). Из плюсов такого подхода - минимальное потребление ресурсов и лёгкость портирования (никакого знания ассемблера не требуется). Из минусов - подходит только для простых задач: как только в задаче потребуется после какого-то события (даже обычный вызов delay()) не перезапускать задачу заново, а продолжать выполнять какую-то её логику, то задачи привычнее и проще для понимания писать в непрерывном стиле, как это делается на "взрослых" ОС. Как пример, что проще для понимания, псевдокод задачи из run-to-complete планировщика: void task_blink() { static uint8 led_state = 0; if (led_state == 1) { led_off(); led_state = 0; task_restart(task_blink, 500); } else { led_on(); led_state = 1; task_restart(task_blink, 100); } } или привычный линейный код: void task_blink() { while(1) { led_on(); delay_ms(100); led_off(); delay_ms(500); } } И там и там обычное мигание светодиода на 100мс с паузой 500мс, но второй код гораздо проще для понимания. Язык Си позволяет такое реализовать на основе Duff's device. При этом остаются те же достоинства планировщиков (минимальные ресурсы, общий стек, лёгкость портирования из-за отсутствия ассемблера) но разработка задач упрощается. Поэтому есть несколько кооперативных ОС, построенных на этом принципе: cocoOS, DemOS (+ protothreads как самая упрощённая, но рабочая реализация). ТС, если поймёте, что своего диспетчера вам уже недостаточно, но есть какие-то опасения для перехода на FreeRTOS, рекомендую их попробовать. С ростом сложности ваших проектов если упрётесь в их ограничения тогда уже осознанно перейдёте на вытесняющую ОС с раздельными стеками для каждой задачи, но уже с минимальными переделками своего кода.
  3. Сначала берётся с запасом, потом реальное использование памяти каждой задачей можно уточнить (параметр usStackHighWaterMark из структуры TaskStatus_t, которую можно получить из vTaskGetInfo()). Вот статья про это: https://habr.com/ru/articles/352782/ там пятый раздел "Мониторинг использования ресурсов". Кроме того, есть варианты ОС без выделения отдельных стеков для каждой задачи: начиная от protothreads и их производных, заканчивая теми же Co-Routine из состава FreeRTOS.
  4. Зачем такое делать вручную, если специально для этого существуют стилизаторы кода? Попробуйте Astyle, он очень простой в использовании. Выберите готовый стиль, похожий на свой (что-то вроде --style=kr ), потом при желании можно под себя его донастроить. Уверен, для notepad++ есть плагины для работы с astyle. Но даже если нету - то можно простой макрос сделать, который будет вызывать astyle для текущего файла по какому-нибудь сочетанию клавиш.
  5. Harwin S1711-46R или S0951-46R + крышка подходящего размера из их серий S01-*, S02-*, S03-* или согнуть самому из резанной жести. Вроде Harwin не дефицит, что-то даже в ЧипИДип-е есть.
  6. В симуляторе все элементы идеальные. А для идеальной цепи, состоящей только из индуктивности и источника напряжения ток в ней возрастает линейно. Т.е. там и правда будет идеальная пила. В реальном DCDC предполагается, что активное сопротивления источника напряжения, ключей и самой индуктивности сильно меньше реактивного сопротивления индуктивности на частоте переключения. Грубо говоря: за время открытия ключей ток через индуктивность успевает подняться только до единиц ампер, хотя на постоянном токе он бы составил десятки-сотни ампер. Т.е. видно только начальный участок экспоненты, а визуально он близок к линейному. Вот пример, здесь синий и желтый графики - тоже экспоненты, но видно только их начальные участки: Поэтому если в реальном источнике смотреть ток осциллографом то тоже будет видно пилу. Разумеется она не идеальна, но глазом этого видно не будет.
  7. Те же параметры, что на скриншоте, только индуктивность 4.7e-6. А, понял. Опечатлся, получается 4.23A вместо 4.32A.
  8. Зачем мучить редактор, если incbin.h даёт тот же самый результат с меньшими усилиями (не нужно переводить файла в текст, копировать его из браузера)?
  9. Можно даже без стороннего софта: https://github.com/graphitemaster/incbin Из всего репозитория нужен один заголовочный файл incbin.h, у себя в коде: #include "incbin.h" INCBIN(image, "image.bin"); Что сделает доступными переменные: const unsigned char g_imageData[]; // указатель на данные файла const unsigned int g_imageSize; // размер файла Посмотрите справку, там ещё настройки (типы, стили имён, префиксы, суффиксы) можно дефайнами менять.
  10. При выборе индуктивности следует ориентироваться не только на средний ток, а так же на пиковый. Под пиковым я имею в виду не пиковый ток нагрузки, а пик пульсаций тока индуктивности. Возьмите простой калькулятор http://schmidt-walter-schaltnetzteile.de/smps_e/smps_e.html и вбейте туда свои параметры источника. Например, в первом посте рассматривается источник 2.5В->5В с пиковым током нагрузки 1.2А и индуктивностью 5.2мкГн. Не указан важный параметр - частота переключения ключа в источнике питания. Пусть для примера будет 100кГц. Тогда в индуктивносте пиковый ток составит 4,09А. Для CDRH104RNP-5R2NC ток насыщения (saturation current) 5.6А, т.е. она подходит. А вот VLS3012HBX-4R7M из-за меньшей индуктивности при тех же параметрах имеет пиковый ток 4,32А, что сильно превышает её допустимый ток насыщения в 2.51А. Т.е её использовать нельзя. В случае с VLS3012HBX-1R0M - пиковый ток будет 3,75А при токе насыщения 5.5А, но источник работает в режиме прерывных токов - из-за малой индуктивности за время периода ток в индуктивности успевает падать до нуля (рисунок ниже). Работать будет, но вызовет пульсации на выходе источника питания. Попробуйте поиграться с этим калькулятором, вбив Вашу рабочую частоту, станет понятнее, какая индуктивность подходит лучше (ещё можете поставить чекбокс Proposal, тогда калькулятор сам предложит подходящий номинал индуктивности, из расчёта 40% пульсаций тока от среднего). Не зависимо от номинала индуктивности средний ток через неё всегда будет одинаков (в данном примере на графике его сразу видно 2,74А). Та часть мощности, которая теряется на активном сопротивлении катушки считается как P=I*I*R что даст 0.548 Вт против 0.06/0.128 Вт при разных сопротивлениях. P.S. Могу ещё порекомендовать серию катушек IHLP от Vishay - при малых габаритах они все экранированы, намотка сделана лентой, бывают разных размеров. А ещё для них есть сразу два калькулятора (попроще и посложнее) - там сразу считаются все активные и реактивные потери катушки с учётом характеристик её феррита и сразу показывает перегрев.
  11. Его пишет тот же человек, который написал LTSpice, поэтому можно надеяться, что будет учтён опыт предыдущей разработки, и новый симулятор будет лучше (ну или хотя бы не хуже). Обещают большую скорость симуляции и расширение функционала. Как минимум, интересна возможность делать свои поведенческие блоки на C++ и Verilog. А не имеет он широкого распространения, потому что первый публичный релиз состоялся всего несколько месяцев назад.
  12. С помощью objdump/readelf посмотреть содержимое elf фала (что там за куча ненужных нулей такая) и попробовать удалить их с помощью strip. Им же можно и другие неиспользуемые секции или информацию удалить, например отладочную информацию (ключ -g). https://manpages.debian.org/unstable/binutils-arm-none-eabi/arm-none-eabi-strip.1.en.html Как вариант - можно попробовать просто сжать файл каким-нибудь RLE алгоритмом сжатия. Если не ошибаюсь, его в МК можно распаковывать на лету, по мере приёма.
  13. Tracealyzer для FreeRTOS

    Автоматически должно находить. Если не находит, можете через отладчик посмотреть адрес этой структуры и указать его в настройках. В документации всё расписано: https://percepio.com/troubleshoot-j-link-rtt/
  14. Много рекламных фирм предлагают печать на всякой сувенирной продукции (кружки, зажигалки и т.п.), они для этого используют тампопечать. Есть настольные станочки на разное количество цветов, разрешение и производительность.
  15. R15 стоит 5,1кОм вместо 5кОм ±1%. На древних KSZ* с подобным сталкивался. Тоже токозадающий резистор поставил из того что под рукой было, тоже в минусе проблемы со стартом были. Попробуйте параллельно 240кОм подпаять, если 5кОм 1% нету.
  16. У Cypress/Infineon в серии FM3 есть MK c двумя RMII. В каких именно корпусах доступны оба одновременно - нужно параметрическим поиском смотреть. На сайте фильтра по Ethernet нету, может у них какая-то утилита для этого есть? По доступности не подскажу. Другие альтернативные варианты не рассматриваются? Например: У Microchip есть трёхпортовые свитчи (2 выхода по 100Mbit + RGMII до микроконтроллера). Вместо второго интерфейса использовать сетевой контроллер с uart/spi интерфейсом от того же Microchip или Wiznet. Подключить USB чип сетевой USB карты. + У Nuvoton есть микропроцессоры с двумя Ethernet. Корпуса не-BGA, память встроенная (SiP) + есть портированная FreeRTOS. Может подойдёт на замену микроконтроллеру?
  17. Во втором посте темы приложена структурная схема какого-то из Спектранов с двумя входами. Вопрос, зачем на смесители подаются сигналы с обоих входов и зачем потом выходы смесителей подключены к АЦП так странно? А можете пояснить о чём тут речь, что за второй проход? На ум проходит только описание работы их самых бюджетных SignalHound USB-SA44B, где для упрощения конструкции спектр строится за два измерения - оцифровывают ПЧ дважды (с верхним и нижним гетеродином) с помощью одной АЦП. Потом в цифре как-то компенсируют зеркальный канал (как? простое перемножение после БПФ?). Речь об этом?
  18. В cmsis_gcc.h есть макрос __UNALIGNED_UINT32(x) : Если я правильно понял, так сделано потому что в gcc атрибут __attribute__((packed)) можно применять только к структурам, а не к произвольным типам. Возможно, можно что-то подобное сделать для uint16_t ? В том же файле чуть ниже есть макросы __UNALIGNED_UINT16_READ и __UNALIGNED_UINT16_WRITE где подобным образом к данным обращаются.
  19. В чип-и-дипе разные резисторы бывают, например:
  20. На примере фильтра BPF-F200. Первая схема - характеристика фильтра (красные графики). Вторая схема - цепочка из книги с параметрами F=200МГц (равна центральной частоте фильтра), полоса Bp=50МГц (берётся равной полосе фильтра или с запасом, чтобы не испортить характеристику фильтра в полосе пропускания, в данном случае с запасом), добротность индуктивностей Ql=100 (зависит от применяемых компонентов). Этой схеме соответствуют синие графики. На втором графике видно, что идеальная цепочка имеет согласование во всей полосе до -60дБ S11. Номиналы элементов цепочки посчитаны по формулам из книги (только значение константы из первой формулы 1,5 заменено на 0,5. Возможно, опечатка?). Третья схема, зелёные графики - совместное включение цепочки и фильтра. Видно, что в полосе пропускания графики S11 и S21 почти не меняется относительно красных графиков фильтра (т.к. цепочка посчитана с запасом на полосу 50МГц при ширине фильтра 20МГц). По второму (S11) зелёному графику видно два пика около полосы пропускания - если цепочку пересчитать на Bp=20МГц то они опустятся с -10дБ до -20дБ, но полоса пропускания фильтра начнёт уже уменьшаться. Что за пик на ~125МГц на зелёном графике - не понятно, похоже какая-то реактивность фильтра. Как применить для вашего случая: cнимите на VNA S-параметры Вашего фильтра, постройте такие же схемы, укажите в уравнениях Ваши частоты. Если Вам нужно согласование не вблизи фильтра а только на кратных гармониках от центральной частоты, то можете брать Bp=5...10*(полоса пропускания Вашего фильтра).
  21. В теории, отечественные синтезаторы тоже есть (1508ПЛ10Б, К1367ПЛ3У), но что-то мне подсказывает, что LMX2572 или MAX2871 будет проще достать. ГУН у них уже встроенный. RFFC5072 тоже не дефицитный товар, в элитане продаются. ТС, я правильно понял, что достаточно просто рисовать спектр (демодуляция какого-то сигнала не нужна)? Вот несколько "самых дешёвых" схем: Идея с nRF24L01 имеет право на жизнь, но её входной диапазон (2.4ГГц) попадает в полосу анализируемого диапазона частот - появится дополнительный побочный канал приёма через прямой пролаз смесителя. Всякие wi-fi будут пролазить прямо на вход детектора. Лучше ПЧ выбрать вне полосы приёма (ниже <800МГц), не забыв поставить простой ФВЧ по входу приёмника, что позволит избавиться от этого побочного канала. В качестве детектора на ПЧ в радиолюбительских поделках используют чипы трансиверов от Silabs, у которых есть возможность прочитать уровень входного сигнала. Можете поискать темы про "анализаторы спектра" : Spectrum Analyzer by R2-D2 (чип SI4313) или TinySA первой версии (чип SI4432). В итоге схема получится такая (без учёта МШУ и преселекторов): простой ФВЧ с подавлением на ПЧ и частотой среза 800МГц, смеситель ADL5801 + синтезатор LMX2572 или MAX2871 для переноса на ПЧ (или заменить их на один чип RFFC5072), трансивер в качестве детектора на частоте ПЧ. Если ПЧ выбрать 433МГц, то можно добавить копеечный ФНЧ/ФПЧ фильтр на вход трансивера (их на эту частоту много). Жирный минус такой схемы - полное отсутствие подавления зеркального канала. Приёмник прямого преобразования: ФВЧ по входу (в такой схеме требования к нему ещё ниже, т.к. ПЧ 0МГц). Синтезатор LMX2572 или MAX2871 + квадратурный демодулятор ADL5380, 2шт ФНЧ (требования к ним зависят от частоты дискретизации АЦП) и 2 АЦП. Можно даже АЦП микроконтроллера использовать (только нужно не 1 АЦП + мультиплексор, а 2 честных АЦП, т.к. выборка по обоим каналам должна быть одновременной). Если правильно помню, Arinst SSA по такой схеме сделан. Зеркальный канал попадает в полосу основного и давится при цифровой обработке. Останутся только паразитные каналы на нечётных частотах гетеродина. При желании и от них можно избавиться, если на вход поставить преселектор из двух ФНЧ (на 2200МГц и 6000МГц). Т.к. нужна только мощность, то можно попробовать приёмник прямого преобразования по схеме 2 но вместо АЦП поставить фазоздвигающие цепочки на +45 и -45 градусов (можно упростить схему, объединив их с ФНЧ, в книге у Полякова посмотрите или на форумах радиолюбителей) и сумматор, к выходу которого подключить логарифмический детектор, например AD8310 работает от 0Гц и имеет динамику 95дБ. Дополнено: у AD8310 вход дифференциальный, можно даже сумматор не использовать, подавать I и Q на +INPUT и -INPUT, что эквивалентно вычитанию.
  22. Если одно какое-то имя пересекается, можно попробовать одну эту функцию в обеих библиотеках пометить атрибутом __attribute__((visibility("hidden"))). Но правильнее делать так: библиотеки собираются с ключом компилятора -fvisibility=hidden, чтобы ограничить области видимости функций по-умолчанию. А те функции, которые нужно оставить доступными пользователю для вызова, пометить атрибутом __attribute__((visibility("default"))). Пример: // lib.h - интерфейс библиотеки #pragma once void test1(); // lib.c #include "test.h" #define ACCESSIBLE __attribute__((visibility("default"))) ACCESSIBLE void test1() {}; // функция доступна для вызова из вне, этим макросом помечаем все доступные пользователю функции void test2() {}; // функция не-статическая, но доступна только внутри библиотеки, из-за -fvisibility=hidden static void test3() {}; // статическая функция, доступна только в пределах объектного файла
  23. Т.е. нужен приемлимый КСВ не только в полосе пропускания, но и в полосе заграждения фильтра? У Э.Ред в "Справочное пособие по ВЧ технике", 1990г есть такая согласующая цепь, применял её на ~200МГц. Ещё у Minicircuits есть "Reflectionless Filter", может быть на ваши частоты есть что-нибудь готовое.
×
×
  • Создать...