Code Monkey home page Code Monkey logo

k1_tenso_manual's Introduction

Инструкция по настройке тензодатчиков на принтерах K1/K1MAX/K1C

ENGLISH VERSION

$${\large\textsf{\color{red}Авторы не несут за собой ответственности за Ваши действия}}$$

$${\large\textsf{\color{red}и оставляют за собой право отказать в помощи без объяснения причин.}}$$

$${\large\textsf{\color{red}Всё, что Вы делаете, Вы делаете на свой страх и риск.}}$$

$${\large\textsf{\color{red}Если Вы приступили к данной модификации - Вы соглашаетесь,}}$$

$${\large\textsf{\color{red}что обладаете достаточными знаниями, навыками и опытом,}}$$

$${\large\textsf{\color{red}чтобы самостоятельно решить все свои проблемы.}}$$

1. Аппаратная часть. Перекоммутация датчиков веса

Дальнейшая аппаратная модификация требуется для корректной работы применяемой в этом проекте программной реализации датчиков веса. На случай, если Вы захотите откатиться, стоковый PRTouch также поддерживает работу с одной АЦП (параллельными тензодатчиками), для этого требуется в секции [prtouch_ ...] указать значение pres_cnt: 1, а затем оставить только pres0_clk_pins и pres0_sdo_pins, в которых указать пины разъема, куда установлены датчики.

Порядок действий следующий:

  1. снять стол;
  2. отрезать лишнюю длину проводов тензодатчиков (по возможности обеспечить, чтобы она была одинаковая);
  3. спаять согласно цветовой маркировке все датчики веса по параллельной схеме (каждый провод одинаковго цвета спаивается вместе с остальными такого же);
  4. установить штекер в разъем платы АЦП (в любой, какой окажется наиболее удобным), номер порта запомнить/записать.

Действия продублированы на фото ниже.

alt text alt text alt text alt text alt text alt text alt text все фото (c) ZeyHex

Записать\запомнить в какой слот воткнули запараллеленные датчики!

N.B. 1 На K1 MAX плата повернута на 180 градусов, не как на фото. Считайте номер канала либо от основного большого разъема по часовой стрелке, либо ориентируйтесь на надписи на плате: alt text

N.B. 2 Нужно постараться сделать провода от тензодатчиков до основного разъема одинаковой длины.

После всех работ собрать стол обратно.

Важное замечание: при сборке стола либо заменить проставки между тензодатчиками и столом на более высокие (12+ мм), либо аккуратней укладывать перепаянные провода, особенно внимательно смотреть на основной провод подлючения к плате MCU - при штатных проставках плохо уложенные провода накрытые термоизоляцией могут упираться в стол, что негативно сказывается на правильной работе тензодатчиков, в частности плохая повторяемость и значительно отличающаяся точность в разных частях стола.

2. Программная часть. Подготовка прошивок.

Необходимо собрать новые прошивки для модуля стола, головы и основной платы. Либо собираем самостоятельно - либо скачиваем ОТСЮДА

Для компиляции прошивок нужен любой Linux, далее инструкция на примере Debian.

sudo apt install build-essential gcc-arm-none-eabi

git clone https://github.com/cryoz/K1_Series_Klipper.git && cd K1_Series_Klipper
./build.sh

Если все пройдет без ошибок - появится папка outfw с тремя прошивками:

bed_klipper.bin
mcu_klipper.bin
noz_klipper.bin

Закачайте их на принтер во временную папку, например /usr/data/tenso/fw

3. Программная часть. Установка mainline клиппера

Я (Cryoz) использовал проект K1-klipper в большей степени из-за его легкой установки, а потом модернизировал необходимыми модулями. Но потом решил форкнуть этот репозиторий, добавив сразу все необходимые модули от авторов garethky и ZeyHex

Сбэкапьте всю папку с конфигом принтера (/usr/data/printer_data/config), можно через helper-script.

Для установки клиппера на принтер:

cd /usr/data
wget --no-check-certificate https://raw.githubusercontent.com/cryoz/installer_script_k1_and_max/main/installer.sh
chmod +x installer.sh
./installer.sh

После окончания установки НЕ перезагружая принтер - закачать в папку /usr/data/klipper/fw/K1 все три файла прошивки. Если прошивки были ранее скачаны в папку /usr/data/tenso:

cd /usr/data/tenso/fw && cp *.bin /usr/data/klipper/fw/K1/    

Нужно сбэкапить лог-файл прошивальщика штатных прошивок на случай несовпадения версий или ревизий:

cp /tmp/mcu_update.log /usr/data/tenso/

N.B. если использовался скрипт Helper-script - нужно переустановить все модули, которые были установлены.

N.B. если использовался скрипт Helper-script - проверьте, что Вам точно требуются модули, которые Вы устанавливаете, что они уже не являются частью Klipper и/или не являлись костылем для решения проблем Creality Klipper

4. Сервисная часть. Настройка принтера

4.1 Бэкап

Сбэкапьте еще раз всю папку с конфигом принтера, можно через helper-script.

4.2 Конфигурация

В первую очередь необходимо убрать из printer.cfg все секции [prtouch_v2] [prtouch_v1] [fan_feedback]

Поправить настройки тенз в файле /usr/data/printer_data/config/loadcell_probe.cfg взяв нужные пины из слота в который воткнули перепаянную тензу из этой таблицы:

Channel dout sclk
1 PA0 PA2
2 PA1 PA5
3 PA3 PA6
4 PA4 PA7

Меняем на нужные в конфиг-файле :

[load_cell_probe]
sensor_type: hx711
dout_pin: leveling_mcu:PA4
sclk_pin: leveling_mcu:PA7

Здесь тензодатчик воткнут в слот 4, пины вписаны соответствующие.

После этого добавить в printer.cfg файл настроек тензодатчиков:

[include loadcell_probe.cfg]

Вписываем в секцию [stepper_z] файла printer.cfg следующие изменения: Вместо:

endstop_pin: tmc2209_stepper_z:virtual_endstop# PA15   

Нужно прописать:

endstop_pin: probe:z_virtual_endstop

Сохраняем. После этого нужно перезапустить принтер по питанию - прошивки зашиваются только в этом случае.

Если клиппер выдал ошибки об устаревшем MCU - новые прошивки не зашились, смотреть лог прошивки в /tmp/mcu_update.log Если выдал ошибки по конфигам - смотреть по месту: либо переустанавливать нужные модули через helper-script либо удалять встроенные секции креалити типа prtouch_v2.

Если все завелось и клиппер не показывает никаких ошибок - можно переходить к проверке тенз и их калибровке.

4.3 Проверка

для проверки работоспособности тензодатчиков нужно выполнить в консоли:

$ LOAD_CELL_DIAGNOSTIC LOAD_CELL=load_cell_probe
// Collecting load cell data for 10 seconds...
// Samples Collected: 832
// Measured samples per second: 83.7, configured: 80.0
// Good samples: 832, Saturated samples: 0, Unique values: 464
// Sample range: [0.49% to 0.50%]
// Sample range / sensor capacity: 0.00257%

Если вывод похож на этот - значит тензы работают

4.4 Калибровка

Основная статья от автора: https://github.com/garethky/klipper/blob/adc-endstop/docs/Load_Cell.md#calibrating-a-load-cell

Краткий пересказ. Убрать из рабочей области голову принтера, чтобы не мешала.

Запустить в консоли следующую команду:

$ CALIBRATE_LOAD_CELL LOAD_CELL=load_cell_probe
// Starting load cell calibration.
// 1.) Remove all load and run TARE.
// 2.) Apply a known load, run CALIBRATE GRAMS=nnn.
// Complete calibration with the ACCEPT command.
// Use the ABORT command to quit.

Далее:

$ TARE
// Load cell tare value: 0.53% (89146)
// Now apply a known force to the load cell and enter the force value with:
// CALIBRATE GRAMS=nnn

Записываем значение tare value: 89146

Далее нужен предмет более 1кг и точные весы - взвешиваем предмет на весах, запоминаем и ставим предмет на стол принтера. Вводим команду (GRAMS - вес предмета в граммах):

$ CALIBRATE GRAMS=1828
// Calibration value: 0.25% (42719), Counts/gram: 25.39770, Total capacity: +/- 657.07Kg
// ERROR: Tare and Calibration readings are less than 1% different!
// Use more force when calibrating or a higher sensor gain.
!! ERROR: Tare and Calibration readings are less than 1% different!

Из-за особенностей тензодатчиков на K1 и реализации алгоритма и калибровки в клиппере - эта ошибка норма. Записываем значение Counts/gram: 25.39770

Получившиеся значения вписываем в конфиг тензодатчиков loadcell_probe.cfg:

reference_tare_counts: 89146
counts_per_gram: 25.39770

Можно пробовать хоумиться, если все успешно - снимать карту.

Дальнейшая тонкая настройка тенз - через графики https://github.com/garethky/klipper/blob/adc-endstop/docs/Load_Cell.md#viewing-live-load-cell-graphs

5. Полезное

5.1 Скорость Z-Home

При штатной скорости Z-Home сопло втыкается в стол с усилием в 1.5кг, что не способствует здоровью ни стола ни покрытия ни сопла. Для уменьшения скорости хоминга добавить в секцию [stepper_z] параметр:

homing_speed: 2

5.2 Компенсация температурного расширения

Компенсация расширения сопла: https://github.com/garethky/klipper/blob/adc-endstop-k1-debug/docs/Load_Cell_Probe.md#temperature-compensation

Замечание - в g_code тензопробы внесен лимит температуры сопла, выше которого она откажется работать - во избежания повреждения покрытия стола. Для настройки компенсации температурного расширения нужно временно увеличить параметр PROBE_TEMP в файле loadcell_probe.cfg:

activate_gcode:
    {% set PROBE_TEMP = 150 %}
    {% set MAX_TEMP = PROBE_TEMP + 5 %}
    {% set ACTUAL_TEMP = printer.extruder.temperature %}
    {% set TARGET_TEMP = printer.extruder.target %}

А после настройки вернуть обратно до 140-150 градусов.

5.3 Температурные датчики в каждом MCU

ZeyHex добавил в прошивку чтение температуры с каждого из mcu из встроенных датчиков - что дало возможность мониторить температуру на контроллерах стола, головы и основной платы. Для включения отображения температур нужно добавить сенсоры в printer.cfg:

[temperature_sensor mcu_temp]
sensor_type: temperature_mcu
sensor_mcu: mcu
min_temp: 0
max_temp: 100

[temperature_sensor nozzle_mcu_temp]
sensor_type: temperature_mcu
sensor_mcu: nozzle_mcu
min_temp: 0
max_temp: 100

[temperature_sensor bed_mcu_temp]
sensor_type: temperature_mcu
sensor_mcu: leveling_mcu
min_temp: 0
max_temp: 100

5.4 Автоопределение Z-Offset совместно с тензодатчиками и любым датчиком BLTouch/Microprobe/Cartographer (! BETA !)

Для данного функционала пришлось пропатчить клиппер для возможности работы нескольких проб одновременно, а также написать плагин (lc_auto_z_offset.py) для клиппера с GCODE командой для определения Z-Offset. Чтобы включить эту возможность необходимо использовать ветку multiprobe из репозитория модифицированного mainline клиппера.

Используется следующий конфиг:

[load_cell_probe lc]
sensor_type: hx711
dout_pin: leveling_mcu:PA4
sclk_pin: leveling_mcu:PA7
z_offset: 0.0
counts_per_gram: 25.39770
reference_tare_counts: 89146
safety_limit: 5000
trigger_force: 160
trigger_count: 1
samples: 2
speed: 2
lift_speed: 5.0
pullback_dist: 0.5
pullback_speed: 0.2

[lc_auto_z_offset]
center_xy_position: 150.0,150.0
secondary_probe: lc

Ключевой момент - именованный датчик уровня, в данном случае тензодатчик с именем lc. И это имя нужно указать в параметре secondary_probe в секции [lc_auto_z_offset]

Это дает возможность:

  1. вызывать все команды для пробы добавляя префикс имени к команде, например проба с именем lc может вызывать GCode вида LCPROBE, LCPROBE_ACCURACY и так далее, при этом основная проба будет работать со стандартными командами (PROBE)
  2. использовать автокалибровку Z-Offset через команду LC_AUTO_Z_OFFSET
  3. использовать именованный датчик как концевик по оси Z: в секции [stepper_z] с подобным конфигом endstop_pin: lc:z_virtual_endstop, где lc - имя вторичного датчика уровня

Это все работает не только с тензодатчиками, но с любым датчиком (и их количеством) которые имеют поддержку в клиппере.

Параметры команды LC_AUTO_Z_OFFSET:

NOMOVE - 0/1 (default 0) - не передвигаться при выполнении команды к точке, указанной в настройках плагина center_xy_position - а использовать текущую позицию

SET - 0/1 (default 0) - устанавливать вычисленный Z-Offset после выполнения команды

SAVE - 0/1 (default 0) - сохранять вычисленный Z-Offset в конфигурацию основной пробы

Остальные параметры передаются напрямую в команду PROBE вызываемую плагином.

Пример:

LC_AUTO_Z_OFFSET NOMOVE=1 SAVE=1 SAMPLES=3 PROBE_SPEED=2

В текущем положении вычисляет Z-Offset с параметрами проб в 3 попытки со скоростью 2 и сохраняет вычисленное значение в конфиг основной пробы.

Пример вывода:

    // LC_AutoZOffset: Probing main probe ...
    // probe at 185.000,150.000 is z=0.798340
    // probe at 185.000,150.000 is z=0.800684
    // probe at 185.000,150.000 is z=0.799316
    // LC_AutoZOffset: Probing nozzle probe ...
    // probe at 150.000,150.000 is z=-0.019642
    // probe at 150.000,150.000 is z=-0.015027
    // probe at 150.000,150.000 is z=-0.012001
    // LC_AutoZOffset:
    // Nozzle: -0.016
    // Probe: 0.799
    // Diff: 0.815
    // Config Manual Adjust: 0.000
    // Total Calculated Offset: 0.815

N.B.

  • LC_AUTO_Z_OFFSET при запуске сбрасывает текущий Z-Offset в 0.0
  • грейте стол и сопло до рабочих температур, но не выше 150 градусов на сопле во избежание повреждения покрытия стола соплом. Команда сама не греет стол и сопло

5.5 Макрос автоочистки сопла (BETA!)

Макрос брать тут

6. Credits

Авторы:

  • Cryoz (данная инструкция, реализация автоопределения z_offset)
  • ZeyHex (портирование и отладка adc-endstop, фикс багов C-side Klipper для GD32)
  • Hyvesite (портирование макроса очистки сопла)
  • garethky (автор adc-endstop)

Использованные репозитории:

Статьи и материалы:


© Cryo 2024 v1.4

k1_tenso_manual's People

Contributors

cryoz avatar zeyhex avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

Forkers

acket2009

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.