Ремонт регулятора холостого хода на экскаваторе Hitachi

У данного экскаватора что-то произошло с "мозгами" после чего, у него перестала работать "печка", поворотники и отказал регулятор, который выставляет обороты на холостом ходу и глушит машину. Поворотники и печку победили с помощью реле, осталось разобраться с холостым ходом. Задача оказалась по истине интересная и нетривиальная. Разобрав двигатель, который управлял заслонкой стало понятно, что он шаговый. И так, мы имеем шаговый двигатель, с редуктором, и потенциометром, осталось заставить это все работать.

 

 

Шаговый двигатель (Stepper), в отличии от коллекторных или асинхронных заставить работать на много сложней, так как для их работы необходим драйвер (Stepper Motor Driver). На драйвер поступает сигнал (импульс) и он поворачивает двигатель на 1'8 градуса (в зависимости от двигателя). Для того что бы нам повернуть на 360 градусов (один оборот) нам нужно дать 200 импульсов (шагов). Если выдавать 200 импульсов в минуту, то мы получим скорость вращения 1 оборот в минуту. Из-за своей особенности данные двигатели получили широкое распространение в ЧПУ станках.

 

Был согласован принцип работы — блок управления, на блоке две кнопки. В момент нажатия и удержания кнопки двигатель вращался бы в одну и или другую сторону, в момент отпускания оставался бы неподвижен. Так же надо было добавить светодиод (LED), который был бы индикатором того, что блок включен или что двигатель в данный момент вращается. Для того, чтобы принимать сигналы с кнопок, выдавать сигналы DIR (направление движения), STEP (шаг), EN (удержание) и "моргать" светодиодом. Самым быстрым и дешевым средством для этих целей оказался Arduino Nano. Можно было использовать и аналоги от Амперки или Китай, но к сожалению сроки были довольно сжатые. 

 

 

Технические характеристики Arduino Nano:

 

  • Напряжение питания 5В;
  • Входное питание 7-12В (рекомендованное);
  • Количество цифровых пинов – 14, из них 6 могут использоваться в качестве выходов ШИМ;
  • 8 аналоговых входов;
  • Максимальный ток цифрового выхода 40 мА;
  • Флэш- память 16 Кб или 32 Кб, в зависимости от чипа;
  • ОЗУ 1 Кб или 2 Кб, в зависимости от чипа;
  • EEPROM 512 байт или 1 Кб;
  • Частота 16 МГц;
  • Размеры 19 х 42 мм;
  • Вес 7 г.

 

Данного арсенала под нашу задачу, более чем достаточно.

 

 

В первой версии в качестве драйвера был выбран BB-A4983, Двухканальный драйвер шагового двигателя, 2.5 А, 6-35В, так как рассчитать рабочие токи двигателя было затруднительно (почти невозможно), то взят был почти на угад. В последствии на машине он смог один раз открыть/закрыть и сгорел. В финальной версии в качестве драйвера использован "взрослый" драйвер CW5045

Код Arduino выкладываю больше даже для себя, мало ли придется его доработать. Скажу сразу, что с точки зрения программирования код "очень" не идеален, скетч написан на скорую руку. Можно было оптимизировать работу, но к сожалению было мало времени.

#define pinLedRed 9
#define pinLedGreen 10
#define pushUP 2
#define pushDown 3
#define movingSpeed A1
#define StepPin 4
#define DirPin 6
 
int BlinkGreen = 0;
int BlinkGreen2 = 0;
int RotationSrart = 0;
int RotationSrart2 = 0;
int stopDriver = 0;
int Dir = 0;
int ledState = LOW;
unsigned long previousMillis = 0;
const long interval = 200;
 
void setup() {
  //start serial connection
  Serial.begin(9600);
  pinMode(pushUP,INPUT_PULLUP);
  pinMode(pushDown,INPUT_PULLUP);
  pinMode(StepPin,OUTPUT);
  pinMode(DirPin,OUTPUT);
  pinMode(pinLedRed,OUTPUT);
  pinMode(pinLedGreen,OUTPUT);
  pinMode(movingSpeed,INPUT);
  digitalWrite(DirPin, LOW);
  digitalWrite(pinLedRed, LOW);
  digitalWrite(pinLedGreen, HIGH);
}
 
void loop() {
 
  int MovingSpeedValue = analogRead(movingSpeed);
  //Serial.println(MovingSpeedValue);
  unsigned long currentMillis = millis();
 
  if (BlinkGreen == 0 && BlinkGreen2 == 0) {
    digitalWrite(pinLedGreen, HIGH);
  }
  else {
    if (currentMillis - previousMillis >= interval) {
      previousMillis = currentMillis;
      // if the LED is off turn it on and vice-versa:
      if (ledState == LOW) {
        ledState = HIGH;
      } else {
        ledState = LOW;
      }
      // set the LED with the ledState of the variable:
      digitalWrite(pinLedGreen, ledState);
    }
  }
 
  int upVal = digitalRead(pushUP);
  int DownVal = digitalRead(pushDown);
 
  if (DownVal == HIGH) {
    BlinkGreen2 = 0;
    RotationSrart2 = 0;
    Dir = 0;
    digitalWrite(pinLedRed, LOW);
  } else {
    BlinkGreen2 = 1;
    RotationSrart2 = 1;
    Dir = 1;
  }
 
  if (upVal == HIGH) {
    BlinkGreen = 0;
    RotationSrart = 0;
    digitalWrite(pinLedRed, LOW);
  } else {
    BlinkGreen = 1;
    RotationSrart = 1;
  }
 
  if (RotationSrart == 1 || RotationSrart2 == 1) {
    if(Dir == 0) {
       digitalWrite(DirPin, LOW);
    }
    else {
      digitalWrite(DirPin, HIGH);
    }
    digitalWrite(StepPin, LOW);
    delayMicroseconds(1500);
    digitalWrite(StepPin, HIGH);
    delayMicroseconds(1500);
  }
}

 

 

Как это выглядит в кабине.

Получилось в итоге довольно неплохо. Машинисту понравилось. Если бы у меня было изначально чуть больше представления о том, что делаю, то можно было бы использовать даже штатный потенциометр для управления. 

 

 

ООО "КС-Прогресс"

ООО "КС-Прогресс" Разработка и производство станков и оборудования для вашего бизнеса.

ООО "КС-Прогресс"

ИНН: 9721161882

ОГРН: 1227700200837

Связаться с нами

Email:

info@ks-progress.ru

Телефон:

+7 (499) 755-57-74

+7 (926) 106‑07‑52

Производство:

109052, г. Москва, ул. Нижегородская, д. 104, стр. 7

© 2021-2025 ks-progress.ru