JY61输出的角度数据滞后于实际角度

项目场景:

使用深圳维特智能科技有限公司JY61模块,获取运动小车的航向角。

应用场景:将JY61模块通过串口接入Linux开发板,使用程序读取角度数据


问题描述:

小车实际角度变化,程序读取的角度数据却没有立刻跟着变,而是过一会才会变,读取的角度数据表现出明显的滞后性。


得到的帮助:

询问客服后,客服告知了以下两点:

1.JY61模块是主动输出测试数据的

2.JY61模块的角度测量原理大概为:角加速度在时间上的积分。

问题解决

定位问题:

将JY61接模块接入PC,使用官方软件读取JY61的角度数据,发现小车转动的时候,程序读取的数据滞后于实际角度;而PC上的软件读取的角度于实际角度一样,没有滞后现象;可知问题出在程序,导致读取数据出现滞后问题。

分析问题

读取程序结构如下:

//串口设备文件描述符号
int fd = -1;

int main()
{
	//设置串口参数
	csdn_init_serial();
	while(1)
	{
		//读取角度数据
		csdn_get_angle();
		//延时
		sleep(1);
	}
}

尝试将sleep(1)改为usleep(1000),重新读取数据后,程序读取的角度数据与实际角度相比更为接近,但仍具有滞后性。

问题解决

怀疑程序读取的数据不是实时的测试数据,而是读取了缓冲区中过时的数据,那我在读取角度数据前,先清空缓冲区,再读取,就可以获得JY61新鲜出炉的角度数据,于是修改代码如下:

//串口设备文件描述符号
int fd = -1;

int main()
{
	//设置串口参数
	csdn_init_serial();
	while(1)
	{
		//清空串口的缓冲区,注:tcflush是系统函数
		tcflush(fd, TCIFLUSH);
		//读取角度数据
		csdn_get_angle();
		//延时
		sleep(1);
	}
}

清空输入缓冲区后,读取到的角度数据正常(JY61主动发送数据进去),且数据实时性很好,不再具有滞后现象。
tcflush函介绍:(资料来源:Linux系统的man手册)
在这里插入图片描述在这里插入图片描述

问题总结

1.JY61模块正常工作时,会主动地、不断地往外输出角度数据,该数据会被暂存到串口的缓冲区,而程序读取角度数据时间间隔越长,缓冲区累积的数据越多。
2.缓冲区数据存取方式为选入先出,这会导致程序读取到的角度数据为最早存入缓冲区中的数据,不是实时的角度数据,从而出现了程序得到的角度数据滞后于实际角度的现象。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值