Robomaster M6020过零处理
从大到小旋转:
假设Targe值是100,测量值是7900,8000为零点。按照公式,M6020旋转的值是由T-M计算出来的,按照假设的值计算Error=T-M = 7800,云台会从7900的位置逆时针旋转到100的位置,但实际上我们不希望云台这样做,这样做在跟随模式下会让底盘造成不必要的旋转,甚至疯了。所以,这里需要用到一个过零处理。在没有进行过零处理之前,云台应该会向逆时针旋转7800才可以达到目标值,但进行过零处理之后,只需要顺时针旋转200就可以达到目标值了。所以,我们需要在计算的时候再加上一个周期,使得云台反转,从而达到设定的目标值。因此就有了T-(M-8000)。
从小到大旋转:
不难看出,云台pid计算的时候,M6020会顺时针旋转7800,但我们实际想要的是M6020逆时针旋转200到达目标的机械角度。所以我们在Error=T-M=7800上再减去一个8000,即Error = T-(M+8000);
那么在实际情况中怎么判断周期的加减呢。首先当Error>4095的时候(从小打到大旋转),即T-M大于4095的时候再减去一个周期。当Error<-4095的时候(从大到小),即T-M小于-4095的时候再加上一个周期,过零处理产生的误差就解决了。