尊敬的先生:
我们使用的是 TM4C129xCZAD 设计。
在 我们的项目中、我们使用外部中断处理程序来检测频率为60kHz 的-ve 边沿触发脉冲。
上述快速频率脉冲是到控制器2 扩散引脚的输入。
我们比较 两个60kHz 脉冲、并通过计时器计算百分比误差、得出%误差为0。 它的工作正常
现在频率变为200kHz、当我们对其进行比较时、我们 得到%errror=0.00009或0.00019
是否存在这样的高频问题、因为 当我们使用100kHz 进行检查时 、它也可以正常工作。
我们检查了电压电平和振幅、结果也是可以的。
亲切的建议
ui32SysClock = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
SYSCTL_OSC_MAIN |
SYSCTL_USE_PLL |
SYSCTL_CFG_VCO_480)、120000000);
void external_pulseIntHandler (void)
{
MAP_GPIOIntClear (GPIO_PORTM_BASE、GPIO_PIN_6);
PULSE_COUNT++;
if (pulse_count==1000)
{
EDGE_COUNT++;
c_Edge_count++;
PULSE_COUNT=0;
}
if (timer_start_flag==0)
{
MAP_TimerIntClear (TIMER6_BASE、TIMER_CAPB_MATCH);//清除计时器中断。
Timer6_start();
Timer_start_flag=1;
EDGE_COUNT=0;
c_Edge_count=0;
PULSE_COUNT=0;//观察后新添加
}
if ((Edge_count!=0)&&(Edge_count)===master_meter_pulse)&&(Edge_mode_flag=0)&&(TIMER_START_FLAG)
{
MAP_TimerDisable (TIMER6_BASE、TIMER_B);//禁用 Timer2
n_actual = fout_intCount*0xFFFF + 65535 - MAP_TimerValueGet (TIMER6_BASE、TIMER_B);//在 sacnner 脉冲结束时计数器 fout 脉冲
display_flag=1;
标记。 n_扫描器= 1;//已接收所有 Actual_Ready 脉冲
EDGE_COUNT=0;
c_Edge_count=0;
PULSE_COUNT=0;//观察后新添加
Timer_start_flag=0;
zero_flag=1;
标记。 Pulse_Received = 0;
}
空 Timer6_start (空)
{
MAP_TimerLoadSet (TIMER6_BASE、TIMER_B、0xFFFF);
MAP_TimerMatchSet (TIMER6_BASE、TIMER_B、0x0000);
MAP_TimerEnable (TIMER6_BASE、TIMER_B);//启用 FOUT 计数器
MAP_IntEnable (INT_TIMER6B);
FOUT_intCount=0;
}
n_must 为固定值
ERROR_calc =(((N_must - N_actual)/N_actual)* 100)