Тестирование и калибровка акселерометра
Установка зависимых пакетов
- Если на устройстве уже работает система FlyOS-FAST, все необходимые зависимости предустановлены, этот шаг можно пропустить.
- При использовании не FLY верхнего компьютера обязательно выполните следующие операции по установке.
- Рекомендуется подключаться с помощью SSH-инструментов, таких как MobaXterm, PuTTY, перед выполнением операций.
- Данное руководство основано на Raspberry Pi, для других платформ материал приведен только для справки.
Шаги установки
- Последовательно выполните следующие команды для установки зависимых пакетов.
- Время установки зависит от производительности процессора и состояния сети, обычно занимает 10–20 минут. Пожалуйста, терпеливо дождитесь завершения установки.
- Если объем оперативной памяти (RAM) устройства слишком мал, установка может завершиться неудачей.
Шаг 1: Установка системных зависимых пакетов
sudo apt install python3-numpy python3-matplotlib libatlas-base-dev
Шаг 2: Установка зависимых пакетов виртуальной среды Klipper
~/klippy-env/bin/pip install matplotlib numpy
Тестирование акселерометра
Предварительные условия
- Принтер выполнил операцию возврата в исходное положение (Homing).
- Убедитесь, что акселерометр правильно включен в файле конфигурации Klipper.
Команды тестирования
Введите следующую команду в консоли Klipper:
ACCELEROMETER_QUERY
Если подключено несколько акселерометров, можно указать конкретный чип для тестирования:
ACCELEROMETER_QUERY CHIP=<Название чипа ADXL>
Замените <Название чипа ADXL> на фактический идентификатор акселерометра (например, adxl345).
В некоторых старых версиях Klipper для получения данных акселерометра необходимо выполнить ACCELEROMETER_QUERY дважды.
Обработка распространенных проблем
Перед проверкой, повторным подключением или заменой кабелей акселерометра полностью выключите принтер и отключите источник питания. Не подключайте и не отключайте модули ADXL/LIS2DW/MPU/ICM и не прикасайтесь к оголенным контактам при включенном питании.
- Сбой при первом выполнении: В некоторых версиях Klipper может наблюдаться задержка распознавания команды. Если при первом выполнении данные не возвращены, выполните ту же команду еще раз.
- Команда не распознается: Если после многократного выполнения по-прежнему выводится сообщение о неизвестной команде, возможно, версия Klipper слишком старая. Рекомендуется:
- Обновить Klipper до последней версии
- Или перепрошить последнюю версию системы (например, последнюю версию FlyOS-FAST)
- Invalid adxl345 id: Если выводится сообщение
Invalid adxl345 id (got xx vs e5), сначала немедленно выполнитеACCELEROMETER_QUERYеще раз; если ошибка повторяется, в первую очередь замените готовый кабель акселерометра, переходную плату или модуль датчика для перекрестного тестирования. Не рекомендуется, чтобы обычные пользователи самостоятельно допаивали или ремонтировали паяные соединения. - Invalid lis2dw / mpu / icm id: При использовании датчиков LIS2DW, MPU9250, ICM20948 и т. д. убедитесь, что имя секции конфигурации, шина связи и модель чипа соответствуют фактическому оборудованию.
- Unable to obtain response / timeout: Обычно указывает на проблему связи между верхним компьютером и MCU акселерометра. Проверьте USB/CAN-подключение, идентификатор
[mcu],cs_pin,spi_busилиi2c_bus.
BatchBulkHelper / spi_transfer_response
Сообщение об ошибке: При выполнении ACCELEROMETER_QUERY, TEST_RESONANCES или SHAPER_CALIBRATE появляется:
BatchBulkHelper start callback error
BatchBulkHelper stop callback error
Unable to obtain 'spi_transfer_response' response
Характер ошибки: spi_transfer_response означает, что Klipper не получил ответ на SPI-запрос, но это может быть не первопричина. В недавних случаях из журналов MCU сначала переходил в shutdown из-за Timer too close, и только затем пакетный сбор данных ADXL сообщал о невозможности получить ответ по SPI; в этом случае сначала следует обработать предыдущий shutdown, а не сразу считать акселерометр неисправным.
Метод диагностики:
- В полном
klippy.logнайдите первое сообщениеBatchBulkHelper, затем прокрутите вверх в поисках более ранних сообщенийTimer too close,Lost communication with MCU,MCU shutdownилиSerial connection closed. - Если обнаружен более ранний shutdown, сначала устраните первопричину в соответствии с Ошибки системы и тайм-аута; последующее сообщение
spi_transfer_responseобычно исчезает после восстановления соединения. - Если более раннего shutdown нет, а ошибка возникает немедленно при каждом выполнении
ACCELEROMETER_QUERY, проверьте[mcu],cs_pin,spi_busи тип чипа акселерометра.
Перед повторным подключением или заменой кабелей акселерометра, переходных плат или модулей полностью выключите принтер и отключите источник питания. Не подключайте и не отключайте кабели SPI/I2C и не прикасайтесь к оголенным контактам при включенном питании.
- После отключения питания замените готовый кабель, переходную плату или модуль датчика для перекрестного тестирования; не позволяйте обычным пользователям самостоятельно допаивать или использовать перемычки.
- Если ошибка возникает только в начале или в конце теста резонанса, временно отключите камеру, экран и другие службы с высокой нагрузкой и повторите тест, сохранив полный журнал для дальнейшего анализа.
Оценка результатов
- Нормальный вывод: Если возвращается непрерывный поток данных (как показано на рисунке ниже), акселерометр работает нормально, и можно проводить измерения для компенсации резонанса.
- Ошибочный вывод: Если появляется сообщение о тайм-ауте, отсутствии данных или ошибке связи, последовательно проверьте:
- После отключения питания убедитесь, что соединение акселерометра надежно закреплено.
- Правильность конфигурации датчика и SPI в файле конфигурации.
- В первую очередь определите проблему питания/связи путем замены готового кабеля, переходной платы или модуля датчика.
Распространенные ошибки при тесте резонанса
| Сообщение об ошибке | Распространенная причина | Метод устранения |
|---|---|---|
No data received from accelerometer | Акселерометр не подключен, неправильный порядок проводов SPI/I2C, проблема с питанием | Сначала выполните ACCELEROMETER_QUERY, чтобы убедиться в нормальной связи, затем повторите тест |
Insufficient axis data for shaper calibration | Слишком малый диапазон движения, слишком низкое ускорение, чрезмерный шум показаний датчика | Увеличьте диапазон теста или accel_per_hz, проверьте надежность крепления акселерометра |
Frequency range too narrow | Слишком ослаблен ремень, частота механического резонанса машины выходит за пределы диапазона измерений | Проверьте натяжение ремня, затяжку механических соединений; при необходимости снизьте max_freq или увеличьте accel_per_hz |
| График резонанса — сплошной шум, без явных пиков | Датчик закреплен ненадежно, помехи от вибрации вентилятора, провисание кабелей | После отключения питания закрепите датчик заново, отключите вентиляторы на время теста, прокладывайте сигнальные провода отдельно от проводов двигателей |
SHAPER_CALIBRATE не выводит результат или завершается с ошибкой | Отсутствуют зависимости Python (numpy/matplotlib), недостаточно памяти | Установите зависимости согласно разделу в начале документа; для расчета больших графиков резонанса может потребоваться больше памяти |
Cannot test Z axis together with other axes | В TEST_RESONANCES одновременно указаны ось Z и оси X/Y | Ось Z необходимо тестировать отдельно, не смешивая с X/Y |
Invalid POINT parameter | Неверный формат координат POINT= или отсутствуют три значения x,y,z | Заполняйте в формате POINT=100,100,20 |
Invalid NAME parameter | Имя вывода пустое, содержит специальные символы или не соответствует требованиям команды | Используйте латиницу, цифры, символы подчеркивания или дефисы в имени |
No accelerometer measurements found | В процессе теста не было получено действительных данных акселерометра | Сначала выполните ACCELEROMETER_QUERY, затем проверьте крепление датчика и связь |
Unsupported output | В параметре OUTPUT= указан неподдерживаемый тип | Укажите тип вывода, поддерживаемый Klipper, обычно resonances |
Если ACCELEROMETER_QUERY работает нормально, но тест резонанса постоянно завершается неудачей, в первую очередь проверьте в следующем порядке:
- После отключения питания убедитесь, что поверхность акселерометра плотно прилегает к тестируемой детали, нет ослабления из-за амортизирующих материалов или двустороннего скотча.
- На время теста временно отключите вентиляторы обдува модели, вентилятор хотэнда и вентиляторы камеры.
- Убедитесь, что во время теста кабели не натягивают датчик и не зацепляются за оси движения.
- Увеличьте амплитуду теста: в
[resonance_tester]постепенно повышайтеaccel_per_hzс значения по умолчанию75до100–150. - При использовании акселерометра на инструментальной плате (USB/CAN) убедитесь, что линия связи не проходит рядом с проводами двигателей или нагревательного стола.
Конфигурация ориентации акселерометра
Ориентация установки акселерометра влияет на результаты измерения резонанса. Если конфигурация axes_map не соответствует фактической ориентации установки, TEST_RESONANCES или SHAPER_CALIBRATE выдадут неправильную частотную характеристику, что приведет к неработоспособности компенсации Input Shaper.
Что такое axes_map
axes_map используется для отображения собственных осей акселерометра на координаты X/Y/Z принтера. Различные инструментальные платы, корпуса печатающих головок или модули акселерометра могут иметь разную ориентацию установки, поэтому необходимо настраивать в соответствии с фактическим способом монтажа.
Если не заполнять axes_map, Klipper по умолчанию использует x,y,z, то есть оси X/Y/Z акселерометра напрямую соответствуют осям X/Y/Z принтера.
[adxl345]
cs_pin: toolboard:PB12
spi_bus: spi1
axes_map: x,y,z # Настроить в соответствии с фактической ориентацией установки
axes_map поддерживает изменение порядка осей и инверсию (добавление - перед осью):
| Ситуация установки | Пример конфигурации |
|---|---|
| X/Y акселерометра совпадают с принтером | axes_map: x,y,z |
| Акселерометр повернут на 90°, X/Y меняются местами | axes_map: y,x,z |
| Акселерометр установлен вверх ногами, ось Z инвертирована | axes_map: x,y,-z |
| Акселерометр установлен сбоку, Y/Z меняются местами | axes_map: x,z,y |
Секции конфигурации акселерометров [adxl345], [lis2dw], [mpu9250], [bmi160], [icm20948] и другие используют одинаковые правила axes_map.
Предварительная проверка ориентации с помощью ACCELEROMETER_QUERY
В состоянии покоя акселерометр обнаруживает гравитационное ускорение около 1g. Наблюдая, какая ось показывает значение, близкое к ±1g, можно предварительно определить ориентацию акселерометра:
- Выполните
ACCELEROMETER_QUERY, запишите показания по каждой оси. - Наклоните принтер (или акселерометр) вдоль направлений X, Y, Z и наблюдайте, по какой оси изменение показаний максимально.
- Если при наклоне принтера вдоль направления X наибольшее изменение показаний по оси Y акселерометра, это указывает на необходимость обмена отображения X/Y.
- Если знак показаний какой-либо оси противоположный (например, показания отрицательные при наклоне в положительном направлении), добавьте
-перед соответствующей осью.
Проверка ориентации с помощью Shake&Tune
Для описанного ниже метода требуется установленный плагин Klippain Shake&Tune. В FlyOS-Fast v1.3.5 и выше он уже предустановлен.
Спектрограммы, создаваемые Shake&Tune, позволяют наглядно проверить правильность axes_map:
-
Выполните тесты резонанса по осям X и Y отдельно:
TEST_RESONANCES AXIS=XTEST_RESONANCES AXIS=Y -
Просмотрите созданные спектрограммы:
- Ориентация правильная: спектрограмма теста по оси X должна показывать четкий пик резонанса в направлении X, а спектрограмма теста по оси Y — четкий пик в направлении Y; частоты обычно различаются.
- Ориентация неправильная: если спектрограммы тестов по X и Y почти одинаковы, или пики резонанса аномально близки по частоте, это указывает на необходимость корректировки
axes_map.
-
После изменения
axes_mapвыполнитеRESTART, затем повторно запустите тесты и сравните результаты.
Ошибка в конфигурации axes_map не вызывает ошибок связи, ACCELEROMETER_QUERY по-прежнему корректно возвращает данные. Аномальным будет только результат измерения резонанса, поэтому эту проблему легко не заметить.
Подробная диагностика axes_map: См. раздел axes_map в вопросах конфигурации компенсации резонанса и компенсации давления
Калибровка акселерометра
Если в системе установлен плагин Klippain Shake&Tune, команда TEST_RESONANCES автоматически создаст спектральные графики и сравнительные графики ремней, что обеспечит более наглядный визуальный анализ, чем встроенная команда SHAPER_CALIBRATE. Начиная с версии FlyOS-Fast v1.3.5 и выше этот плагин предустановлен.
Этапы калибровки
-
Убедитесь, что принтер выполнил хомирование.
-
Введите следующую команду в консоли, чтобы начать автоматическую калибровку осей X и Y:
SHAPER_CALIBRATE -
После завершения калибровки сохраните конфигурацию:
SAVE_CONFIG
Калибровка одной оси
Если необходимо откалибровать только одну ось, используйте:
SHAPER_CALIBRATE AXIS=X
Или замените X на Y.
Во время процесса калибровки принтер может создавать сильные вибрации. Если вибрации слишком сильные, немедленно нажмите кнопку аварийной остановки или отправьте команду M112 для экстренной остановки.
Регулировка интенсивности вибрации
Если вибрации во время теста слишком сильные, можно соответствующим образом снизить значение параметра accel_per_hz (по умолчанию 75):
[resonance_tester]
accel_per_hz: 50
Проблемы конфигурации и настройки: При исправном аппаратном обеспечении акселерометра, но плохих результатах после включения компенсации резонанса, неправильной настройке
shaper_freq, конфликтах между Pressure Advance и Input Shaper и т.д., обратитесь к разделу Проблемы конфигурации компенсации резонанса и давления.
Примечание: Вышеуказанные шаги применимы к конфигурации компенсации резонанса большинства 3D-принтеров на базе Klipper. Настраивайте в соответствии с фактическим оборудованием и системным окружением.