第十九届摩托组(个人分享)(一)编码器测速

本文讨论了摩托车模在比赛中遇到的编码器问题,介绍了M法和T法测速原理及其优缺点,并基于低分辨率编码器推荐使用T法测速。作者计划开源解决编码器问题的代码供他人参考。
摘要由CSDN通过智能技术生成

【前言】

        (着急用的同学,可以直接用开源的代码,我们不能被编码器给卡到,我们应该关注的是车体结构,硬件电路,软件算法,而不是编码器的好坏)

点这里有调试的视频

       今年的车赛出了好几个有意思的新项目。我本人是对气垫船和摩托比较感兴趣的,虽然我大概率今年不会参赛,在学校里面也跟气垫船的学弟学妹交流过。但是摩托组的车模学弟在测试的时候发现车模自带的编码器并不是很好用。我即将开源的代码是1月16号下午敲得,因为学弟的回家的车是17号的。

        学弟拆了车模,发现里面的光栅编码器分辨率分辨率很低,一圈才有30个脉冲,和常用的1024的编码器差距很大。甚至有一个组把读取编码器的周期改成了100ms,相应的速度环的周期也只能是100ms,结果自然是很不好调。

        学过自控的同学相信已经意识到不好调的问题了,在我们的离散控制系统中控制周期越长,我们系统稳定的参数范围越小。忘记的同学可以翻一下《自动控制原理 第七版》的例题7-26,在347页。自控我学的也不好,就不耽搁大家时间了。

1.常用的电机测速方法

        我们通常用的是增量型编码器,可输出一组正交的AB输出脉冲信号,摩托小车上就是这样的编码器。一圈30个脉冲。

        通过这些脉冲来测试速度我们常用的方法有M法测速和T法测速。

1.1M法测速

        M 法在一定的时间周期 Tc 内,测量编码器输出的脉冲个数 M1来计算转速。用个数除以时间就可以得到编码器输出脉冲的频率,因此 M 法也称为频率法,f1=M1/Tc。

        假设电机转动一圈可以产生 Z 个脉冲,Z = 编码器线数,M表示在周期T内捕获的脉冲数,那么M/Z就是T时间内转的圈数,那么(M/Z)/T就是1秒内的圈数,转速单位为r/min ,所以我们要再乘60。因此转速的公式也就出来了。

n=\frac{60\cdot M}{Z\cdot T}

        那么我们来看分辨率,当计数值由 M1 变为 M1+1 时,转速由 60 M/Z*Tc 变为 60(M+1)/Z*Tc , 因此 M 法的分辨率可以这样计算:

Q=60\frac{M+1}{ZT}-60\frac{M}{ZT}=\frac{60}{ZT}

        可以看出,M 法测速的分辨率与速度无关,要提高分辨率,即减小 Q 值,必须增大编码器每圈输出的脉冲个数 Z ,或者增大采样周期 T 。实际上,两个值受到现实条件的制约,不可能无限的增大。

        M 法测速最大误差为一个脉冲,因此误差率的最大值可以这样计算:

        测速误差率与脉冲个数成反比关系,转速越高 M 值越大,当转速很低时,M 值很小,误差率会变大,因此 M 法适合高速测量。

1.2T法测速

        T 法是测量编码器两个脉冲之间的时间间隔来计算转速,也被称为周期法。实际使用中通过一个高频时钟脉冲的个数 M2 来计算编码器两个脉冲之间的时间间隔。这里的T我们可以直接理解成时间.

        我们假设,假设电机转动一圈可以产生 Z 个脉冲,那么一个脉冲就代表1/Z圈,那么速度的公式也就出来了:n=60\frac{1/Z}{t}

       观察这个公式我们可以发现,这里唯一的变量是t,也就是误差是和时钟精度有关的,而我们小摩托用的单片机,时钟可以达到200M,因此我们可以忽略时钟脉冲着我们这个小摩托测试中带来的误差。

        那么高精度的代价是什么呢?随着Z的变大,我们的mcu就要更频繁的去中断计算速度,因此在Z=1024时,对cpu的占用会更高。而且因为编码器发出脉冲的频率不是定值,所以代码上也会稍显复杂。

1.3总结

T法测速

 优点

1. T法是通过测量编码器两个脉冲之间的时间间隔来计算转速,因此在低速测量(相邻转速脉冲间隔时间较大)时会有较高的精度 
缺点
1. 在高速测量时,由于脉冲间隔时间较小,可能会导致测量精度降低

 M法测速

优点

1. M法在一定的时间周期内,测量编码器输出的脉冲个数来计算转速,因此适合高速测量

缺点

1. 当转速很低时,脉冲个数较少,误差率会变大,因此不适合低速测量 

 总结
总的来说,T法和M法各有其适用的场景。T法更适合低速测量,而M法则更适用于高速测量。在实际应用中,可以根据具体的测量需求和环境选择合适的测速方法。

1.4推荐

因为我们小摩托上编码器的光栅数只有30,相比于常用的1024的编码器,少的可怜,因此我建议大家采用T法测速,我这边准备开源一下我的代码。

2.逐飞库中的测速方法

        逐飞采用的测速方法是M法测速,使用方法非常简单,一个定时器中断,然后在中断中读取速度并清零定时器就可以了。

3.开源代码的使用

看下篇文章吧

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值