реклама на сайте
подробности

 
 
> Работа акселерометра LIS3DH с STM32
AlexeyK
сообщение Aug 4 2015, 14:04
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 77
Регистрация: 11-04-15
Пользователь №: 86 181



Написал прогу для инициализации и считывания данных с LIS3DH. Со значениями творится полная ерунда. На одно истинное значение приходится 1-5 ложных (лежащих в пределах -200 до 300). Если данные визуализировать, получается дёрганная кривая. Прерывания не использовал. В чём может быть проблема?

Код Прикрепленный файл  main.rar ( 1.72 килобайт ) Кол-во скачиваний: 102

Прикрепленное изображение


Сообщение отредактировал AlexeyK - Aug 4 2015, 14:05
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 17)
stas00n
сообщение Aug 4 2015, 17:09
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 181
Регистрация: 26-11-10
Пользователь №: 61 198



L и Н регистры не перепутаны часом?
Go to the top of the page
 
+Quote Post
AlexeyK
сообщение Aug 4 2015, 17:28
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 77
Регистрация: 11-04-15
Пользователь №: 86 181



stas00n, Поменял, стало ещё хуже.
Текущие значения близки к правде, но я совсем не понимаю почему кривая скачет.
Go to the top of the page
 
+Quote Post
smalcom
сообщение Aug 4 2015, 18:31
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718



вы неправильно про работу SPI прочитали

Код
    /// \fn uint8_t RW(const uint8_t pData)
    /// Запись-чтение данных.
    /// Данная функция записывает значение в буфер отправки SPI. По окончанию
    /// отправки возвращает значение принятое по SPI.
    /// \param pData - значение отправляемое по SPI.
    /// \return значение принятое по SPI.
    uint8_t RW(const uint8_t pData)
    {
        SPI_I2S_SendData(mSPI, pData);
        while(SPI_I2S_GetFlagStatus(mSPI, SPI_I2S_FLAG_RXNE) == RESET);

        return SPI_I2S_ReceiveData(mSPI);
    }
Go to the top of the page
 
+Quote Post
AlexeyK
сообщение Aug 4 2015, 18:58
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 77
Регистрация: 11-04-15
Пользователь №: 86 181



smalcom Обоснуйте почему я неправильно с SPI работаю.
На всякий случай попробовал вариант с флагом SPI_I2S_FLAG_RXNE, но это не поменяло абсолютно ничего.
Go to the top of the page
 
+Quote Post
veteq
сообщение Aug 4 2015, 20:06
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 5-12-06
Пользователь №: 23 160



Наверное косяк с L и H, я помню что они там хитро расчитываются, и вроде бы даже косяк в даташите был... Такая тема уже была на форуме
Upd: там не должно быть нолей в плоскости паралелльной к земле должно быть 1g

Сообщение отредактировал veteq - Aug 4 2015, 20:10
Go to the top of the page
 
+Quote Post
AlexeyK
сообщение Aug 4 2015, 20:27
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 77
Регистрация: 11-04-15
Пользователь №: 86 181



veteq Не нашёл я тему где бы обсуждалась моя проблема, буду признателен если дадите ссылку.
По поводу оси Z понятно, но не понятно это
Прикрепленное изображение
Притяжение земли явно просматривается, но по непонятным причинам появляются левые значение которые лежат около нуля как в большую так и в меньшую сторону.

По поводу L и H вроде всё понятно и самое главное что оно работает кое как, значит косяк, как мне кажется, не в этом.

Сообщение отредактировал AlexeyK - Aug 4 2015, 20:31
Go to the top of the page
 
+Quote Post
smalcom
сообщение Aug 4 2015, 20:53
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718



Цитата
Обоснуйте почему я неправильно с SPI работаю.

Эммм. У меня хорошее настроение, подсказка 50 на 50 ))

Как вы записываете
Код
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1, data);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
return SPI_I2S_ReceiveData(SPI1);


Как надо
Код
SPI_I2S_SendData(mSPI, pData);
while(SPI_I2S_GetFlagStatus(mSPI, SPI_I2S_FLAG_RXNE) == RESET);
return SPI_I2S_ReceiveData(mSPI);


Ещё осталась "звонок другу"(цитата из даташита) )) и "помошь зала"(разжовка цитаты из даташита)

зы. ванга подсказывает, что у вас нет логического анализатора
Go to the top of the page
 
+Quote Post
AlexeyK
сообщение Aug 4 2015, 21:08
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 77
Регистрация: 11-04-15
Пользователь №: 86 181



smalcom Как я писал выше, я пробовал ваш вариант и он не помог.
Go to the top of the page
 
+Quote Post
smalcom
сообщение Aug 5 2015, 09:32
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718



получилось что-то?
Go to the top of the page
 
+Quote Post
AlexeyK
сообщение Aug 5 2015, 12:17
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 77
Регистрация: 11-04-15
Пользователь №: 86 181



Пока нет. Сейчас буду пробовать настраивать работу по прерыванию и включу фильтр.
Go to the top of the page
 
+Quote Post
veteq
сообщение Aug 5 2015, 13:49
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 5-12-06
Пользователь №: 23 160



Для начала попробовать проверить работу SPI, постоянно вычитывая WHO_AM_I - 0x0F

У меня на пинах 5,6,7 подтяжка на землю стоит, и SPI SPI_CPHA_1Edge и SPI_CPOL_Low

CODE

signed short value;
unsigned char *valueL = (unsigned char *) (&value);
unsigned char *valueH = ((unsigned char *) (&value) + 1);

*valueL = SPI.CommandReceived[5];
*valueH = SPI.CommandReceived[6];

if ((value & (1 << 15)) != 0) {
MEMS.Z = (value >> 4) | 0xF000;
}
else {
MEMS.Z = value >> 4;
}

Go to the top of the page
 
+Quote Post
Aner
сообщение Aug 5 2015, 15:31
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 4 869
Регистрация: 28-02-08
Из: СПБ
Пользователь №: 35 463



LIS3DH сами паяли или готовый модуль использовали? Если паяли сами, как получится, то могли термо перекос обеспечить. Было уменя такое при первых экспериментах. Графики похожие, как у вас тогда получились.
Go to the top of the page
 
+Quote Post
AlexeyK
сообщение Aug 5 2015, 17:49
Сообщение #14


Частый гость
**

Группа: Участник
Сообщений: 77
Регистрация: 11-04-15
Пользователь №: 86 181



veteq SPI работает корректно. WHO_AM_I возвращает значение 3F. B И данные из акселерометра приходят правильные, явно видно когда я перемещаю микросхему, только вот непонятно откуда берутся бредовые данные. Думал может в регистрах данные не успевают обновится, но когда увеличивал скорость обновления данных в акселерометре ситуацию это не меняло.

Aner, Микруха эта установлена на отладочной плате stmf4 Discovery. По поводу микросхемы могу точно сказать что она рабочая, проверял её с другой прошивкой мк. Также просил друга на своей плате погонять, у него тоже самое происходит. Проблема однозначно в коде, а вот какая понять не могу.

Сообщение отредактировал AlexeyK - Aug 5 2015, 17:58
Go to the top of the page
 
+Quote Post
veteq
сообщение Aug 6 2015, 12:34
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 5-12-06
Пользователь №: 23 160



Как вариант попробовать еще в отладчике пошагать по кольцу функциям передачи по SPI , а то ощущение создается что SPI как-то не так работает

вот по этим функциям пройтись отладчиком, каждый шаг и постоянно,(т.е. на каждую функцию будет уходить около секунды) будут ли всплывать нули?

while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
SPI_I2S_SendData(SPI1, data);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
return SPI_I2S_ReceiveData(SPI1);
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Aug 6 2015, 13:02
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



а корректно по флагу занято определять готовности SPI принять очередной байт?
Go to the top of the page
 
+Quote Post
AlexeyK
сообщение Aug 9 2015, 09:12
Сообщение #17


Частый гость
**

Группа: Участник
Сообщений: 77
Регистрация: 11-04-15
Пользователь №: 86 181



Проблема решена. Ошибка была достаточно скользкой. Тип переменной старших и младших байт должен быть uint8_t вместо int8_t.
Go to the top of the page
 
+Quote Post
PeterBr
сообщение Apr 8 2016, 00:45
Сообщение #18





Группа: Новичок
Сообщений: 4
Регистрация: 8-04-16
Пользователь №: 91 195



Пример кода работы с Акселерометром STM32. Работа с акселерометром
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 08:15
Рейтинг@Mail.ru


Страница сгенерированна за 0.015 секунд с 7
ELECTRONIX ©2004-2016