产品规格书 :SPECIFICATION
型 号:JY61
描 述:六轴姿态角度传感器
生产执行标准参考
企业质量体系标准: ISO9001:2016标准
倾角仪生产标准:GB/T191SJ 20873-2016
产品试验检测标准:GB/T191SJ 20873-2016
此六轴模块采用高精度的陀螺加速度计MPU6050,通过处理器读取MPU6050的测量数据然后通过串口输出,免去了用户自己去开发MPU6050复杂的IIC协议,同时精心的PCB布局和工艺保证了MPU6050收到外接的干扰最小,测量的精度最高。
模块内部自带电压稳定电路,可以兼容3.3V/5V的嵌入式系统,连接方便。
采用先进的数字滤波技术,能有效降低测量噪声,提高测量精度。
模块保留了MPU6050的IIC接口,以满足用户访问底层测量数据(加速度、角速度)的需求。
模块内部集成了姿态解算器,配合动态卡尔曼滤波算法,能够在动态环境下准确输出模块的当前姿态,姿态测量精度0.05度,稳定性极高,性能甚至优于某些专业的倾角仪!
采用邮票孔镀金工艺,品质保证,可嵌入用户的PCB板中。
注:本模块不含磁场计,没有磁场的观测量对偏航角进行滤波,所以偏航角度是通过纯积分计算出来的,不可避免地会有漂移现象,只能实现短时间内的旋转角度测量。而X,Y轴角度可以通过重力场进行滤波修正,不会出现漂移现象。
尺寸 | 15.24mmX15.24mm X 2mm |
---|---|
重量 | 0.6g |
1、电压:3.3V~5V
2、电流:<10mA
3、体积:15.24mm X 15.24mm X 2mm
4、焊盘间距:上下100mil(2.54mm),左右600mil(15.24mm)
5、测量维度:加速度:3维,角速度:3维,角度:3维
6、量程:加速度:±16g,角速度:±2000deg/s,角度X Z轴±180° Y轴±90°。
7、分辨率:加速度:0.0005g,角速度:0.61°/s。
8、测量精度:静态0.05°,动态0.1°。
9、数据输出内容:加速度、角速度、角度。
10、数据输出频率:100HZ(波特率115200)/20HZ(波特率9600)。
11、波特率:9600kps、115200kps(默认)。
12、数据接口:串口(TTL电平),IIC(直连MPU6050芯片,无姿态角度输出)
注:模块的数据输出频率只有两种:100HZ(波特率115200)和20HZ(波特率9600)。
名称 | 功能 |
---|---|
VCC | 模块电源,3.3V或5V输入 |
RX | 串行数据输入,TTL电平 |
TX | 串行数据输出,TTL电平 |
GND | 地线 |
SCL | IIC时钟线 |
SDA | IIC信号线 |
如上图所示,模块的轴向在上图右上方标示出来,向右为X轴,向上为Y轴,垂直与模块向外为Z轴。旋转的方向按右手法则定义,即右手大拇指指向轴向,四指弯曲的方向即为绕该轴旋转的方向。X轴角度即为绕X轴旋转方向的角度,Y轴角度即为绕Y轴旋转方向的角度,Z轴角度即为绕Z轴旋转方向的角度。
硬件连接视频
与计算机连接,需要USB转TTL电平的串口模块。推荐以下两款USB转串口模块:
六合一串口模块
1.USB-TTL/三合一串口模块:把模块和USB-TTL连接好,在插到电脑上。模块和USB-TTL连接方法是:模块的VCC TX RX GND 分别于USB串口模块的+5V/3V3 RX TX GND对应相接,注意TX和RX需要交叉,即TX接RX,RX接TX。
2.六合一模块:模块拨码开关1拨至ON,拨码开关2拨至2,开关S1拨至other(丝印)。模块的VCC TX RX GND 分别于六合一模块的+5V/3V3 RX TX GND对应相接,注意TX和RX需要交叉,即TX接RX,RX接TX。六合一USB-TTL模式拨码如下:
上位机使用视频
上位机下载地址
注意,上位机无法运行的用户请下载安装.net framework4.0:
通过USB转串口模块连接上电脑打开上位机,安装好串口模块对应的驱动CP210X或者CH340以后,可以再设备管理器中查询到对应的端口号,
下图安装的是CH340驱动设备管理器显示如下:
安装CP210X驱动设备管理器显示如下:
三合一驱动程序为CH340,驱动下载地址
六合一驱动为CP2102,驱动下载地址
在【资料包/上位机】中,打开MiniIMU.exe软件,点击串口选择菜单,选择刚才设备管理器里面看到的COM号。
在上位机软件上点击波特率菜单选择波特率115200,选择完成后,点击“打开”选项卡,上位机左下角显示COM10 open success,baud 115200,表示串口已打开,上位机软件上即可出现数据。
注意:必须在上位机上能正常接收到数据才能进行设置。
模块使用前,需要对模块进行校准。模块的校准包括Z轴归0、加计校准。
Z轴归0是使模块Z轴角度初始状态为相对0度角,模块使用前和Z轴漂移较大的情况下可以进行Z轴归0校准,模块上电时Z轴会自动归0。
上位机Z轴归0方法如下:首先模块静止放置,点击配置打开配置栏,在配置栏里面的“Z轴归零”选项,模块数据栏里面可以看到Z轴角度回到0°。
加计校准用于去除加速度计的零偏。传感器在出厂时都会有不同程度的零偏误差,需要手动进行校准后,测量才会准确。
加计校准方法如下:首先使模块保持水平静止,点击加计校准,1~2秒后模块加速度三个轴向的值会在0
0 1左右,X 和Y轴角度在0°左右。校准后X Y轴角度就更精确了。
模块支持多种波特率,默认波特率为115200。设置模块的波特率需要在软件与模块正确连接的基础上,在配置栏的通信速率下拉框中选择需要更改的波特率。波特率115200时模块回传速率为100HZ,波特率为9600时模块回传速率为20HZ。
注意:更改以后,模块在原来的波特率下已经不输出数据了,要重新在上位机上选择已经更改过的波特率,才会输出数据。
传感器模块内部不带存储芯片,数据可以通过上位机来记录保存。
使用方法:点记录—开始按钮可以将数据保存为文件
点击停止按钮,出现如图所示的弹窗:
点击确定,即打开保存的文件,如下图所示:
保存的文件在上位机程序的目录下Data1911211190029.txt:
文件开头有标明数据对应的值,Time代表时间,ax ay az分别表示 x y z三个轴向上的加速度, wx wy wz分别表示 x y z三个轴向上的角速度,Anglex Angley Anglez分别表示 x y z三个轴向的角度,T代表时间。
数据可以导入到Excel或者Matlab中进行分析。在Matlab环境下运行上位机根目录下的“Matlab绘图.m”文件,可以绘制数据曲线图。
模块默认安装方向为水平安装,当模块需要垂直放置时,可以用垂直安装设置。
垂直安装方法:垂直安装时,把模块绕X轴旋转90°垂直放置,在上位机配置栏里面“安装方向”选项中选择“垂直”。设置完成后要进行校准才能使用。
休眠:模块暂停工作,进入待机状态。休眠后可以降低功耗。
解休眠:模块从待机状态进入工作状态。
使用方法:模块默认为工作状态,在上位机配置栏里面点击“休眠”选项,进入休眠状态,再点击“休眠”选项,模块解除休眠。
注:休眠后再解除休眠模块的Z轴或归0,相当于重新上电了,所以Z轴会归0。
静止阀值:模块静止时,陀螺仪芯片测量的角速度是有微小变化的。静止阀值的作用是当角速度小于阀值时,模块输出角速度为0。(注意角速度在匀速转速的情况下,输出有问题,推荐在匀速转动下用61P)
使用方法:在上位机配置栏里面点击“静止阀值”选项,即可设置阀值。模块默认为0.122°/s。
测量带宽:模块只输出测量带宽以内的数据,大于带宽的数据会自动滤除。
使用方法:在上位机配置栏里面点击“测量带宽”选项,即可设置。默认为10HZ。
注:静止阀值和测量带宽一般为默认的就可以了,不需要去设置。
JY61模块支持IIC模式,IIC总线是直接连接MPU6050芯片的,所以IIC只输出陀螺仪芯片的原始数据,即三轴加速度和三轴角速度,不能输出姿态角度。
在上位机配置栏里面把模式转换成为IIC模式,模块将释放MPU6050的IIC总线,用户可以通过IIC访问MPU6050芯片。如果收到0x55 0x50开头的数据包,说明模块已经进入到了IIC模式。
说明:IIC访问方式参考MPU6050数据手册,硬件连接方面需要接4.7K的上拉电阻。
数据编号 | 数据内容 | 含义 |
---|---|---|
0 | 0x55 | 包头 |
1 | 0x50 | 标识模块进入IIC模式 |
2 | 0x00 | |
3 | 0x01 | |
4 | 0x00 | |
5 | 0x02 | |
6 | 0x00 | |
7 | 0x03 | |
8 | 0x00 | |
9 | 0x04 | |
10 | Sum | 校验和 |
电平:TTL电平(非RS232电平,若将模块错接到RS232电平可能造成模块损坏)
波特率:115200/9600,停止位1,校验位0。
指令内容 | 功能 | 备注 |
---|---|---|
0xFF 0xAA 0x52 | 角度初始化 | 使Z轴角度归零 |
0xFF 0xAA 0x67 | 加速度计校准 | 校准加速度零偏 |
0xFF 0xAA 0x60 | 休眠及解休眠 | 待机模式和工作模式 |
0xFF 0xAA 0x61 | 使用串口,禁用IIC | 设置为串口输出 |
0xFF 0xAA 0x62 | 禁用串口,使用IIC接口 | 设置为IIC接口输出 |
0xFF 0xAA 0x63 | 波特率115200,回传速率100HZ | 设置波特率为115200 |
0xFF 0xAA 0x64 | 波特率9600,回传速率20HZ | 设置波特率为9600 |
0xFF 0xAA 0x65 | 水平安装 | 模块水平放置 |
0xFF 0xAA 0x66 | 垂直安装 | 模块垂直放置 |
说明:
1.模块上电以后需先保持静止,模块内部的MCU会在模块静止的时候进行自动校准(消除陀螺零漂),校准以后Z轴的角度会重新初始化为0,Z轴角度输出为0时,可视为自动校准完成的信号。
2.出厂默认设置使用串口时,波特率115200,帧率100Hz(100HZ指的是1秒回传100个加速度、角速度、角度数据包)。配置可通过上位机软件配置,因为所有配置都是掉电保存的,所以只需配置一次就行。
模块发送至上位机每帧数据分为3个数据包,分别为加速度包,角速度包和角度包,3个数据包顺序输出。波特率115200时每隔10ms输出1帧数据。
数据编号 | 数据内容 | 含义 |
---|---|---|
0 | 0x55 | 包头 |
1 | 0x51 | 标识这个包是加速度包 |
2 | AxL | X轴加速度低字节 |
3 | AxH | X轴加速度高字节 |
4 | AyL | Y轴加速度低字节 |
5 | AyH | Y轴加速度高字节 |
6 | AzL | Z轴加速度低字节 |
7 | AzH | Z轴加速度高字节 |
8 | TL | 温度低字节 |
9 | TH | 温度高字节 |
10 | Sum | 校验和 |
加速度计算公式:
ax=((AxH<<8)|AxL)/32768*16g(g为重力加速度,可取9.8m/s2)
ay=((AyH<<8)|AyL)/32768*16g(g为重力加速度,可取9.8m/s2)
az=((AzH<<8)|AzL)/32768*16g(g为重力加速度,可取9.8m/s2)
温度计算公式:
T=((TH<<8)|TL) /340+36.53 ℃
校验和:
Sum=0x55+0x51+AxH+AxL+AyH+AyL+AzH+AzL+TH+TL
说明:
数据是按照16进制方式发送的,不是ASCII码。
每个数据分低字节和高字节依次传送,二者组合成一个有符号的short类型的数据。例如X轴加速度数据Ax,其中AxL为低字节,AxH为高字节。转换方法如下:
假设Data为实际的数据,DataH为其高字节部分,DataL为其低字节部分,
那么:Data=((short)DataH<<8)|DataL。这里一定要注意DataH需要先强制转换为一个有符号的short类型的数据以后再移位,并且Data的数据类型也是有符号的short类型,这样才能表示出负数。
详细解算示例
数据编号 | 数据内容 | 含义 |
---|---|---|
0 | 0x55 | 包头 |
1 | 0x52 | 标识这个包是角速度包 |
2 | wxL | X轴角速度低字节 |
3 | wxH | X轴加速度高字节 |
4 | wyL | Y轴加速度低字节 |
5 | wyH | Y轴加速度高字节 |
6 | wzL | Z轴加速度低字节 |
7 | wzH | Z轴加速度高字节 |
8 | TL | 温度低字节 |
9 | TH | 温度高字节 |
10 | Sum | 校验和 |
角速度计算公式:
wx=((wxH<<8)|wxL)/32768*2000(°/s)
wy=((wyH<<8)|wyL)/32768*2000(°/s)
wz=((wzH<<8)|wzL)/32768*2000(°/s)
温度计算公式:
T=((TH<<8)|TL) /340+36.53 ℃
校验和:
Sum=0x55+0x52+wxH+wxL+wyH+wyL+wzH+wzL+TH+TL
数据编号 | 数据内容 | 含义 |
---|---|---|
0 | 0x55 | 包头 |
1 | 0x53 | 标识这个包是角度包 |
2 | RollL | X轴角度低字节 |
3 | RollH | X轴角度高字节 |
4 | PitchL | Y轴角度低字节 |
5 | PitchH | Y轴角度高字节 |
6 | YawL | Z轴角度低字节 |
7 | YawH | Z轴角度高字节 |
8 | TL | 温度低字节 |
9 | TH | 温度高字节 |
10 | Sum | 校验和 |
角速度计算公式:
滚转角(x轴)Roll=((RollH<<8)|RollL)/32768*180(°)
俯仰角(y轴)Pitch=((PitchH<<8)|PitchL)/32768*180(°)
偏航角(z轴)Yaw=((YawH<<8)|YawL)/32768*180(°)
温度计算公式:
T=((TH<<8)|TL) /340+36.53 ℃
校验和:
Sum=0x55+0x53+RollH+RollL+PitchH+PitchL+YawH+YawL+TH+TL
注:
姿态角解算时所使用的坐标系为东北天坐标系,正方向放置模块,如下图所示向右为X轴,向上为Y轴,垂直模块向外为Z轴。欧拉角表示姿态时的坐标系旋转顺序定义为Z-Y-X,即先绕Z轴转,再绕Y轴转,再绕X轴转。
滚转角的范围虽然是±180度,但实际上由于坐标旋转顺序是Z-Y-X,在表示姿态的时候,俯仰角(Y轴)的范围只有±90度,超过90度后会变换到小于90度,同时让X轴的角度大于180度。详细原理请自行百度欧拉角及姿态表示的相关信息。
由于三轴是耦合的,只有在小角度的时候会表现出独立变化,在大角度的时候姿态角度会耦合变化,比如当Y轴接近90度时,即使姿态只绕Y轴转动,X轴的角度也会跟着发生较大变化,这是欧拉角表示姿态的固有问题。
double a[3],w[3],Angle[3],T;
void DecodeIMUData(unsigned char chrTemp[])
{
switch(chrTemp[1])
{
case 0x51:
a[0] = (short(chrTemp[3]/8|chrTemp[2]))/32768.0*16;
a[1] = (short(chrTemp[5]/8|chrTemp[4]))/32768.0*16;
a[2] = (short(chrTemp[7]/8|chrTemp[6]))/32768.0*16;
T = (short(chrTemp[9]/8|chrTemp[8]))/340.0+36.53;
break;
case 0x53:
Angle[0] = (short(chrTemp[3]/8\|chrTemp[2]))/32768.0*180;
Angle[1] = (short(chrTemp[5]/8\|chrTemp[4]))/32768.0*180;
T = (short(chrTemp[9]/8\|chrTemp[8]))/340.0+36.53;
printf("a = %4.3f\t%4.3f\t%4.3f\t\r\n",a[0],a[1],a[2]);
printf("Angle = %4.2f\t%4.2f\tT=%4.2f\r\n",Angle[0],Angle[1],T);
break;
}
}
分成两个部分,一个是中断接收,找到数据的头,然后把数据包放入数组中。另一个是数据解析,放在主程序中(以下为AVR单片机代码,不同单片机读取寄存器略有差异,需根据实际情况调整)。
unsigned char Re_buf[11],counter=0;
unsigned char sign;
interrupt [USART_RXC] void usart_rx_isr(void) //USART串行接收中断
{
Re_buf[counter]=UDR;//不同单片机略有差异
if(counter==0&&Re_buf[0]!=0x55) return; //第0号数据不是帧头,跳过
counter++;
if(counter==11) //接收到11个数据
{
counter=0; //重新赋值,准备下一帧数据的接收
sign=1;
}
}
float a[3],w[3],angle[3],T;
extern unsigned char Re_buf[11],counter;
extern unsigned char sign;
while(1)
{
if(sign)
{
sign=0;
if(Re_buf[0]==0x55) //检查帧头
{
switch(Re_buf [1])
{
case 0x51:
a[0] = (short(Re_buf [3]/8| Re_buf [2]))/32768.0*16;
a[1] = (short(Re_buf [5]/8| Re_buf [4]))/32768.0*16;
a[2] = (short(Re_buf [7]/<8| Re_buf [6]))/32768.0*16;
T = (short(Re_buf [9]/8| Re_buf [8]))/340.0+36.53;
break;
case 0x52:
w[0] = (short(Re_buf [3]/8| Re_buf [2]))/32768.0*2000;
w[1] = (short(Re_buf [5]/8| Re_buf [4]))/32768.0*2000;
w[2] = (short(Re_buf [7]/8| Re_buf [6]))/32768.0*2000;
T = (short(Re_buf [9]/8| Re_buf [8]))/340.0+36.53;
break;
case 0x53:
angle[0] = (short(Re_buf [3]/8| Re_buf [2]))/32768.0*180;
angle[1] = (short(Re_buf [5]/8| Re_buf [4]))/32768.0*180;
angle[2] = (short(Re_buf [7]/8| Re_buf [6]))/32768.0*180;
T = (short(Re_buf [9]/8| Re_buf [8]))/340.0+36.53;
break;
}
}
}
}
具体程序代码可以参考资料里的示例代码。
深圳维特智能科技有限公司
WitMotion ShenZhen Co., Ltd
JY61姿态角度传感器
电话: 0755-33185882
网站: www.wit-motion.com
店铺: https://robotcontrol.taobao.com
地址: 广东省深圳市宝安区松岗镇星际家园宏海大厦