RM新时代网站-首页

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

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

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

三軸加速度計(jì)LIS2DUX12開發(fā)(2)----靜態(tài)校準(zhǔn)

嵌入式單片機(jī)MCU開發(fā) ? 來源:嵌入式單片機(jī)MCU開發(fā) ? 作者:嵌入式單片機(jī)MCU開 ? 2024-05-17 15:27 ? 次閱讀

概述

最近在弄ST和瑞薩RA的課程,需要樣片的可以加群申請(qǐng):615061293 。

零偏是影響加速度計(jì)輸出精度的重要指標(biāo)之一,零偏可分為靜態(tài)零偏和動(dòng)態(tài)零偏 。靜態(tài)零偏也稱為固定零偏,通常經(jīng)標(biāo)定與補(bǔ)償減小靜態(tài)零偏。動(dòng)態(tài)零偏是由于加速度計(jì)自身的缺陷或環(huán)境因素(如溫度、振動(dòng)、電子干擾等)引起的,懸絲加速度計(jì)在運(yùn)動(dòng)過程中其精度會(huì)受到動(dòng)態(tài)零偏的影響,因此在投入使用前要先對(duì)加速度計(jì)的動(dòng)態(tài)零偏進(jìn)行測試。

硬件準(zhǔn)備

首先需要準(zhǔn)備一個(gè)開發(fā)板,這里我準(zhǔn)備的是自己繪制的開發(fā)板,需要的可以進(jìn)行申請(qǐng)。 主控為STM32U073CC,加速度計(jì)為LIS2DUX12

視頻教學(xué)

[https://www.bilibili.com/video/BV17J4m1W7Fb/]

樣品申請(qǐng)

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

源碼下載

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

六位置法的標(biāo)定方案

本文在校準(zhǔn)三軸加速度計(jì)時(shí)使用六位置校準(zhǔn)法,該方法使用地球的重力力加速度在靜態(tài)下校準(zhǔn)三軸加速度傳感器,具體的校準(zhǔn)過程如下圖所示。具體校準(zhǔn)過程如下:

  1. 將傳感器的Y軸垂直水平面向下;
  2. 以X軸為基準(zhǔn)軸,繞其逆旋轉(zhuǎn)90°,使乙軸垂直水平面向上
  3. 以Y軸為基準(zhǔn)軸,繞其逆旋轉(zhuǎn)90°,使X軸垂直水平面向下
  4. 以Y軸為基準(zhǔn)軸,繞其逆時(shí)針旋轉(zhuǎn)90°使2軸垂直水平面向下
  5. 繞Y軸逆時(shí)針旋轉(zhuǎn)909、使X軸垂直水平面向上
  6. 繞Z軸順時(shí)針旋轉(zhuǎn)90°、使Y軸垂直水平面向上

在沒有精密設(shè)備的情況下。這種方法基本上是在試圖找到每個(gè)軸的偏移(zero-g offset)和靈敏度(scale factor)。這種方法通常稱為靜態(tài)校準(zhǔn)方法,因?yàn)樗恍枰獎(jiǎng)討B(tài)輸入,只需將設(shè)備置于靜態(tài)的已知方向即可。

旋轉(zhuǎn)加速度計(jì)以找到極值

將加速度計(jì)沿每個(gè)軸正向和反向?qū)R,使其盡可能地與地球重力向量對(duì)齊。在理想情況下,當(dāng)某一軸完全與地球的重力向量對(duì)齊時(shí),該軸應(yīng)顯示約 ±1g 的讀數(shù),而其他軸應(yīng)顯示 0g。

記錄每個(gè)軸在這六個(gè)方向(X+, X-, Y+, Y-, Z+, Z-)的輸出,即每個(gè)軸的最大值和最小值。

在未校準(zhǔn)情況下,讀出的數(shù)據(jù)會(huì)超過1g的數(shù)值,所以要進(jìn)行加速度計(jì)校準(zhǔn)。

計(jì)算偏移和靈敏度

偏移(Offset):可以通過計(jì)算每個(gè)軸最大值和最小值的平均值得到:

Offset=(Max value+Min value)/2

靈敏度(Scale factor):可以通過兩個(gè)極值之差與2g(因?yàn)閺?1g到-1g的總變化是2g)的比例來計(jì)算:

Scale factor=(Max value-Min value)/2g

應(yīng)用校準(zhǔn)參數(shù)

一旦計(jì)算得到每個(gè)軸的偏移量和靈敏度,校準(zhǔn)參數(shù)就可以應(yīng)用到新的加速度計(jì)測量數(shù)據(jù)中以修正這些數(shù)據(jù)。修正后的加速度值由下列公式計(jì)算得出:

Calibrated value= (Raw value?Offset)/Scale Factor

這個(gè)步驟實(shí)質(zhì)上是一個(gè)線性變換,它調(diào)整原始加速度讀數(shù)以反映真實(shí)的加速度。

這些算法步驟基于直接的數(shù)學(xué)操作,并不涉及復(fù)雜的統(tǒng)計(jì)算法或優(yōu)化算法。這些方法足以處理大多數(shù)基本應(yīng)用場景下的加速度計(jì)校準(zhǔn)需求,尤其是在資源受限的嵌入式系統(tǒng)中。如果環(huán)境變化大或加速度計(jì)的非理想特性影響較大(如高溫、機(jī)械應(yīng)力等),可能需要更復(fù)雜的算法來進(jìn)行動(dòng)態(tài)校準(zhǔn)或更高級(jí)的誤差補(bǔ)償。

注意事項(xiàng)

  1. 確保在靜態(tài)環(huán)境中進(jìn)行測試,避免任何震動(dòng)或移動(dòng)。
  2. 使用精確的水平儀確保加速度計(jì)的對(duì)齊。
  3. 可以通過多次測量和取平均值來增加校準(zhǔn)的準(zhǔn)確性。 這種校準(zhǔn)方法相對(duì)簡單,適合大多數(shù)基本應(yīng)用,但對(duì)于需要極高精度的應(yīng)用,可能需要更復(fù)雜的校準(zhǔn)技術(shù)和專業(yè)設(shè)備。

串口中斷

開啟串口中斷來接收數(shù)據(jù)。

要在主程序鐘開啟中斷接收。

HAL_UART_Receive_IT(&huart1, (uint8_t *)RxBuff, 1); //打開串口中斷接收

定義接收函數(shù)。

// 捕獲中斷回調(diào)函數(shù),每次捕獲到信號(hào)就會(huì)進(jìn)入這個(gè)回調(diào)函數(shù)
void HAL_UART_RxCpltCallback(UART_HandleTypeDef*UartHandle)
{

    Rx_flag=RxBuff[0];   
    RxBuff[0]=0;
//    printf("flag=%d",Rx_flag);
    HAL_UART_Receive_IT(&huart1, (uint8_t *)RxBuff, 1); //每接收一個(gè)數(shù)據(jù),就打開一次串口中斷接收,否則只會(huì)接收一個(gè)數(shù)據(jù)就停止接收

}

變量定義

data_accx_min, data_accx_max, data_accy_min, data_accy_max, data_accz_min, data_accz_max:這些變量存儲(chǔ)加速度計(jì)在X、Y、Z軸上的最小值和最大值。這些極值通常是通過在特定時(shí)間內(nèi)收集加速度計(jì)數(shù)據(jù),然后從這些數(shù)據(jù)中找出最小值和最大值得到的。
Offset_x, Offset_y, Offset_z:這些是各軸的偏移值,計(jì)算方法是各軸最大值和最小值的算術(shù)平均值。偏移值用于調(diào)整每個(gè)軸的零點(diǎn)位置,使其在沒有運(yùn)動(dòng)時(shí)接近零。
Scale_factor_x, Scale_factor_y, Scale_factor_z:這些是各軸的靈敏度系數(shù),計(jì)算方法是各軸最大值和最小值的差除以2。這個(gè)系數(shù)用于調(diào)整每個(gè)軸的測量值,使其在已知加速度的情況下反映實(shí)際的物理加速度。
calibrated_x, calibrated_y, calibrated_z:這些變量用于存儲(chǔ)校準(zhǔn)后的加速度值,校準(zhǔn)的目的是確保加速度計(jì)輸出準(zhǔn)確反映實(shí)際加速度。
校準(zhǔn)參數(shù)計(jì)算函數(shù) calculate_calibration_params,此函數(shù)執(zhí)行以下操作:
計(jì)算偏移(Offset):通過取每個(gè)軸的最大值和最小值的平均值來計(jì)算偏移。這樣做是為了將未校準(zhǔn)的加速度計(jì)讀數(shù)的中心調(diào)整到0點(diǎn)附近,以補(bǔ)償傳感器的系統(tǒng)偏差。
計(jì)算靈敏度(Scale factor):通過取每個(gè)軸的最大值和最小值之差的一半來計(jì)算靈敏度。這個(gè)值表示了在理想條件下,傳感器輸出從最小到最大應(yīng)覆蓋的理想范圍(通常是±1g)。通過這種方式,您可以根據(jù)實(shí)際的傳感器響應(yīng)調(diào)整加速度計(jì)的讀數(shù)。

float data_accx_min=0,data_accx_max=0;//加速度計(jì)x軸極值
float data_accy_min=0,data_accy_max=0;//加速度計(jì)y軸極值
float data_accz_min=0,data_accz_max=0;//加速度計(jì)z軸極值

float Offset_x=0.0f;//x偏移
float Scale_factor_x=0.0f;//x靈敏度
float Offset_y=0.0f;//y偏移
float Scale_factor_y=0.0f;//y靈敏度
float Offset_z=0.0f;//z偏移
float Scale_factor_z=0.0f;//z靈敏度

float calibrated_x=0.0f;//校準(zhǔn)后加速度計(jì)x軸值
float calibrated_y=0.0f;//校準(zhǔn)后加速度計(jì)y軸值
float calibrated_z=0.0f;//校準(zhǔn)后加速度計(jì)z軸值

int acc_i=0;

uint8_t RxBuff[1];      //進(jìn)入中斷接收數(shù)據(jù)的數(shù)組
int Rx_flag=0;                    //接受到數(shù)據(jù)標(biāo)志


void calculate_calibration_params(void) {

    Offset_x=(data_accx_max+data_accx_min)/2;
    Offset_y=(data_accy_max+data_accy_min)/2;            
    Offset_z=(data_accz_max+data_accz_min)/2;        


    Scale_factor_x=(data_accx_max-data_accx_min)/2;
    Scale_factor_y=(data_accy_max-data_accy_min)/2;            
    Scale_factor_z=(data_accz_max-data_accz_min)/2;        

}

主程序流程

使用 lis2dux12_status_get 函數(shù)檢查新的加速度計(jì)數(shù)據(jù)是否已經(jīng)準(zhǔn)備好。如果status.drdy(數(shù)據(jù)就緒標(biāo)志)為真,這意味著有新數(shù)據(jù)可讀。
通過調(diào)用 lis2dux12_xl_data_get 函數(shù)讀取加速度計(jì)數(shù)據(jù)。這些數(shù)據(jù)被存儲(chǔ)在 data_xl.mg 數(shù)組中,分別對(duì)應(yīng) X、Y、Z 軸的加速度值。
根據(jù) Rx_flag 的值,更新對(duì)應(yīng)軸的最小值或最大值。每次更新后,調(diào)用 calculate_calibration_params 函數(shù)重新計(jì)算校準(zhǔn)參數(shù)。
Rx_flag == 1 和 Rx_flag == 2 分別更新 X 軸的最小和最大值。
Rx_flag == 3 和 Rx_flag == 4 分別更新 Y 軸的最小和最大值。
Rx_flag == 5 和 Rx_flag == 6 分別更新 Z 軸的最小和最大值。
使用更新后的校準(zhǔn)參數(shù)(偏移和靈敏度)來校準(zhǔn)讀取的加速度數(shù)據(jù)。校準(zhǔn)公式為:
Calibrated value= 1000*(Raw value?Offset)/Scale Factor
這里乘以1000是為了將結(jié)果轉(zhuǎn)換為毫重力單位(mg),常用于顯示加速度計(jì)的讀數(shù)。

/* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {

   /* Read output only if new values are available */
    lis2dux12_status_get(&dev_ctx, &status);
    if (status.drdy) {
      lis2dux12_xl_data_get(&dev_ctx, &md, &data_xl);
        if(Rx_flag==1)//X軸min
        {
            data_accx_min=data_xl.mg[0];
            Rx_flag=0;
            calculate_calibration_params();
        }
        else if(Rx_flag==2)//X軸max
        {
            data_accx_max=data_xl.mg[0];
            Rx_flag=0;
            calculate_calibration_params();
        }
        else if(Rx_flag==3)//Y軸min
        {
            data_accy_min=data_xl.mg[1];
            Rx_flag=0;
            calculate_calibration_params();
        }        
        else if(Rx_flag==4)//Y軸max
        {
            data_accy_max=data_xl.mg[1];
            Rx_flag=0;
            calculate_calibration_params();
        }        
        else if(Rx_flag==5)//Y軸min
        {
            data_accz_min=data_xl.mg[2];
            Rx_flag=0;
            calculate_calibration_params();
        }        
        else if(Rx_flag==6)//Y軸max
        {
            data_accz_max=data_xl.mg[2];
            Rx_flag=0;
            calculate_calibration_params();
        }            

            calibrated_x=1000*(data_xl.mg[0]-Offset_x)/Scale_factor_x;
            calibrated_y=1000*(data_xl.mg[1]-Offset_y)/Scale_factor_y;            
            calibrated_z=1000*(data_xl.mg[2]-Offset_z)/Scale_factor_z;            


            printf("min_x=%4.2f,max_x=%4.2lf,min_y=%4.2f,max_y=%4.2f,min_z=%4.2f,max_z=%4.2frn",
            data_accx_min,data_accx_max,data_accy_min,data_accy_max,data_accz_min,data_accz_max);                
            printf("校準(zhǔn)前acc[mg]:%4.2ft%4.2ft%4.2frn",
            data_xl.mg[0], data_xl.mg[1], data_xl.mg[2]);            
            printf("校準(zhǔn)后acc[mg]:%4.2ft%4.2ft%4.2frn",
            calibrated_x, calibrated_y, calibrated_z);            

        HAL_Delay(10);


    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

串口發(fā)送定義

演示

審核編輯 黃宇

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

    關(guān)注

    6

    文章

    700

    瀏覽量

    45891
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5032

    瀏覽量

    97371
  • stm32cubemx
    +關(guān)注

    關(guān)注

    5

    文章

    283

    瀏覽量

    14791
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    AI增強(qiáng)型智能加速度計(jì)

    。 以下是本周新品情報(bào),請(qǐng)及時(shí)查收: 第代MEMS技術(shù) STMicroelectronics LIS2DUX12LIS2DUXS12 AI增強(qiáng)型智能加速度計(jì) 貿(mào)澤電子即日起
    的頭像 發(fā)表于 07-12 08:10 ?810次閱讀
    AI增強(qiáng)型智能<b class='flag-5'>加速度計(jì)</b>

    e2studio開發(fā)加速度計(jì)LIS2DW12(4)----測量傾斜度

    本文將介紹如何驅(qū)動(dòng)和利用LIS2DW12加速度計(jì)的傾斜檢測理論和傾斜角測量方法。一般來說,這里描述的程序也可以應(yīng)用于
    的頭像 發(fā)表于 05-17 15:00 ?1205次閱讀
    e<b class='flag-5'>2</b>studio<b class='flag-5'>開發(fā)</b><b class='flag-5'>三</b><b class='flag-5'>軸</b><b class='flag-5'>加速度計(jì)</b><b class='flag-5'>LIS2DW12</b>(4)----測量傾斜度

    加速度計(jì)LIS2DUX12開發(fā)(1)----輪詢獲取加速度數(shù)據(jù)

    本文將介紹如何驅(qū)動(dòng)和利用LIS2DUX12傳感器,實(shí)現(xiàn)精確的運(yùn)動(dòng)感應(yīng)功能。 LIS2DUX12是一款數(shù)字式智能3軸線性加速度計(jì),其MEMS和ASIC旨在將盡可能低的電流消耗與豐富的特性(如常開抗混
    的頭像 發(fā)表于 05-17 15:22 ?1119次閱讀
    <b class='flag-5'>三</b><b class='flag-5'>軸</b><b class='flag-5'>加速度計(jì)</b><b class='flag-5'>LIS2DUX12</b><b class='flag-5'>開發(fā)</b>(1)----輪詢獲取<b class='flag-5'>加速度</b>數(shù)據(jù)

    加速度計(jì)LIS2DUX12開發(fā)(3)----計(jì)步器

    本文將介紹如何驅(qū)動(dòng)和利用LIS2DUX12傳感器,實(shí)現(xiàn)計(jì)步器感應(yīng)功能。 LIS2DUX12是一款數(shù)字式智能3軸線性加速度計(jì),其MEMS和ASIC旨在將盡可能低的電流消耗與豐富的特性(如常開抗混疊
    的頭像 發(fā)表于 05-17 15:36 ?1205次閱讀
    <b class='flag-5'>三</b><b class='flag-5'>軸</b><b class='flag-5'>加速度計(jì)</b><b class='flag-5'>LIS2DUX12</b><b class='flag-5'>開發(fā)</b>(3)----計(jì)步器

    e2studio開發(fā)加速度計(jì)LIS2DW12(1)----輪詢獲取加速度數(shù)據(jù)

    本文將介紹如何驅(qū)動(dòng)和利用LIS2DW12傳感器,實(shí)現(xiàn)精確的運(yùn)動(dòng)感應(yīng)功能。 IS2DW12是一款高性能、超低功耗的軸線性加速度計(jì),屬于“femto”系列,利用了成熟的微機(jī)械
    的頭像 發(fā)表于 08-09 14:54 ?1554次閱讀
    e<b class='flag-5'>2</b>studio<b class='flag-5'>開發(fā)</b><b class='flag-5'>三</b><b class='flag-5'>軸</b><b class='flag-5'>加速度計(jì)</b><b class='flag-5'>LIS2DW12</b>(1)----輪詢獲取<b class='flag-5'>加速度</b>數(shù)據(jù)

    加速度計(jì)加速度計(jì)的使用區(qū)別?

    有個(gè)問題請(qǐng)教一下:在靜態(tài)測量的情況下,兩加速度計(jì)在測得X、Y上的加速度后,是不是就可以根據(jù)這兩個(gè)值和重力
    發(fā)表于 12-29 06:06

    MSP430F5508對(duì)LIS2DH12加速度計(jì)的驅(qū)動(dòng)設(shè)計(jì)

    MSP430F5508對(duì)LIS2DH12加速度計(jì)的驅(qū)動(dòng)設(shè)計(jì),見附件
    發(fā)表于 09-23 10:46

    請(qǐng)問兩加速度計(jì)加速度計(jì)的使用區(qū)別是什么?

    有個(gè)問題請(qǐng)教一下:在靜態(tài)測量的情況下,兩加速度計(jì)在測得X、Y上的加速度后,是不是就可以根據(jù)這兩個(gè)值和重力
    發(fā)表于 08-08 09:12

    LIS33DE加速度計(jì)的特點(diǎn)性能分析

    LIS33DE是一種超小型低功耗的加速度計(jì)屬于ST的運(yùn)動(dòng)傳感器的“納米”的家庭。它包括一個(gè)傳感元件和一個(gè)集成電路接口能夠通過I2C和SP
    的頭像 發(fā)表于 05-14 14:24 ?4516次閱讀
    <b class='flag-5'>LIS</b>33DE<b class='flag-5'>三</b><b class='flag-5'>軸</b><b class='flag-5'>加速度計(jì)</b>的特點(diǎn)性能分析

    軸線性加速度計(jì)和溫度傳感器LIS2DTW12的應(yīng)用范圍分析

    LIS2DTW12是一款超低功耗高性能軸線性加速度計(jì)和溫度傳感器,屬于“femto”系列,利用已經(jīng)用于生產(chǎn)微加工加速度計(jì)的強(qiáng)大而成熟的制造工藝。該器件具有用戶可選的±
    發(fā)表于 10-03 09:30 ?1600次閱讀

    意法半導(dǎo)體推出款內(nèi)置先進(jìn)處理引擎的MEMS加速度計(jì)

    LIS2DUX12LIS2DUXS12采用意法半導(dǎo)體第代MEMS制造工藝,新增可編程功能,包括機(jī)器學(xué)習(xí)核心(MLC)、先進(jìn)有限狀態(tài)機(jī)(FSM)和增強(qiáng)型計(jì)步器。另外一款入門級(jí)加速度計(jì)
    的頭像 發(fā)表于 04-16 09:57 ?1659次閱讀

    貿(mào)澤開售面向可穿戴和始終感知應(yīng)用的STMicroelectronics LIS2DUX12LIS2DUXS12智能加速度計(jì)

    LIS2DUX12LIS2DUXS12 AI增強(qiáng)型智能加速度計(jì)。這些加速度計(jì)采用STMicroelectronics的第代MEMS技術(shù)
    發(fā)表于 06-02 17:43 ?823次閱讀
    貿(mào)澤開售面向可穿戴和始終感知應(yīng)用的STMicroelectronics <b class='flag-5'>LIS2DUX12</b>和<b class='flag-5'>LIS2DUXS12</b>智能<b class='flag-5'>加速度計(jì)</b>

    LIS2DW12 3D數(shù)字加速度計(jì)應(yīng)用筆記

    電子發(fā)燒友網(wǎng)站提供《LIS2DW12 3D數(shù)字加速度計(jì)應(yīng)用筆記.pdf》資料免費(fèi)下載
    發(fā)表于 07-31 09:40 ?1次下載
    <b class='flag-5'>LIS2DW12</b> 3D數(shù)字<b class='flag-5'>加速度計(jì)</b>應(yīng)用筆記

    加速度計(jì)LIS2DW12開發(fā)(4)----測量傾斜度

    本文將介紹如何驅(qū)動(dòng)和利用LIS2DW12加速度計(jì)的傾斜檢測理論和傾斜角測量方法。一般來說,這里描述的程序也可以應(yīng)用于
    的頭像 發(fā)表于 05-16 17:18 ?1063次閱讀
    <b class='flag-5'>三</b><b class='flag-5'>軸</b><b class='flag-5'>加速度計(jì)</b><b class='flag-5'>LIS2DW12</b><b class='flag-5'>開發(fā)</b>(4)----測量傾斜度

    e2studio開發(fā)加速度計(jì)LIS2DW12(4)----測量傾斜度

    本文將介紹如何驅(qū)動(dòng)和利用LIS2DW12加速度計(jì)的傾斜檢測理論和傾斜角測量方法。一般來說,這里描述的程序也可以應(yīng)用于
    的頭像 發(fā)表于 08-09 16:00 ?595次閱讀
    e<b class='flag-5'>2</b>studio<b class='flag-5'>開發(fā)</b><b class='flag-5'>三</b><b class='flag-5'>軸</b><b class='flag-5'>加速度計(jì)</b><b class='flag-5'>LIS2DW12</b>(4)----測量傾斜度
    RM新时代网站-首页