всем, добрый день! Имею такой мотор шилд Никак не получается заставить его крутить двигатели в обратном направлении. Т.е. запускать и регулировать скорость вращения получается, а менять полярность нет Скетч прилагаю При посылке через последовательный порт "W" мотор крутится допустим по часовой При посылке через последовательный порт "S" мотор крутится с меньшей скоростью, но опять по часовой Т.е. ШИМ работает, а полярность не меняется Пробовал переписывать скетч под мотор А тоже самое В чем засада не пойму Код (C++): #define MOTOR_GO_A 3 // PWMA #define MOTOR_GO_B 11 // PWMB #define MOTOR_DIR_A 12 // DIRA #define MOTOR_DIR_B 13 // DIRB #define MOTOR_BRAKE_A 9 // BRAKE A #define MOTOR_BRAKE_B 8 // BRAKE B void setup() { pinMode (MOTOR_GO_A, OUTPUT); pinMode (MOTOR_GO_B, OUTPUT); pinMode (MOTOR_DIR_A, OUTPUT); pinMode (MOTOR_DIR_A, OUTPUT); pinMode (MOTOR_BRAKE_A, OUTPUT); pinMode (MOTOR_BRAKE_B, OUTPUT); Serial.begin(9600); } void loop() { if (Serial.available() > 0) { int vled = Serial.read(); if (vled == 'W') analogWrite(MOTOR_GO_B, 240); digitalWrite(MOTOR_DIR_B, HIGH); if (vled == 'S') analogWrite(MOTOR_GO_B, 100); digitalWrite(MOTOR_DIR_B, LOW); if (vled == 'Z') digitalWrite(MOTOR_GO_B, LOW); } }
сорри собственно это не спасает, это у меня в процессе перебирания различных вариантов закралась ошибка, а так изначально я подключал моторчик и на клемму А и на В...перебирая пины...не хочет крутить в разные стороны...
я вижу ваш код и в нём указал на ошибку что вы там ещё делаете не знаю сегодня хрустальный шар не брал...
да я ж не с претензиями... спасибо, что пытаетесь помочь код исправил, проблема остается.... сам склоняюсь к аппаратной проблеме... просьба подсказать в каком направлении двигаться Код (C++): #define MOTOR_GO_A 3 // PWMA #define MOTOR_GO_B 11 // PWMB #define MOTOR_DIR_A 12 // DIRA #define MOTOR_DIR_B 13 // DIRB #define MOTOR_BRAKE_A 9 // BRAKE A #define MOTOR_BRAKE_B 8 // BRAKE B void setup() { pinMode (MOTOR_GO_A, OUTPUT); pinMode (MOTOR_GO_B, OUTPUT); pinMode (MOTOR_DIR_A, OUTPUT); pinMode (MOTOR_DIR_B, OUTPUT); pinMode (MOTOR_BRAKE_A, OUTPUT); pinMode (MOTOR_BRAKE_B, OUTPUT); Serial.begin(9600); } void loop() { if (Serial.available() > 0) { int vled = Serial.read(); if (vled == 'W') analogWrite(MOTOR_GO_B, 240); digitalWrite(MOTOR_DIR_A, HIGH); digitalWrite(MOTOR_DIR_B, HIGH); if (vled == 'S') analogWrite(MOTOR_GO_B, 100); digitalWrite(MOTOR_DIR_A, LOW); digitalWrite(MOTOR_DIR_B, LOW); if (vled == 'Z') digitalWrite(MOTOR_GO_B, LOW); } }
Для теста запустите такой скетч: Код (C++): #define MOTOR_GO_A 3 // PWMA #define MOTOR_GO_B 11 // PWMB #define MOTOR_DIR_A 12 // DIRA #define MOTOR_DIR_B 13 // DIRB #define MOTOR_BRAKE_A 9 // BRAKE A #define MOTOR_BRAKE_B 8 // BRAKE B void setup() { pinMode (MOTOR_GO_A, OUTPUT); pinMode (MOTOR_GO_B, OUTPUT); pinMode (MOTOR_DIR_A, OUTPUT); pinMode (MOTOR_DIR_B, OUTPUT); pinMode (MOTOR_BRAKE_A, OUTPUT); pinMode (MOTOR_BRAKE_B, OUTPUT); analogWrite(MOTOR_GO_A, 240); analogWrite(MOTOR_GO_B, 240); } void loop() { digitalWrite(MOTOR_DIR_A, !digitalRead(MOTOR_DIR_A)); digitalWrite(MOTOR_DIR_B, !digitalRead(MOTOR_DIR_B)); delay(2000); } Он просто будет менять направление каждые 2 сек. Посмотрите напряжение на клеммах моторов. Если полярность не меняется, значит какие то проблемы с шилдом.
Ostrov, спасибо, ваш код работает - шилд переключает полярность! Осталось мне разобраться, что не так было в моем скетче