У меня есть цифровой акселерометр VTI CMA3000-D01 , и я управляю им через SPI с чипа Texas Instruments CC2540, используя встроенный микроконтроллер 8051.
В даташите на CMA3000 упоминается, что в режиме 2g частота дискретизации на выходе составляет 400 Гц или 100 Гц (в зависимости от того, как настроен акселерометр). Также есть «Режим обнаружения движения», который работает с частотой дискретизации 10 Гц.
Что я хотел бы сделать, так это изменить конфигурацию акселерометра на режим 400 Гц или режим 100 Гц и измерить частоту на осциллографе, чтобы убедиться, что я действительно сделал такое изменение. Это в основном для меня, чтобы лучше понять, как проводить полезные измерения с помощью осциллографа, и лучше понять SPI.
Я недавно купил осциллограф Rigol DS1052E, поэтому я хотел бы знать, как подключить его к моему акселерометру для измерения выходной частоты, и какие настройки мне нужно использовать на осциллографе, чтобы сделать такие показания, и если это даже возможно.
Я пробовал подключить щуп (при 10-кратном затухании) на осциллографе к проводу SCK на акселерометре и проводу заземления от щупа к земле на печатной плате, затем нажать кнопку «Авто» на осциллографе, но это дает мне сигнал с частотой и напряжением, которые прыгают вокруг:
Я ожидал увидеть прямоугольную волну с частотой 100 Гц (это то, на что в настоящее время настроен акселерометр в моем программном обеспечении), но я получил синусоидальную волну. Теперь приведенные выше изображения могут быть на самом деле правильными, но я недостаточно знаю, чтобы определить, так ли это, поэтому я надеялся, что кто-то, более осведомленный в отношении SPI и осциллографов, сможет дать мне какое-то направление или сказать мне, что Мне нужно читать, чтобы лучше понять этот материал.
Также было бы здорово узнать, как читать выходные данные порта MISO на акселерометре, чтобы увидеть, какие данные отправляются обратно в MCU. Я не уверен, можно ли это сделать только с помощью области, или мне понадобится логический анализатор, чтобы увидеть эти данные. Заранее спасибо.
Проблема в том, что вы используете цифровой акселерометр MEMS, и то, что вы читаете, является выводом SCK (последовательные часы) последовательного интерфейса. Чтобы функционировать, этот датчик должен быть связан с микроконтроллером, который устанавливает для него частоту дискретизации, диапазон и так далее.
Таким образом, вы не должны ожидать прямоугольную волну с частотой 100 Гц, а быстрый (в зависимости от битрейта шины) всплеск, соответствующий передаче. Расширяя шип, если прицел достаточно быстрый, вы должны увидеть прямоугольную волну часов внутри шипа.
Более того, если вы неправильно настроите интерфейс SPI, UC не будет генерировать часы (датчик работает в ведомом режиме), и вы не будете считывать никаких значений.
Если вы хотите увидеть сигнал частотой 100 Гц, вы можете проверить контакт Int, который отправляет прерывание на микроконтроллер каждый раз, когда доступна мера. Затем, если вы правильно обработаете прерывание от микроконтроллера, вы увидите импульс, соответствующий передаче, каждые 10 мс (100 Гц).
Но убедитесь, что вы не используете обнаружение движения; в этом случае прерывание будет генерироваться только при измерении ускорения.
Для чтения данных на порту SPI самое простое — настроить связь с датчиком; в противном случае он вообще не будет отправлять данные. Затем проверьте, получает ли микроконтроллер прерывания и считывает ли он данные, которые дает датчик; вы можете использовать таймер, чтобы добавить метку времени к значениям и проверить частоту их появления.
(все еще в процессе)
Спасибо за ответ, clabacchio, я попробовал некоторые из ваших предложений и сегодня смог получить более значимые измерения. Выяснилось, что пример приложения, которое я использовал для проверки вывода SCK, будет выводить сигнал только тогда, когда оно «подключено» к другому устройству (это приложение Bluetooth с низким энергопотреблением). Как только я подключился к другому устройству, контакт SCK на акселерометре начал давать мне ожидаемые измерения.
Как вы объяснили, это была не 100 Гц, а скорость передачи данных, на которую был установлен интерфейс SPI на микроконтроллере. Чтобы убедиться в этом, я изменил скорость передачи данных на 230 400 бит/с, а затем провел измерения с помощью осциллографа. Вот скриншот результата:
Как видите, частота составляет 230,4 кГц, именно то, что я и ожидал.
Я также попытался проверить контакт INT и получил следующую волну:
Эта волна продолжала прыгать, но в основном оставалась между 19 и 20 Гц. Я не совсем уверен, что с этим делать, поскольку акселерометр был настроен на работу в режиме 100 Гц из моего кода, поэтому я не знаю, почему я получаю 20 Гц.
Кроме того, вот 2 снимка с порта MISO, которые показали частоту 20 Гц при 100 мс и 480,8 кГц при 1,0 мкс:
Мне любопытно, почему частота подскочила с 20 Гц до 480,8 кГц только за счет изменения временной шкалы. Я думал, что частота может стать немного более точной, когда я увеличил детализацию шкалы времени, но я не ожидал резкого изменения с 20 Гц до 480 кГц. Я думаю, что одно из этих измерений должно быть неправильным, но я не уверен, почему. Это, вероятно, значение 20 Гц, поскольку 480 кГц аналогичны скорости передачи бит/с, которую я использовал для этого конкретного измерения (в микроконтроллере она была установлена на 480 500 бит/с).
В любом случае, как я уже сказал, мне удалось провести одно очень точное измерение, поэтому я доволен результатами, но мне было бы очень интересно услышать какие-либо советы относительно моих показаний INT или MISO.
Еще раз спасибо за вашу помощь, это очень ценится!
W5VO
Келленджб