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

vpd

Участник
  • Постов

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

  • Посещение

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


  1. Не знает ли кто-нибудь, что за деталь такая с маркировкой L26? Корпус что-то типа WSON-8 или DFN-8, Размером около 2*2 мм, 8 выводов в 2 ряда плюс полигон теплоотвода на пузе.
  2. Да, я вот тоже помню, что как-то давно случайно обнаружил, что лапание платы в районе разъема для бластера вдруг случайно привело к загрузке, и я тоже в итоге какой-то конденсатор туда повесил. Но приборчик уехал к заказчикам, и на тот момент он был один такой странный. И про то, куда и что вешать, я благополучно забыл, казалось, что это какая-то странная недокументированная глюкавость одного конкретного прибора.
  3. Вообще я проверял CRC_ERROR, он тоже дергается после отпускания CONF_DONE. То есть, как бы ошибку загрузки демонстрирует. Но бластер пишет pof и проверяет его в EPCS1, и ошибок там нет. А нет идей, почему может сжатый битстрим лагать в EPCS1?
  4. Да вот, воплотил наконец свою идею о замене ERPS1 на ERPS4 и отключении compression. И всё работает. Чудеса...
  5. Напряжение проверял, VCC всюду порядка 3.58В, VCCINT 1.32В, даже чуть больше нормы. При синхронизации от CONF_DONE не наблюдаются провалы питания. Время появления питания не так уж важно, поскольку стоит автоповтор загрузки после неудачи, и на повторах питание давно в норме, а причина сбоя не исчезает.
  6. Вот такая дурацкая ситуация нарисовалась. Есть старенький проект для ПЛИС EP2C5T144C8, которая конфигурируется сама из EPCS1. Проект собирается, прошивается успешно бластером, а потом тишина. Смотрю сигнал CONF_DONE, а он ведет себя так: pull-up резистор притягивает его к VCC примерно за 500 нс, и потом он падает обратно в ноль и запускает повторную загрузку. Тыкал еще в пины разные nCS, DCLK, и пр. Вердикт вполне понятный, оно зацикливается на перезагрузке, считая битстрим неправильным. Только непонятно, почему? Вроде всё раньше работало. Битстрим делается с компрессией, в таком виде он влезает в EPCS1. Можно ли как-то более ясно понять, что его не устраивает? Особенность в том, что проект старый, исходник старый, платы тоже сделаны в далеком 2007 году, и квартус собственно от той поры есть (9.2), так сказать, всё аутентичное, с чем раньше работало. Да и еще, история эта повторяется с двумя платами, один в один, что намекает на системность проблемы... Пока из идей есть только попробовать припаять EPCS4 и выбрать несжатый битстрим. Вроде по воспоминаниям там были какие-то особенности...
  7. Вот тут наткнулся на такую вот историю. Поставил драйверы SAU510 версии 1.2.2.7 (вроде последние) под CCS v6.2.0.00050 под Windows 7 Professional SP1. Стал отлаживать таргет AM3352. Подключаюсь к нему, он всё запускает, останавливается на main, а через пару секунд вылезает такое вот окошко, мол, нет лицензии, причем, по-видимому, именно SAU510 он и не признаёт. Что это может быть такое и как его побороть?
  8. Нам вообще хватило бы точности в 0.5%, ибо для большей точности надо и делитель входной городить из дорогих прецизионных резисторов. А заказчик не хочет дорогой прибор. Поэтому пока ограничились подавлением ненужностей порядка 120дБ. Этого за глаза должно хватить.
  9. Ну, не секундами, а вообще-то тупо параметрами фильтров. Грубо говоря, суммарным порядком первого и второго фильтра, умноженным на период частоты дискретизации. У нас первый фильтр получился 47 порядка, второй - 33-го. И в итоге на 200 Гц задержка порядка 0.35-0.4 секунды. Наверное, если очень захотеть, можно построить и более компактные фильтры, я строил в TFilter online, и не уверен, что он дает фильтры минимально возможного порядка. И тогда задержка еще уменьшится. Задержка при измерении не просто устраивает, а прописана по ТЗ от 0.5 до 3 секунд, что связано с защитой от дребезга напряжения. Мгновенные просадки напряжения при включении нагрузок не должны приводить к выдаче сигналов тревоги. Ну и аналогично всплески при отключении нагрузок. Так что у нас даже еще небольшой запас времени остается на подумать.
  10. Ошибка исчезает, поскольку при возведении амплитудных значений в квадрат возникают разностная и суммарная частоты, то есть нулевая и удвоенная. Удвоенная может вылезать в другую зону Найквиста и накладывается на нулевую при децимации в RMS окне. Поэтому умные люди посоветовали не делать окно, а просто оставить одну нулевую частоту при помощи ФНЧ, что у нас в итоге успешно и вышло. В принципе, все сделанное можно распространить и на гармоники 50Гц, просто нужно правильно сформировать первый фильтр, который убирает посторонние частоты в спектре, оставляя только полосы для гармоник 50Гц. У нас в общем-то нет требования сделать идеальный измеритель true RMS. Нужно сделать детектор наличия трехфазного напряжения правильной амплитуды, углов между фазами и порядка их чередования. Правильность амплитуды велено контролировать по основной частоте, прописанной в ГОСТе. В общем то даже без всех этих ухищрений у нас всё было более менее в допусках. Просто уж очень странно выглядела цепочка измеренных значений относительно простого вольтметра, подключенного к генератору сигналов.
  11. Это вообще было в теоретической модели. Мы сравнивали поведение алгоритма обработки до и после переделывания фильтров. Амплитуда сигнала, выдаваемая алгоритмом, перестала зависеть от отклонений частоты сигнала вблизи 50Гц. И вообще стала очень точно равна исходной амплитуде синтезированной синусоиды. Прямо в сети нет, у наших осциллографов входы до 200В. Смотрели на делителе. Вначале вообще не хотели ноль МК с нейтралью объединять, но импульсный ИВП МК слишком сильно фонил во всем спектре, так что пришлось ему выходной ноль с нейтралью объединить. После этого меряет фазы довольно точно. Но вообще должен сказать, что у современных цифровых осциллографов довольно странные эффекты есть из-за их блоков питания. Например, если крокодилом щупа взяться за нейтраль, то вышибает УЗО, хотя вольтметр дает там разницу напряжений порядка 0.09В. Какие-то особенности заземления нуля осциллографа в его блоке питания... В общем, полосу решили сократить до того, что положено по требованиям ГОСТ быть в сети (230 В ±10 % при частоте 50 ±0,2 Гц). У нас в общем-то прибор не должен заниматься анализом всего спектра фаз сети.
  12. Да нет, вполне конкретное техническое задание :) Для красоты нужно, чтобы было понятно откуда все погрешности в измерениях взялись, и чтобы они были не сильно больше ожидаемых.
  13. Я же вроде написал вначале, что мы меряем напряжение в сети. Нужно измерить величину сетевого напряжения, используя относительно простой и дешевый микроконтроллер, в котором нет стабильного генератора частоты, а есть только RC-генератор, настроенный на заводе с точностью примерно 1% и имеющий температурную стабильность такого же порядка. В процессе переноса измеряемого сигнала из домена сетевых напряжений в домен питания МК сигнал ослабляется в примерно в 600 раз и к нему добавляется DC-компонента. В итоге на 12-разрядном АЦП мы имеем что-то типа 1900 +- 600. Нам нужно из этих показаний измерить составляющую около 50Гц, максимально убрав артефакты, связанные с посторонними шумами: электрическими, шумами квантования, наводками в цепях питания и т.п. Для этого решено сузить полосу сигнала до 50+-10Гц по уровню -6дБ и до 50+-25Гц по уровню -125дБ. И в этой полосе измерить квадрат амплитуды сигнала, и на основе его принимать управляющие решения по нахождению напряжения сети в допуске. Исходно нас устраивала точность не хуже 1 вольта. Но вот на выходе получились прыгающие числа, которые не очень смотрелись на фоне более стабильных показаний обычного вольтметра. Даже для сигналов, поданных с поверенного генератора, выдающего идеальный синус постоянной амплитуды.
  14. В общем, переделали всё. Получилось настолько хорошо, что частоту дискретизации снизили до 200 Гц, пересчитали фильтры, и они стали даже компактнее 250-герцовых. Причем оба фильтра получились с идеальным 0.00дБ коэффициентом пропускания в полосе пропускания и подавлением порядка -126 дБ. В итоге шумы там в пятом знаке остались, а задержка выдачи показаний порядка 0.25 с. Так что Самураю и thermit-у большое спасибо за дельные советы!
  15. Ок, я понял. Сейчас попробуем в модели переделать, там вроде как лишних ошибок не было. Вопрос такой. После другого ФНЧ, с хорошим подавлением, каков будет физический смысл его выхода? Я правильно понимаю, что это будет некое "мгновенное значение" Vrms?
  16. thermit, о, а после возведения в квадрат у нас никакого фильтра нет вообще, просто сумма и всё. Я правильно понимаю, что нам надо посчитать квадраты, пропустить их через простейший ФНЧ, чтобы оставить только 0Гц, и уже потом считать сумму квадратов? Надо будет попробовать.
  17. Пока что краевые эффекты совсем малы, так что мы ими просто пренебрегаем. Всё же усреднение делается по 25 периодам. Оконные функции как правило все очень плавные, зарежут половину мощности, и я совсем не уверен, что после них не появится какой-нибудь очередной эффект влияния фазы сигнала на измеренную мощность. Идея поднять частоту выборок уже была, но там пока проблема в том, что 1) существенно повышается порядок полосового КИХ фильтра на входе, 2) и вообще надо всё кратно чаще считать. А у нас там вообще-то две трехфазных сети. Производительности на всё начинает не хватать. Пока в сознании не укладывается механика сего процесса :) Обещали, что по теореме Котельникова сигнал можно восстановить по 2N отсчетам на каждый герц полосы, мы сделали 5, поставили КИХ фильтр с рябью всего 0.1dБ в полосе 50+-2Гц, и тут такой провал с точностью. ViKo, ну вот конкретно для 252Гц оцифровки сдвиг фазы на одной выборке получается 2*pi*50/252, что эквивалентно частоте сети 49.6Гц при выборках на 250Гц. В это случае получается разница не 0.1, а 0.4Гц, период 2.5 с, что опять таки больше размера окна вычисления Vrms в 0.5 с. ну и эффекты те же.
  18. ViKo, скрипт на самом деле на питоне, его делал коллега, могу его показать попозже с графиками, если интересно. Довольно много мы там численных экспериментов сделали, пока не поняли, что результат примерно получается одинаковый. Самурай, да, для 50Гц у нас тоже всё просто изумительно, ошибка равна 0 от слова совсем. Но вот если Вы возьмете частоту 50.1Гц, то из ФНЧ вылезет сигнал частоты 0.1Гц, то есть, с очень большим периодом. И как можно будет с окном в 0.5 с узнать, каково среднее значение амплитуды сигнала? Вот оно и плавает у нас. При окне в 10 секунд, мы естественно убрали бы все ошибки и получили бы измерение Vrms с такой огромной задержкой, но мы так не хотим :) По поводу 1.5% я всё же уточню, чтобы не было недопонимания. 1.5% - это отношение разности максимального и минимального значения Vrms к абсолютному значению, наблюдаемого нами на реальном сигнале из сети в реальном микроконтроллере. Измерения делаются с темпом 2 раза в секунду на окнах в 125 выборок. То есть, вводится сигнал на частоте 250Гц, фильтруется в полосе 50+-2Гц (отсекаются лишние шумы и постоянная составляющая при переносе двуполярного сигнала сети в однополярный диапазон АЦП), после чего нарезается на окна по 125 сэмплов и считается сумма квадратов, делится на 125, извлекается корень. Умножается на масштабный коэффициент. Выводится в консоль. В последовательности чисел за 10 с высматриваются максимальное и минимальное, они близки, пусть это будет к примеру 605 и 595. Вот мы и оцениваем разброс как (605-595)/((605+595)/2) ~= 1.5%. И это совсем не среднеквадратичное отклонение, потому что основная масса измеренных значений лежит всё же ближе к средней величине, мы это понимаем. Но выбросы идут постоянно, и это раздражает, потому что на простом мультиметре в показаниях ничего такого нет. Фазы дышат немного по амплитуде, но это медленные процессы, а обновления показаний мультиметра идут гораздо чаще, но по величине составляют десятые доли вольта. А вот если взять разброс в 1.5% от 220 вольт, то это 3 вольта, что примерно в 15 раз больше. Так вот, про 50.1Гц я нигде не писал, что там разброс 1.5%. Я писал, что смоделировав сигнал 50.1Гц мы получили качественно похожую картину, когда измеренное Vrms начинает скакать, выдавая величины с разбросом. И разброс этот больше, чем мог бы быть, если бы дело было только в нарушении принципа ввода целого числа периодов. 50.1Гц отличается от 50Гц, на 0.2%, за время 0.5 с это соответствует примерно 1/4 периода выборки 250Гц. Например, усреднение сигнала чистых 50Гц по 124 или 126 выборкам в окне никакого такого большого разброса показаний не дает.
  19. Да у нас задачи измерения частоты сигнала вообще не стояло. Задача измерить действующее значение. Подозреваю, что обычный вольтметр не измеряет частоту и не имеет никакой АПЧ, а что-то типа диодного детектора и измерения амплитуды. полученного. И кроме того, я нигде не писал, что мы оцениваем RMS по одному периоду. Наоборот, писал, что мы суммируем на окне в 0.5 с, то есть 25 периодов. 1. Мы и считаем всегда по количеству выборок, которое дает целое число периодов центральной частоты (50 Гц) 2. У нас частота отсчетов минимум 250 Гц, то есть в 5 раз выше частоты измеряемого сигнала 50 Гц. 3. Чисто технически управлять частотой выборок с высокой точностью мы можем, так как фактически частота выборок получается делением 48МГц на N, для 250Гц N равно почти 200 тысяч. Но мне тут кажется избыточной подстройка частоты для RMS. Действующее значение бывает у любого сколь угодно кривого сигнала. Интересно, почему оно в лоб то не считается?
  20. Да, верно, считаем сумму квадратов по окну 0.5 с (125 выборок), после полосового КИХ фильтра, выделяющего полосу вокруг 50Гц. Биения имеют период порядка 2-3 с на реальных данных, и около 1.5с на модели 50.1Гц. Почему исчезают биения? Идея такова. Допустим, есть последовательность: 1, 1, 1, 2, 2, 2, 1, 1, 1, 2, 2, 2, 1, 1, 1, 2, 2, 2, ... Если окно усреднения меньше или равно 3, то можно получить средние значения от 1 до 2. Разброс получается 100%. Если взять окно 6, то получается среднее значение в 1.5, вообще без разброса. При большом окне получается те же 1.5 плюс поправка на краевые эффекты. Примерно то же и с измерениями, просто в итоге разброс 1.5% от абсолютной величины.
  21. Возникла у нас тут, казалось бы, тривиальнейшая задача - измерить с помощью МК действующее напряжение сетевой частоты. Этого мы в общем-то добились, в первом приближении всё измеряется, но вылез неожиданный эффект. Мы заметили, что измерения имеют разброс, который доходит до 1.5% от абсолютной величины сигнала (фазы с амплитудой ~311В), а это несколько вольт, в то время как простейший мультиметр ту же фазу меряет, и значение дёргается примерно на 0.2 В в масштабе времени 0.5 с. Имея возможность выводить данные через RS-485, мы собрали некоторое количество данных с АЦП с параметрами 12 бит, Fs={250Гц | 300Гц | 1000Гц}. Затащили данные в матлаб, чтобы поизучать. Надо сказать, что исходно в качестве рабочей частоты была выбрана именно частота 250Гц, так как с ней фильтр получается попроще. Но для опытов сняли данные на нескольких частотах выборки, чтобы сравнить погрешности измерений до и после обработки. Посмотрев на разные осциллограммы и спектры сигналов, мы поняли, что суть проблемы упирается в то, что частота тактирования АЦП в МК (STM32, внутренний генератор имеет точность порядка 1%) несколько отличается от 250Гц, что в целом эквивалентно изменению частоты сигнала. Действительно, если уже программно сгенерировать синусоидальный сигнал с частотой 50.1 Гц для частоты выборок в 250 Гц, то вид сигнала получается крайне похожий на то, что мы намеряли. То есть, эффект размытой точности измерения упирается не в какие-то там шумы квантования АЦП или просто электронные шумы в полосе пропускания АЦП, а тупо в биение частот сети и выборок. Период когерентности оказывается довольно большим, может быть 2 секунды и больше. По сути тут как повезёт, чем ближе частота сети к реальной Fs/5, тем дольше происходит смена фазы выборки. В итоге это приводит к тому, что RMS значение амплитуды сигнала после фильтра гуляет в пределах 1.5%, и примерно такой же результат получается в числовой модели. При большом времени усреднения, который в несколько больше периода биений, эффект, разумеется, сходит на нет. Но нам надо успевать выдавать измерения с задержкой не более 0.5 с от момента измерения. И вот тут возникает проблема, как побороть этот медленный тренд? Пока что замечено, что он естественным образом сокращается, если начинать разгонять частоту выборок АЦП. Чем больше точек на один период, тем меньше погрешность прямого попадания выборки в амплитудное значение, эффекты биений сами собой затухают, одновременно падает амплитуда биений и растет частота. В итоге в меньшем окне накопления уже всё получается. Однако, для частоты в 1кГц КИХ фильтр на 50+-2Гц с уровнями подавления порядка -70дБ становится уж очень прожорливым по ресурсам, а точность измерения ещё далека от идеальной. И это при том, что простейший вольтметр имеет задержку меньше и дергается меньше при измерении. Хотя я не уверен, что он не имеет встроенного интегратора с большим временем накопления и более быстрым временем обновления. В принципе, визуально заметно, что при первом подключении к измеряемому напряжению, он выдает сначала несколько значений с большим разбросом, а потом постепенно разброс сокращается до ~0.2В, и следует с периодом примерно 0.5 с. Попалась тут заметка от STM на тему измерения напряжения для счетчиков электроэнергии. Подобная проблема там описана, и в качестве выхода предложено тупо синхронизировать частоту выборок АЦП с измеряемой сетевой частотой. Метод, наверное, годный, но есть всё же какая-то неудовлетворенность им. Ну, например, потому, что если без подстройки мы получали правильное значение с плавающей добавкой, которая за длительное время всё же усреднялась в 0, то с подстройкой мы просто имеем какую-то добавку, которая усредняется в некоторую неизвестную константу. И не очевидно, что пропорциональную измеряемой величине, чтобы её просто откалибровать один раз и всё. В общем, пока картина получается такая, что накопив 250 выборок за 1 секунду, мы не можем с высокой точностью восстановить действующее значение для частоты 50Гц в полосе 2Гц (по уровню -0.1дБ), которая заметно шире, чем размытость в 1% (0.5Гц), создаваемая неточностью тактового генератора МК. Причем даже в модельном варианте, когда на вход подается чистый синус с идеально постоянной амплитудой, на выходе мы имеем разные значения для энергии сигнала. Вопрос, можно ли такое побороть, не раздувая вычислительные ресурсы уж до совсем неприличного уровня?
  22. Coremark для Snapdragon 820

    Тут вот мы достали TI EVM для AM5728, и собрали для него тест производительности по имени Coremark. В качестве потенциальных кандидатов рассматривались варианты как AM5728, так и Snapdragon 820. Но вот кита для последнего у нас нет, хотя в принципе они тоже есть. Нет ли у кого-нибудь случайно доступа для такой доски по SSH, чтобы там coremark прогнать? Что-то данные, опубликованные EEMB, не вызывают пока доверия, поскольку из них следует, что SD820 имеет рейтинг 0.75-0.8 Coremark/Mhz/core, а у AM5728 мы намерили где-то 4,3-5,4 Coremark/Mhz/core, то есть, в 6-7 раз больше примерно.
  23. На самом деле я тему открыл после некоторых своих экспериментов в духе usb-serial.с и некоторого своего хелпера к нему по аналогии с cp210x.c. Начал с того, что просто поставил в заголовке USB_config/descriptors.h параметр CDC_NUM_INTERFACES равным 2, и оказалось, что usb-serial попытался сразу зарегистрировать два устройства: /dev/ttyUSB0 и /dev/ttyUSB1. Ну и далее я стал смотреть, как оно реагирует на попытки сделать что-нибудь вроде echo 123 > /dev/ttyUSB0. Параллельно сверял все это с USB specification и ее дополнением про USB CDC. И вот по мере углубления в процесс все навязчивее становилась мысль, что usb-serial - это не CDC, а что-то совсем другое, причем в каждом драйвере реализация функций управления терминалом вроде set/get line coding/state делается отдельными вызовами в своем стиле. Поэтому все драйверы в usb/serial/* цепляются только на конкретные VID и PID, которые соответствуют только их собственным контроллерам. Я попытался переставить VID и PID контроллера CDC из TI MSP430 USB Example на вариант Silabs CP2103, и в результате оно порты даже не подцепило, поскольку функция probe драйвера пытается какие-то baud rate и прочие параметры же на этапе инициализации провести, а у TI это все не поддерживается. Аналогично с CH341. Я в своем модуле все эти проверки отрезал, и теперь он вполне нормально открывает устройство и засылает туда данные. И микроконтроллер видит и различает данные, записываемые в разные устройства. Правда пока не работает правильно на чтение, cat /dev/ttyUSB0 сначала молчит, а после записи в это устроство чего-нибудь сразу начинает читать без остановки. Хотя по смылу там для начала сделано простое эхо. Но в целом пока не вполне ясно, какой путь правильный, и не является ли то, что я сейчас сделал (два интерфейса одного класса, но при этом это не композитное устройство), каким то хаком. Поэтому было бы интересно услышать ответы на поставленные вначале темы вопросы. Ну хотя бы вопросы 2 и 3, так как на 1 и 4, по-видимому ответил aaarrr, указав на драйвер usb/class/cdc-acm.c
×
×
  • Создать...