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

EKirshin

Свой
  • Постов

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

  • Посещение

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


  1. Конроллеры на базе ARM

    Здравствуйте! На тему электромагнитной совместимости довольно много материалов, но разбросаны они по самым разным местам, поэтому вопрос тем, кто уже с этим сталкивался. Интересует поведение микроконтроллеров под воздействием серьёзных электромагнитных помех (близость к силовым системам, гроза и т.п.). Многое, конечно, можно вывести самому, но изобретать велосипед, как известно, не практично. Посоветуйте книги/статьи о том, как правильно оформить код, какие меры предпринять для повышения устойчивости системы с позиции программного обеспечения. Есть ли какие-то теоретические расчёты показателей стабильности с учетом вероятности возникновения тех или иных ситуаций? Есть ли какая-то специфика применительно к ядрам ARM?
  2. А в чём проблема? Есть метод прямого вычисления sin, есть табличный, есть совмещённый. Выбирайте любой. На таком процессоре сигнал такой частоты сгенерить очень просто.
  3. Всем большое спасибо! Я имел возможность только начать разбираться в предложенных решениях. Сейчас, к сожалению, нас всех выгнали в отпуск :) Нахожусь на удалении...
  4. Да, действительно, 1 Мгц. А что не так? Да, именно это и интересно. Вообще хотелось получать выборку в, скажем, 65536 точек, строить большой спектр и смореть с разрешением порядка 15-20 Гц. Но аппаратные средства не позволяют. Поэтому ищем путь сделать нечто из различных кусков сигнала. Да, действительно. Указанные 100db - это, пожалуй, максимум. А данные две реализации - лишь пример.
  5. Используем более быстрые АЦП, затем производится фильтрация с децимацией, в результате чего получаем повышенное SNR. Да, скажу сразу: сигнал комплексный - получается после фильтрации. Возможно изменение в пределах всего спектра. Известна, но точность не гарантируется - может смещаться. Ну её значение ведь можно получить оценкой тем же fft? Или необходима большая точность, чем может предоставить какой-либо метод? Менее 5 кГц с каждой стороны основной гармоники. В том числе и генераторы. Вернее - это основное назначение. Длительность записи - 4096 точек на 1 Мгц. Длительность паузы неопределена. Порядок - около 100 мс. Прикрепляю две реализации процесса. Файлы с подчёркиванием - im, без - re. 2_1M_0.txt 2_1M_0_.txt 2_1M_1.txt 2_1M_1_.txt
  6. Частота выборки сигнала переключается. К примеру, 1 МГц. Частота грамонического сигнала может также изменяться, но она фиксирована в пределах одного эксперимента (получения спектра). Соотношение сигнал/шум в районе 100db. Шум белый, эргодичностью обладает. Не совсем понимаю, что имеется ввиду под "когерентностью". Если это совпадение фазы гармонического сигнала, то когерентность не сохраняется.
  7. Нет, не так! Интересуют детали на частотах, близких к основной. Это нужно для исследования качества входной синусоиды.
  8. Проясню, что требуется, т.к. задал вопрос действительно кошмарно... :01: Имеется устройство (АЦП, ...), которое способно периодически (период не фиксирован) получать сигнал со входа - N точек. Частота дискретизации более 1 МГц. Задача следующая. Хочется "видеть", что происходит в районе частоты, поданной на вход устройства с большим разрешением по частоте. Оставшаяся часть спектра нас не интересует (вернее, интересует, но уже в других целях). Устройство не может по архитектурным причинам получать за раз данных больше N отсчётов. Под стационарностью я понимаю неизменность параметров сигнала: частота сигнала (синусоиды) остаётся неизменной (не учитывая качество самого сигнала: дрожание частоты и т.п., изменяющие частоту сигнала), уровень шума и его другие характеристики также неизменны. Один из рассматриваемых нами способов - это "усреднение" различных реализаций сигнала. Однако, не ясно, как склеить M кусков, чтобы получить из этого какую-то дополнительную информацию. Фаза синусоиды, естественно различна в каждом из М кусков. Поэтому их простое "склеивание" ни к чему хорошему не приводит, даже с наложением окон для устранения эффекта резкого скачка фазы.
  9. Здравствуйте! Такая задачка. Есть стационарный сигнал: шум + синусоида. Из этого сигнала периодически набирается N отсчётов. Вопрос: можно ли, имея M кусков этого сигнала использовать их для получения спектра сигнала размерностью M*N? Какой будет эффект, если на каждый из этих кусков наложить окно, "склеить" эти куски (получится сигнал длиной M*N), затем сделать fft на M*N точек?
  10. STR912FAW47

    Установили новый кристалл STR912FAW47. После попытки прошивать Flash Bank1 128K получаем ошибку - таймаут доступа к Flash. Это насчёт алгоритма ICP. Обычный тоже не работает, но ошибка другая (не работал и ранее). Если прошивать алгоритмом ICP для версии FAW44 (которым пользовались ранее), то прошивка проходит. Но здесь уже возникает проблема непосредственно с запуском самой программы. О запуске. Для старого чипа используем startup-файл, строки инициализации FMI: FMI_CR_Val EQU 0x00000018 FMI_BBSR_Val EQU 0x00000000 FMI_BBADR_Val EQU 0x00000000 FMI_NBBSR_Val EQU 0x00000006 FMI_NBBADR_Val EQU 0x00080000 FLASH_CFG_Val EQU 0x00001000 ; Setup Flash Memory Interface (FMI) LDR R0, =FMI_BASE LDR R1, =FMI_BBSR_Val STR R1, [R0, #FMI_BBSR_OFS] LDR R1, =FMI_NBBSR_Val STR R1, [R0, #FMI_NBBSR_OFS] LDR R1, =(FMI_BBADR_Val:SHR:2) STR R1, [R0, #FMI_BBADR_OFS] LDR R1, =(FMI_NBBADR_Val:SHR:2) STR R1, [R0, #FMI_NBBADR_OFS] LDR R2, =FMI_CR_Val STR R2, [R0, #FMI_CR_OFS] ; Write "Write flash configuration" command (60h) LDR R0, =FMI_BBADR_Val MOV R1, #0x60 STRH R1, [R0, #0] ; Write "Write flash configuration confirm" command (03h) LDR R2, =(FLASH_CFG_Val:SHL:2) ADD R0, R0, R2 MOV R1, #0x03 STRH R1, [R0, #0] Для нового изменяем следующие параметры: FMI_BBSR_Val на 0x02 FMI_NBBSR_Val на 0x08 FMI_NBBADR_Val на 0x200000 Бит, который выбирает Flash для загрузки (CSX) установлен в "1" -> загрузка из bank1. В свойствах проекта на вкладке "Target" изменяем все 0x80000 на 0x20000 и 0x8000 на 0x20000. После запуска по debugger'у видно, что программа делает переход на вектор неверного адреса при попытке запустить следующую команду после команды "LDR R0, =FMI_BBADR_Val". При этом в окне дизассемблера текущие команды уже не опознаются (стоит "???"), т.е. - явно неверная инициализация адреса и т.п. Исполузуем MDK 3.22. Кто-нибудь уже работал с STR912FAW47 ?
  11. Да, но вот как раз и интересно, на какую дисперсию нужно домножить, чтобы получить нужный SNR. Нужно ли при этом компенсировать это ослабление, домножая сигнал на какую-то величину? Как она рассчитывается? Я и имею ввиду не просто количество точек fft, а количество точек в выборке. К примеру, генерируем сигнал с уровнем A, добавляем шум. Но ведь при этом увидим разлчиный SNR на спектре, если сгенерируем раздичное число точек выборки (и, соответственно, fft сделаем на то же число точек)? В Матлабе при генерации сигнала без шума получаю интересный эффект: во-первых, сигнал этот не достигает уровня 0 db и его уровень зависит от частоты. Есть предположение, что такой эффект получается из-за того, что полосы частот fft дискретны и чем ближе частот к границе "бинов", тем меньше должен быть уровень этой частоты. Верно ли это, либо причина в другом?
  12. Осваиваю DSP в Matlab. Для дальнейшего движения вперёд хочу создать/найти функцию, которая генерит сигнал - набор синусоид с заданным уровнем, а таже подмешивает шум. Всё показалось простым до того момента как дело дошло до проверки сгенерированного сигнала на спектре. Основной вопрос - как правильно рассчитать амплитуду генерируемого шума, чтобы потом на спектре увидеть ровно тот самый SNR, что задавался в качестве параметра. Пытаясь создать такую функцию, я столкнулся со следующими проблемами/нюансами: 1. Расчёт амплитуды генерируемого шума. 2. Точное построение спектра сигнала. Как учитывать следующие факторы: - уменьшение энергии сигнала при домножении на оконную функцию - нормализация спектра учитывая длину выборки (как сохранить и нужно ли энергию сигнала). Необходимо ли учитывать теорему Парсеваля? - как учитывать различие комплексного и вещественного сигналов? Например, понятно, что если сигнал вещественный, то спектр его будет симметричным. Поэтому практически все примеры выводят только половину спектра, но энергия-то содержится в обоих частях спектра? - каково влияние числа точек FFT на уровень шума в спектре: 10log10(N/2) либо 10log10(sqrt(N))? И уже совсем примитивный вопрос: никак не удаётся сгенерить сигнал размахом в 1 и увидеть его на спектре на уровне 0db. Разъясните, пожалуйста, эти вопросы.
  13. Да, fmin и fmax в относительных частотах. А чем определяется разрешение по частоте? dF = 1/T - Это не для случая ли получения полного спектра, для частот 0-f/2?
  14. Информации не добавили, но в данном случае мы ведь жертвуем информацией о частотах вне интересующего нас диапазона. Хотя, если подходить иначе: разобьём весь диапазон частот [0; F/2] на, скажем, M участков. Для каждого сделаем такое "узкое" FFT, всё это соберём вместе и скажем "вот вам спектр с повышенной разрешающей способностью по частоте!" Рассуждая так, становится понятно, что это невозможно. Однако, хотелось бы увидеть математическое обоснование. Кто-нибудь может подкинуть?
  15. Здравствуйте! Необходимо, имея выборку длины N получить спектр только лишь выбранной частотной области (скажем, в нормализованном частотном диапазоне 0.2-0.3 вместо обычных 0-0.5). Попробовали сделать ДПФ последовательности, взяв в качестве базисных функций не cos(2*pi*k*n/N), sin(2*pi*k*n/N), a cos(2*pi*(fmin+k*[(fmax-fmin)/N])*n/N), sin(2*pi*(fmin+k*[(fmax-fmin)/N])*n/N), т.е. интересующий нас диапазон частот. Выполнили ДПФ. Результат разочаровывающий: никакой новой информации о промежуточных частотах не получили: видна лишь (видимо) интерполяция соседних частот. Вопрос: либо что-то криво сделали, либо это фундаментальный эффект? Пока не можем найти объяснения. Что мешает получить более высокое разрешение по частоте, жертвуя при этом диапазоном частот?
  16. STR9 и USB

    Здравствуйте! Проблема следующая. Создали устройство на STR912FAW44. Взяли STшную USB-библиотеку и сделали собственное устройство с собственным драйвером. Отладили, заработало. Позже выяснилось, что при подключении к компьютеру с хост-контроллером USB типа UHCI устройство работает нестабильно (пропускная способность ниже, вообще подвисает). На первом компьютере был OHCI. Драйвер был сгенерирован Compuware Driver Studio. Используется обмен по двум каналам типа BULK (один - IN, другой - OUT), размер пакета 64 байта. Всё под Windows XP SP2. Пробовали различные компьютеры с UHCI и OHCI. Ситуация такая: на OHCI работает всегда ОК. На UHCI ведёт себя по-разному, но всегда что-то не так. При подключении через USB 2.0 HS хаб к UHCI ситуация улучшается в плане пропускной способности, но иногда даёт сбой. Ни у кого подобной ситуации не было? В чём наибольшая вероятность неработоспособности: 1. драйвер, сгенерированный DriverStudio? 2. Аппаратная реализация ST912 (тогда ситуация должна проявляться у всех)? 3. Библиотека ST работы с USB? Есть ли у кого-нибудь нормальная стабильно работающая на всех хост-контроллерах библиотека для STR912? Кстати, в библиотеке ST при работе с USB не реализована поддержка DMA и двойной буферизации, что иногда кажется существенным. Кто-нибудь как-либо решил этот вопрос? Благодарю.
  17. Литературы-то куча, но не очень пока понятно, как подойти к задаче. Реализация, естественно, в цифре. Опорная частота (возбуждающая) до 500 КГц. Амплитуда +-5V (могут быть варианты). Пока не очень понятно, как генерировать частоту. Варианты: - генерить программно внутри DSP, выводить через ЦАП, затем получать сигнал с объекта через АЦП, вычислять амплитуду и фазу (учитывая задержку прохода через тракт). - поставить DDS, управлять им DSP. Тогда не особо понятно как быть со входным сигналом: 2 АЦП (опорный сигнал и выход)? - другие варианты?
  18. Есть входной сигнал в виде смеси синусоид + шум. Этот сигнал получается воздействием на какую-то систему синусоидальным сигналом известной частоты, потом с выхода снимается отклик системы - это и есть наш сигнал. 1. Нужно в реальном времени определять амплитуду той самой частоты, что на входе системы в выходном сигнале системы (детектор амплитуды). 2. Нужно в реальном времени определять разность фазы между входным и выходным сигналами системы (детектор фазы). Насколько я понимаю, это что-то типа классических задачек, решение которых зависит от конкретных задач и других параметров, но должны быть какие-то подходы к этому, типовые случаи. Подскажите, где об этом можно узнать более подробно. Может есть примеры?
  19. Здравствуйте! Необходимо сделать цифровой ПИ- или ПИД-регулятор. По чистой теории управления книги есть, но хочется почитать что-то более практическое. Типа Application Note, где есть пример с расчётом и последующей реализацией. Ещё вопрос - отладка. Каку отлаживаются подобные вещи? Если с алгоритмами обработки всё понятно: подал выборку, получил результат, проанализировал, сравнил с эталоном. А там где обратная связь - ?
  20. Вот примерчик. Загружает hex-файл используя ULINK. Там в настройках просто нужно указать, что нужно загрузить файл blinky.hex. HEXdownload.zip
  21. После некоторого времени разборок с различными примерами по USB вырисовались фундаментальные вопросы в области. Программирую как для различных микроконтроллеров (firmware), так и для PC (драйвер и пользовательские ПО). Интересна реализация драйверов в более продвинутом варианте. Интересует, есть ли где-нибудь примеры реализации драйвера с поддержкой нескольких контрольных точек туда-обратно (в т.ч., с режимом isochronous), с несколькими конфигурациями и т.п. Также интересует пример ПО для работы с этим драйвером (открытие интерфейса работы с драйвером, использование символьных ссылок и т.п.). Возможно ли реализовать такой драйвер с использованием Numega DriverStudio? По умолчанию, многие возможности там не реализованы. Например, DriverWorks wizard генерит код только для поддержки двух каналов, чего иногда не хватает для эффективной работы. Также отсутствует возможность передачи блоков данных более чем 64 байта (в обработчике события write стоит проверка и урезание буфера до максимальных 64 байт вместо дробления на части и отправки буфера порциями). Можете подсказать, где можно порыть? Может есть где хорошие простые примеры с комментариями? Давно пытаюсь тщательно разобраться в вопросе, но всегда сталкиваюсь с тем, что примеры драйверов для NT DDK уж очень навернутые, а использование DriverStudio от Numega вводит ограничения. Есть ли хорошие книги по этому вопросу? Читал, к примеру, книги Солдатова и Агурова. Однако вышеуказанные вопросы там затронуты лишь частично и в общем. Вообще, ситуация такая, что во всех книгах, которые мне удалось найти, приведены примеры начального уровня типа "передать пару байт туда-обратно". С этим все понятно, но стоит копнуть глубже - тут же возникает куча вопросов.
  22. ARM7EJ-S

    Кстати, на самом деле, имеющаяся Flash внутри BF-538F висит на шине (EBIU), которая выведена наружу! Поэтому, можно при загрузке (исполняться из Flash Blackfin не умеет...) слить всю прошивочку, подключившись к EBIU внешне. Флэш внутри BF-538F сделана исключительно для удобства, а не для защиты кода. А вот для защиты - имеется технология Security LockBox - в новых BF-54x и BF-52x. Она построена на двухуровневом шифровании (авторизация + последующая дешифрация). И в новых BF флэши нет, т.к. делается ставка на шифрование.
  23. STR912. Переключение Flash.

    Пробуем грузиться со второй Flash STR912 (которая 32k). В новой версии RVDK (3.04 вроде бы) появилась возможность переключить загрузку на вторую Flash записыванием конфигурационной области (добавлены новые алгоритмы программирования flash ICP). Переключить Flash вроде бы получается, прошить ее тоже, однако вот программа из нее стартовать никак не хочет. В стартапе устанавливаем регистры BBADR = 0x400000, size = 32k, NBADDR = 0x0, size=512k. Потом еще в настройках проекта указываем, куда грузить программу (либо на вкладке Target, либо в sct-файле - пробовали и так и эдак) - адрес 0x400000. Вообще, с этими адресами возникли непонятки: стандартный стартап устанавливает второй флэш адрес 0x400000. Как понимаем, это ее физический адрес - адрес, по которому нужно прошить программу (для алгоритма прошивки). Т.е., стартап устанавливает логический адрес, равный физическому. Как только регистры BB и NB инициализируются у второй flash логический адрес уже 0x0? Тогда непонятно, почему после линковки абсолютные адреса переходов устанавливаются со смещением 0x400000? Попробовали сделать так: скомпилировали программу для адресов 0x00, а зашили по адресам 0x400000. Пришлось для этого создавать второй проект, куда вставлялся откомпиленный образ первого и выставлялись адреса 0x400000. В общем, после всех этих манипуляций и переключения флэши для загрузки со второй (bank1, 32k) процессор теперь уже вообще не перепрошить и не переключить назад. Пишет COULD NOT STOP ARM DEVICE! Такое уже бывало после переключения на вторую флэш, но это обходилось переключением назад на первую (для этого приходилось удерживать ресет перед началом прощивки, потом быстренько отпускать... чтобы программа, видимо, не успела запуститься). А теперь и эти фокусы не помогают! Кто-нибудь пробовал грузиться из второй флэш?
  24. Совпадают :) Только тест с одним переключением (только последовательное выполнение большого количества команд, линейно) в цикле не производился при выполнении из RAM. А для Flash результаты такие же. Вы имеете ввиду, получили на 130МГц 96 MIPS или 130 MIPS? Хочется получить количество MIPS равное частоте процессора (на выполнении простейших операций, конечно)
  25. Порт Micrium uC/OS-II со стеком TCP/IP на STR912 нашел. Есть примеры для IAR для платы от ST. По описанию внутри этого архива видно (на скриншотах), что у них TCP/IP на тесте передачи из контроллера в PC дает даже 2.9 Мбайт/с. Глянул исходники - они используют оптимизированную ассемблерную функцию вычисления контрольной суммы. + реализация всяких вещей TCP таких как окно на много сегментов. Сделано, конечно, профессионально. куча комментариев, которые пронумерованы, ..., документация... Но уж очень большой исходник у них. Хочется взять какой-нибудь стек без наворотов и "добавить" в уже существующий проект без операционки, чтоб не переписывать уже написанный код под эту операционку.
×
×
  • Создать...