关于多圈绝对值编码器越0点数据的连续处理

关于多圈绝对值编码器越0点数据的连续处理

说明

本次分享指在分享思路;此次演示案例为一款rs485通讯的多圈绝对值编码器,接收的数据格式为01 03 04 00 00 00 00 FA 33(01为从机地址,03为功能码,04为数据字节长度,00 00 00 00为测量数据,FA 33为校验码)

测量数据中,前面四位表示步数,当由FF FF00 00时,最后两位就由00变为01,也就是前面走过65536步,后面计数加一

处理办法

多圈绝对值编码器也是有数据上限的,一般的只能记录到4096圈,当达到4096圈时,下一次又会跳转到第0圈,为了使数据连续,这儿提供我的一个处理办法:采用两个标志位,构成00 01 10 11四种状态,还是直接看代码,也就是需要flag_2与flag_4来构成四种状态,然后在相应状态下处理数据就行
在这里插入图片描述

我们知道这由四种状态构成那后面就好处理了,现在就是需要判断出这四种状态
注:这儿的NUM3是获取的圈数,

//判断编码器由00到ff
if(NUM3 == 0x00)
	{
		flag_1 = 1;
	}
	if((flag_1 == 1&&NUM3 == 0xFF))
	{
		flag_2 = 1;           //打开从右往左计算
		flag_1 = 0;
		Internal_WriteFlash(0x08009000,&flag_2,sizeof(flag_2));   //写入flash中
		Internal_WriteFlash(0x0800a000,&flag_4,sizeof(flag_4));	
	}
	//判断编码器由ff到00
	if(NUM3 == 0xFF)
	{
		flag_3 = 1;
	}
	if(flag_3 == 1&&NUM3 == 0x00)
	{
		flag_4 = 1;          //打开从左往右的计算 
		flag_3 = 0;
		Internal_WriteFlash(0x08009000,&flag_2,sizeof(flag_2));  //写入flash中
		Internal_WriteFlash(0x0800a000,&flag_4,sizeof(flag_4));	
	}

这儿我将数据的处理标志存入了flash中,这样做是让主控在断电重新上电能够按照正确的方式处理数据

总结

就是将编码器由00变到FF作为一个状态,由FF变到00作为一个状态,剩下的作为正常状态就行,刚好对应这00 01 10 11。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值