关于多圈绝对值编码器越0点数据的连续处理
说明
本次分享指在分享思路;此次演示案例为一款rs485通讯的多圈绝对值编码器,接收的数据格式为01 03 04 00 00 00 00 FA 33(01为从机地址,03为功能码,04为数据字节长度,00 00 00 00为测量数据,FA 33为校验码)
测量数据中,前面四位表示步数,当由FF FF到00 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。
标签:编码器,01,多圈,NUM3,00,flag,绝对值 From: https://blog.csdn.net/qq_45611089/article/details/137255484