1725|0

261

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

【ST B-L475E-IOT01A1蓝牙Wi-Fi开发板】3-读取lis3mdl三轴磁力传感器数据判断方向 [复制链接]

本帖最后由 qiao--- 于 2024-3-12 16:26 编辑

1.查看原理图查看引脚

开发一个新的模块时,第一步是看该传感器挂载哪个片上外设上,他的引脚是什么,如下图

 

  从上图可以看到这个传感器挂载在I2C2上,引脚为PB10和PB11,接下来我们就可以用cubemx来进行配置了。

 

2.用cubemx配置I2C2的引脚

 

然后配置I2C需要的一些参数,我这里采用默认的就行。

 

3.移植LIS3MDLTR传感器的驱动

我在网上找了一些这个传感器的启动,本次就教大家如何去移植这个驱动

 

上面是我在网上找的驱动,我们直接把drvier下面的驱动添加到我们的工程里面,并新建一个应用文件

 

驱动代码是使用面向对象的编程实现的,所以移植起来非常方便。

我们在应用里面只用复制他的example示例代码做修改。

 

 

4.LIS3MDLTR传感器应用代码修改

我们将他的应用代码复制到我们的文件夹下面,然后实现他设备的结构体

 

这些代码是需要我们完成的,就是I2C的读取和发送函数,库文件已经帮我们实现好了,代码如下所示:

  • static int32_t platform_write(void *handle, uint8_t Reg, uint8_t *Bufp,
  • uint16_t len)
  • {
  • HAL_I2C_Mem_Write(handle, LIS3MDL_I2C_ADD_H, 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, LIS3MDL_I2C_ADD_H, Reg,
  • I2C_MEMADD_SIZE_8BIT, Bufp, len, 1000);
  • return 0;
  • }
  • /*
  • * Function to print messages
  • */
  • void tx_com( uint8_t *tx_buffer, uint16_t len )
  • {
  • HAL_UART_Transmit( &huart1, tx_buffer, len, 1000 );
  • }

这样读取他的三轴磁力的代码就写完了,我们打开串口看看输出的事实我们需要的

 

输出正确,温度输出也在正常的范围内。

 

5.用LIS3MDLTR传感器做方向判断

用三轴磁力计可以判断方向的,我这里就以简单的东西南北方向的判断举例。我是先算出他的方向角,进而用他的方向角来判断方向,这里我们只需要取y方向的磁力和x方向的磁力的atan2值来算方向角就可以了,代码如下所示

  • float heading = atan2(magnetic_mG[0], magnetic_mG[0]);
  • heading = heading < 0 ? (heading + 2 * PI) : heading;
  • heading = heading * 180 / PI;

然后进行判断

  • char direction[3];
  • if ((heading >= 337.5 && heading <= 360) || (heading >= 0 && heading < 22.5)) {
  • sprintf(direction,"N");
  • } else if (heading >= 22.5 && heading < 67.5) {
  • sprintf(direction,"NE");
  • } else if (heading >= 67.5 && heading < 112.5) {
  • sprintf(direction,"E");
  • } else if (heading >= 112.5 && heading < 157.5) {
  • sprintf(direction,"SE");
  • } else if (heading >= 157.5 && heading < 202.5) {
  • sprintf(direction,"S");
  • } else if (heading >= 202.5 && heading < 247.5) {
  • sprintf(direction,"SW");
  • } else if (heading >= 247.5 && heading < 292.5) {
  • sprintf(direction,"W");
  • } else if (heading >= 292.5 && heading < 337.5) {
  • sprintf(direction,"NW");
  • }
  • printf("the direction is %s\r\n",direction);

 

6.验证

我们打开串口助手看看方向正确与否,下面是我将板子放着不动输出的数据,可以看到后面数据是稳定的。方向是西南方

 

 

总结:通过本期测评,我读出了板载的LIS3MDLTR三轴磁力传感器,并可以读出对于开发板而言的方向。

 

stm32L475_lis3mdl.7z (8.16 MB, 下载次数: 6)

 

查看本帖全部内容,请登录或者注册
此帖出自无线连接论坛
点赞 关注(1)
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
初学者应购置些什么?

随着近年来青少年电子爱好者的增多,此类现象十分普遍,一是初学者刚入门不识行情,二是有人借此谋取不当利益。感慨之余仅以一家 ...

移植好的ucos2工程(基于LPC2000和Keil MDK)

欢迎大家提意见,谢谢!!

自制廉价的GPS外接天线

有网友试过,效果确实不错:宿舍窗台上(11楼)不到20秒,显示了时间,再过几秒,就显示了经纬度,没调,就收到4颗心!! 材 ...

给当年磁学没学好的朋友《磁性元器件分册》-赵修科

这是一本很经典的有关磁性元件的书在学校一般磁方面讲得比较少很多人也没有理解什么是磁场上次看到一个人怎么都不理解(很多人仅 ...

解决体重称HX711芯片的隐藏BUG问题

前言 之前做了一个项目,里面有一个体重检测的功能,查阅了很多的资料,最后锁定使用HX711芯片,这个国产的芯片功能集成的很 ...

DSP的嵌入式温度测量系统

为了实现嵌入式温度测量系统,提出了基于MZBB-2铂薄膜热敏与TMS320F2812DSP控制芯片的嵌入式解决方案,完成 ...

体验一款国产USB音频芯片后的所想,所感

芯片特点 1,USB1.0,2.0可以兼容 2,32位的MCU(M0的内核),频率可以达到96MZH, 2,内置DSP,32位的处理能力 3,已经写好ENC ...

综合布线系统光缆分类及其特点?

综合布线系统光缆是一种用于数据传输和通信的电缆,常用于建筑物内部网络和通信系统的布线。光缆采用光纤作为传输介质,能够以光 ...

【小华工控新品HC32F448】03.体验AOS自动运行系统的智能

1.概述 小华HC32F488系列芯片具备了AOS自动运行系统这个外设功能,啥是AOS自动运行系统呢?难道HC32F488芯片内自带了一个能够 ...

NMOS防反接电路,这里左边的D和S应该对调才对吧?

NMOS防反接电路,这里左边的D和S应该对调才对吧? 865275

快速回复 返回顶部 返回列表