189 8069 5689

JY901NOTESTM4串口数据读取的示例分析

这篇文章给大家分享的是有关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串口数据读取的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!


本文标题:JY901NOTESTM4串口数据读取的示例分析
网址分享:http://jkwzsj.com/article/ihdihh.html

其他资讯