Jump to content

    

ivan24190

Участник
  • Content Count

    56
  • Joined

  • Last visited

Community Reputation

0 Обычный

About ivan24190

  • Rank
    Участник
  • Birthday 01/24/1990

Информация

  • Город
    Рыбное

Recent Profile Visitors

976 profile views
  1. В продолжение темы. Удалось пройти вибрацию с погрешностью ~2.5%. Для этого повысил частоту выдачи данных с акселерометра до 400 Гц и пропустил эти данные через ФНЧ БИХ с частотой среза ~9 Гц (коэффициенты рассчитывал с помощью matlab fdatool), но не суть, т.к. заказчика это не устроило - его пожелание 0.25%. Пытался уменьшать частоту среза вплоть до 1-2 Гц, комбинировал этот фильтр с фильтром Калмана, но максимум, который удалось достичь ~1.5-2.0%. Может быть есть какие более эффективные и быстрые методы фильтрации, чтобы достичь указанной погрешности? Кстати диапазон измерения датчика всего 600 Па, т.е. он чувствует вес собственной мембраны, может быть в этом проблема?
  2. Во многих акселерометрах есть внутренний ВЧ фильтр, который как раз отсекает постоянную составляющую. Включив его и, интегрируя за определенный промежуток времени, можно получить среднюю скорость за это время, а в состоянии покоя скорость будет равна нулю.
  3. Точно, отключал акселерометр, датчик давления показывает значения с погрешностью 1,5 %.
  4. Одномерный или совмещаете данные с акселерометра и гироскопа?
  5. Например какой фильтр? Мне же по факту нужно положение (постоянная составляющая), а не ускорение. А если усреднять неуместно, то как определить постоянную составляющую? (БПФ или ФНЧ КИХ?)
  6. Рассматриваю этот вариант, но это крайний случай, т.к. я ограничен быстродействием и придется "оптимизировать" всю математику, а не хотелось бы ковыряться в "наследстве". Но если это единственный вариант, будем "пилить"...
  7. Здравствуйте, уважаемые форумчане. Так случилось, что "по наследству" мне досталась "доработка" датчика давления, показания которого зависят от положения в пространстве. Для компенсации ошибки от положения в нем использован акселерометр. Все бы ничего, но было выявлено, что он не может пройти испытания на вибростенде. Так вот возникает вопрос как правильно отфильтровать данные с акселерометра? Сейчасданные с акселерометра пропускаются через медианный фильтр с усреднием (32 точки, сортировка, усреднение по 16 центральным), а затем через экспоненциальный фильтр 2-го порядка, полученное значение используется для компенсации ошибки показаний. В состоянии покоя в любом положении все работает, причем импульсные помехи (удары, случайные короткие колебания и.т.д) отсекаются на ура. Но при проведении испытаний на вибростенде и снятия характеристик как с датчика, так и акселерометра выяснилось, что точное определение положения датчика возможно, только если усреднять показания за весь интервал проведения испытаний (30 - 60 минут), что невозможно в ввиду требований к быстродействию прибора 0,5 секунд. (Скорость обновления данных с акселерометра 50 ( можно сделать 100) Гц, полоса частот при испытаниях на вибрацию переменная 2 - 100 Гц). Можете посоветовать куда "копать" для решения данной проблемы. У меня была мысль использовать гироскоп для определения угла отклонения датчика вместо акселерометра, но идею отмели ввиду того, что комплектующие закуплены и платы уже изготовлены на опытную серию. Надо решать задачу на том что есть: STM32F100 + AIS328DQ.
  8. У меня такое случалось, когда вместо отладчика использовался симулятор. Проверьте вкладку настройки отладчика.
  9. А может стоит проверять флаги ошибок приема (FE, NF и т.д.) и сбрасывать их? Т.к. в некоторых случаях прием может "затыкаться" если эти флаги установлены.
  10. STM32F103 Timer + DMA + GPIO

    Попробуйте использовать DMA в режиме MEM2MEM. Хотя 36 МГц получить наверное не удастся, но будет быстрее, чем через таймер. Но учтите, что DMA в этом режиме займет шину целиком. Либо рассмотреть вариант с FSMC.
  11. Во вложении тестовый проект для AD7730 (рабочий, Keil 4.74), Вас интересует все файлы в папке \Lib\AD7730_drv_v1.x. Вдруг пригодится... (Если нужно, то могу отправить описание на микросхему на русском по почте, сюда выложить не удается пишет ошибка -200) Tensometer_1.4.zip
  12. Как вариант можно создать задачу-демон, которая будет иметь монопольный доступ к Вашей структуре. А все остальные задачи будут обращаться к этим данным только через задачу-демон, например с помощью очереди, тем более средства FreeRTOS позволяют это сделать. P.S. если интересно почитайте руководство к FreeRTOS "Mastering_the_FreeRTOS_Real_Time_Kernel-A_Hands-On_Tutorial_Guide" в частности главу "7.4 Gatekeeper Tasks". Данный файл можно найти на официальном сайте.
  13. Может стоит рассмотреть контроллер MSP430FR6047 со "встроенным УЗ измерителем (USS)" для воды? Коллега на работе усиленно изучает этот камень (есть отладочная плата + бесплатное ПО для настройки и изучения периферии USS). Уже проверяли данную связку на проливной, результаты их очень даже устроили... P.S. До этого использовали как раз связку TDC1000 + TDC7200 и там было очень много сложностей, особенно в части подстройки, чтобы определить по какой полуволне измерения считать валидными.
  14. Можно на одном канале сделать. Если настроить захват по обоим фронтам. Как только произошло событие перехода 0->1 значение счетчика сохранится в регистр захвата t1 - это отправная точка. Далее ждем события перехода 1->0, после которого опять сохранится значение счетчика в регистр захвата - это конечная точка t2. Потом "беззнаковое" вычитание t2 - t1 даст длительность периода в "тиках" таймера. Если будут переполнения, то считать количество переполнений n, и тогда длительность измеряемого периода увеличится на n * разрядность таймера. У меня на F3 так без проблем работает. А т.к. периферия у stm одинаковая почти, то и на F0 скорее всего прокатит. Можно пойти дальше и сделать ведомый таймер, который будет считать количество переполнений таймера-мастера...
  15. Не обновляется регистр CNT

    Nosaer, согласно документации, запись TIM2->EGR = TIM_EGR_UG приводит к сбросу счетчика таймера, если он настроен на режим счета "вверх" или режим "выровненный по центру", иначе его значение инициализируется величиной из регистра ARR.