JY61P姿态传感器的调试
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 activeWire.requestFrom(deviceAddr, bytesToRead); //Ask for bytes, once done, bus is released by defaultwhile(Wire.available() < bytesToRead); //Hang out until we get the # of bytes we expectfor(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姿态传感器的调试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 哪个型号服务器静音风扇可调,全新 原装台
- 下一篇: 闭着眼睛“飘”单词