(Russian) Motor synchronization on printers with QuadXY kinematics (AWD) - altzbox/motors_sync GitHub Wiki
Этот проект тоже переехал к настоящему программисту :)
https://github.com/MRX8024/motors-sync
Скрипт подстраивает положение вала на моторе X1/Y1 и с помощью акселерометра замеряет "удары" при подачи питания на мотор X/Y.
- Установка скрипта на хост с Клиппером.
Создаем директорию
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
- Установка макроса в Клиппер.
Для запуска скрипта из Клиппера необходим 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" из консоли хоста поможет установить проблему.
-
Монтируем акселерометр на печатную голову. Предполагается, что синхронизация будет проводиться перед началом каждой печати.
-
Синхронизация моторов.
Запускаем макрос 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
Мои макросы здесь.
- Не включайте нагрев хотенда во время синхронизации. В моем случае работающий вентилятор добавляет шума на акселерометр. Так же на акслерометр могут влиять вибрации в отсеке электроники (вентиляторы блоков питания и т.п.).