0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

驅(qū)動LSM6DS3TR-C實(shí)現(xiàn)高效運(yùn)動檢測與數(shù)據(jù)采集(1)----獲取ID

嵌入式單片機(jī)MCU開發(fā) ? 來源:嵌入式單片機(jī)MCU開發(fā) ? 作者:嵌入式單片機(jī)MCU開 ? 2023-11-13 15:45 ? 次閱讀

概述

本文將介紹如何驅(qū)動和利用LSM6DS3TR-C傳感器,實(shí)現(xiàn)精確的運(yùn)動感應(yīng)功能。LSM6DS3TR-C是一款先進(jìn)的6軸慣性測量單元(IMU),集成了三軸加速度計和三軸陀螺儀,可用于測量和檢測設(shè)備的加速度、姿態(tài)和運(yùn)動。

本文將提供LSM6DS3TR-C的基本介紹,包括其技術(shù)規(guī)格和主要特性。接下來,我們將詳細(xì)討論如何驅(qū)動LSM6DS3TR-C傳感器,包括硬件連接和軟件配置。我們將介紹常見的驅(qū)動方法和庫,以幫助讀者快速上手并實(shí)現(xiàn)基本的運(yùn)動感應(yīng)功能。

通過閱讀本文,讀者將獲得全面的指導(dǎo),以驅(qū)動和利用LSM6DS3TR-C傳感器,實(shí)現(xiàn)準(zhǔn)確、可靠的運(yùn)動感應(yīng)功能。

最近在弄ST和瑞薩RA的課程,需要樣片的可以加群申請:6_15061293 。
參考文檔:
[https://github.com/STMicroelectronics/STMems_Standard_C_drivers/tree/master/lsm6ds3tr-c_STdC]

[https://github.com/STMicroelectronics/STMems_Standard_C_drivers/blob/master/lsm6ds3tr-c_STdC/examples/lsm6ds3tr_c_read_data_polling.c]

在這里插入圖片描述

視頻教學(xué)

[https://www.bilibili.com/video/BV19P411Q7fP/

樣品申請

[https://www.wjx.top/vm/OhcKxJk.aspx#]

完整代碼下載

[https://download.csdn.net/download/qq_24312945/87921267]

通信模式

對于LSM6DS3TR-C,有兩種模式mode1和mode2,這兩種模式都可以使用SPI或者IIC進(jìn)行通訊。
其中mode2可以通過IIC控制其他的從設(shè)備傳感器。

在這里插入圖片描述

管腳定義

在這里插入圖片描述

在這里插入圖片描述

IIC通信模式

上圖可以得知,在使用IIC通訊模式的時候,SA0是用來控制IIC的地址位的。
對應(yīng)的IIC接口如下所示。
主要使用的管腳為CS、SCL、SDA、SA0。

在這里插入圖片描述

對于IIC的地址,可以通過SDO/SA0引腳修改。SDO/SA0引腳可以用來修改設(shè)備地址的最低有效位。如果SDO/SA0引腳連接到電源電壓,LSb(最低有效位)為'1'(地址1101011b);否則,如果SDO/SA0引腳連接到地線,LSb的值為'0'(地址1101010b)。

在這里插入圖片描述

具體地址如下所示。

在這里插入圖片描述

速率

該模塊支持的速度為普通模式(100k)和快速模式(400k)。

在這里插入圖片描述

LSM6DS3TR-C在Mode 1下參考圖

在這里插入圖片描述

生成STM32CUBEMX

用STM32CUBEMX生成例程,這里使用MCU為STM32G030C8。
配置時鐘樹,配置時鐘為64M。

在這里插入圖片描述

串口配置

查看原理圖,PA9和PA10設(shè)置為開發(fā)板的串口。

在這里插入圖片描述

配置串口。

在這里插入圖片描述

IIC配置

在這里插入圖片描述

配置IIC為快速模式,速度為400k。

在這里插入圖片描述

串口重定向

打開魔術(shù)棒,勾選MicroLIB

在這里插入圖片描述

在main.c中,添加頭文件,若不添加會出現(xiàn) identifier "FILE" is undefined報錯。

/* USER CODE BEGIN Includes */
#include "stdio.h"
/* USER CODE END Includes */

函數(shù)聲明和串口重定向:

/* USER CODE BEGIN PFP */
int fputc(int ch, FILE *f){
	HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);
	return ch;
}
/* USER CODE END PFP */

IIC讀函數(shù)

參考例程序中對應(yīng)的驅(qū)動程序為platform_read(),如下所示。

在這里插入圖片描述

由上面表格可以得知,地址為 0x6A(?0110 1010?),如果是讀操作,那么具體的地址為D5(1101 0101)。

#define LSM6DS3TRC_I2CADDR 0x6A
/***************************************************************************************************************
LSM6DS3TRC Read Command
****************************************************************************************************************/
void LSM6DS3TRC_ReadCommand(uint8_t reg_addr, uint8_t *rev_data, uint8_t length)
{
	if (lsm6ds3trc_mode == LSM6DS3TRC_MODE_I2C)
	{
		HAL_I2C_Mem_Read(&hi2c1, LSM6DS3TRC_I2CADDR < < 0x01, reg_addr, 1, rev_data, length, 100);
	}

}

IIC寫函數(shù)

參考例程序中對應(yīng)的驅(qū)動程序為platform_write(),如下所示。

在這里插入圖片描述

由上面表格可以得知,地址為 0x6A(?0110 1010?),如果是寫操作,那么具體的地址為D4(1101 0100)。

#define LSM6DS3TRC_I2CADDR 0x6A
/***************************************************************************************************************
LSM6DS3TRC Write Command
****************************************************************************************************************/
void LSM6DS3TRC_WriteCommand(uint8_t reg_addr, uint8_t *send_data, uint16_t length)
{
	if (lsm6ds3trc_mode == LSM6DS3TRC_MODE_I2C)
		HAL_I2C_Mem_Write(&hi2c1, LSM6DS3TRC_I2CADDR < < 0x01, reg_addr, 1, send_data, length, 100);

}

參考程序初始化

在這里插入圖片描述

獲取ID

參考例程序中對應(yīng)的獲取ID驅(qū)動程序,如下所示。

在這里插入圖片描述

可以通過獲取WHO_AM_I(0Fh)地址的值來判斷是否為LSM6DS3TR-C,如果正確,那么讀取的值應(yīng)該為6A(?01101010?)。

在這里插入圖片描述

讀取函數(shù)如下所示。

#define LSM6DS3TRC_WHO_AM_I		0x0F
/***************************************************************************************************************
LSM6DS3TRC Get id
****************************************************************************************************************/
bool LSM6DS3TRC_GetChipID(void)
{
	uint8_t buf = 0;

	LSM6DS3TRC_ReadCommand(LSM6DS3TRC_WHO_AM_I, &buf, 1);
	if (buf == 0x6a)
		return true;
	else
		return false;
}

具體波形如下所示。

在這里插入圖片描述

系統(tǒng)復(fù)位

系統(tǒng)復(fù)位可以操作寄存器CTRL3_C (12h)。

在這里插入圖片描述

由下面的文檔說明可以得知,重置的話可以將BOOT置為1,之后等待15ms,如果設(shè)置為高性能模式的話,需要將CTRL3_C寄存器的SW_RESET位設(shè)為1,等待50微秒(或等到CTRL3_C寄存器的SW_RESET位返回0),為了避免沖突,重啟和軟件重置不能同時執(zhí)行(不要同時將CTRL3_C寄存器的BOOT位和SW_RESET位設(shè)為1)。上述流程必須按順序執(zhí)行,所以需要多次操作CTRL3_C (12h)。

在這里插入圖片描述

參考例程序中對應(yīng)的復(fù)位驅(qū)動程序和等待復(fù)位成功函數(shù),如下所示。

在這里插入圖片描述

復(fù)位代碼如下所示。

#define LSM6DS3TRC_CTRL3_C		0x12
/***************************************************************************************************************
LSM6DS3TRC reboot and reset register
****************************************************************************************************************/
void LSM6DS3TRC_Reset(void)
{
	uint8_t buf[1] = {0};
	//reboot modules
	buf[0] = 0x80;
	LSM6DS3TRC_WriteCommand(LSM6DS3TRC_CTRL3_C, buf, 1);//BOOT- >1
	HAL_Delay(15);

	//reset register
	LSM6DS3TRC_ReadCommand(LSM6DS3TRC_CTRL3_C, buf, 1);//讀取SW_RESET 狀態(tài)
	buf[0] |= 0x01;
	LSM6DS3TRC_WriteCommand(LSM6DS3TRC_CTRL3_C, buf, 1);//將CTRL3_C寄存器的SW_RESET位設(shè)為1 
	while (buf[0] & 0x01)
		LSM6DS3TRC_ReadCommand(LSM6DS3TRC_CTRL3_C, buf, 1);//等到CTRL3_C寄存器的SW_RESET位返回0
}

具體波形如下所示。

在這里插入圖片描述

在這里插入圖片描述

設(shè)置BDU

如果讀取加速度計/陀螺儀數(shù)據(jù)特別慢,建議在CTRL3_C寄存器中將BDU(塊數(shù)據(jù)更新)位設(shè)置為1。建議在CTRL3_C寄存器中將BDU(塊數(shù)據(jù)更新)位設(shè)置為1。

在這里插入圖片描述

在這里插入圖片描述

參考例程序中對應(yīng)的設(shè)置BDU程序函數(shù),如下所示。

在這里插入圖片描述

設(shè)置BDU代碼如下所示。

#define LSM6DS3TRC_CTRL3_C		0x12
/***************************************************************************************************************
LSM6DS3TRC Set Block Data Update
****************************************************************************************************************/
void LSM6DS3TRC_Set_BDU(bool flag)
{
	uint8_t buf[1] = {0};
	LSM6DS3TRC_ReadCommand(LSM6DS3TRC_CTRL3_C, buf, 1);

	if (flag == true)
	{
		buf[0] |= 0x40;
		LSM6DS3TRC_WriteCommand(LSM6DS3TRC_CTRL3_C, buf, 1);
	}
	else
	{
		buf[0] &= 0xbf;
		LSM6DS3TRC_WriteCommand(LSM6DS3TRC_CTRL3_C, buf, 1);
	}

	LSM6DS3TRC_ReadCommand(LSM6DS3TRC_CTRL3_C, buf, 1);
}

具體波形如下所示。

在這里插入圖片描述

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 傳感器
    +關(guān)注

    關(guān)注

    2551

    文章

    51097

    瀏覽量

    753524
  • 陀螺儀
    +關(guān)注

    關(guān)注

    44

    文章

    784

    瀏覽量

    98709
  • 數(shù)據(jù)采集
    +關(guān)注

    關(guān)注

    39

    文章

    6100

    瀏覽量

    113652
  • 運(yùn)動檢測
    +關(guān)注

    關(guān)注

    0

    文章

    34

    瀏覽量

    12614
  • stm32cubemx
    +關(guān)注

    關(guān)注

    5

    文章

    283

    瀏覽量

    14807
收藏 人收藏

    評論

    相關(guān)推薦

    驅(qū)動LSM6DS3TR-C實(shí)現(xiàn)高效運(yùn)動檢測數(shù)據(jù)采集(6)----FIFO數(shù)據(jù)讀取與配置

    LSM6DS3TR-C是STMicroelectronics公司推出的iNEMO慣性模塊,集成了三軸加速度計和三軸陀螺儀,具備低功耗、強(qiáng)大的運(yùn)動檢測功能。該傳感器支持多種操作模式,并內(nèi)置FIFO
    的頭像 發(fā)表于 07-18 10:58 ?1551次閱讀
    <b class='flag-5'>驅(qū)動</b><b class='flag-5'>LSM6DS3TR-C</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>高效</b><b class='flag-5'>運(yùn)動檢測</b>與<b class='flag-5'>數(shù)據(jù)采集</b>(<b class='flag-5'>6</b>)----FIFO<b class='flag-5'>數(shù)據(jù)</b>讀取與配置

    lsm6ds3tr-c傳感器集合模式無法使用的原因?

    _FUNC_CFG_ACCESS, 0x80, 2);//第一外部I2C從接口的地址,寫0x58,讀0x59bsp_spi_write(LSM6DS3TR_SLV0_ADD, 0x58, 2);//即將寫入_讀取的寄存器
    發(fā)表于 03-07 06:26

    LSM6DS3TR-C使用時工作電流比datasheet上大很多是什么原因?

    使用場景是LSM6DS3TR-C通過SPI一拖四連接單片機(jī),一共有四路這樣的一拖四。 測試時發(fā)現(xiàn)電流很大,感覺有點(diǎn)不對,編寫程序使LSM6DS3TR-C間隔5s一個一個使能,會發(fā)現(xiàn)穩(wěn)壓源的輸出電流從
    發(fā)表于 03-07 08:08

    請問LSM6DS3TRLSM6DS3TR-C兩個型號能否完全兼容?

    LSM6DS3TR停產(chǎn)買不到了,準(zhǔn)備切換LSM6DS3TR-C型號使用。 請問兩者有什么差別?能否直接替換?有成功替換案例嗎?
    發(fā)表于 03-14 06:40

    LSM6DS3TR-C數(shù)據(jù)讀取異常是安利的問題?怎么處理?

    我在使用lsm6ds3tr-c 6軸傳感器時發(fā)現(xiàn),讀取的溫度以及角速度值異常,配置為官方lsm6ds3tr_c_read_data_polling.c文件中
    發(fā)表于 03-19 08:15

    LSM6DS3TR-C長時間讀取后角速度輸出為0是什么原因造成的?

    LSM6DS3TR-C 長時間讀取后角速度輸出為0
    發(fā)表于 03-20 06:28

    LSM6DS3TR-C角速度輸出為0是什么原因?qū)е碌模?/a>

    LSM6DS3TR-C在長時間休眠后(6小時以上),角速度輸出為0,短時間休眠輸出正常,這是什么問題?
    發(fā)表于 03-21 06:27

    LSM6DS3TR-C的FIFO讀取數(shù)據(jù)出錯是什么原因造成的?怎么解決?

    使用LSM6DS3TR-C的FIFO,先獲取了FIFO的WaterM標(biāo)志,該標(biāo)志置位之后再去獲取當(dāng)前存在FIFO緩存的數(shù)據(jù)長度,再去讀取FIFO中對應(yīng)長度的
    發(fā)表于 03-27 06:05

    請問LSM6DS3TR-C有沒有windows下的測試工具?

    LSM6DS3TR-C有沒有windows下的測試工具
    發(fā)表于 05-20 06:22

    LSM6DS3TR-C的低功耗模式和高性能模式有什么區(qū)別

    如果我只在 12.5Hz 下操作加速度計,LSM6DS3TR-C 的低功耗模式和高性能模式有什么區(qū)別?
    發(fā)表于 12-09 06:47

    MEMS LSM6DSD/LSM6DS3/LSM6DSO是否比LSM6DSR具有更好的“抗沖擊性”?

    DSO數(shù)據(jù)表中“對機(jī)械沖擊的高魯棒性使得LSM6DS3TR-C 系統(tǒng)首選設(shè)計師創(chuàng)造和制造可靠的產(chǎn)品..”測試時,我們觀察到 LSM6DSD 和 LSM6DS3 的“抗沖擊性”優(yōu)于
    發(fā)表于 02-02 09:21

    驅(qū)動LSM6DS3TR-C實(shí)現(xiàn)高效運(yùn)動檢測數(shù)據(jù)采集(2)----配置濾波器

    LSM6DS3TR-C中,加速度計和陀螺儀可以獨(dú)立地開啟/關(guān)閉,并且可以擁有不同的ODR和功耗模式。 LSM6DS3TR-C有三種可用的操作模式: ● 僅加速度計活動,陀螺儀處于斷電狀態(tài) ● 僅陀螺儀活動,加速度計處于斷電狀態(tài) ● 加速度計和陀螺儀傳感器同時活動
    的頭像 發(fā)表于 11-14 09:45 ?1055次閱讀
    <b class='flag-5'>驅(qū)動</b><b class='flag-5'>LSM6DS3TR-C</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>高效</b><b class='flag-5'>運(yùn)動檢測</b>與<b class='flag-5'>數(shù)據(jù)采集</b>(2)----配置濾波器

    驅(qū)動LSM6DS3TR-C實(shí)現(xiàn)高效運(yùn)動檢測數(shù)據(jù)采集(3)----獲取傳感器數(shù)據(jù)

    一旦傳感器被正確初始化,可以通過SPI或I2C接口向傳感器發(fā)送讀取命令,并接收傳感器返回的數(shù)據(jù)。這個讀取過程包括獲取LSM6DS3TR傳感器提供的加速度計和陀螺儀
    的頭像 發(fā)表于 11-14 09:59 ?870次閱讀
    <b class='flag-5'>驅(qū)動</b><b class='flag-5'>LSM6DS3TR-C</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>高效</b><b class='flag-5'>運(yùn)動檢測</b>與<b class='flag-5'>數(shù)據(jù)采集</b>(<b class='flag-5'>3</b>)----<b class='flag-5'>獲取</b>傳感器<b class='flag-5'>數(shù)據(jù)</b>

    驅(qū)動LSM6DS3TR-C實(shí)現(xiàn)高效運(yùn)動檢測數(shù)據(jù)采集(4)----上報匿名上位機(jī)實(shí)現(xiàn)可視化

    LSM6DS3TR-C是單芯片“3軸陀螺儀 + 3軸加速度計”的慣性 測量單元(IMU), 五種種可選滿量程的陀螺儀(125/250/500/1000/2000 dps)和加速度計(2/4/8/16
    的頭像 發(fā)表于 11-14 10:05 ?911次閱讀
    <b class='flag-5'>驅(qū)動</b><b class='flag-5'>LSM6DS3TR-C</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>高效</b><b class='flag-5'>運(yùn)動檢測</b>與<b class='flag-5'>數(shù)據(jù)采集</b>(4)----上報匿名上位機(jī)<b class='flag-5'>實(shí)現(xiàn)</b>可視化

    驅(qū)動LSM6DS3TR-C實(shí)現(xiàn)高效運(yùn)動檢測數(shù)據(jù)采集(5)----姿態(tài)解算

    lsm6ds3trc包含三軸陀螺儀與三軸加速度計。 姿態(tài)有多種數(shù)學(xué)表示方式,常見的是四元數(shù),歐拉角,矩陣和軸角。他們各自有其自身的優(yōu)點(diǎn),在不同的領(lǐng)域使用不同的表示方式。在四軸飛行器中使用到了四元數(shù)
    的頭像 發(fā)表于 11-14 10:11 ?833次閱讀
    <b class='flag-5'>驅(qū)動</b><b class='flag-5'>LSM6DS3TR-C</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>高效</b><b class='flag-5'>運(yùn)動檢測</b>與<b class='flag-5'>數(shù)據(jù)采集</b>(5)----姿態(tài)解算