Укрощение строптивого или тонкая настройка энкодера в Marlin

energuda
Идет загрузка
Загрузка
30.03.2020
1577
7
печатает на Tronxy X5
Техничка

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

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

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

7
Статья относится к принтерам:
Tronxy X5

   Привет всем 3D печатникам и не только!

   Сегодня я хочу поведать вам о настройке энкодера в прошивке Marlin. Точнее о настройке ускорений изменения значений при увеличении скорости вращения ручки энкодера. Дело в том, что во всех инструкциях по настройке прошивки Marlin попавшихся мне на глаза до сего дня говорилось, что настройка энкодера осуществляется в двух строчках файла Configuration.h

   В этих строках можно настроить количество шагов на один "щелчок" энкодера (#define ENCODER_PULSES_PER_STEP 1) и сколько шагов надо сделать для перехода на следующий/предыдущий пункты меню (#define ENCODER_STEPS_PER_MENU_ITEM 3).

   И, вроде бы, всё понятно и работает. Проблемы у меня возникают при ручной настройке численных значений имеющих большой диапазон, допустим температура сопла. Если вращать ручку быстрее, то скорость нарастания значений тоже увеличивается. Конкретно на моём Full Graphics Smart Controller практически невозможно настроить точную температуру сопла. Например я хочу выставить 223 градуса, но не получается. То перелёт, то недолёт, а то и вовсе значение убегает в край диапазона 260 градусов.

   В строке #define ENCODER_PULSES_PER_STEP значение можно записать дробное значение, например 1/2. Это приведёт к тому, что энкодер придётся вращать с частотой увеличенной в 2 раза. Но это замедлит энкодер во всех режимах и не приведёт к изменению ускорений при быстром вращении.

   Оказывается, настройка ускорений находится в файле ultralcd.cpp в строчках:

if (encoderStepRate >= ENCODER_100X_STEPS_PER_SEC) encoderMultiplier = 100;

else if (encoderStepRate >= ENCODER_10X_STEPS_PER_SEC) encoderMultiplier = 10;

   Верхняя строка отвечает за быстрое вращение (100 шагов в секунду), а вторая за более медленное (10 шагов в секунду). После знака равенства стоит число, во сколько раз ускоряется нарастание значения при ускоренном вращении. По умолчанию 100 и 10. Я заменил на 30 и 3 соответственно, и теперь могу настраивать температуру с точностью до градуса в любом диапазоне, причём ускорения достаточные, чтобы долго не приходилось крутить ручку энкодера.

   На этом всё. Спасибо за внимание!

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

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

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

7
Комментарии к статье

Комментарии

30.03.2020 в 22:16
0

А пацаны и не знали.....Спасибки за открытие америки....

07.04.2020 в 17:17
0

А вот я не знал, большое спасибо! Заодно у себя из меню убрал преднагрев ПЛА и АБС.

28.04.2020 в 20:11
0

Температуру устанавливать стало удобнее.

Но  у меня еще такая проблема, при нажатии энкодера, для выбора пункта, каким то образом выбирается соседний пункт. Все происходит мгновенно. Допустим я нажал "печать с SD карты " а попал в меню настроек. В момент нажатия я его не поворачиваю. Может сам энкодер глючный!?

28.04.2020 в 21:50
0

   Не понятно, что вы сделали, после чего стало удобнее.

   Выбор соседнего пункта происходит из-за того, что в момент нажатия на ручку энкодера она чуть-чуть поворачивается. Этого бывает достаточно.

   Я это явление победил следующими настройками:

В файле Configuration.h

#define ENCODER_PULSES_PER_STEP 1/2

#define ENCODER_STEPS_PER_MENU_ITEM 3

В файле ultralcd.cpp

if (encoderStepRate >= ENCODER_100X_STEPS_PER_SEC) encoderMultiplier = 50;

else if (encoderStepRate >= ENCODER_10X_STEPS_PER_SEC) encoderMultiplier = 8;

   Крутить надо несколько дольше, но зато выбор пункта меню выполняется точно.

29.04.2020 в 18:43
0

Сделал я то что вы и написали в своем посте: 

if (encoderStepRate >= ENCODER_100X_STEPS_PER_SEC) encoderMultiplier = 20;
else if (encoderStepRate >= ENCODER_10X_STEPS_PER_SEC) encoderMultiplier = 8;

Вот что и странно, если повернуть чуть чуть то по меню не перемещается, а именно с нажатием.

Ппробую эти значения :

#define ENCODER_PULSES_PER_STEP 1/2

#define ENCODER_STEPS_PER_MENU_ITEM 3

Спасибо

01.05.2020 в 14:30
0

   Смысл настройки ENCODER_PULSES_PER_STEP в том, сколько щелчков будет отрабатывать программа на один физический щелчок энкодера. При значении 1/2 на два физических щелчка программа отреагирует как на один.

01.05.2020 в 14:10
0

Для написания комментариев, пожалуйста, авторизуйтесь.

Читайте в блогах

Китай тестирует 3D печать в космосе

Импеллер. Эксперимент. Часть 1

Универсальная голова для принтера Flying Bear Ghost 4 / 4S

Переделка встроенных а4988 на любые драйвера, в частности на tmc2209 (tmc2208) на Anycubic Photon S

3Д печать в сельском хозяйстве ч.2

Еще один принтер. Часть 2. Корректировки конструкции, ось Z.