可测量脉冲宽度的微控制器串行端口 2011-05-14 08:37:30来源:互联网

   很多工业与仪表系统都需要测量脉冲输入的持续时间,如转速传感器、外部系统的门控与选通脉冲,以及PWM(脉冲宽度调制)输入的频率等。设计者是采用片上定时器和边沿驱动的中断。但是,如果这些元件不可用,可以用片上的串行同步接收器做这类测量。

  可以根据需要的时序精度,设定串行接收器的波特率。接收器每8 bit后中断微控制器。可以在应用程序中插入脉冲宽度采集例程,用于读取ISR(中断服务例程)接收到的字节。它会统计和累加接收到的0和1字节,以测量出进入脉冲的持续时间(图1)。


点击看大图

  算法测量a的是两个连续上升沿之间的持续时间。当微控制器收到一个既不是0xff也不是0x00的字节时,就检测到了一个上升沿或下降沿。如果一个字节小于0x80H (100 000b),则该字节表示一个上升沿。如果字节等于或大于该值,则该字节表示一个下降沿。

  前上升沿将位计数器重置为上升沿字节中拖尾1的个数,方法是将向右移位。位计数器在每个字节来到时加8,也包括标志下降沿的那个字节。当计数器接收到后上升沿(由下一个上升沿字节标志,它大于0x80H但小于00H)时,它再次统计该字节中领先0的个数,并将此数加到累加位计数器上。此时的累加位计数与脉冲链的时间周期相关,其因数等于波特率。

  图2表示一个200Hz的脉冲链,两个上升沿之间的时间为5ms。波特率为256kbaud。在一个测量周期内,假设前上升沿的标志为0011 1111b。微控制器将其向右移位,统计拖尾1的数目,位计数器初始化为6。这个计数对应的时间约为23.43 μs。


点击看大图

  接下来,上升沿字节前的每个字节都使位计数器加8。简单计算表明,共有159字节,即1272位。此时,计算的总位数为1278位,包括在第一个上升沿字节中收到的6个1。

  现在,脉冲链遇到了拖尾的上升沿字节,其值为0011 1111b。做这个计数时,需要将0左移,统计为两个位。两上升沿之间的总位数就是1280bit。在256 kbaud速率下,这个数字精确地对应于5 ms或200 Hz。

  可以根据自己的应用需求,对这种位计数概念作修改。如果只需要测量低周期的脉冲,需要探测一个下降沿,并累计位数,直到遇见一个上升沿。可以将这种概念用于读取进入的PWM信号,方法是读取一个已知进入脉冲频率的高周期。