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

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

问题描述:

我试图在Arduino板上使用C来控制2个电机的速度。但是,在上传代码时,尽管OCR值相同,但每台电机仍以不同的速度运行。你可以给它一个检查原因,如果你这样做,我会非常感激。两台电机是一样的。我使用的板是Arduino Uno尽管具有相同的值,但在Arduino中使用C控制电机的速度导致不同的速度

#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

查看代码的第15行,我敢打赌问题出现在那里或那里。严重的是,显示代码,然后我们可以检查错误。 – Yunnosch

+0

两台电机彼此不同吗? – MCG

+2

所有的代码,或者更确切地说,我们想要一个[mcve]。 – Yunnosch

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

可以

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

那么这意味着我不得不根据这个尺度输入值? – neX

+0

我用一些建议编辑了这个问题 – Laurenz