1

我正在尝试让 Arduino UNO 读取 64cpr 正交编码器。我特别想使用 Timer1 来测量其中一个编码器信号的频率(以及速度)。

我最终想在一个数组中存储 10 个测量值来计算移动平均滤波器,但一次只做一件事。我首先需要能够测量两个上升沿之间的时钟周期。

这是我到目前为止所得到的。任何帮助或意见表示赞赏:

#include <avr/io.h>
#include <avr/interrupt.h>

const int inputCapture = 8;

void setup(){
  sei();
  TCNT1 = 0;
  TCCR1B = (1<<CS10)|(1<<ICES1);  // No prescaling
  TIFR1 = 1<<ICF1;
  pinMode(inputCapture, INPUT);
  Serial.begin(9600);
}

ISR(TIMER1_CAPT1_vect){
  thisStep = ICR1;
  TCNT1 = 0;
}

void loop(){
  Serial.println(thisStep);
}

现在我什至没有跳入 ISR,我不明白。我想我已经正确设置了一切。启用中断。ICES1 应该默认为 0,或者下降沿触发,这很好(只想测量一个周期)。我在端口 B 上选择一个引脚来接收(输入)信号,这应该没问题。从 Atmel 的文档中,我认为 Timer1 已连接。

有什么想法吗?提前致谢!

4

0 回答 0