STM Урок 45. Подключаем гироскоп LSM6DS0. Часть 2



Урок 45

 

Часть 2

 

Подключаем гироскоп LSM6DS0

 

В предыдущей части нашего урока мы написали все макросы, которые внесли удобства в чтение и написание кода, написали функцию инициализации и проверили её на практике.

Добавим ещё одну функцию Gyro_GetXYZ, предназначенную для опроса осей гироскопа. Сделаем её полностью на основе подобной для акселерометра (Accel_GetXYZ), скопировав в функцию также и весь код. Исправим код, используя в опросе регистры, предназначенные именно для чтения осей гироскопа

 

//———————————————

void Gyro_GetXYZ(int16_t* pData)

{

        uint8_t buffer[6];

        uint8_t i=0;

        buffer[0]=Accel_IO_Read(0xD6,LSM6DS0_ACC_GYRO_OUT_X_L_G);

        buffer[1]=Accel_IO_Read(0xD6,LSM6DS0_ACC_GYRO_OUT_X_H_G);

        buffer[2]=Accel_IO_Read(0xD6,LSM6DS0_ACC_GYRO_OUT_Y_L_G);

        buffer[3]=Accel_IO_Read(0xD6,LSM6DS0_ACC_GYRO_OUT_Y_H_G);

        buffer[4]=Accel_IO_Read(0xD6,LSM6DS0_ACC_GYRO_OUT_Z_L_G);

        buffer[5]=Accel_IO_Read(0xD6,LSM6DS0_ACC_GYRO_OUT_Z_H_G);

        for(i=0;i<3;i++)

        {

                pData[i] = ((int16_t)((uint16_t)buffer[2*i+1]<<8)+buffer[2*i]);

        }

}

 

 

Функцию Accel_ReadAcc также для порядка переименуем в более универсальную – AccelGyro_Read. То же самое проделаем и с прототипом данной функции

 

//———————————————

void AccelGyro_Read(void)

{

        int16_t buffer[3] = {0};

 

Исправим в ней строку

 

        int16_t xval, yval, zval;

        Gyro_GetXYZ(buffer);

 

Раскомментируем строки кода, отвечающие за вывод считанной с осей информации в текстовый вид, а в графический закомментируем

 

        sprintf(str1,»X:%06d Y:%06d Z:%06drn», xval, yval, zval);

        HAL_UART_Transmit_DMA(&huart2, (uint8_t*)str1,strlen(str1));

//        buf2[0]=0x11;

//        buf2[1]=0x55;

//        buf2[2]=(uint8_t)(xval>>8);

//        buf2[3]=(uint8_t)xval;

//        buf2[4]=(uint8_t)(yval>>8);

//        buf2[5]=(uint8_t)yval;

//        buf2[6]=(uint8_t)(zval>>8);

//        buf2[7]=(uint8_t)zval;

//        HAL_UART_Transmit_DMA(&huart2,buf2,8);

 

Здесь тоже немного исправим код

 

        if(zval>500)

        {

 

В бесконечном цикле в функции main() раскомментируем и исправим вызов функции

 

  /* USER CODE BEGIN 3 */

                AccelGyro_Read();

 

 

Соберем код, прошьем контроллер и посмотрим: при вращении платы против часовой стрелки относительно вертикальной оси должен загораться зелёный светодиод. Затем проверим данные в мониторе порта Arduino. Должен быть вот такой резултьтат.

 

image09

 

Попробуем немного скорректировать показания, т.к. если не крутить плату, то показания несколько будут отличаться от 0.

        xval=buffer[0]-103;

        yval=buffer[1]-47;

        zval=buffer[2]-41;

У меня получились такие цифры, у Вас, возможно будут другие. Пока другого способа калибровки датчика я не нашел.

Соберем проект и еще раз посмотрим показания.

Теперь наоборот, раскомментируем код для визуализации, а для текстового вывода закомментируем.

 

        zval=buffer[2];

//        sprintf(str1,»X:%06d Y:%06d Z:%06drn», xval, yval, zval);

//        HAL_UART_Transmit_DMA(&huart2, (uint8_t*)str1,strlen(str1));

        buf2[0]=0x11;

        buf2[1]=0x55;

        buf2[2]=(uint8_t)(xval>>8);

        buf2[3]=(uint8_t)xval;

        buf2[4]=(uint8_t)(yval>>8);

        buf2[5]=(uint8_t)yval;

        buf2[6]=(uint8_t)(zval>>8);

        buf2[7]=(uint8_t)zval;

        HAL_UART_Transmit_DMA(&huart2,buf2,8);

 

Соберем код и прошьем контроллер. Запустим сначала программу NS Port Monitor. Покрутим плату. Результат должен быть таким (нажмите на картинку для увеличения изображения):

 

image08_0500

 

Теперь запустим ещё одну программу, NS Port Visual. Также покрутим плату. Результат должен быть таким:

 

image10

 

 

Предыдущая часть Программирование МК STM32 Следующий урок

 

Исходный код

 

Техническая документация на датчик

Техническая документация на плату расширения

Программа Hyper Terminal

Программа NS Port Monitor

Программа NS Port Visual

 

 

Отладочную плату можно приобрести здесь Nucleo STM32F401RE

Оценочную плату можно приобрести здесь STM32 X-NUCLEO-IKS01A1

 

 

Смотреть ВИДЕОУРОК

 

STM32 Подключаем гироскоп LSM6DS0

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*