Замер максимального объёмного потока тензодатчиком

Max Volumetric Speed (MVS) — потолок скорости плавления конкретной катушки, который слайсер использует как жёсткий лимит: заниженный MVS молча режет все скорости печати (профиль со скоростью 230 мм/с при MVS 14 реально печатает ~172). Обычно MVS ставят на глазок или по вендорскому профилю. Тензодатчиком в сопле его можно измерить: противодавление расплава растёт с потоком закономерно, а на пределе плавления ломается характерным образом. Метод — flow-модуль CNCKitchen/PrusaPATuner, портируется целиком (чистая математика).

Метод: лесенка потоков

  1. Чистая E-экструзия в воздух (вобл не нужен: противодавление доходит до датчика и без XY-движения — PA здесь не участвует).
  2. Прогрев 3 с на минимальном потоке → 1.5 с тишины (guard-базлайн после тарирования) → ступени потока FMIN→FMAX (эталон 5→30 мм³/с шагом 1) по 2 с каждая. Первая половина каждой полки отбрасывается как переходный процесс.
  3. Расход: (5+6+…+30)·2 с / 2.405 мм² ≈ 385 мм филамента ≈ 1.15 г PLA за полный прогон. Частота датчика некритична: даже на ~40 Гц полка даёт ~40 сэмплов после отброса. Каверза длины хода: одна полка = один extrude-only ход; верхняя полка 30 мм³/с × 2 с ≈ 25 мм — упирается в max_extrude_only_distance при больших DWELL.

Анализ: фит + три независимых детектора

Базлайн — фит степенного закона F = a·Q^b + c по нижним ~45% полок (min 5): c впитывает статическую нагрузку, b — реология. Эталонный код фитит scipy.curve_fit с границами b∈[0.05, 2]; фолбэк без scipy — лог-лог линейная регрессия (форсирует c=0 и занижает b при ненулевом офсете). Мои фиты: PLA F=1944·Q^1.51+4.4e4 (R²=0.993), PETG F=1.3e4·Q^1.09+5.5e4 (R²=0.999) — заявленное «шёл b<1» не догма, важна форма.

Детекторы предела (самый ранний побеждает):

  1. Отрыв вверх (deviation): средняя сила полки превышает предсказание фита на max(4·σ_остатков, 10% отн.) — две полки подряд (одна = шум). Физика: в расплав идёт нерасплавленное ядро, сопротивление растёт быстрее закона.
  2. Рост дисперсии (variance onset): σ полки > 3× медианы σ тихой зоны — предвестник пропусков экструдера.
  3. Обвал (collapse): средняя сила падает >15% от пика — экструдер уже щёлкает, реальная подача рухнула.

Рекомендация = самый ранний триггер × (1 − 0.15) — 15% дерейт на вариативность катушек и температуры. Показывать оба числа: реальный предел (где сломалось) и безопасное (в слайсер).

Чистый прогон моего Elegoo Rapid PETG (@240, ~40 Гц, над опущенным столом)

QFLOW_MEASURE: 26 levels 5.0-30.0 mm3/s, 2.0 s each, 2279 samples
guard baseline: mean=-1467 sigma=725 counts over 60 samples
Q мм³/с   подача мм/с   n   сила a.u.    σ
 5.00       2.079      40     128332    1617
 6.00       2.495      40     146509    1552
...ровный степенной рост, σ ≈ 1.5–2.7k...
21.00       8.731      40     433951    5170
22.00       9.147      40     469611    2697
23.00       9.562      40     573447   14513   ← отрыв вверх (deviation)
24.00       9.978      40     650673    5745   ← пик
25.00      10.394      40     637425   25754   ← начало обвала, σ взлетела
26.00      10.810      40     576543  154151   ← экструдер щёлкает
28.00      11.641      40     566069  146827
30.00      12.473      40     553854  131...
note: baseline fit F=1.302e+04*Q^1.09+5.458e+04 over 12 levels (R2=0.999, resid sigma=1744)
note: quiet-region force sigma=2067; variance trigger at 3x = 6201
note: recommended max = 23.00 x (1-0.15) = 19.55 mm3/s
sensor 40.0 Hz, read errors 0; filament used 385 mm (1.15 g)

Для сравнения: вендорские профили этому классу PETG ставят 12–17 — датчик показал честные ~19.6 с запасом, прямая прибавка скорости печати.

Отрицательный пример: мой же замер, загрязнённый кучей (PLA @220, у жёлоба)

Первый прогон PLA шёл в одну точку над жёлобом — 385 мм прутка выросли столбиком до сопла к верхним полкам:

 5.00 → 64321 (σ1114) ... ровный рост ...
15.00 → 157268 (σ2162)
16.00 → 178368 (σ5465)   ← первый σ-выброс (куча начала касаться)
17.00 → 192187 (σ2082)   ← и «отпустила» — σ пляшет
18.00 → 193804 (σ5708)   ← детектор дисперсии сработал ЗДЕСЬ (порог 3×1741=5222)
...
28.00 → +65k ступенька в средних при ровном тренде вокруг
  → guard: "WARNING baseline shift ... The verdict below is suspect; re-run before trusting"
  → deviation 23.00 | variance 18.00 | recommended 15.30 — ЗАБРАКОВАНО

Перемер над опущенным столом дал чистые предел ~22 / безопасно 18.7 мм³/с — детектор дисперсии в грязном прогоне сработал на 3–4 полки раньше срока от механического контакта, а «перетарировка» на Q=28 была касанием кучи. Guard спас от занижения MVS на ~18%.

Итог замеров моих катушек

КатушкаРеальный пределБезопасный (в слайсер)Вендорский профиль
QIDI PLA Rapido @220~2218.714
Elegoo Rapid PETG @2402319.612–17

Guard против тихой перетарировки

Прошивка может молча перетарировать датчик посреди замера (у Prusa наблюдали DC-сдвиг 787→0 при прогреве, из-за чего якорь анализа уезжал на 9 ступеней). При точных границах полок из планировщика сдвиг окна невозможен, но средние полок он сдвигает — детектор: ступенька в средних при неизменном тренде с обеих сторон (двусторонняя проверка отличает перетарировку от реального излома — у излома дельты остаются повышенными). Только предупреждение, без автокомпенсации: молча вычесть сдвиг = риск отдать завышенный MVS, это небезопасная сторона ошибки. Пример пользы у меня: ступенька +65k на Q=28 оказалась не перетарировкой, а контактом кучи пластика с соплом — guard честно пометил прогон подозрительным, перемер над опущенным столом дал чистую лесенку.

Гочи

  • Куча пластика под соплом — главный враг (385 мм прутка в одну точку!): экструдить над опущенным столом или распределять точку по ходу — см. Загрязнение силовых замеров экструзии.
  • Граница полок — полуоткрытое окно [t_from, t_to): закрытое с обеих сторон захватывает первый (ещё растущий) сэмпл следующей полки и раздувает σ в ~4 раза, глуша детектор дисперсии (найдено мутационной симуляцией: детектор срабатывал на 25 вместо 19 при истинном пределе 16).
  • Смена материала перед замером требует продувки старого из расплава — как и у PA.
  • Температура — часть результата: MVS@220 ≠ MVS@240, фиксировать вместе с числом.

Практика на конкретной машине — Авто-калибровка PA и потока на QIDI Q2 — гайд.

Источники

  • CNCKitchen/PrusaPATunersrc/prusa_pa_tuner/flow_gen.py + flow_analysis.py (лесенка, фит, детекторы, baseline-shift guard, дерейт 0.15)
  • Константы эталона: N_SIGMA=4, REL_TOL=0.10, VAR_FACTOR=3, COLLAPSE_FRAC=0.15, FIT_FRAC=0.45, SETTLE_FRAC=0.5, DERATE_FRAC=0.15