本帖最后由 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三轴磁力传感器,并可以读出对于开发板而言的方向。