monster moto shield vnh3sp30 не работает реверс и кратковременный пуск прямой

etaon
Offline
Зарегистрирован: 16.12.2011

Добрый день. Настраиваю работу стеклоподъёмников с помощью силового модуля.

Получил глюк. Кратковременный запуск вперёд и полное отсутствие реверса.

Командой "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);
  }
}

 

etaon
Offline
Зарегистрирован: 16.12.2011

С другим мотором вращение вперёд нормальное, без остановок. А вот реверса нет.

Светодиод-индикатор тускло горит и тупо стоит писк от мотора, но вращения нет.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

а в реальности чем управляться будут стеклоподъёмники?

PS у меня на VNH5019 всё работает

etaon
Offline
Зарегистрирован: 16.12.2011

мега 2560. Уно брать не стал, тк.к мег много

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

etaon пишет:

мега 2560. Уно брать не стал, тк.к мег много

не о контроллере речь )))

etaon
Offline
Зарегистрирован: 16.12.2011

monster moto shield vnh3sp30 не работает реверс и кратковременный пуск прямой

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

etaon пишет:

monster moto shield vnh3sp30 не работает реверс и кратковременный пуск прямой

ну так накидай простенький скетч и проверь, от кнопки, там нечему неработать

проверялось на частоте ШИМ 4 килогерца

etaon
Offline
Зарегистрирован: 16.12.2011

Простенький скетч выложил уже. Проще некуда.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

простенький это когда реверс переключается кнопкой, упрости, а еще проще проверить вообще два тумблера и ардуины не надо )))

etaon
Offline
Зарегистрирован: 16.12.2011

Разобрался. Скорее всего брак как у большинства. Речь шла про сдвоенный драйвер. 

ВЧера купил одинарный драйвер и он заработал моментально. Идеально! 

А глючный сдвоенный потом позже поковыряю, может что придумаю.. Лампочки же он зажигает :)