尽管具有相同的值,但在 Arduino 中使用 C 控制电机的速度会导致不同的速度

Control motors' speed using C in Arduino results in different speed despite having the same value

我正在尝试使用 Arduino 板上的 C 来控制 2 个电机的速度。然而,当上传代码时,尽管具有相同的 OCR 值,但每个电机都以不同的速度运行。您能否检查一下原因,如果您这样做,我将不胜感激。两个电机是一样的。我使用的开发板是Arduino Uno

#include <avr/io.h>
#include <util/delay.h>

void setup() {
    DDRB = B11111100; 
    DDRD = B00000000;
    TCCR2A = TCCR1A =  B10100011; 
    TCCR2B = B00000001;           
    TCCR1B = B00000100;           
    OCR2A = 0;
    OCR1B = 0;
}

void loop() {
    OCR1B = 255;
    OCR2A = 255;
    PORTB |= _BV(PORTB4);
    PORTB |= _BV(PORTB5);

}

定时器 2 是 8 位宽,但定时器 1 是 16 位宽。连接到 OCR1B 输出的电机获得 255/65535=0.3% PWM,而 OCR2A 为另一个电机提供 255/255 = 100% PWM。

你可以

  • 使用 CTC(比较匹配时清除计时器)模式
  • 使用两个宽度相同的定时器,比如定时器 0 和定时器 2
  • 使用同一定时器的两个输出比较单元(例如OCR1A/OCR1B)