您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關JY901 NOTES TM4串口數據讀取的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
一、串口讀取模塊數據
我在這里附上我于廠家提供的例程基礎上修改而來的串口數據讀取函數(雖然很簡單但是可以節省看到帖子的老哥的時間)。
首先TM4串口1初始化:
#define UART1Baud 115200 void initUART1() { ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART1); ROM_GPIOPinConfigure(GPIO_PB0_U1RX); ROM_GPIOPinConfigure(GPIO_PB1_U1TX); ROM_GPIOPinTypeUART(GPIO_PORTB_BASE, GPIO_PIN_0 | GPIO_PIN_1); ROM_UARTConfigSetExpClk(UART1_BASE, ROM_SysCtlClockGet(), UART1Baud,(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE)); ROM_IntEnable(INT_UART1); UARTFIFODisable(UART1_BASE); UARTIntRegister(UART1_BASE,UART1_Handler); ROM_UARTIntEnable(UART1_BASE, UART_INT_RX | UART_INT_RT); }
然后按照手冊的協議解讀:
float roll=0,pitch=0,yaw=0; float accX=0,accY=0,accZ=0; float gyrX=0,gyrY=0,gyrZ=0; void JY901_GetOneByte(u8 data) { static u8 ucRxBuffer[12]; static u8 ucRxCnt = 0; ucRxBuffer[ucRxCnt++]=data; if(ucRxBuffer[0]!=0x55) { ucRxCnt=0; return; } if (ucRxCnt<11) {return;} else { switch(ucRxBuffer[1]) { case 0x51: accX=(float)((int16_t)(ucRxBuffer[3]<<8)|ucRxBuffer[2])/32768*16*9.8f; accY=(float)((int16_t)(ucRxBuffer[5]<<8)|ucRxBuffer[4])/32768*16*9.8f; accZ=(float)((int16_t)(ucRxBuffer[7]<<8)|ucRxBuffer[6])/32768*16*9.8f; break; case 0x52: gyrX=(float)((int16_t)(ucRxBuffer[3]<<8)|ucRxBuffer[2])/32768*2000; gyrY=(float)((int16_t)(ucRxBuffer[5]<<8)|ucRxBuffer[4])/32768*2000; gyrZ=(float)((int16_t)(ucRxBuffer[7]<<8)|ucRxBuffer[6])/32768*2000; // flag.gyro_ok=1; break; case 0x53: roll =(float)((int16_t)(ucRxBuffer[3]<<8)|ucRxBuffer[2])/32768*180; pitch =(float)((int16_t)(ucRxBuffer[5]<<8)|ucRxBuffer[4])/32768*180; yaw =(float)((int16_t)(ucRxBuffer[7]<<8)|ucRxBuffer[6])/32768*180; // printf("roll:%.2f pitch:%.2f yaw:%.2f \n",roll,pitch,yaw); // printf("accX:%.2f accY:%.2f accZ:%.2f \n",accX,accY,accZ); // flag.angle_ok=1; break; } ucRxCnt=0; } }
在串口中斷里調用這個就行了。
二、上位機磁力計校準
使用原廠的上位機進行磁力計的橢球擬合校準時,請務必不要只看原子哥論壇的這個帖子,要仔細看原廠的說明書:
記得事先校準好再焊到板子上,不然就只有那超長杜邦線接usb轉串口拿著四軸轉來轉去校準了。。
另外一說,這個上位機寫得好爛,很多bug,把我電腦卡死不止一次,遇到bug不要著急,關了重開,一定要確定連上了模塊且數據都ok再校準,如果點了開始校準然后橢圓圖像卡住了,就重開重來。。。記得校準的時候遠離強磁場。
三、尷尬的180度
當你完成磁力計校準之后,你會發現在某個yaw角度,數值是170多度,然后當你再轉一點yaw角,上位機就會顯示-170多度,因為這玩意輸出的范圍是-180~180度,如果直接帶去控制,那么這種情況下,你的四軸認為自己轉了一圈,要轉一圈再回來,誤差就會非常大,PID的話就會失控。
感謝各位的閱讀!關于“JY901 NOTES TM4串口數據讀取的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。