六轴传感器 SH3001

SH3001简介

SH3001是Senodia公司生产的一款六轴姿态传感器,可测量芯片自身X、Y、Z轴的加速度以及角速度参数,通过姿态融合,进而得到姿态角。

在这里插入图片描述
三轴加速度计(Accelerometer):测量X、Y、Z轴的加速度。
三轴陀螺仪传感器(Gyroscope):测量X、Y、Z轴的角速度。

在这里插入图片描述
小球完全悬空时,对每个面都没有施加力,所以每个方向的加速度都为0.

在这里插入图片描述
当物体向x+轴运动,小球由于惯性,对x-轴施加力(相反方向)。
哪个面受力,就哪个面产生值。

在这里插入图片描述
低通滤波器允许低于截止频率的信号通过,高于截止频率的信号不能通过,可平滑去噪。

加速度计数据获取:
acc_x = ACC_XDATA_H << 8 | ACC_XDATA_L
acc_y = ACC_YDATA_H << 8 | ACC_YDATA_L
acc_z = ACC_ZDATA_H << 8 | ACC_ZDATA_L

要使数据更精确,通过厂家提供的函数接口,读取补偿系统

SH3001时序

SH3001寻址
在这里插入图片描述

  • 设备地址:固定位+硬件选择位(0110110)0x36
  • 通讯地址:固定位+硬件选择位+数据传输方向位(0x36 << 1)| (R/W)
  • 写操作地址:(01101100)0x6c
  • 读操作地址:(01101101)0x6d

SH3001读取N字节函数

void sh3001_read_nbytes(uint8_t devaddr, uint8_t regaddr, uint8_t length, uint8_t *readbuf)
{
	iic_start(); //主机发送起始信号
	iic_send_byte(devaddr << 1 | 0x00); //主机发送sh3001写操作地址
	iic_wait_ack(); //主机等待sh3001应答
	iic_send_byte(regaddr); //主机发送寄存器地址
	iic_wait_ack(); //主机等待sh3001应答

	iic_start(); //主机发送起始信号
	iic_send_byte(devaddr << 1 | 0x01); //主机发送sh3001读操作地址
	iic_wait_ack(); 

	for(uint8_t i=0; i<length; i++)
	{
		readbuf[i] = iic_read_byte(i == (length-1) ? 0:1); //为1时发送应答信号,为0时发送非应答信号。
	}
	iic_stop();
}

SH3001写入N字节函数

void sh3001_write_nbytes(uint8_t devaddr, uint8_t regaddr, uint8_t length, uint8_t *writebuf)
{
	iic_start(); //主机发送起始信号
	iic_send_byte(devaddr<<1 | 0x00); //主机发送sh3001写操作地址
	iic_wait_ack();
	iic_send_byte(regaddr);
	iic_wait_ack();
	for(uint8_t i=0; i<length; i++)
	{
		iic_send_byte(writebuf[i]);
		iic_wait_ack();
	}
	iic_stop();
}

SH3001驱动步骤 (非中断方式)

  1. 初始化SH3001:调用iic_init()进行IIC接口初始化
  2. 编写SH3001基础读写接口函数:多字节写、多字节读
  3. 重置内部模块:启动驱动、ADC复位、CVA复位(厂家建议)
  4. 配置加速度计、陀螺仪、温度传感器:配置A/G输出频率、量程、截止频率
  5. 选择SH3001电源模式:设置为正常模式(高性能模式)(厂家函数接口)
  6. 读取原始数据:获取加速度计数据、陀螺仪数据、温度数据(更精确得考虑补偿)

在这里插入图片描述

  • SENB连接到VCC,选择使用IIC接口
  • SDO连接到GND,参与决定器件地址

姿态解算

姿态解算指读取传感器数据,实时算出飞行器的姿态角(偏航角yaw、俯仰角pitch、横滚角roll)

利用加速度计测量角度(俯仰角与横滚角):
假设载体处于静止水平放置,此时加速度计仅受重力作用,从Z轴可读到1g数据(g为重力加速度),X轴和Y轴两个方向读到0。

采用多种传感器数据来检测姿态的处理算法被称为“姿态融合”。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
sh20 温湿度传感器是一种常用的传感器,可以用于测量周围环境的温度和湿度。下面是一个基本的sh20 温湿度传感器程序的实现。 首先,我们需要导入 sh20 温湿度传感器的库文件,并初始化传感器。初始化包括设置传感器的工作模式和参数。例如,可以选择温度和湿度的测量范围,并选择测量的精度。 接下来,我们需要通过传感器的接口读取温湿度值。可以使用传感器的内置功能来读取当前环境的温湿度,并将其保存在变量中。 然后,我们可以对读取的温湿度值进行处理,例如数据的转换和校准。传感器可能会返回原始的温湿度值,我们可以根据传感器的规格书来转换为真实的温湿度值。如果需要,还可以进行数据的滤波和平均处理,以提高测量的准确性和稳定性。 最后,我们可以通过输出设备,例如串口或显示屏,将温湿度值显示出来。可以选择以数字形式显示,也可以选择以图形或图表的形式显示。可以根据实际需求,选择合适的输出方式。 总的来说,实现sh20 温湿度传感器程序的关键步骤包括初始化传感器、读取温湿度值、处理数据和输出结果。此外,还可以根据实际应用需求,添加其他功能,例如报警、数据存储和远程监控等。 需要注意的是,以上只是一个基本的sh20 温湿度传感器程序的实现示例,具体的程序设计可能还需要根据具体传感器的规格和接口要求进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

饼干饼干圆又圆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值