Статьи » Разработки |
2021-09-14 в 22:48 (последнее изменение 2024-03-08 в 21:36)
Хочу поделиться одним из проектов. Он должен был стать коммерческим. Однако, тут возможно я переоценил свои знания в программировании. По итогу, сразу в начале обозначу что речь пойдет про создание электронного блока управления для мини-экскаватора, который не заработал. Разработка заняла 4 месяца. Это тестирование, изучение, написание кода, разработка платы, разработка схемотехники, постоянные тесты версий кода на самом экскаваторе. Но вот и прошло 4 месяца, и совместно с заказчиком было решено остановить разработку. Я и вышел из проекта. Не без убытков. Но об этом не здесь) Но теперь у меня присутствует большое желание поделиться наработками, ведь я уверен в том что они смогут кому-нибудь оказать огромную помощь в проектах данной сферы. Поступил заказ. Нужно было сделать для мини экскаватора Mitsubishi MM55SR новый электронный блок управления гидравликой. Это стрела, ковш, кабина и отвал. Родной блок управления окончательно вышел из строя и ремонту не подлежал. Компьютер выдавал огромное количество ошибок и с ними стрела с места не сдвигалась. Для начала я выяснил вообще принцип работы экскаватора. Все было довольно не сложно: Управление осуществляется с помощью двух джойстиков и ножной педали с отклонение влево и вправо. Так как никаких электронных схем не было, я начал поиск на родной плате всех входов и выходов. Начал с джойстиков. Конкретно я искал пины, значения на которых меняются в зависимости от отклонения джойстиков. Я такие нашел, их было 4 точки на родной плате. Обозначил как pinX1, pinY1, pinX2, pinY2. Код
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 - ковш право (управление педалью) Первый алгоритм который пришел в голову следующий: Считываем значение джойстиков, переводим их в диапазон значений 255-0 при помощи функции map, и передаем ШИМ значение 255-0 в порт управления того элемента стрелы, в какую сторону переместился джойстик. Но только при условии, что на порту концевика будет 0. Тоесть концевик зажат, это значит что джойстик действительно перемещен. Это я делал для безопасности. Первая проблема с которой я столкнулся и о которой уже упоминал, это значения джойстиков относительно их положений. Чтобы правильно все мапилось (обрабатывалось и преобразовывалось функцией map), мне нужно считать и записать значения каждого из джойстиков в каждом направлении в самом крайнем положении и в положении после сразу же сработавшего концевика. Так как технике 20+ лет, значения далеко не идеальны. Крайние значения уже не 0 а 40-150, а начальные положения джойстиков в которых срабатывает концевик так же не 512, а 350-500. Код
if (X1 > 530 && koncX1State == LOW) { if (X1 < 510 && koncX1State == LOW) { С новыми данными пришлось отредактировать код, внести новые значения с который начинать обработку положений чтобы правильно задавать значения ШИМ сигнала в порт управления клапаном. После первых тестов я смог полноценно управлять элементами экскаватора. Но эти движения не были плавными. Получилось так, что только едва отклонишь джойстик, элемент сразу приходит резко в движение. Проблема была в том что не было плавности набора скорости перемещения. Должно быть как, едва джойстик отклонил, определенный элемент начинает медленно двигаться, и чем дальше отклоняешь джойстик, тем быстрее начинается двигаться элемент. Я был уверен что мне в этом поможет функция ШИМ управления клапанами, поэтому я и отправлял в порт управления именно ШИМ сигнал. При тестах я обратил внимание, что код отрабатывает отлично. Через монитор порта, я увидел что в порты управления клапанами действительно отправляются значения от 255 до 0. Но элемент двигался исключительно на полной скорости в диапазоне значений 25-0. И тут уже сделал вывод что я не верно определил способ управления гидравлическими клапанами. Как мне позже подсказали, что для открытия клапанов частота не используется, а на самом деле они дискретные. Примерный принцип работы клапанов. Чтобы экскаватор заработал правильно, нужно сделать все по другому. Клапаны в данной технике не пропорциональные, а дискретные с обратной связью. После нескольких затраченных часов с осциллографом, выяснил где находятся пины обратной связи. Их оказалось 4. И тут уже я сделал вывод о том, что мне нужно использовать два пина управления клапаном и один пин обратной связи этого же клапана. Обратная связь нужно чтобы понимать в каком положении находится клапан чтобы мы смогли его остановить в нужно положении. Выполним это, мы сможем зафиксировать его так что через себя он будет пропускать определенный объем гидравлики, как раз для медленных движений. В коде добавил новые переменные обратной связи, а так же уже изменил назначение функции map. С ее помощью я преобразовал диапазоны значений джойстиков в простые цифры 0-100. Как проценты. Где 0 это медленно, 100 это полная скорость. Если перефразировать, то когда оба клапана включены - нейтраль, один включен - идет перемещение, два включены - фиксация в нужном положении по датчику обратной связи. Возьмем для примера элемент стрелы - ковш. Он может двигаться вверх в вниз. Чтобы им управлять мы отклоняем первый джойстик вверх или вниз. Начали отклонять джойстик вверх. Это пусть будет 1%. В этот момент мы отправляем в порт движения ковша вверх, считываем обратную связь (ее я кстати тоже маплю от 0 до 100), и когда значения на обратной связи будет так же 1% я зафиксирую клапан в этом положении отправив в порт ковша вниз ноль. Тоже самое если отклонили джойстик дальше, но уже на 25%. Читаем обратную связь и понимаем что нет на ней 25%. Отправляем в порт ковш вниз 1, тем самым отпуская его и когда значение обратной связи будет 25%. Отправляем в порт ковш вниз 0. Алгоритм я проверил, он практически работал безупречно. Но лишь на одном элементе. Тут уже действительно не хватило у меня знаний для того чтобы оптимизировать код, сделать его более правильным и так чтобы ничего не мешало друг другу. И скажем так, что именно на этом моменте пришлось остановить работу над проектом. К этому моменту уже прошло 3 месяца с начала работы. Да и честно, я сам понимал что просто не смогу его доделать, задача оказалось для меня сложной. Но все же, я попробовал свои силы, определенно получил новые знания. А так же понимание, что одному тащить даже такой проект на самом деле тяжело. Схема на самом деле не сложная. Она лишь для того, чтобы в последующей облегчить подключение экскаватора к новому контроллеру. Контакты от родных нерабочих мозгов подключаются к Arduino 2560 через винтовые клеммы которые впаиваются в плату. Каждое место под вход или выход подписано. Такой способ подключение гораздо удобнее пайки. Предполагалось использовать Arduino Mega 2560 в уменьшенной версии платы, чем стандартная Mega. Если есть желающие продолжить проект, Имея файлы gerber, вы можете заказать производство этой платы, отправив их в сервис PCBWay, которые я прилагаю к этой статье. А уже после того как вы ее получите, можете производить тесты и делиться вашими итогами на нашем сайте. Разработка и копирование печатных плат Не пропустите обновления! Подписывайтесь на нашу группу Вконтакте. Так же у нас есть Telegram канал. Вам понравился наш материал? Поделитесь с коллегами! Просмотров: 10723. Оценка статьи: 4.0 из 5. Уже оценило 4 читателя |
Всего комментариев: 0 | |