吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

驅動LSM6DS3TR-C實現高效運動檢測與數據采集(1)----獲取ID

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

概述

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

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

通過閱讀本文,讀者將獲得全面的指導,以驅動和利用LSM6DS3TR-C傳感器,實現準確、可靠的運動感應功能。

最近在弄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]

在這里插入圖片描述

視頻教學

[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進行通訊。
其中mode2可以通過IIC控制其他的從設備傳感器。

在這里插入圖片描述

管腳定義

在這里插入圖片描述

在這里插入圖片描述

IIC通信模式

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

在這里插入圖片描述

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

在這里插入圖片描述

具體地址如下所示。

在這里插入圖片描述

速率

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

在這里插入圖片描述

LSM6DS3TR-C在Mode 1下參考圖

在這里插入圖片描述

生成STM32CUBEMX

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

在這里插入圖片描述

串口配置

查看原理圖,PA9和PA10設置為開發板的串口。

在這里插入圖片描述

配置串口。

在這里插入圖片描述

IIC配置

在這里插入圖片描述

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

在這里插入圖片描述

串口重定向

打開魔術棒,勾選MicroLIB

在這里插入圖片描述

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

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

函數聲明和串口重定向:

/* 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讀函數

參考例程序中對應的驅動程序為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寫函數

參考例程序中對應的驅動程序為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

參考例程序中對應的獲取ID驅動程序,如下所示。

在這里插入圖片描述

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

在這里插入圖片描述

讀取函數如下所示。

#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;
}

具體波形如下所示。

在這里插入圖片描述

系統復位

系統復位可以操作寄存器CTRL3_C (12h)。

在這里插入圖片描述

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

在這里插入圖片描述

參考例程序中對應的復位驅動程序和等待復位成功函數,如下所示。

在這里插入圖片描述

復位代碼如下所示。

#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 狀態
	buf[0] |= 0x01;
	LSM6DS3TRC_WriteCommand(LSM6DS3TRC_CTRL3_C, buf, 1);//將CTRL3_C寄存器的SW_RESET位設為1 
	while (buf[0] & 0x01)
		LSM6DS3TRC_ReadCommand(LSM6DS3TRC_CTRL3_C, buf, 1);//等到CTRL3_C寄存器的SW_RESET位返回0
}

具體波形如下所示。

在這里插入圖片描述

在這里插入圖片描述

設置BDU

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

在這里插入圖片描述

在這里插入圖片描述

參考例程序中對應的設置BDU程序函數,如下所示。

在這里插入圖片描述

設置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);
}

具體波形如下所示。

在這里插入圖片描述

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 傳感器
    +關注

    關注

    2553

    文章

    51390

    瀏覽量

    756572
  • 陀螺儀
    +關注

    關注

    44

    文章

    792

    瀏覽量

    98973
  • 數據采集
    +關注

    關注

    39

    文章

    6251

    瀏覽量

    114037
  • 運動檢測
    +關注

    關注

    0

    文章

    34

    瀏覽量

    12635
  • stm32cubemx
    +關注

    關注

    5

    文章

    284

    瀏覽量

    15002
收藏 人收藏

    評論

    相關推薦

    驅動LSM6DS3TR-C實現高效運動檢測數據采集(6)----FIFO數據讀取與配置

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

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

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

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

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

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

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

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

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

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

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

    LSM6DS3TR-C角速度輸出為0是什么原因導致的?

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

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

    使用LSM6DS3TR-C的FIFO,先獲取了FIFO的WaterM標志,該標志置位之后再去獲取當前存在FIFO緩存的數據長度,再去讀取FIFO中對應長度的
    發表于 03-27 06:05

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

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

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

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

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

    DSO數據表中“對機械沖擊的高魯棒性使得LSM6DS3TR-C 系統首選設計師創造和制造可靠的產品..”測試時,我們觀察到 LSM6DSD 和 LSM6DS3 的“抗沖擊性”優于
    發表于 02-02 09:21

    驅動LSM6DS3TR-C實現高效運動檢測數據采集(2)----配置濾波器

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

    驅動LSM6DS3TR-C實現高效運動檢測數據采集(3)----獲取傳感器數據

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

    驅動LSM6DS3TR-C實現高效運動檢測數據采集(4)----上報匿名上位機實現可視化

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

    驅動LSM6DS3TR-C實現高效運動檢測數據采集(5)----姿態解算

    lsm6ds3trc包含三軸陀螺儀與三軸加速度計。 姿態有多種數學表示方式,常見的是四元數,歐拉角,矩陣和軸角。他們各自有其自身的優點,在不同的領域使用不同的表示方式。在四軸飛行器中使用到了四元數
    的頭像 發表于 11-14 10:11 ?934次閱讀
    <b class='flag-5'>驅動</b><b class='flag-5'>LSM6DS3TR-C</b><b class='flag-5'>實現</b><b class='flag-5'>高效</b><b class='flag-5'>運動檢測</b>與<b class='flag-5'>數據采集</b>(5)----姿態解算
    百家乐存1000送| 大发百家乐官网现金| 百家乐新庄| 德州扑克发牌视频| 运城百家乐官网的玩法技巧和规则| 网络棋牌游戏平台| 百家乐稳中一注法| 百家乐官网U盘下载| 金木棉百家乐的玩法技巧和规则 | 百家乐官网视频计牌器| 百家乐投注网出租| 百家乐官网赚钱方| 太阳网娱乐| 粤港澳百家乐娱乐场| 木棉百家乐官网的玩法技巧和规则 | 顶级赌场官方直营网| 百家乐现场新全讯网| 百家乐官网电脑赌博| 大发888娱乐游戏下载 官方网| 破解百家乐打路单| 澳门百家乐官网网上赌| 注册娱乐城送彩金| 百家乐娱乐网真钱游戏| 单机百家乐官网的玩法技巧和规则| 赌博游戏网站| 新加坡百家乐规则| 24山方位| 百家乐官网最保险的方法| 大发888官方网站| 百家乐棋牌游戏源码| 菲律宾百家乐官网娱乐平台| 凯里市| 二八杠的玩法| 百家乐群号| 二爷百家乐官网的玩法技巧和规则 | 百家乐路单用处| 百家乐官网二十一点| 皇城娱乐| 太阳城在线娱乐城| 大发百家乐现金| 赌百家乐官网的玩法技巧和规则 |