概述
1 熟悉JY-61P 模块的基本参数
1、电压: 3.3V~5V
2、电流: <25mA
3、体积: 15.24mm X 15.24mm X 2mm
4、焊盘间距:上下 100mil(2.54mm),左右 600mil(15.24mm)
5、测量维度:加速度: 3 维,角速度: 3 维, 角度: 3 维, 气压:1 维(JY-901B), GPS:
3 维(接 GPS 模块)
6、量程:加速度:±2/4/8/16 g(可选) ,角速度:±250/500/1000/2000 °/s(可选), 角
度±180°。
8、稳定性:加速度: 0.01g,角速度 0.05°/s。
9、姿态测量稳定度: 0.01°。
10、数据输出内容:时间、加速度、角速度、角度、磁场、端口状态、气压( JY-61PB)、
高度(JY-61PB)、经纬度(需连接 GPS)、地速(需连接 GPS)。
10、数据输出频率 0.1Hz~200Hz。
11、数据接口:串口(TTL 电平, 波特率支持 2400、 4800、 9600、 19200、 38400、 57600、
115200、 230400、 460800、 921600), I2C(最大支持高速 IIC 速率 400K)
12、扩展口功能:模拟输入(0~VCC)、数字输入、数字输出、 PWM 输出(周期 1us-65535us,
分辨率 1us)
2引脚说明
3 轴向说明
如上图所示,模块的轴向在上图的右上方,向右为 X 轴,向上 Y 轴,垂直模块向外为
Z 轴。旋转的方向按右手法则定义,即右手大拇指指向轴向,四指弯曲的方向即为绕该轴
旋转的方向。 X 轴角度即为绕 X 轴旋转方向的角度, Y 轴角度即为绕 Y 轴旋转方向的角度,
Z 轴角度即为绕 Z 轴旋转方向的角度。
4 硬件连接方法
4.1 与PC连接
与计算机连接,需要 USB 转 TTL 电平的串口模块。
4.2 与单片机连接
5模块校准
注意:模块校准和配置要在上位机配置栏右下角显示在线( online)状态下进行,如下
图所示,离线说明上位机没有控制到模块。
模块使用前, 需要对模块进行校准,包括 Z 轴归 0、加计校准。
5.1 加速度校准
加计校准用于去除加速度计的零偏。传感器在出厂时都会有不同程度的零偏误差,需
要手动进行校准后,测量才会准确。
加计校准方法如下:
1.首先使模块保持水平静止,点击配置栏里的加速度,会弹出一个校准界面。
2.把自动计算选项勾上,上位机会自动计算加速度零偏值,再点击写入参数
点击上位机左侧“数据”可以看到角度数据如下图所示:
3.1~2 秒后模块加速度三个轴向的值会在 0 0 1 左右, X 和 Y 轴角度在 0°左右。
校准后 X Y 轴角度就跟精确了。
注意: Z 轴水平静止的时候是有 1 个 G 的重力加速度的。
6 程序
#include "JY901.h"
#include "string.h"
CJY901 ::CJY901 ()
{
ucDevAddr =0x50;
}
void CJY901::StartIIC()
{
ucDevAddr = 0x50;
Wire.begin();
}
void CJY901::StartIIC(unsigned char ucAddr)
{
ucDevAddr = ucAddr;
Wire.begin();
}
void CJY901 ::CopeSerialData(unsigned char ucData)
{
static unsigned char ucRxBuffer[250];
static unsigned char ucRxCnt = 0;
ucRxBuffer[ucRxCnt++]=ucData;
if (ucRxBuffer[0]!=0x55)
{
ucRxCnt=0;
return;
}
if (ucRxCnt<11) {return;}
else
{
switch(ucRxBuffer[1])
{
case 0x50: memcpy(&stcTime,&ucRxBuffer[2],8);break;
case 0x51: memcpy(&stcAcc,&ucRxBuffer[2],8);break;
case 0x52: memcpy(&stcGyro,&ucRxBuffer[2],8);break;
case 0x53: memcpy(&stcAngle,&ucRxBuffer[2],8);break;
case 0x54: memcpy(&stcMag,&ucRxBuffer[2],8);break;
case 0x55: memcpy(&stcDStatus,&ucRxBuffer[2],8);break;
case 0x56: memcpy(&stcPress,&ucRxBuffer[2],8);break;
case 0x57: memcpy(&stcLonLat,&ucRxBuffer[2],8);break;
case 0x58: memcpy(&stcGPSV,&ucRxBuffer[2],8);break;
case 0x59: memcpy(&stcQuater,&ucRxBuffer[2],8);break;
case 0x5a: memcpy(&stcSN,&ucRxBuffer[2],8);break;
}
ucRxCnt=0;
}
}
void CJY901::readRegisters(unsigned char deviceAddr,unsigned char addressToRead, unsigned char bytesToRead, char * dest)
{
Wire.beginTransmission(deviceAddr);
Wire.write(addressToRead);
Wire.endTransmission(false); //endTransmission but keep the connection active
Wire.requestFrom(deviceAddr, bytesToRead); //Ask for bytes, once done, bus is released by default
while(Wire.available() < bytesToRead); //Hang out until we get the # of bytes we expect
for(int x = 0 ; x < bytesToRead ; x++)
dest[x] = Wire.read();
}
void CJY901::writeRegister(unsigned char deviceAddr,unsigned char addressToWrite,unsigned char bytesToRead, char *dataToWrite)
{
Wire.beginTransmission(deviceAddr);
Wire.write(addressToWrite);
for(int i = 0 ; i < bytesToRead ; i++)
Wire.write(dataToWrite[i]);
Wire.endTransmission(); //Stop transmitting
}
short CJY901::ReadWord(unsigned char ucAddr)
{
short sResult;
readRegisters(ucDevAddr, ucAddr, 2, (char *)&sResult);
return sResult;
}
void CJY901::WriteWord(unsigned char ucAddr,short sData)
{
writeRegister(ucDevAddr, ucAddr, 2, (char *)&sData);
}
void CJY901::ReadData(unsigned char ucAddr,unsigned char ucLength,char chrData[])
{
readRegisters(ucDevAddr, ucAddr, ucLength, chrData);
}
void CJY901::GetTime()
{
readRegisters(ucDevAddr, 0x30, 8, (char*)&stcTime);
}
void CJY901::GetAcc()
{
readRegisters(ucDevAddr, AX, 6, (char *)&stcAcc);
}
void CJY901::GetGyro()
{
readRegisters(ucDevAddr, GX, 6, (char *)&stcGyro);
}
void CJY901::GetAngle()
{
readRegisters(ucDevAddr, Roll, 6, (char *)&stcAngle);
}
void CJY901::GetMag()
{
readRegisters(ucDevAddr, HX, 6, (char *)&stcMag);
}
void CJY901::GetPress()
{
readRegisters(ucDevAddr, PressureL, 8, (char *)&stcPress);
}
void CJY901::GetDStatus()
{
readRegisters(ucDevAddr, D0Status, 8, (char *)&stcDStatus);
}
void CJY901::GetLonLat()
{
readRegisters(ucDevAddr, LonL, 8, (char *)&stcLonLat);
}
void CJY901::GetGPSV()
{
readRegisters(ucDevAddr, GPSHeight, 8, (char *)&stcGPSV);
}
CJY901 JY901 = CJY901();
7 测试数据
点击此链接:几个测试视频加校准视频
最后
以上就是懦弱戒指为你收集整理的JY61P姿态传感器的调试1 熟悉JY-61P 模块的基本参数2引脚说明3 轴向说明4 硬件连接方法5模块校准5.1 加速度校准6 程序7 测试数据的全部内容,希望文章能够帮你解决JY61P姿态传感器的调试1 熟悉JY-61P 模块的基本参数2引脚说明3 轴向说明4 硬件连接方法5模块校准5.1 加速度校准6 程序7 测试数据所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复