Pico-10DOF-IMU

来自Waveshare Wiki
跳转至: 导航搜索
Pico-10DOF-IMU
{{{name2}}}
{{{name3}}}
功能简介
特性 Sensors
' 无特性,不解释
' 无特性,不解释
' 无特性,不解释
' 无特性,不解释
接口 I2C

说明

产品简介

Pico-10DOF-IMU 是一款专为 Raspberry Pi Pico 设计的传感器扩展板,板载了陀螺仪、加速度计、磁力计、气压计等传感器,I2C 接口通信。 搭配 Raspberry Pi Pico 使用,可以采集周围环境的温度、大气压强等传感器数据,也可以轻轻松松就 DIY 一个可以检测运动姿态和方位的机器人。

产品特性

  • 板载 Raspberry Pi Pico 接口,适用于 Raspberry Pi Pico 系列主板
  • 板载 MPU9250 (3 轴加速度、3 轴陀螺仪和 3 轴磁力计),可检测运动姿态、方位和磁场
  • 板载 LPS22HB 大气压强传感器,可感知环境的大气压强
  • 提供完善的配套资料手册 (Raspberry Pi Pico C/C++ 和 MicroPython 等示例程序)

产品参数

传感器 参数
加速度计特性 分辨率:16 位
量程 (可选):±2、±4、±8、±16g
工作电流:450uA
陀螺仪特性 分辨率:16 位
量程 (可选):±250、±500、 ±1000、±2000°/sec
工作电流:3.2mA
磁力计特性 分辨率:14 位
量程:±4800µT
工作电流:280uA
气压计特性 测量范围:260 ~ 1260hPa
测量精度 (常温下):±0.025hPa
测量速率:1Hz - 75Hz
电气 参数
工作电压 5V

硬件说明

  • Pico-10DOF-IMU 有三次改版
    • 1. USB丝印更新,增加XYZ轴丝印,增加0R电阻进行电源管理
    • 2. FSYNC,ICM.INT,LPS.INT三个管脚分别使用0欧电阻连接两组GPIO,避免和其它模块共用时GPIO冲突
    • 3. 使用 MPU9250 替代 ICM20948, 更改丝印名为Pico-10DOF-IMU Rev2.1

硬件连接

Pico-10DOF-IMU010.jpg
1. 注意Pico-10DOF-IMU Rev2.1 上USB Logo标志和Raspberry Pi Pico的USB连接方向对应
2. 下载C程序时, 注意按住BOOT键再接入USB线缆

轴向说明

MPU9250上的加速度计,陀螺仪,磁力计等轴向如下图所示, MPU9250上的磁力计会受硬磁干扰导致磁力计读出来的数据进行椭球拟合的时候,球偏离中心,并且不圆.这样就会给磁力计带来一个初始磁场偏移,使得磁力计数据偏心,所示上电时候需要对磁力计进行初始化, 请参考下面初始化章节. Pico-10DOF-IMU019.jpg

引脚说明

Pico-10DOF-IMU002.jpg
1. Pico-10DOF-IMU Rev2.1 使用如上图所示的GPIO , 其中SDA(GPIO6) , SCL(GPIO7)引脚固定连接, MPU9250 INT(GPIO4) , FSYNC(GPIO22) , LPS22HB INT(GPIO5) 可通过0R电阻改变连接引脚为MPU9250 INT(GPIO22) , FSYNC(GPIO16) , LPS22HB INT(GPIO3) , 详情点击查看原理图
2. Pico-10DOF-IMU Rev2.1的40Pin座子上默认使用Raspberry Pi Pico的VSYS引脚的电源供电,若要控制切断10DOF的供电可将R13位置上0R电阻焊接到R15上, 则可用Raspberry Pi Pico上GPIO14关断或打开10DOF供电,详情点击查看原理图
3. 若要使用Pico的3.3V供电,将R13的0R电阻焊接到R12处位置上,详情点击查看原理图
4. 若要去除 Pico-10DOF-IMU Rev2.1 上的LED电源指示灯, 剔除板载R11位置的0R电阻,详情点击查看原理图

I2C总线

  • Pico-10DOF-IMU板载MPU9250使用I2C总线进行通信,读写时序示意图如下图所示,更多细节请参考datasheet

Pico-10DOF-IMU011.jpg
1. Raspberry Pi Pico作为Master设备先后拉低SDA,SCL的引脚发起I2C总线的START condition 然后写入设备地址(7bits)和写命令(占1bit)共8bits数据, 如果引脚连接正确,10ODF作为Slave设备发出ACK响应
2. Raspberry Pi Pico继续分别写入寄存器地址(RA)和寄存器值(DATA)并等待ACK响应 , 写入完毕后 , Raspberry Pi Pico先后拉高SCL,SDA引脚发送STOP condition
3. 如果Raspberry Pi Pico读取寄存器(RA)的DATA , 当写入RA等待ACK响应后重新发起START condition,再写入设备地址(7bits)和读命令(占1bit)共8bits等待ACK响应后, 10DOF返回DATA,Pico接收DATA完毕后,保持SDA高电平即可
4. 连续写寄存器寄存器值请参考上图中的burst Read/Write Sequence

产品尺寸

Pico-10DOF-IMU003.jpg

环境搭建

  • 本教程使用Arduino IDEThonny进行代码测试,点击下载相关IDE并安装后打开Arduino IDE,Thonny.

1. Arduino IDE安装Pico SDK , 点击菜单栏的Tools->Board->Boards Manager后搜索Raspberry Pi Pico ,找到对应库并点击Install进行安装 ,如下图所示
Pico-10DOF-IMU012.jpg
2.请参考Micropython官方文档搭建python环境,在Thonny的Tools->Options->Interprete选择Raspberry Pi Pico设备,如下图所示
Pico-10DOF-IMU013.jpg

程序下载

1. 点击下载示例程序
2. 解压示例程序,Arduino示例程序直接点击.ino打开, Micorpython示例程序请上传到Pico文件系统,如图所示
Pico-10DOF-IMU014.jpg

例程使用

Arduino

1. 按住Pico上BOOT按键再接入USB线缆, 打开.ino示例程序,点击菜单栏选择Tools->Board->Raspberry Pi Pico.如下图所示
Pico-10DOF-IMU015.jpg
2. 点击Edit下方upload下载代码到Pico , 下载完毕后打开设备管理器查看Pico的虚拟COM号,然后在Tools->Ports选择对应COM号
3. 点击打开Arduino IDE右上方的Monitor Serial , 按照串口提示初始化Pico-10DOF-IMU, 详细过程请查阅Pico-10DOF-IMU初始化章节
Pico-10DOF-IMU016.jpg

Micropython

  • 打开Pico文件系统中的mpu9250.py,lps22hb.py脚本, 并点击Run运行 , 其中mpu9250.py会输出相关信息对Pico-10DOF-IMU进行初始化配置,如下图所示,详细过程请查阅Pico-10DOF-IMU初始化章节

Pico-10DOF-IMU017.jpg

初始化

  • MPU9250上的磁力计会受硬磁干扰导致磁力计读出来的数据进行椭球拟合的时候,球偏离中心,并且不圆.这样就会给磁力计带来一个初始磁场偏移,使得磁力计数据偏心,如下图所示

Pico-10DOF-IMU018.png

  • 上电后, 根据串口发出的提示信息进行初始化.计算出磁力计偏心offset值,如下图所示

Pico-10DOF-IMU020.jpg

例程简析

本小节简析mpu9250.py示例程序.

  • mpu9250 = MPU9250()实例化MPU9250类,实例化过程会有陀螺仪初始化, 地磁校准环节
  • mpu9250.readAccel() , mpu9250.readGyro() , mpu9250.readMagnet()分别读取加速度计,陀螺仪,地磁计等原始数据.
  • mpu9250.imuAHRSupdate()是mahony算法用于将加速度计,陀螺仪,地磁计的值转变成欧拉角(pitch ,roll , yaw).请点击链接查阅mahony算法详细过程
  • 欧拉角如下图所示

Pico-10DOF-IMU021.jpg

mpu9250 = MPU9250()

try:
    while True:
        mpu9250.readAccel()
        mpu9250.readGyro()
        mpu9250.readMagnet()
        mpu9250.imuAHRSupdate(Gyro[0]/32.8*0.0175, Gyro[1]/32.8*0.0175,Gyro[2]/32.8*0.0175,
                Accel[0],Accel[1],Accel[2], Mag[0], Mag[0], Mag[2])
        pitch = math.asin(-2 * q1 * q3 + 2 * q0* q2)* 57.3
        roll  = math.atan2(2 * q2 * q3 + 2 * q0 * q1, -2 * q1 * q1 - 2 * q2* q2 + 1)* 57.3
        yaw   = math.atan2(-2 * q1 * q2 - 2 * q0 * q3, 2 * q2 * q2 + 2 * q3 * q3 - 1) * 57.3
        print("\r\n /-------------------------------------------------------------/ \r\n")
        print('\r\n Roll = %.2f , Pitch = %.2f , Yaw = %.2f\r\n'%(roll,pitch,yaw))
        print('\r\nAcceleration:  X = %d , Y = %d , Z = %d\r\n'%(Accel[0],Accel[1],Accel[2]))  
        print('\r\nGyroscope:     X = %d , Y = %d , Z = %d\r\n'%(Gyro[0],Gyro[1],Gyro[2]))
        print('\r\nMagnetic:      X = %d , Y = %d , Z = %d'%((Mag[0]),Mag[1],Mag[2]))
        time.sleep(0.1)

except KeyboardInterrupt:
    sys.exit()


FAQ


技术支持


联系人:钟工
EMAIL:3004517899@qq.com
电话:0755-83040712
QQ:3004517899
微信:扫下方二维码添加
Zsh.jpg

说明:进行售后服务前,请准备好客户信息(定货单位、定货人等),以供验证