打印
[活动专区]

【AT-START-WB415测评】I2C读取LSM303DLHC加速度-磁场传感器

[复制链接]
1993|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
catnull|  楼主 | 2022-8-22 19:04 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 catnull 于 2022-8-22 19:06 编辑

【AT-START-WB415测评】I2C读取LSM303DLHC加速度-磁场传感器
一、AT32WB415-CCU7-7及其开发板AT-START-WB415简介
盼望已久的雅特力ARM-Cortex-M4 AT32WB415-CCU7-7的开发板收到了,立即开始投入到学习中。先配置MDK开发环境,熟悉AT-Link的调试的技巧,学习ICP烧录程序等用法。首先必须要明白的是单芯片的AT32WB415-CCU7-7的强大之处:
1. 为物联网而生,为 IOT /AIOT边缘智能物联网而生
1  AT32WB415-CCU7-7 的组成架构分为两个核心
从图中可以知道,WB415的两个核心,一个是基于ARM9的上海博通的BK3432蓝牙SOC核心(BLE),另一个时AT23F415的核心(MCU),进行适当的封装。两个核心内部通过串口进行通信。MCU USART3 BLE的串口对接。BLE软件栈开放,可以自定义低功耗蓝牙的服务。MCUBLE之间通过AT命令集来进行互操作,实现操作指令和数据传输。
开发时可以自定义低功耗蓝牙服务,并按照例程和说明实现BLE的扩展。
但是也可以利用透传模式,通过向MCUUSART3串口写入需要传输的数据,交由BLE实现数据透明传输。这种方式减少了复杂的BLE的软件的编制工作,只需要关注于MCU部分的软件编写就能实现,提高了开发的效率,降低了软件的复杂度。
值得注意的是,如果用MDK编译BLE例程,要安装ARM9legacy支持包。
AT32WB415-CCU7-7的这种MCUBLE 的松耦合的硬件架构,使得熟悉MCU程序开发的情况下,只需要处理好串口的AT命令控制,就可以实现物联网所需要的低功耗蓝牙功能。把原本额外需要增加的蓝牙模块进行了集成,减少了元器件的耗费和PCB面积,具备很高的灵活行,也降低了控制部分逻辑和蓝牙通信部分逻辑的耦合。
2. 具备强大的运算能力,具备AIOT的实力
AT32WB415-CCU7-7MCU部分,实际上是一个AT32F415核心。基于ARM Cortex-M4处理器IP。最大的特色是其支持DSP功能,具备硬件浮点运算能力。可以使用CMSIS的浮点运算数学库,DSP函数库,NN库,进行边缘人工智能的计算处理,低功耗,高算力的特点。
3. 软件的生态
固件支持包提供了样例支持,在examples 中提供了各个外设接口的例程,是学习基本的I2CUSARTGPIO和定时器等外设功能的良好的起点。目前也有一部分中间件代码,例如i2c_application的中间件,封装了i2c的常用操作。相当于stm软件生态库的HAL库。所以很多传感器的STM32的库,是可以很方便的移植到AT32WB415芯片的。
最丰富的传感器驱动库,实际上是Arduino传感器驱动库。github上有一个支持AT32F40x AT32F42xArduino库中间件,很遗憾,对于AT32F41x的支持还不能兼容,期待后续可以用上这个强大的中间件的AT32F41x适配版本。其原因是底层的固件库的架构不一致。
二、LSM303DLHC-加速度和磁场模块介绍
LSM303DLHC加速度和磁场模块,可以实时的测量出当前模块的加速度和所在位置的磁感应强度。通过I2C接口接受控制和数据传输。加速度的测量原理是以MEMS微机电技术测得的重力加速度,(估计是通过测量弹力转换为加速度值)。磁场测量部分基于霍尔效应,当然其内部做了滤波和校正等工作,是核心技术。这种微机电传感器工作稳定,操作和应用简单。在Arduino平台的库的基础上,可以很简单的应用其读取加速度和磁场。如果使用AT32WB415进行控制,需要重新移植驱动库。在github.com上搜索可以得到lsm303dlhc的库包,主要是基于stm32生态。最后选择基于HAL库的驱动,方便使用AT32的固件包的i2c中间件进行移植。
2 测试用AT-START-WB415         开发板和lsm303dlhc(gy-511)模块连接。
模块的3.3V接开发板VDD, GND接开发板GND引脚。开发板I2C1 SCLPB6 引脚, SDA PB7引脚。由于模块上已经有了上拉电阻(实际是一个电平变换兼具上拉电阻功能),这里不需要额外配置上拉电阻。
3 模块的电平变换部分相当于上拉电阻
三、LSM303DLHC库函数移植过程
由于所下载的基于STM32HAL库的驱动库文件,需要针对I2C的部分进行修改,主要是要设置好超时时间,以及i2c的一些状态标志位,判断i2c的工作的流程等代码,需要相应的做出修改。
1. 将库文件放入项目的目录文件夹,并以lsm305lib命名(应为lsm303lib)
4 将库文件放入项目的文件夹 lsm305lib
2. mdk里面新建 group lsm305lib,并添加文件“lsm303dlhc.c.
5 mdk中新建group 项目 lsm305lib
3. 设置头文件的包含目录。
6 设置库文件的包含文件的目录。在 项目的optionC/C++标签的libraries栏目设置
4.  I2C部分的移植需要注意的点。
.h文件中,i2c的接口抽象为一个结构体变量,i2c_handle_type *i2c ,而库文件得到的参数是其结构体的指针,在应用时只需要先把结构体配置好,把这个结构体指针传给库文件就可以了。具体的代码细节请参考附件代码包。
固件包的中间件 middlewares 目录中的i2c_application.c/.h 可以和HAL风格的驱动很方便的对应,需要加以利用。必要时可以以相同作用的功能函数来代替。例如HAL中等待I2CREADY_STATE, 固件库中没有,那么就可以用i2c_wait_end()的函数来替换,起到相似的效果。
另外因为使用的是i2c的中断模式,需要在at32wb415_int.c中添加中断处理函数。

7 i2c中断处理函数

因为默认的文件是不包含各个外设的具体处理函数的。
四、实验结果
接收到传感器的原始数据,并上传到电脑串口,进行输出。
8 在串口上接收到的获取的加速度数据
五、后续的工作
Lsm303dhlc库比较简单,离实用还有很大距离,参考Arduino库,继续编写矢量功能和磁场测量功能。并研究通过BLE传输到手机上面进行处理。
六、源码下载
lsm305.zip (2.21 MB)






使用特权

评论回复
沙发
21ic大掌柜| | 2022-9-1 09:43 | 只看该作者
感谢发帖~

使用特权

评论回复
板凳
dzfansman| | 2022-9-3 17:08 | 只看该作者
这个是st的芯片吧

使用特权

评论回复
地板
saservice| | 2022-9-3 17:53 | 只看该作者
不直达这个的性能怎么样

使用特权

评论回复
5
mmbs| | 2022-9-3 18:32 | 只看该作者
LSM303DLHC的测量精度还可以吗

使用特权

评论回复
6
catnull|  楼主 | 2022-9-3 20:53 | 只看该作者
需要做一些滤波和校正的工作。重力加速度说明书有16bit,有效的应该没有这么高。arduino库里面只选12位

使用特权

评论回复
7
Henryko| | 2022-9-7 21:31 | 只看该作者
这个性能怎么样?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

39

帖子

1

粉丝