Металл2024 Реклама
Метобр2024 Реклама

Добавляем в Marlin программную поддержку компенсации люфта ходовых винтов

Ghozt
Идет загрузка
Загрузка
06.05.2016
10480
10
Техничка

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.

Отписаться от уведомлений вы всегда сможете в профиле автора.

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

Подобную функцию когда-то поддерживала прошивка Marlin, но потом ее почему-то удалили. В любом случае моей задачей было вернуть ее на место. Впоследствии был найден вот этот пост, его собственноручный перевод с адаптацией для версии 1.0.2 я здесь и решил опубликовать, снабдив пояснительными картинками.

Шаг 1. Добавьте define в configuration.h. Я добавил нижеследующую строку после define для DEFAULT_MAX_ACCELERATION

#define DEFAULT_HYSTERESIS_MM 0, 0, 0, 0 // X, Y, Z, E hysteresis in mm. These are the extra distances that are performed when an axis changes direction to compensate for any mechanical hysteresis your printer has.
Добавляем в Marlin программную поддержку компенсации люфта ходовых винтов
Шаг 2. Добавьте пару новых G-кодов в Marlin_main.cpp. Найдите 'case 115: // M115' и вставьте нижеследующие строки перед ней:

case 98: // M98

{

hysteresis.ReportToSerial();

}

break;

case 99: // M99

{

if(code_seen('X')) hysteresis.SetAxis( X_AXIS, code_value() );

if(code_seen('Y')) hysteresis.SetAxis( Y_AXIS, code_value() );

if(code_seen('Z')) hysteresis.SetAxis( Z_AXIS, code_value() );

if(code_seen('E')) hysteresis.SetAxis( E_AXIS, code_value() );

}

break;
Добавляем в Marlin программную поддержку компенсации люфта ходовых винтов
Шаг 3. Добавьте include в Marlin_main.cpp. Допишите его почти сверху, после всех остальных include

#include 'Hysteresis.h'
Добавляем в Marlin программную поддержку компенсации люфта ходовых винтов
Шаг 4. Сделайте то же самое в planner.cpp. Добавьте после всех остальных include
Добавляем в Marlin программную поддержку компенсации люфта ходовых винтов
Шаг 5. Добавьте нижеследующую строку в функцию plan_buffer_line в planner.cpp. Она должна быть первой в функции, до 'int next_buffer_head = ....'

hysteresis.InsertCorrection(x,y,z,e)
Добавляем в Marlin программную поддержку компенсации люфта ходовых винтов
Шаг 6. Добавьте вложенные файлы (hysteresis.cpp и hysteresis.h) в директорию прошивки, туда же, где лежит Marlin_main.cpp.

В общем-то и все. Теперь можно в начало gcode-файла добавить строку вида:

M99 X0 Y0.17 Z0 E0

где 0,17 - это люфт оси Y. По команде M98 в Pronterface принтер выдаст текущее значение люфтов для осей.

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.

Отписаться от уведомлений вы всегда сможете в профиле автора.

16
Комментарии к статье
Кремень КБ Реклама
Кремень КМ Реклама