[从传感器,我有4个正交信号。两个信号是模拟信号,两个信号是数字信号。信号表示拾取传感器的位置,如图。信号是:
模拟信号相移90度。数字信号由过零检测器产生。模拟信号的一个周期代表传感器移动2毫米。
当我转换了数字信号时,可以通过ADC(10位)捕获模拟信号的最小值和最大值。我还可以使用数字信号的相位关系来检测我们是朝着正方向还是向负方向运动。我还可以通过检测分辨率为1 mm的数字信号的跳变来轻松测量距离。
但是根据模拟信号的当前值获得距离的小数部分的最佳算法/方法是什么?我想通过组合A和B模拟信号来实现最大动态分辨率。
图:(来源:spectron.us)
如果您的模拟信号大致为正弦曲线,那么您可以将它们视为相位角的正弦和余弦(一个完整的2mm行程将是2 * pi弧度的相位)。在C语言(和其他语言)中,您可以使用atan2功能将模拟信号转换为相角。用伪代码,您将:
fractional_distance = atan2(analog-A, analog-B) * 2 mm / 2 pi radians
如果您的信号实际上不是正弦波,那么它仍然可以工作,只会在您的小数距离内引入失真。