概述
LSM6DS3TR-C是單芯片“3軸陀螺儀 + 3軸加速度計”的慣性 測量單元(IMU), 五種種可選滿量程的陀螺儀(125/250/500/1000/2000 dps)和加速度計(2/4/8/16 g)。
上述工程中選擇的加速度和陀螺儀對應(yīng)的量程為2g和2000dps,對應(yīng)的靈敏度如下所示,分別為0.061mg/LSB和70mdps/LSB。
最近在弄ST和瑞薩RA的課程,需要樣片的可以加群申請:615061293 。
視頻教學
[https://www.bilibili.com/video/BV14h4y1R7kc/]
樣品申請
[https://www.wjx.top/vm/OhcKxJk.aspx#]
完整代碼下載
[https://download.csdn.net/download/qq_24312945/87921267]
參考坐標系
測量加速度
LSM6DS3TR-C有一個片上加速度計,可以在 ±2g、±4g、±8g 和 ±16g 四個可編程滿量程范圍內(nèi)測量加速度。
測量角速度
MPU6050 有一個片上陀螺儀,可以在 ±125°/s ±250°/s、±500°/s、±1000°/s 和 ±2000°/s 的四個可編程滿量程范圍內(nèi)測量角度旋轉(zhuǎn)。
加速度計工作方式
假設(shè)立方體在外太空,那里的一切都是失重的,球會簡單地漂浮在立方體的中心。
現(xiàn)在,假設(shè)每面墻代表一個特定的軸。 如果我們突然以 1g 的加速度向左移動盒子(單個 G 力 1g 相當于重力加速度 9.8 m/s 2),球無疑會撞到墻壁 X。如果我們測量球?qū)Ρ谑┘拥牧,我們可以得到沿X軸的輸出值為1g。
讓我們看看當我們把那個立方體放在地球上時會發(fā)生什么。球?qū)⒑唵蔚芈湓趬?Z 上,施加 1g 的力,如下圖所示:
在這種情況下,盒子沒有移動,但我們?nèi)匀辉?Z 軸上得到 1g 的讀數(shù)。這是因為重力(實際上是加速度的一種形式)以 1g 的力向下拉球。
雖然此模型并不完全代表真實世界的加速度計傳感器是如何構(gòu)建的,但它通常有助于理解為什么加速度計的輸出信號通常以 ±g 為單位指定,或者為什么加速度計在靜止時在 z 軸上讀數(shù)為 1g,或者您可以在不同方向上獲得什么樣的加速度計讀數(shù)。
上位機通訊
這里使用的是匿名助手的上位機
[https://gitee.com/anotc/AnoAssistant]
有專門的通訊協(xié)議
串口通訊協(xié)議格式如下所示,需要注意傳輸為小端模式傳輸。
對應(yīng)的源地址和目標地址分別為0xFD和0xFE。
我們只需要上報加速度和陀螺儀數(shù)據(jù),所以功能碼為0x01,數(shù)據(jù)長度為0x0D,需要主要為小端模式傳輸。
加速度演示
實測移動模塊分別為X、Y、Z軸向下,可以看見數(shù)值基本上為1000mg。
陀螺儀工作方式
加速度計測量線性加速度,而陀螺儀測量角旋轉(zhuǎn)。為此,他們測量了科里奧利效應(yīng)產(chǎn)生的力。
陀螺儀是一種運動傳感器,能夠感測物體在一軸或多軸上的旋轉(zhuǎn)角速度。它能夠精確地感測自由空間中復雜的移動動作,因此成為追蹤物體移動方位和旋轉(zhuǎn)動作的必要設(shè)備。與加速計和電子羅盤不同,陀螺儀不需要依賴外部力量(如重力或磁場),可以自主地發(fā)揮其功能。
因此,從理論上講,只使用陀螺儀就可以完成姿態(tài)導航的任務(wù)。
陀螺儀的每個通道檢測一個軸的旋轉(zhuǎn)。也就是說陀螺儀通過測量自身的旋轉(zhuǎn)狀態(tài),判斷出設(shè)備當前運動狀態(tài),是向前、向后、向上、向下、向左還是向右呢,是加速(角速度)還是減速(角速度)呢,都可以實現(xiàn),但是要判斷出設(shè)備的方位(東西南北),陀螺儀就沒有辦法。
MEMS陀螺儀主要利用科里奧利力(旋轉(zhuǎn)物體在有徑向運動時所受到的切向力)原理,公開的微機械陀螺儀均采用振動物體傳感角速度的概念,利用振動來誘導和探測科里奧利力。
MEMS陀螺儀的核心是一個微加工機械單元,在設(shè)計上按照一個音叉機制共振運動,通過科里奧利力原理把角速率轉(zhuǎn)換成一個特定感測結(jié)構(gòu)的位移。
兩個相同的質(zhì)量塊以方向相反的做水平震蕩。當外部施加一個角速率,就會出現(xiàn)一個科氏力,力的方向垂直于質(zhì)量運動方向,如垂直方向箭頭所示。產(chǎn)生的科氏力使感測質(zhì)量發(fā)生位移,位移大小與所施加的角速率大小成正比,科氏力引起的電容變化即可計算出角速率大小。 科里奧利效應(yīng)指出,當質(zhì)量 (m) 以速度 (v) 沿特定方向移動并施加外部角速率 (Ω)(紅色箭頭)時,科里奧利效應(yīng)會產(chǎn)生一個力(黃色箭頭),導致質(zhì)量垂直移動。該位移的值與應(yīng)用的角速率直接相關(guān)。
上報源碼
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_I2C1_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
printf("hello");
if (LSM6DS3TRC_Init(LSM6DS3TRC_MODE_I2C) == false)
printf("LSM6DS3TRC initialize error.rn");
else
printf("LSM6DS3TRC initialize register finished.rn");
int16_t acc_int16[3] ={0,0,0};
int16_t gyr_int16[3] ={0,0,0};
float acc[3] = {0};
float gyr[3] = {0};
uint8_t data[21]={0};
data[0]=0xAB;//幀頭
data[1]=0xFD;//源地址
data[2]=0xFE;//目標地址
data[3]=0x01;//功能碼ID
data[4]=0x0D;//數(shù)據(jù)長度LEN
data[5]=0x00;//數(shù)據(jù)長度LEN 13
uint8_t sumcheck = 0;
uint8_t addcheck = 0;
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
uint8_t status;
status = LSM6DS3TRC_Get_Status();
if (status & LSM6DS3TRC_STATUS_ACCELEROMETER)
{
LSM6DS3TRC_Get_Acceleration(LSM6DS3TRC_ACC_FSXL_2G, acc);
// printf("rnacc:X:%2f,tY:%2f,tZ:%2fr", acc[0], acc[1], acc[2]);
}
if (status & LSM6DS3TRC_STATUS_GYROSCOPE)
{
LSM6DS3TRC_Get_Gyroscope(LSM6DS3TRC_GYR_FSG_2000, gyr);
// printf("rgyr:X:%4.2f,tY:%4.2f,tZ:%4.2fr", gyr[0], gyr[1], gyr[2]);
}
if (status & LSM6DS3TRC_STATUS_TEMPERATURE)
{
// printf("rtemp:%2frn", LSM6DS3TRC_Get_Temperature());
}
//匿名上位機
acc_int16[0]=(int16_t)(acc[0]);
acc_int16[1]=(int16_t)(acc[1]);
acc_int16[2]=(int16_t)(acc[2]);
gyr_int16[0]=(int16_t)(gyr[0])/1000;
gyr_int16[1]=(int16_t)(gyr[1])/1000;
gyr_int16[2]=(int16_t)(gyr[2])/1000;
data[7]=acc_int16[0] >>8;//ACC_X
data[6]=acc_int16[0];
data[9]=acc_int16[1] >>8;//ACC_Y
data[8]=acc_int16[1];
data[11]=acc_int16[2] >>8;//ACC_Z
data[10]=acc_int16[2];
data[13]=gyr_int16[0] >>8;//GYR_X
data[12]=gyr_int16[0];
data[15]=gyr_int16[1] >>8;//GYR_Y
data[14]=gyr_int16[1];
data[17]=gyr_int16[2] >>8;//GYR_Z
data[16]=gyr_int16[2];
data[18]=0;
sumcheck = 0;
addcheck = 0;
for(uint16_t i=0; i < 19; i++)
{
sumcheck += data[i]; //從幀頭開始,對每一字節(jié)進行求和,直到 DATA 區(qū)結(jié)束
addcheck += sumcheck; //每一字節(jié)的求和操作,進行一次 sumcheck 的累加
}
data[19]=sumcheck;
data[20]=addcheck;
HAL_UART_Transmit(&huart1 , (uint8_t *)&data, 21, 0xFFFF);
// printf("naccx=%d accy=%d accz=%d gyrx=%d gyry=%d gyrx=%d ",acc_int16[0],acc_int16[1],acc_int16[2],gyr_int16[0],gyr_int16[1],gyr_int16[2]);
HAL_Delay(100);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
審核編輯 黃宇
-
mems
+關(guān)注
關(guān)注
129文章
3963瀏覽量
191132 -
陀螺儀
+關(guān)注
關(guān)注
44文章
793瀏覽量
98987 -
數(shù)據(jù)采集
+關(guān)注
關(guān)注
39文章
6261瀏覽量
114074 -
上位機
+關(guān)注
關(guān)注
27文章
945瀏覽量
55024 -
運動檢測
+關(guān)注
關(guān)注
0文章
34瀏覽量
12636
發(fā)布評論請先 登錄
相關(guān)推薦
驅(qū)動LSM6DS3TR-C實現(xiàn)高效運動檢測與數(shù)據(jù)采集(1)----獲取ID
![<b class='flag-5'>驅(qū)動</b><b class='flag-5'>LSM6DS3TR-C</b><b class='flag-5'>實現(xiàn)</b><b class='flag-5'>高效</b><b class='flag-5'>運動檢測</b>與<b class='flag-5'>數(shù)據(jù)采集</b>(1)----獲取ID](https://file1.elecfans.com/web2/M00/AD/F5/wKgaomVR04eANOf3AAKgDqGnRkw633.png)
驅(qū)動LSM6DS3TR-C實現(xiàn)高效運動檢測與數(shù)據(jù)采集(6)----FIFO數(shù)據(jù)讀取與配置
![<b class='flag-5'>驅(qū)動</b><b class='flag-5'>LSM6DS3TR-C</b><b class='flag-5'>實現(xiàn)</b><b class='flag-5'>高效</b><b class='flag-5'>運動檢測</b>與<b class='flag-5'>數(shù)據(jù)采集</b>(<b class='flag-5'>6</b>)----FIFO<b class='flag-5'>數(shù)據(jù)</b>讀取與配置](https://file1.elecfans.com/web2/M00/FE/0D/wKgaomaYgkSAUZwMAAlOsGN2SpE275.png)
陀螺儀LSM6DSOW開發(fā)(2)----上報匿名上位機實現(xiàn)可視化
![陀螺儀<b class='flag-5'>LSM6</b>DSOW開發(fā)(2)----<b class='flag-5'>上報</b><b class='flag-5'>匿名</b><b class='flag-5'>上位</b><b class='flag-5'>機</b><b class='flag-5'>實現(xiàn)</b><b class='flag-5'>可視化</b>](https://file1.elecfans.com/web2/M00/FE/0D/wKgaomaYgkSAUZwMAAlOsGN2SpE275.png)
陀螺儀LSM6DSV16X與AI集成(14)----上報匿名上位機
![陀螺儀<b class='flag-5'>LSM6</b>DSV16X與AI集成(14)----<b class='flag-5'>上報</b><b class='flag-5'>匿名</b><b class='flag-5'>上位</b><b class='flag-5'>機</b>](https://file1.elecfans.com/web2/M00/05/8B/wKgZombaxFSAB1z8AAkXM-mUdJ8994.png)
LSM6DS3TR-C使用時工作電流比datasheet上大很多是什么原因?
請問LSM6DS3TR和LSM6DS3TR-C兩個型號能否完全兼容?
LSM6DS3TR-C數(shù)據(jù)讀取異常是安利的問題?怎么處理?
LSM6DS3TR-C角速度輸出為0是什么原因?qū)е碌模?/a>
LSM6DS3TR-C的FIFO讀取數(shù)據(jù)出錯是什么原因造成的?怎么解決?
LSM6DS3TR-C的低功耗模式和高性能模式有什么區(qū)別
驅(qū)動LSM6DS3TR-C實現(xiàn)高效運動檢測與數(shù)據(jù)采集(2)----配置濾波器
![<b class='flag-5'>驅(qū)動</b><b class='flag-5'>LSM6DS3TR-C</b><b class='flag-5'>實現(xiàn)</b><b class='flag-5'>高效</b><b class='flag-5'>運動檢測</b>與<b class='flag-5'>數(shù)據(jù)采集</b>(2)----配置濾波器](https://file1.elecfans.com/web2/M00/AD/F5/wKgaomVR04eANOf3AAKgDqGnRkw633.png)
驅(qū)動LSM6DS3TR-C實現(xiàn)高效運動檢測與數(shù)據(jù)采集(3)----獲取傳感器數(shù)據(jù)
![<b class='flag-5'>驅(qū)動</b><b class='flag-5'>LSM6DS3TR-C</b><b class='flag-5'>實現(xiàn)</b><b class='flag-5'>高效</b><b class='flag-5'>運動檢測</b>與<b class='flag-5'>數(shù)據(jù)采集</b>(<b class='flag-5'>3</b>)----獲取傳感器<b class='flag-5'>數(shù)據(jù)</b>](https://file1.elecfans.com/web2/M00/AF/DF/wKgZomVS03uARJHvAAIrLLQ3-rg432.png)
驅(qū)動LSM6DS3TR-C實現(xiàn)高效運動檢測與數(shù)據(jù)采集(5)----姿態(tài)解算
![<b class='flag-5'>驅(qū)動</b><b class='flag-5'>LSM6DS3TR-C</b><b class='flag-5'>實現(xiàn)</b><b class='flag-5'>高效</b><b class='flag-5'>運動檢測</b>與<b class='flag-5'>數(shù)據(jù)采集</b>(5)----姿態(tài)解算](https://file1.elecfans.com/web2/M00/AE/0F/wKgaomVS1gSAac_GAAFTh-vQS_Y622.png)
評論