monster moto shield vnh3sp30 не работает реверс и кратковременный пуск прямой
- Войдите на сайт для отправки комментариев
Чт, 15/07/2021 - 19:38
Добрый день. Настраиваю работу стеклоподъёмников с помощью силового модуля.
Получил глюк. Кратковременный запуск вперёд и полное отсутствие реверса.
Командой "2" запускается вращение вперёд. Через 1-2 секунды отключается.
Командой "3" реверс. Он не работает. Но если набрать команду "23" срабатывает реверс и непрерывно крутится реверс. На команду "1" - стоп реагирует норм.
Я что-то не понимаю?
Питается всё это дело от 24v аккумуляторов через DC-DC-stepdown 28v->15v.
#define BRAKE 0 #define CW 1 #define CCW 2 #define CS_THRESHOLD 15 // Definition of safety current (Check: "1.3 Monster Shield Example"). //MOTOR 1 #define MOTOR_A1_PIN 7 #define MOTOR_B1_PIN 8 //MOTOR 2 #define MOTOR_A2_PIN 4 #define MOTOR_B2_PIN 9 #define PWM_MOTOR_1 5 #define PWM_MOTOR_2 6 #define CURRENT_SEN_1 A2 //Для VNH2SP30 выводы датчика тока (CS) будут выдавать примерно 0,13 вольт на ампер выходного тока. #define CURRENT_SEN_2 A3 #define EN_PIN_1 A0 #define EN_PIN_2 A1 #define MOTOR_1 0 #define MOTOR_2 1 short usSpeed = 255; //default motor speed unsigned short usMotor_Status = BRAKE; void setup() { pinMode(MOTOR_A1_PIN, OUTPUT); pinMode(MOTOR_B1_PIN, OUTPUT); pinMode(MOTOR_A2_PIN, OUTPUT); pinMode(MOTOR_B2_PIN, OUTPUT); pinMode(PWM_MOTOR_1, OUTPUT); pinMode(PWM_MOTOR_2, OUTPUT); pinMode(CURRENT_SEN_1, INPUT); pinMode(CURRENT_SEN_2, INPUT); pinMode(EN_PIN_1, OUTPUT); pinMode(EN_PIN_2, OUTPUT); Serial.begin(9600); // Initiates the serial to do the monitoring Serial.println("Begin motor control"); Serial.println(); //Print function list for user selection Serial.println("Enter number for control option:"); Serial.println("1. STOP"); Serial.println("2. FORWARD"); Serial.println("3. REVERSE"); Serial.println("4. READ CURRENT"); Serial.println("+. INCREASE SPEED"); Serial.println("-. DECREASE SPEED"); Serial.println(); } void loop() { char user_input; while(Serial.available()) { user_input = Serial.read(); //Read user input and trigger appropriate function digitalWrite(EN_PIN_1, HIGH); digitalWrite(EN_PIN_2, HIGH); if (user_input =='1') { Stop(); // CURRENT_SEN(); } else if(user_input =='2') { Forward(); // CURRENT_SEN(); } else if(user_input =='3') { Reverse(); // CURRENT_SEN(); } else if(user_input =='4') { CURRENT_SEN(); } else if(user_input =='+') { IncreaseSpeed(); // CURRENT_SEN(); } else if(user_input =='-') { DecreaseSpeed(); // CURRENT_SEN(); } else { // Serial.println("Invalid option entered."); } } } void CURRENT_SEN() { float x=analogRead(CURRENT_SEN_2); float z=(x/26.598); Serial.print("CURRENT_SEN_1: "); Serial.print(x); Serial.print(" _2: "); Serial.print(z); Serial.print(" _3: "); Serial.println(map(x,0,1023,0,3846)/100); //26,598 //Serial.println(map(analogRead(CURRENT_SEN_2),0,1023,0,3846)/100); //26,598 } void Stop() { Serial.println("Stop"); usMotor_Status = BRAKE; // motorGo(MOTOR_1, usMotor_Status, 0); motorGo(MOTOR_2, usMotor_Status, 0); } void Forward() { Serial.println("Forward"); usMotor_Status = CW; // motorGo(MOTOR_1, usMotor_Status, usSpeed); motorGo(MOTOR_2, usMotor_Status, usSpeed); } void Reverse() { Serial.println("Reverse"); usMotor_Status = CCW; // motorGo(MOTOR_1, usMotor_Status, usSpeed); motorGo(MOTOR_2, usMotor_Status, usSpeed); } void IncreaseSpeed() { usSpeed = usSpeed + 10; if(usSpeed > 255) { usSpeed = 255; } Serial.print("Speed +: "); Serial.println(usSpeed); // motorGo(MOTOR_1, usMotor_Status, usSpeed); motorGo(MOTOR_2, usMotor_Status, usSpeed); } void DecreaseSpeed() { usSpeed = usSpeed - 10; if(usSpeed < 0) { usSpeed = 0; } Serial.print("Speed -: "); Serial.println(usSpeed); // motorGo(MOTOR_1, usMotor_Status, usSpeed); motorGo(MOTOR_2, usMotor_Status, usSpeed); } void motorGo(uint8_t motor, uint8_t direct, uint8_t pwm) //Function that controls the variables: motor(0 ou 1), direction (cw ou ccw) e pwm (entra 0 e 255); { if(motor == MOTOR_1) { if(direct == CW) { digitalWrite(MOTOR_A1_PIN, LOW); digitalWrite(MOTOR_B1_PIN, HIGH); } else if(direct == CCW) { digitalWrite(MOTOR_A1_PIN, HIGH); digitalWrite(MOTOR_B1_PIN, LOW); } else { digitalWrite(MOTOR_A1_PIN, LOW); digitalWrite(MOTOR_B1_PIN, LOW); } analogWrite(PWM_MOTOR_1, pwm); } else if(motor == MOTOR_2) { if(direct == CW) { digitalWrite(MOTOR_A2_PIN, LOW); delay(50); digitalWrite(MOTOR_B2_PIN, HIGH); } else if(direct == CCW) { digitalWrite(MOTOR_A2_PIN, HIGH); delay(50); digitalWrite(MOTOR_B2_PIN, LOW); } else { digitalWrite(MOTOR_A2_PIN, LOW); delay(50); digitalWrite(MOTOR_B2_PIN, LOW); } delay(50); analogWrite(PWM_MOTOR_2, pwm); } }
С другим мотором вращение вперёд нормальное, без остановок. А вот реверса нет.
Светодиод-индикатор тускло горит и тупо стоит писк от мотора, но вращения нет.
а в реальности чем управляться будут стеклоподъёмники?
PS у меня на VNH5019 всё работает
мега 2560. Уно брать не стал, тк.к мег много
мега 2560. Уно брать не стал, тк.к мег много
не о контроллере речь )))
monster moto shield vnh3sp30 не работает реверс и кратковременный пуск прямой
monster moto shield vnh3sp30 не работает реверс и кратковременный пуск прямой
ну так накидай простенький скетч и проверь, от кнопки, там нечему неработать
проверялось на частоте ШИМ 4 килогерца
Простенький скетч выложил уже. Проще некуда.
простенький это когда реверс переключается кнопкой, упрости, а еще проще проверить вообще два тумблера и ардуины не надо )))
Разобрался. Скорее всего брак как у большинства. Речь шла про сдвоенный драйвер.
ВЧера купил одинарный драйвер и он заработал моментально. Идеально!
А глючный сдвоенный потом позже поковыряю, может что придумаю.. Лампочки же он зажигает :)