快速版本:
如果我拥有的唯一信息是每个上升沿发生的时间,我可以使用什么算法来确定两个不同频率的方波信号之间的“相位差” ?
详细版本:
我正在从事一个嵌入式软件项目,并且遇到了一个有趣的问题。我正在从两个霍尔效应速度传感器收集数据,每个传感器都针对两个啮合齿轮之一,如下图所示:
注意:
正如Jaime所指出的,该图中的信号实际上具有相同的频率。真正的硬件在两个目标齿轮之间还有几个齿轮级,其中一些是通过轴而不是啮合齿连接的,所以我最终得到了两个频率不同的方波,它们之间的比率仍然是一个常数。我想简化图表以了解问题的实质,但看起来我简化得太多了!
/笔记
速度传感器输出一个方波信号,其频率与每个齿轮的转速成正比。当单个齿轮齿的前沿(和后沿)经过传感器时,会出现方波的上升(和下降)沿。
我知道每个齿轮上有多少齿,并且基于这些信息,我能够根据方波信号的频率准确测量每个齿轮的转速。
为了测量频率,我将每个速度传感器信号连接到嵌入式控制器上的高速捕捉定时器引脚。捕捉定时器自动检测方波信号的上升沿,将表示发生转换的时间的值加载到寄存器中,并触发中断。每个信号的捕获点在图中以黄色表示。中断服务程序如下所示:
struct
{
long previousTime;
int frequency;
}
sensors[2];
void CaptureTimer_Interrupt(int channel, long transitionTime)
{
long timeDifference = transitionTime - sensors[channel].previousTime;
sensors[channel].frequency = CONVERSION_FACTOR / timeDifference;
sensors[channel].previousTime = transitionTime;
}
我想做的事:
我希望能够检测到这两个方波信号的相对时序的微小差异。由于没有更好的术语,我将其称为“相位差”。如果两个信号具有完全相同的频率,这将很简单,并且相位差将是正确使用的术语。
这就是我的意思:如果我要长时间记录这两个信号,然后人为地将高速(蓝色)信号减慢(或“拉伸”)16/9倍,它将具有与较低速度(红色)信号完全相同的频率,并且两个信号将具有一些可测量的相位差,即红色信号中断和蓝色信号中断之间的时间差。我想计算这个相同的时间差(或等效的东西),而不必长时间记录信号。嵌入式控制器上的资源有限,因此存储大量过去的转换时间不是一种选择。
有没有人遇到过这个?实际项目有几个这样的齿轮和传感器布置,所以我正在寻找一种可以重用的优雅算法。提前致谢!