Линеаризация скорости вращения шпинделя

Статус
В этой теме нельзя размещать новые ответы.

Am0k

МЕСТНЫЙ
ПРОВЕРЕННЫЙ
Регистрация
28.12.2018
Сообщения
6
Реакции
10
Баллы
23
Город
Грязи
Имя
Павел
Столкнулся с тем, что задаваемые скорости вращения шпинделя и реальные не соотвествовали друг другу в самодельном ЧПУ на базе GRBL. В прошивке есть функция линеаризации, но ни одного мало-мальски толкового описания ее работы на русском не нашел. В общем покурил ее сам и решил поделиться, может кому то будет полезно. Итак, нам понадобиться ЧПУ на основе GRBL, тахометр, браузер, Arduino IDE и Candle. Тема также создана на cnc-club, где ее лучше примет аудитория, там и будем ее развивать.

1. Проходим по адресу https://github.com/gnea/grbl/releases и загружаем исходники GRBL (я использовал v1.1h 2019-08-25).
2. Закидываем папку «grbl» из архива в папку «libraries» в Arduino.
3. Настраиваем нашу прошивку. В файле «cpu_map.h» должны быть установлены следующие настройки

SPINDLE_PWM_MIN_VALUE 1

SPINDLE_PWM_MAX_VALUE 255

В файле «defaults.h» правим свои настройки (либо добавляем новую секцию DEFAULTS_XXX со своим названием и объявляем ее в файле «config.h» #define DEFAULTS_XXX, где вместо XXX – данное нами имя, одинаковое в обоих файлах, либо правим прямо DEFAULTS_GENERIC секцию, очень удобно записав всего один раз все настройки при смене прошивки, ее обновлении, просто редактировании не перезаписывать все снова), это настройки, которые будут использованы по умолчанию, если в EEPROM не указаны иные. Если хотите загрузить в EEPROM настройки, указанные в «defaults.h», используйте консольную команду «$RST=$». Здесь должны быть установлены следующие настройки

#define DEFAULT_SPINDLE_RPM_MAX 255.0

#define DEFAULT_SPINDLE_RPM_MIN 1.0

4. Загружаем прошивку через Arduino IDE (папка Arduino\grbl\examples\grblUpload\grblUpload.ino). Через монитор порта загружаем в EEPROM настройки по умолчанию (если вы использовали ранее более старую версию прошивки – это крайне желательно), либо просто проверяем, что заданы следующие параметры (правим в случае необходимости):

$31=1
$32=255

5. Проходим по адресу https://repl.it/languages/python3

Из архива прошивки достаем файл «doc\script\fit_nonlinear_spindle.PY». Открываем блокнотом, содержимое копируем в окно «main.py» на странице браузера.
В настройках Candle для удобства задаем минимальную и максимальную скорость шпинделя как 1 и 255 соответственно. Затем снимаем показания зависимости реальной скорости вращения шпинделя от заданной, и записываем в наш скрипт в секции

PWM_set = np.array([55,57,60,65,70,80,100,120,140,160,180,200,220,240,245,250,255], dtype=float)

RPM_measured = np.array([380,530,745,1115,1450,2160,3535,4875,6075,7180,8230,9340,10520,11700,12100,12340,12520], dtype=float)

Так же правим точки, которые будут «переломными» для линеаризации. В моем случае это

PWM_point1 = 55.0

PWM_point2 = 80.

PWM_point3 = 150.0

6. Запускаем скрипт кнопкой RUN. Если вы видите, что график имеет сильные искривления в точках, отличных от переломных, замените их значения и запустите скрипт еще раз.

Скрипт в правом окне выдаст нам результаты вида

SOLUTION:
[Update these #define values and uncomment]
[ENABLE_PIECEWISE_LINEAR_SPINDLE in config.h.]
#define N_PIECES 4
#define RPM_MAX 12554.5
#define RPM_MIN 372.1
#define RPM_POINT12 372.1
#define RPM_POINT23 2233.8
#define RPM_POINT34 6631.6
#define RPM_LINE_A1 1.000000e-02
#define RPM_LINE_B1 -5.127938e+01
#define RPM_LINE_A2 1.342838e-02
#define RPM_LINE_B2 -5.000381e+01
#define RPM_LINE_A3 1.591714e-02
#define RPM_LINE_B3 -4.444445e+01
#define RPM_LINE_A4 1.772767e-02
#define RPM_LINE_B4 -3.243782e+01

[To operate over full model range, manually write these]
['$' settings or alter values in defaults.h. Grbl will]
[operate between min($30,RPM_MAX) and max($31,RPM_MIN)]
$30=12554.5 (rpm max)
$31=372.1 (rpm min)

[Update the following #define values in cpu_map.h]
#define SPINDLE_PWM_MIN_VALUE 55

А также график:

11974

В моем случае с нелинейностью проблем особых нет, но есть проблемы с точкой начала графика. В случае использования 775 мотора в качестве шпинделя график будет выглядеть куда интереснее:

11975


7. Правим прошивку. В файле «config.h» раскомментируем

ENABLE_PIECEWISE_LINEAR_SPINDLE

И заменяем своими данными те данные, что там есть

#define N_PIECES 4
#define RPM_MAX 12554.5
#define RPM_MIN 372.1
#define RPM_POINT12 372.1
#define RPM_POINT23 2233.8
#define RPM_POINT34 6631.6
#define RPM_LINE_A1 1.000000e-02
#define RPM_LINE_B1 -5.127938e+01
#define RPM_LINE_A2 1.342838e-02
#define RPM_LINE_B2 -5.000381e+01
#define RPM_LINE_A3 1.591714e-02
#define RPM_LINE_B3 -4.444445e+01
#define RPM_LINE_A4 1.772767e-02
#define RPM_LINE_B4 -3.243782e+01

В файле «defaults.h» правим

#define DEFAULT_SPINDLE_RPM_MAX 12554.5
#define DEFAULT_SPINDLE_RPM_MIN 372.1

В файле «cpu_map.h» правим

#define SPINDLE_PWM_MIN_VALUE 55

8. Прошиваем. Через монитор порта задаем новые значения

$30=12554.5
$31=372.1

в EEPROM (они не перезаписываются автоматически из настроек прошивки, если не использована команда «$RST=$»). Меняем настройки Candle (минимальную и максимальную скорость шпинделя на наши, необязательно задавать именно полученные, но минимальное лучше задать немного больше (500), так как не все шпиндели стабильно стартуют на низком RPM, а задавать максимальные больше полученных тоже нет смысла, просто часть ползунка окажется бесполезной, я установил 12500).

Проверяем, задавая разную скорость вращения шпинделя через Candle и проверяя соответствие реальной скорости. В моем случае расхождение составило не более 100 RPM (для середины диапазона в 12000 это меньше 2%).
Приветствуются вопросы и пожелания, я прекрасно понимаю что не все здесь прозрачно, поэтому эту "мини-инструкцию" буду дополнять.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу
Обнаружен блокировщик рекламы AdBlock

МЫ ДОГАДЫВАЕМСЯ, ЧТО РЕКЛАМА ВАС РАЗДРАЖАЕТ!

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

Спасибо за Ваше понимание!

Я отключил свой AdBlock    Нет, я не буду ничего отключать