JY901 NOTES TM4串口数据读取的示例分析

发布时间:2022-01-14 15:31:34 作者:小新
来源:亿速云 阅读:101

这篇文章给大家分享的是有关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;
	}
}

在串口中断里调用这个就行了。

二、上位机磁力计校准

使用原厂的上位机进行磁力计的椭球拟合校准时,请务必不要只看原子哥论坛的这个帖子,要仔细看原厂的说明书:JY901 NOTES TM4串口数据读取的示例分析

记得事先校准好再焊到板子上,不然就只有那超长杜邦线接usb转串口拿着四轴转来转去校准了。。

另外一说,这个上位机写得好烂,很多bug,把我电脑卡死不止一次,遇到bug不要着急,关了重开,一定要确定连上了模块且数据都ok再校准,如果点了开始校准然后椭圆图像卡住了,就重开重来。。。记得校准的时候远离强磁场。

三、尴尬的180度

当你完成磁力计校准之后,你会发现在某个yaw角度,数值是170多度,然后当你再转一点yaw角,上位机就会显示-170多度,因为这玩意输出的范围是-180~180度,如果直接带去控制,那么这种情况下,你的四轴认为自己转了一圈,要转一圈再回来,误差就会非常大,PID的话就会失控。

感谢各位的阅读!关于“JY901 NOTES TM4串口数据读取的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

推荐阅读:
  1. 如何使用dtb方式启动内核
  2. __FILE__和__LINE__怎么用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

上一篇:怎么实现libvirt的远程访问

下一篇:springboot整合quartz定时任务框架的方法是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》