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