скоростью управлять всё же лучше с использованием шима. разобраться (сразу или позже), почему не получается тоже полезно, может чего на будущее полезного узнаете.
это драйвер mx1508. раз китайцы продают их массово (и в электронике дешевых р/у машинок используется, а в р/у управление скоростью иногда есть), может про нюансы с шимом чего найдётся.
Добавлено спустя 8 минут 8 секунд:http://arduino.ru/forum/apparatnye-voprosy/mx1508-motor-driver-kto-ispolzoval#comment-300358вроде нормально с шимом дружит, там пример скетча для ардуины есть (в циклах скорость меняется)
Код:
// mx1508 arduino ide example
// By #Techn0man1ac
#define IN1 14 // left motor, PWM
#define IN2 13 // left motor
#define IN3 12 // right motor, PWM
#define IN4 15 // right motor
#define motorLeft 0
#define motorRight 1
int motrSpd = 0;
void setup() {
Serial.begin(115200);
pinMode(IN1, OUTPUT); // PWM
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT); // PWM
pinMode(IN4, OUTPUT);
}
void loop() {
for (motrSpd = 0; motrSpd <= 255; motrSpd += 1) {
speedMotors(motorRight, motrSpd);
speedMotors(motorLeft, motrSpd);
Serial.println(motrSpd);
delay(15);
}
for (motrSpd = 255; motrSpd >= -255; motrSpd -= 1) {
speedMotors(motorRight, motrSpd);
speedMotors(motorLeft, motrSpd);
Serial.println(motrSpd);
delay(15);
}
for (motrSpd = -255; motrSpd <= 0; motrSpd += 1) {
speedMotors(motorRight, motrSpd);
speedMotors(motorLeft, motrSpd);
Serial.println(motrSpd);
delay(15);
}
delay(5000);
}
void speedMotors(int motor, int spd)
{
if (motor == motorLeft) {
if (spd >= 0) {
analogWrite(IN1, spd);
digitalWrite(IN2, LOW);
} else {
spd = 255 + spd;
analogWrite(IN1, spd);
digitalWrite(IN2, HIGH);
}
} else {
if (spd >= 0) {
analogWrite(IN3, spd);
digitalWrite(IN4, LOW);
} else {
spd = 255 + spd;
analogWrite(IN3, spd);
digitalWrite(IN4, HIGH);
}
}
}