测量电子水泡的频率,正反各测一次,两次计数差值与水泡倾角在一定范围内近似成正比,水平时差值为0。现我采129次,头尾相减,即128个周期的计数值。正反测量值相差后不大稳定,跳动大(超过允许变化范围)。而128个单周期计数值读出发现,相差不大,±1个计数。应该128次相加后稳定才是啊。是不是我测频方法不对啊?有更好的测频方法吗?测的频率为60~80kHZ。<br />部分程序如下:<br />#define BORDER_NUM 129<br />static UINT16 num=0;<br />static BOOL sgCapFinished = FALSE;<br />static UINT32 counter = 0; // 128次计数值<br /><br />void __irq IRQ_Time1(void) // 中断程序<br />{ T1IR = 0x10; <br /> if( sgCapFinished == FALSE )<br /> { if( (num == 0)|(num == BORDER_NUM-1) )<br /> counter = T1CR0 - counter; <br /> num++;<br /> if( num>BORDER_NUM-1) // 已采完<br /> { sgCapFinished = TRUE; <br /> T1TCR = 0x03; // 复位<br /> T1CCR = 0x00; // 关使能<br /> } }<br /> VICVectAddr = 0x00;<br />}<br /><br />void Time1_CaptureFreq( void )<br />{<br /> Timer1_Init( ); //预分频为0,上升沿捕获,使能<br /> while( sgCapFinished == FALSE ); // 等待<br /> T1TCR = 0x00;<br /> sgCapFinished = FALSE;<br /> num = 0;<br />}<br /> <br />int main(void)<br />{ ...<br /> IO0CLR |= (0x01<<29); // 反<br /> Time1_CaptureFreq( );<br /> dat1 = counter;<br /> counter = 0;<br /><br /> sprintf( str, " %6d ", dat1 );<br /> LCD_DispStr( 8, 3, str, NORMAL_VIEW); // 显示<br /> <br /> <br /> IO0SET |= (0x01<<29); // 正<br /> Time1_CaptureFreq( );<br /> dat2 = counter;<br /> counter = 0;<br /><br /> sprintf( str, " %6d ", dat2 );<br /> LCD_DispStr( 8, 2, str, NORMAL_VIEW); // 显示<br /> <br /> ...<br />} |
|