Статьи » Разработки
Добавить статью

Блок управления мини-экскаватором Mitsubishi MM55SR (не заработал)

2021-09-14 в 22:48

Хочу поделиться одним из проектов. Он должен был стать коммерческим. Однако, тут возможно я переоценил свои знания в программировании. По итогу, сразу в начале обозначу что речь пойдет про создание электронного блока управления для мини-экскаватора, который не заработал. Разработка заняла 4 месяца. Это тестирование, изучение, написание кода, разработка платы, разработка схемотехники, постоянные тесты версий кода на самом экскаваторе.

Но вот и прошло 4 месяца, и совместно с заказчиком было решено остановить разработку. Я и вышел из проекта. Не без убытков. Но об этом не здесь)

Но теперь у меня присутствует большое желание поделиться наработками, ведь я уверен в том что они смогут кому-нибудь оказать огромную помощь в проектах данной сферы.

Поступил заказ. Нужно было сделать для мини экскаватора Mitsubishi MM55SR новый электронный блок управления гидравликой. Это стрела, ковш, кабина и отвал. Родной блок управления окончательно вышел из строя и ремонту не подлежал. Компьютер выдавал огромное количество ошибок и с ними стрела с места не сдвигалась.

Для начала я выяснил вообще принцип работы экскаватора. Все было довольно не сложно:

Управление осуществляется с помощью двух джойстиков и ножной педали с отклонение влево и вправо.
Джойстик управляет поднятием и поворотом стрелы, отклонением ковша и поворотом кабины. Ножная клавиша управляет поворотом всей стрелы соответственно влево или право. Все это управляется электроникой и электромагнитными клапанами. Сам экскаватор двигался на гусеницах, с рычажным управлением без электроники. Определив это, я начал составлять алгоритм. Мне нужно отклонять какой-то элемент в зависимости от отклонения каждого из джойстиков в своем направлении. В том числе и ножной клавишей.

Так как никаких электронных схем не было, я начал поиск на родной плате всех входов и выходов. Начал с джойстиков. Конкретно я искал пины, значения на которых меняются в зависимости от отклонения джойстиков. Я такие нашел, их было 4 точки на родной плате. Обозначил как pinX1, pinY1, pinX2, pinY2.
X и Y это оси, а 1 и 2 это левый и правый джойстик.
Значения на джойстиках оказались далеко не идеальными. В центре не было 512, и в конечном положении небыло 0. Если смотреть в по аналогу. Именно с помощью Ардуино я их и нашел. В том числе и их значения. Но про это позже.

Код
  int X1 = analogRead(pinX1);       // считываем положение джойстика 1
  int Y1 = analogRead(pinY1);
  int X2 = analogRead(pinX2);       // считываем положение джойстика 2
  int Y2 = analogRead(pinY2);

Когда двигал джойстики я заметил, что в них имеются концевики. Подумал я что неплохо бы и мне их учитывать для безопасности. Я их так же нашел на плате. 4 контакта на плате. Обозначил konc_X1, konc_Y1, konc_X2, konc_Y2.

Код
  boolean koncX1State = digitalRead(konc_X1); // считываем состояние концевика X1
  boolean koncY1State = digitalRead(konc_Y1); // считываем состояние концевика Y1
  boolean koncX2State = digitalRead(konc_X2); // считываем состояние концевика X2
  boolean koncY2State = digitalRead(konc_Y2); // считываем состояние концевика Y2

Далее нашел контакты ножного выключателя. Это получились 2 пина btn_kov_p и btn_kov_l. В коде я называл ее педаль, и далее по тексту тоже будет педаль.

Оставалось дело за малым. Найти пины управления клапанами. Тут я решил не замарачиваться, и просто подавать низкий сигнал (ноль) на разные места на плате. Через некоторое время, я нашел все пины которые мне нужны были. При соединении их с землей (тот же ноль), отклонялись в разные стороны разные элементы. Каждый из пинов управлял отклонением элемента в определенную сторону. Принял для этих пинов следующие обозначения:

kov_p - ковш право (управление педалью)
kov_l - ковш лево  (управление педалью)
cab_p - кабина право
cab_l - кабина лево
kov_nas - сам ковш на себя
kov_ots - сам ковш от себя
strl_kov_nas - стрела с ковшом на себя
strl_kov_ots - стрела с ковшом от себя
str_down - вся стрела вниз
str_up - вся стрела вверх

Первый алгоритм который пришел в голову следующий: Считываем значение джойстиков, переводим их в диапазон значений 255-0 при помощи функции map, и передаем ШИМ значение 255-0 в порт управления того элемента стрелы, в какую сторону переместился джойстик. Но только при условии, что на порту концевика будет 0. Тоесть концевик зажат, это значит что джойстик действительно перемещен. Это я делал для безопасности.

Первая проблема с которой я столкнулся и о которой уже упоминал, это значения джойстиков относительно их положений. Чтобы правильно все мапилось (обрабатывалось и преобразовывалось функцией map), мне нужно считать и записать значения каждого из джойстиков в каждом направлении в самом крайнем положении и в положении после сразу же сработавшего концевика. Так как технике 20+ лет, значения далеко не идеальны. Крайние значения уже не 0 а 40-150, а начальные положения джойстиков в которых срабатывает концевик так же не 512, а 350-500.

Код

  if (X1 > 530 && koncX1State == LOW) {
    strlkovots = map(X1, 610, 922, 255, 0);  // маппинг значений стрела с ковшом на себя
    strlkovots = constrain(strlkovots, 0, 255);
    analogWrite(strl_kov_ots, strlkovots);       // движение стрелы с ковшом на себя
  }
  else {
    strlkovots = 0;
    analogWrite(strl_kov_ots, 0);
  }

  if (X1 < 510 && koncX1State == LOW) {
    strlkovnas = map(X1, 481, 70, 255, 0);   // маппинг значений стрела с ковшом от себя
    strlkovnas = constrain(strlkovnas, 0, 255);
    analogWrite(strl_kov_nas, strlkovnas);       // движение стрелы с ковшом от себя
  }
  else {
    strlkovnas = 0;
    analogWrite(strl_kov_nas, 0);
  }

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

После первых тестов я смог полноценно управлять элементами экскаватора. Но эти движения  не были плавными. Получилось так, что только едва отклонишь джойстик, элемент сразу приходит резко в движение. Проблема была в том что не было плавности набора скорости перемещения. Должно быть как, едва джойстик отклонил, определенный элемент начинает медленно двигаться, и чем дальше отклоняешь джойстик, тем быстрее начинается двигаться элемент.

Я был уверен что мне в этом поможет функция ШИМ управления клапанами, поэтому я и отправлял в порт управления именно ШИМ сигнал. При тестах я обратил внимание, что код отрабатывает отлично. Через монитор порта, я увидел что в порты управления клапанами действительно отправляются значения от 255 до 0. Но элемент двигался исключительно на полной скорости в диапазоне значений 25-0. И тут уже сделал вывод что я не верно определил способ управления гидравлическими клапанами. Как мне позже подсказали, что для открытия клапанов частота не используется, а на самом деле они дискретные.

Примерный принцип работы клапанов.

Чтобы экскаватор заработал правильно, нужно сделать все по другому. Клапаны в данной технике не пропорциональные, а дискретные с обратной связью. После нескольких затраченных часов с осциллографом, выяснил где находятся пины обратной связи. Их оказалось 4. И тут уже я сделал вывод о том, что мне нужно использовать два пина управления клапаном и один пин обратной связи этого же клапана. Обратная связь нужно чтобы понимать в каком положении находится клапан чтобы мы смогли его остановить в нужно положении. Выполним это, мы сможем зафиксировать его так что через себя он будет пропускать определенный объем гидравлики, как раз для медленных движений. В коде добавил новые переменные обратной связи, а так же уже изменил назначение функции map. С ее помощью я преобразовал диапазоны значений джойстиков в простые цифры 0-100. Как проценты. Где 0 это медленно, 100 это полная скорость.

Если перефразировать, то когда оба клапана включены - нейтраль, один включен - идет перемещение, два включены - фиксация в нужном положении по датчику обратной связи.
Предположим джойстик в нейтрали 2.5 в. При отклонении джойстика на 3 В, компьютер включает соленоид и золотник начинает перемещаться. Как только на обратной связи напряжение вырастит до трех вольт, компьютер включит второй соленоид и зафиксирует золотник в таком положении.
Грубо говоря компьютер подгоняет посредством перемещения золотника напряжение обратной связи к выходному напряжению с джойстика.

Возьмем для примера элемент стрелы - ковш. Он может двигаться вверх в вниз. Чтобы им управлять мы отклоняем первый джойстик вверх или вниз. Начали отклонять джойстик вверх. Это пусть будет 1%. В этот момент мы отправляем в порт движения ковша вверх, считываем обратную связь (ее я кстати тоже маплю от 0 до 100), и когда значения на обратной связи будет так же 1% я зафиксирую клапан в этом положении отправив в порт ковша вниз ноль. Тоже самое если отклонили джойстик дальше, но уже на 25%. Читаем обратную связь и понимаем что нет на ней 25%. Отправляем в порт ковш вниз 1, тем самым отпуская его и когда значение обратной связи будет 25%. Отправляем в порт ковш вниз 0.

Алгоритм я проверил, он практически работал безупречно. Но лишь на одном элементе. Тут уже действительно не хватило у меня знаний для того чтобы оптимизировать код, сделать его более правильным и так чтобы ничего не мешало друг другу. И скажем так, что именно на этом моменте пришлось остановить работу над проектом. К этому моменту уже прошло 3 месяца с начала работы. Да и честно, я сам понимал что просто не смогу его доделать, задача оказалось для меня сложной.

Но все же, я попробовал свои силы, определенно получил новые знания. А так же понимание, что одному тащить даже такой проект на самом деле тяжело.
А я строил большие планы. Разработал даже плату с контроллером Arduino Mega2560 на которой и вел все тесты.

Схема на самом деле не сложная. Она лишь для того, чтобы в последующей облегчить подключение экскаватора к новому контроллеру.

Контакты от родных нерабочих мозгов подключаются к Arduino 2560 через винтовые клеммы которые впаиваются в плату. Каждое место под вход или выход подписано. Такой способ подключение гораздо удобнее пайки. Предполагалось использовать Arduino Mega 2560 в уменьшенной версии платы, чем стандартная Mega.

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

Имея файлы gerber, вы можете заказать производство этой платы, отправив их в сервис PCBWay, которые я прилагаю к этой статье. А уже после того как вы ее получите, можете производить тесты и делиться вашими итогами на нашем сайте.

Плата контроллера - скачать
Схема контроллера - скачать
Arduino Mega 2560 в компактном варианте для платы - заказать.

Не пропустите обновления! Подписывайтесь на нашу страницу в Instagram.
Так же у нас есть Telegram канал.

Вам понравился наш проект? Поделитесь с друзьями!

Просмотров: 145. Оценка статьи: 5.0 из 5. Уже оценило 1 читатель

Об авторе - Администратор

More by Администратор

Вам может быть это интересно

Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]