Ну вобщем барахло приехало уже неделю как, но времени небыло до этих выходных.
Итак:
контроллер с поддержкой SPI, вот такой
A 4 Axis CNC Controller for Trinamic Drivers and Grbl_ESP32
www.tindie.com
драйверы моторчиков TMC2130 (вообще не рекомендую брать именно такие, они очень сильно греются даже от 1.3А моторов, на 2А я их ставить не стану даже с активным охлаждением, знал бы взял бы TMC5160)
под пины diag0 diag1 всех драйверов припаяны фимейл разъёмы на плату, и поставлены перемычки SG лимитов:
код поправлен вот таким образом, по сути просто пишет координаты и текущее значение StallGuard, немного грязненько, но я не планирую в таком виде пулреквест слать, это чисто поисследовать:
paste2.org
Немного нужно поиграться со значениями:
Уровень чувствительности в попугаях (ниже - более чувствительное)
$170 => $xStallGuard 5
$171 => $yStallGuard 5
$172 => $zStallGuard 4
карент моторов в амперах
$140 => $xRunCurrent 0.7
$141 => $yRunCurrent 0.7
$142 => $zRunCurrent 0.7
Ниже, в выводах, напишу детальнее как эти значения работают.
Сырые данные собираются с телнета в файлик.
Сетап эксперимента вот такой:
Т.е. моторы ничего фактически не делают.
Моделька вот такая:
В результате получился вот такой файл с исходными данными: co.rar
Чтобы его распарсить был написан такой скрипт:
paste2.org
Который сгенерировал 3 картинки для каждого из моторов которые показывают его нагрузку в попугаях(ближе к нулю - выше нагрузка, ближе к 1024 - ниже нагрузка):
X:
Y:
Z:
Вывод: при правильно подобранных настройках технология может работать и, скорее всего, ответить на вопросы, например:
- в каком месте случился пропуск шага
- можно ли добавить немного фидрейта
Кроме того, меня очень удивила повторяемость паттернов нагрузки между слоями фрезеровки, т.е. система более-менее детерминированная и на неё не влияют внешние условия. Я ожидал что без нагрузки никаких паттернов не будет и всё будет зависеть от случайных помех.
Но не всё гладко.
Чувствительность этого измеряется в попугаях от 0(самая большая нагрузка) до 1023(самая малая). Всё остальное за границей чувствительности. Граница чувствительности не очень большая и не линейно зависит от скорости подачи, т.е., условно:
при скорости подачи от 50 до 100мм/мин я смог получить реальные значения на чувствительности 4, при скорости подачи от ~100 до ~1000 на чувствительности 5, пока затрудняюсь померить это в граммах или в чём-то ещё без того чтоб подключить это к механике.
Следовательно, на нетипичных скоростях, например lead-in/lead-out мувы для осей X/Y или быстрое перемещение на оси Z, скорее всего, будет показывать 0 или 1023, т.е. за границами чувствительности. Я решил эту проблему отфильтровав те датапоинты в которых фид рейт странный:
self.meaningful_feed_range = {"X" : (60,800), "Y": (60,800), "Z": (10,180)}
Наверное, можно будет поиграться с esp32_grbl в плане того чтобы если оно меняет скорость подачи меняло режим чувствительности, но это пока кукаретические рассуждения.