六轴传感器 SH3001

SH3001简介

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

六轴传感器 SH3001_第1张图片
三轴加速度计(Accelerometer):测量X、Y、Z轴的加速度。
三轴陀螺仪传感器(Gyroscope):测量X、Y、Z轴的角速度。

六轴传感器 SH3001_第2张图片
小球完全悬空时,对每个面都没有施加力,所以每个方向的加速度都为0.

六轴传感器 SH3001_第3张图片
当物体向x+轴运动,小球由于惯性,对x-轴施加力(相反方向)。
哪个面受力,就哪个面产生值。

六轴传感器 SH3001_第4张图片
低通滤波器允许低于截止频率的信号通过,高于截止频率的信号不能通过,可平滑去噪。

加速度计数据获取:
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寻址
六轴传感器 SH3001_第5张图片

  • 设备地址:固定位+硬件选择位(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. 读取原始数据:获取加速度计数据、陀螺仪数据、温度数据(更精确得考虑补偿)

六轴传感器 SH3001_第6张图片

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

姿态解算

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

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

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

你可能感兴趣的:(stm32,单片机,嵌入式硬件)