我在校准期间从编码器(已知速度)记录 2 个电压。创建这个(角度上的电压),然后我需要测量电压并获得相应的角度。
我也想在记录点之间找到值以获得更高的精度,某种 arccos 查找表,我被卡住了,无法找到一种有效的方法来做到这一点。
我是否必须通过比较大量数组来研究我在数组中的值?那会很慢吧?
我曾尝试使用 Arcos 函数,但我猜这不会补偿机械不规则性。
我也已经计算了波的平均值和幅度。
编辑:正如所问,目标是测量 FOC 电机的位置。
设置如下。
这是我使用 atan2 函数得到的结果:x = 2*(hallA.read() - moyenneA)/(maxA-minA); y = 2*(hallB.read() - moyenneB)/(maxB-minB);
最佳答案
最终,您无法向数据中添加更多信息。除了更频繁地采样。也就是说,您可以使用线性插值来估计任意两个测量点之间的电压。查找线性插值以了解详细信息,但总结一下,如果 A 点和 B 点之间的时间点 C 是 A 和 B 之间距离的 25%。然后计算加权相同的电压。所以电压 C = 电压 A + 25%(电压 A - 电压 B)。
至于计算角度,那不是我的专业领域。但我想我会计算我感兴趣的点后面 1/2 采样时间的线性插值和我感兴趣的点之前 1/2 采样时间的插值并计算斜率的角度。但是,我不是信号处理专家。有很多关于这个主题的书。还有其他插值函数可用,在 Internet 上阅读有关信号处理插值的信息可能会为您提供更多信息。
如果您担心数据中的机械或电气噪声,那么我建议您使用平滑算法。我知道快速傅立叶变换非常流行。但我相信还有很多其他选择。互联网上肯定有过滤库和算法。但正如我所说,这不是我的专业领域。也许我的回答会触发其他人以更专业的方式回答。消除高频噪声的一种方法就是减少采样频率。
关于c++ - 从测量值创建反向查找表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65363598/