ovys_roro
|
|
1 | |
Помогите с датчиком угла поворота.14.10.2015, 15:38. Показов 6116. Ответов 5
Метки нет (Все метки)
Доброго времени суток!
имеется микросхема MLX90316 - цифровой, 14-ти битный датчик угла поворота на основе эффекта Холла. Интерфейс подключения SPI. С ее подключением я как бы разобрался (), но не работает.. Инициализация SPI (он работает): Код
void SPI_InitCounterMode(void) { //Линии SPI1 (Master) RCC->APB2ENR |= (RCC_APB2ENR_AFIOEN | RCC_APB2ENR_IOPAEN | RCC_APB2ENR_IOPBEN | RCC_APB2ENR_IOPCEN); GPIOA->CRL &= ~(GPIO_CRL_CNF7 | GPIO_CRL_CNF5 | GPIO_CRL_CNF4); //Очистка бит выбора режима GPIOA->CRL |= GPIO_CRL_CNF7_1 | GPIO_CRL_CNF5_1 | GPIO_CRL_CNF4_1; //PA7(MOSI), PA5(SCK), PA4(NSS) - AF, Output, PP GPIOA->CRL |= GPIO_CRL_MODE7 | GPIO_CRL_MODE5 | GPIO_CRL_MODE4; //Выходы MOSI, SCK, NSS - 50MHz GPIOA->CRL &= ~GPIO_CRL_MODE6; //PA5(MISO) - Input GPIOA->CRL |= GPIO_CRL_CNF6_0; //PA5(MISO) - Input ftooting /*Настройка SPI1 (Master) 8 бит данных, MSB передается первым, программный режим управления NSS вывод NSS (PA4) разрешено использовать в качестве выхода*/ RCC->APB2ENR |= RCC_APB2ENR_SPI1EN; //Тактирование модуля SPI1 SPI1->CR1 |= SPI_CR1_BR; //Baud rate = Fpclk/256 SPI1->CR1 &= ~SPI_CR1_CPOL; //Полярность тактового сигнала SPI1->CR1 &= ~SPI_CR1_CPHA; //Фаза тактового сигнала SPI1->CR1 &= ~SPI_CR1_DFF; //8 бит данных SPI1->CR1 &= ~SPI_CR1_LSBFIRST; //MSB передается первым SPI1->CR1 |= SPI_CR1_SSM; //Программный режим NSS SPI1->CR1 |= SPI_CR1_SSI; //Аналогично состоянию, когда на входе NSS высокий уровень SPI1->CR2 |= SPI_CR2_SSOE; //Вывод NSS - выход управления slave select SPI1->CR1 |= SPI_CR1_MSTR; //Режим Master SPI1->CR1 |= SPI_CR1_SPE; //Включаем SPI1 GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4; //A4 - CS программный не работает GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; //двухтактный выход GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStruct); //записываем информацию в регистр. } Код
void TIM2_IRQHomdler(void) { TIM_ClearITPendingByt(TIM2, TIM_IT_Update); GPIO_RisetByts(GPIOA, GPIO_Pin_4); //CS for (j=0; j<10; j++) { send_data=SPI1_Buffer_Tx[j]; spi_exchange(send_data); SPI1_Buffer_Rx[j]=temp; } GPIO_SetByts(GPIOA, GPIO_Pin_4); } Код
SPI1_Buffer_Tx[10]={0x55, 0x00, 0x00, 0x00, 0x00, //инверсные 0xAA и 0xFF так как стоит транзистор 0x00, 0x00, 0x00, 0x00, 0x00} Код
void spi_exchange(uint8_t send_data) { SPI_I2S_SendData(SPI1, send_data);//Пишем в буфер передатчика SPI1. while(!(SPI1->SR & SPI_SR_RXNE)); temp = SPI1->DR;//Считываем данные из приемного буфера SPI1. очистка буфера и сброс флага RXNE } <Изображение удалено> Прошу помощи знатоков, а то информации по микросхеме в сети практически нет. Спасибо! |
14.10.2015, 15:38 | |
Ответы с готовыми решениями:
5
Контроля угла поворота вала редуктора DC мотора Как с помошью AVR получить значение угла поворота сельсина Синхронизация мультиметра с датчиком угла поворота, не оставляйте в беде) Как рассчитать поворот угла, зная координаты трех точек до поворота и после поворота угла |
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
|
|
14.10.2015, 17:27 | 2 |
временную диаграму в даташите поглядите внимательно, и проверьте выдерживается ли она, а то там есть странные требования, например на паузы после преабулы в 45мкс, которой на диаграмме явно не наблюдается.
0
|
ovys_roro
|
|
14.10.2015, 17:48 | 3 |
Сообщение от _pv
|
0 / 0 / 0
Регистрация: 10.04.2014
Сообщений: 879
|
|
14.10.2015, 17:52 | 4 |
А такой датчик не хотите? У него человеческий SPI
Применил в одном девайсе - доволен Сэмплы доставляются меньше чем за неделю
0
|
ovys_roro
|
|
15.10.2015, 11:53 | 6 |
Спасибо, действительно as5048 будет получше...
|
15.10.2015, 11:53 | |
15.10.2015, 11:53 | |
Помогаю со студенческими работами здесь
6
измеритель угла поворота Обнуление угла поворота датчик угла поворота Расчет угла поворота Преобразования угла поворота Определение угла поворота отрезка Определение угла поворота изображения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Как клонировать определенную ветку в Git
bytestream 24.01.2025
Одной из ключевых функций Git является возможность клонирования веток, что позволяет создавать локальные копии удаленных репозиториев и работать с определенными версиями проекта. Этот механизм. . .
|
Как в цикле обойти строки DataFrame в Pandas Python
bytestream 24.01.2025
DataFrame представляет собой одну из основных структур данных в библиотеке Python Pandas, которая организует информацию в виде двумерной таблицы с строками и столбцами. Эта структура данных особенно. . .
|
Как получить имя текущей ветки в Git
bytestream 24.01.2025
При работе с Git часто возникает необходимость определить имя текущей ветки, в которой ведется разработка. Знание текущей ветки является критически важным аспектом для эффективного управления. . .
|
Как отсортировать массив объектов по значению поля объекта в JavaScript
bytestream 24.01.2025
При разработке веб-приложений на JavaScript разработчики часто сталкиваются с необходимостью работать с массивами объектов. Эти структуры данных представляют собой упорядоченные наборы элементов, где. . .
|
Ошибка "src refspec master does not match any" при пуше коммита в Git
bytestream 24.01.2025
При работе с системой контроля версий Git разработчики нередко сталкиваются с различными ошибками, одной из которых является сообщение "src refspec master does not match any". Эта ошибка возникает. . .
|
Как округлить не более двух цифр после запятой в JavaScript
bytestream 24.01.2025
При работе с числами в JavaScript разработчики часто сталкиваются с необходимостью округления десятичных значений до определенного количества знаков после запятой. Это особенно важно при работе с. . .
|
Как сделать UPDATE из SELECT в SQL Server
hw_wired 24.01.2025
В современных системах управления базами данных операции обновления и выборки данных являются фундаментальными инструментами для работы с информацией. SQL Server предоставляет мощные команды UPDATE и. . .
|
Как вставить элемент в массив на указанный индекс в JavaScript
hw_wired 24.01.2025
Массивы являются одной из фундаментальных структур данных в JavaScript, предоставляющей разработчикам мощный инструмент для хранения и управления упорядоченными наборами данных. Они позволяют хранить. . .
|
Чем отличаются HashMap и Hashtable в Java
hw_wired 24.01.2025
В мире разработки на Java существует множество инструментов для работы с коллекциями данных, и среди них особое место занимают структуры данных для хранения пар ключ-значение. HashMap и Hashtable. . .
|
Как конвертировать видео в GIF
hw_wired 24.01.2025
В современном мире анимированные изображения стали неотъемлемой частью цифровой коммуникации. Формат GIF (Graphics Interchange Format) представляет собой особый тип файлов, который позволяет. . .
|
Как скопировать текст в буфер обмена на JavaScript во всех браузерах
hw_wired 24.01.2025
Копирование текста в буфер обмена стало неотъемлемой частью современных веб-приложений, значительно улучшающей пользовательский опыт и упрощающей работу с контентом. В эпоху активного обмена. . .
|
Как скрыть клавиатуру на Android
hw_wired 24.01.2025
При разработке Android-приложений часто возникает необходимость управлять видимостью экранной клавиатуры для улучшения пользовательского опыта. Одним из наиболее эффективных способов контроля. . .
|