我使用 eCAP 模块来获得轮速,通过查看数据,我可以看到随机频繁的数据尖峰,即使我们在算法中使用 RC 滤波器和低通滤波器。这里我使用 eCAP 与中断。我正在附加我的代码。
使用 eCAP 寄存器4、启用 eCAP 中断 evt1和 evt4。 我将使用4个 eCAP 脉冲来计算速度。我们是否需要清除 eCAP 计数器的溢出? 我们是否需要为 eCAP 使用 FIQ? 因为我也会每25ms 连同 RTI 一起使用一次。
void calculate_speed()
{
volatile uint32 temp1、temp2、temp21、temp22;
TEMP1 = C1;
TEMP2 = C4;
if (temp2>temp1)
{
T = temp2 - temp1;
fwspeed =(1308.3*180.00*100.00)/T; //Rad/sec
}
}
void ecapNotification (ecapbase_t * ecap、uint16标志)
{
if (ecap == ecapREG4){
计数++;
if (计数%2 == 1)
{
c1 = ecapGetCAP1 (ecapREG4);
pulsesf++;
标志= 0;
}
否则、如果(计数%2 =>= 0)
{
c4 = ecapGetCAP4 (ecapREG4);
计数= 0;
标志= 1;
}
}
}
int main(){
_enable_interrupt_();
_enable_irq();
ecapInit();
while (1){
if (flag==1){
_disable_irq();
calculate_speed();
_enable_irq();
}
}