大家推荐一个对绝对值编码器位置判断的算法

2019-12-12 18:12发布

是这样的,我现在用电机,加上一个绝对值编码器,这个编码器只能转到99圈就归零重新计算。
我现在想用单片机控制这个电机在编码器的两个值之间转,通过第一次上电设置两个限位值,从编码器读取的。
然而,如果我刚刚设置的值在0到99圈内,也就是编码器的最小值跟最大值之间转,这没问题。
如果,设置了是在80到10,就是80 81……0 1……10。这样我应该就得个算法,把以上两种可能的情况统一起来,通过一个算法来解决。

说的好乱,大家应该能看懂吧。

有什么算法推荐一下吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
wye11083
1楼-- · 2019-12-12 23:43
那你就设置一个起始,一个结束,一个方向呗。比如正向从10到90就设成10,90,正,正向90到10就设成90,10,正。溢出了就清零。
lcw_swust
2楼-- · 2019-12-13 01:34
就是测量圆圈上两个点之间的距离?
x=a-b;
if(x>50)x-=100;
if(x<-50)x+=100;
yiminglei_2
3楼-- · 2019-12-13 05:56
同意3楼
way2888
4楼-- · 2019-12-13 09:22
 精彩回答 2  元偷偷看……
lcw_swust
5楼-- · 2019-12-13 12:26
way2888 发表于 2019-4-1 01:43
x=(b-a+100)%100


代入两组数据试试:
1.a=99,b=0,x=1;
2.a=0,b=99,x=99;

从99到0只需转动1步,所以第1组算出来是对的;
从0到99只需反向转动1步,所以第2组算出来不对,x应当为-1才对。
pingqifa
6楼-- · 2019-12-13 16:38
lcw_swust 发表于 2019-4-1 08:53
代入两组数据试试:
1.a=99,b=0,x=1;
2.a=0,b=99,x=99;

if(a>b)
{
a-b=C0;
b+100-a=C1;//比较C0和C1的值
}
else(a<b)
{
b-a=C2;
a+100-b=C3;//比较C2和C3的值
}

还需要a==b的情况,
仅供参考!

一周热门 更多>