尽管具有相同的值,但在 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)
我正在尝试使用 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)