• 六轴传感器 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();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    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();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    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。

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

  • 相关阅读:
    C语言入门
    椭圆曲线加密算法中公钥与私钥互换性分析
    面试还被问TCP?一条龙通关
    Trino源码Gitlab CICD单测环境建设
    Redis 的数据过期了就会马上删除么?
    ssm基于WEB的房屋出租管理系统的设计与实现161620
    直方图的计算,绘制与分析
    2022-08-20 数据库连接池
    postgres 自定义内置函数
    技术与业务同等重要,偏向任何一方都是错误
  • 原文地址:https://blog.csdn.net/Caramel_biscuit/article/details/133807105