(Russian) Motor synchronization on printers with QuadXY kinematics (AWD) - altzbox/motors_sync GitHub Wiki

Этот проект тоже переехал к настоящему программисту :)

https://github.com/MRX8024/motors-sync


Скрипт подстраивает положение вала на моторе X1/Y1 и с помощью акселерометра замеряет "удары" при подачи питания на мотор X/Y.

  1. Установка скрипта на хост с Клиппером.

Создаем директорию
mkdir scripts
Копируем в нее файлы скрипта motors_sync.py и motors_sync.sh
В файле motors_sync.py в 13 строке return np.sqrt(accel_x**2 + accel_y**2 + accel_z**2) необходимо исключить ось акселерометра перпендикулярную земле, чтобы уменьшить уровень шумов акселерометра. Например, если перпендикулярна земле ось Z акселерометра, то строка должна выглядеть так return np.sqrt(accel_x**2 + accel_y**2).

Переходим в директорию scripts
cd scripts
Выдаем разрешение на запуск
chmod +x motors_sync.py
chmod +x motors_sync.sh
Устанавливаем необходимые библиотеки
sudo apt update
sudo apt install python3-scipy python3-pandas python3-numpy

  1. Установка макроса в Клиппер.
    Для запуска скрипта из Клиппера необходим G-Code Shell Command Extension который устанавливается через KIAUH из раздела Advanced.
    Копируем файл motors_sync.cfg в директорию с printer.cfg
    Прописываем в printer.cfg:

[include motors_sync.cfg]

[force_move]
enable_force_move: True

[respond]
default_type: echo
default_prefix:

Обратите внимание на пути в motors_sync.sh и motors_sync.cfg. У вас они могут быть другие.
Если макрос не запускается, то запуск "sh /home/klipper/scripts/motors_sync.sh" из консоли хоста поможет установить проблему.

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

  2. Синхронизация моторов.
    Запускаем макрос MOTORS_SYNC и ждем завершения процесса.

Примечания.

  • Синхронизация происходит с точностью 1/16 шага.
  • Чем сильнее рассинхронизированы моторы, тем дольше длится синхронизация. В худшем случае я тратил 4 минуты.
  • Есть возможность ускорить процесс уменьшив количество итераций, но мне для начала нужен фидбек от пользователей.
  • Перед настройкой Input Shaper после замены и натяжения ремней макрос нужно запустить 2-3 раза, чтобы дать ремням выровнять натяжение по всей длине.
  • Макрос возможно запустить в начале печати во время нагрева стола. Для этого нужно изменить макрос паузы и возобновления.
    [gcode_macro PAUSE]
    rename_existing: BASE_PAUSE
    gcode:
    {% set sync_motors = params.SYNC_MOTORS|default(0)|int %}
    SET_IDLE_TIMEOUT TIMEOUT=43200
    {% if sync_motors == 1 %}
    G1 X10 Y10 Z10 F16500
    SAVE_GCODE_STATE NAME=PAUSESYNC
    BASE_PAUSE
    MOTORS_SYNC
    {% else %}
    _Ваш макрос паузы_
    {% endif %}

[gcode_macro RESUME]
rename_existing: BASE_RESUME
gcode:
{% set sync_motors = params.SYNC_MOTORS|default(0)|int %}
SET_IDLE_TIMEOUT TIMEOUT={printer.configfile.settings.idle_timeout.timeout}
{% if sync_motors == 1 %}
RESTORE_GCODE_STATE NAME=PAUSESYNC MOVE=1 MOVE_SPEED=275
BASE_RESUME
{% else %}
_Ваш макрос возобновления_
{% endif %}

А в начале макроса начала печати указать:
M140 S[bed_temperature_initial_layer_single] ;set bed temp
G28
PAUSE SYNC_MOTORS=1
G28
M190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize

Мои макросы здесь.

  • Не включайте нагрев хотенда во время синхронизации. В моем случае работающий вентилятор добавляет шума на акселерометр. Так же на акслерометр могут влиять вибрации в отсеке электроники (вентиляторы блоков питания и т.п.).