qiao--- 发表于 2024-3-22 20:42

【ST B-L475E-IOT01A1蓝牙Wi-Fi开发板】4-读取lsm6dsl(加速度+陀螺仪)原始数据

<div class='showpostmsg'><p>这期测评测评一下板载的lsm6dsl传感器,sm6dsl 是一种常用的微型惯性测量单元(IMU)传感器,由STMicroelectronics公司生产。这种传感器结合了三轴加速度计和三轴陀螺仪,具有以下特点:</p>

<ol>
        <li>
        <p><strong>三轴加速度计</strong>:LSM6DSL 能够测量物体在 x、y 和 z 三个轴向上的加速度,可用于检测和监测物体的运动状态、姿态变化和震动等。</p>
        </li>
        <li>
        <p><strong>三轴陀螺仪</strong>:该传感器还能够测量绕 x、y 和 z 轴旋转的角速度,从而可以用来跟踪物体的旋转、转向和角度变化。</p>
        </li>
        <li>
        <p><strong>低功耗设计</strong>:LSM6DSL 采用了低功耗设计,适合用于便携设备、可穿戴设备和物联网(IoT)设备中,能够提供长时间的稳定性能。</p>
        </li>
        <li>
        <p><strong>高精度</strong>:该传感器具有高精度的数据输出,可以提供精确的加速度和角速度测量结果。</p>
        </li>
        <li>
        <p><strong>广泛应用</strong>:LSM6DSL 在汽车电子、智能手机、虚拟现实(VR)、增强现实(AR)、运动跟踪、无人机和工业自动化等领域得到广泛应用。</p>
        </li>
</ol>

<p><span style="font-size:16px;"><strong>1.查看原理图查看引脚</strong></span></p>

<p> &nbsp;</p>

<p>可以看到原理图上这个芯片是挂载在I2C2上的,这和我们上期那个lis3mdl传感器挂载的是同一个总线上。因此我们可以在上个工程的基础上来写这个传感器的代码 。我们直接复制上期测评的工程作为本次工程的基础。</p>

<p>&nbsp;</p>

<p><span style="font-size:16px;"><strong>2.移植LIS3MDLTR传感器的驱动</strong></span></p>

<p>我在本论坛找到了该传感器的驱动,链接为<a href="https://bbs.eeworld.com.cn/thread-562985-1-1.html">LSM6DSL(加速度+陀螺仪)驱动例程ver1.8 - MEMS传感器 - 电子工程世界-论坛 (eeworld.com.cn)</a></p>

<p>我们打开他的这个文件分析一下</p>

<p> &nbsp;</p>

<p>在整个文件夹里面分为driver目录和example目录,分别为传感器的驱动,和示例代码。其中在example目录下有读取传感器数据的示例和Wake-Up and Free-Fall示例,翻译过来应该是唤醒和自由落体的功能。本期测评主要测评以下是否能从传感器中读取数据</p>

<p> &nbsp;</p>

<p>&nbsp;</p>

<p>我们将driver目录下的驱动文件全部复制到我们工程目录的app下,示例代码作为我们的参考代码。由于驱动是使用面向对象的思想来编写的,所以驱动移植来非常好移植,只需要实现I2C读发的代码就行了。</p>

<p>我们看示例代码怎么移植的,下面是一个读取传感器寄存器值的函数:</p>

<p> &nbsp;</p>

<p>这里我们使用的是I2C2,所以传感器读发的函数代码我简化成了下面所示</p>

<pre>
<code>static int32_t platform_write(void *handle, uint8_t Reg, uint8_t *Bufp,
                              uint16_t len)
{
HAL_I2C_Mem_Write(handle, LSM6DSL_I2C_ADDRESS, Reg,
                      I2C_MEMADD_SIZE_8BIT, Bufp, len, 1000);
return 0;
}

static int32_t platform_read(void *handle, uint8_t Reg, uint8_t *Bufp,
                           uint16_t len)
{

HAL_I2C_Mem_Read(handle, LSM6DSL_I2C_ADDRESS, Reg,
                     I2C_MEMADD_SIZE_8BIT, Bufp, len, 1000);
return 0;
}</code></pre>

<p>然后继续看示例代码</p>

<p> &nbsp;</p>

<p>这里它使用的是spi的句柄,问应该使用I2C2,所以把这个句柄改为hi2c2</p>

<p>&nbsp;</p>

<p>接着看示例代码</p>

<p> &nbsp;</p>

<p>现在它已经开是读取数据了,不过他这里应该是用了USB_otg的功能把数据发送给上位机了,我们这里用串口打印就行,所以将CDC_Transmit_FS发送函数的代码,改成printf的代码</p>

<p> &nbsp;</p>

<p>至此,我们的lsm6dsl传感器的代码就基本完成了。</p>

<p>&nbsp;</p>

<p><span style="font-size:16px;"><strong>3.测试验证和数据处理</strong></span></p>

<p>我们将代码烧录到开发板上后,用串口软件看看打印的结果。打印结果如下所示</p>

<p> &nbsp;</p>

<p>可以看到在开发板没动的情况下,数值很稳定,所以程序应该是没问题了。但是这个数值只是原始值,我们还需要将他处理成为我们想要的加速度的值,这个我放在下期来讲。</p>

<p>&nbsp;</p>

<p><strong><span style="font-size:16px;">总结:</span></strong>通过本期测评成功读取到了lsm6dsl加速度+陀螺仪传感器的原始数据值,数值变化很稳定,我将会在下期测评中对本期测到的数据做一些处理或者姿态结算。</p>

<p>&nbsp;</p>

<div></div>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

wangerxian 发表于 2024-3-25 15:08

<p>用加速度和陀螺仪可以计算出角度嘛。</p>

qiao--- 发表于 2024-4-14 14:27

wangerxian 发表于 2024-3-25 15:08
用加速度和陀螺仪可以计算出角度嘛。

<p>可以,三个方向的偏移角度都可以算</p>

wangerxian 发表于 2024-4-14 19:14

qiao--- 发表于 2024-4-14 14:27
可以,三个方向的偏移角度都可以算

<p>那感觉和MPU6050一样,还有其他啥优势呀。</p>

qiao--- 发表于 2024-4-14 19:21

wangerxian 发表于 2024-4-14 19:14
那感觉和MPU6050一样,还有其他啥优势呀。

<p>看官方说是低功耗比较厉害</p>

wangerxian 发表于 2024-4-15 09:09

qiao--- 发表于 2024-4-14 19:21
看官方说是低功耗比较厉害

<p>那我觉得可以测一下它这个特性。</p>

qiao--- 发表于 2024-4-15 09:40

wangerxian 发表于 2024-4-15 09:09
那我觉得可以测一下它这个特性。

<p>行,最后专门来一期测下这个板子的低功耗</p>
页: [1]
查看完整版本: 【ST B-L475E-IOT01A1蓝牙Wi-Fi开发板】4-读取lsm6dsl(加速度+陀螺仪)原始数据