控制电机'尽管具有相同的值

时间:2017-09-04 19:52:54

标签: c arduino-uno atmega

我试图在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);

}

1 个答案:

答案 0 :(得分:4)

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

你可以

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