ПИД-р: пожалуй, самый неблагозвучный апгрейд вашего принтера

Подписаться на 3Dtoday
Witbox_Russia
Идет загрузка
Загрузка
05.06.15
20904
51
печатает на Witbox
Техничка
14
Статья относится к принтерам:
Prusa i3 Hephestos
Вы могли заметить,что температура вашего Гефестоса “скачет” около требуемых значений. А если принтер стоит там, где постоянно дуют сквозняки, тоон может и вовсе не попасть ни разу в правильный температурный режим. Скорее всего, это никак не скажется на принтере, но может быть критично в тех случаях, когда при печати вы хотите получить какие-то конкретные свойства для которых важна конкретная температура.

Такая проблема обусловлена тем, что у хотэнда механизм нагрева никак не регулируется. Это решается очень простой установкой крайне неблагозвучного ПИД-регулятора. Но чтобы лучше понять этот процесс, мы попробуем вам про этот самый ПИД рассказать.
2979351.gif
[LEFT]
Знакомьтесь, мистер ПИД

Пропорционально-интегро-дифференцирующий (ПИД) регулятор (from Wikipedia) - это механизм, который с помощью обратной связи вычисляет отклонение или ошибку измерения. На выходе сигнала сравнивают полученное и желаемое значение. Когда мы получаем ошибку, ПИД через три своих составляющих (Kp, Ki, Kd) выполняет соответствующую корректировку. В контексте 3D-принтеров, мы рассматриваем нагрев. Указываем, допустим, температуру 210 C. Но в самом хотэнде фактическая температура оказывается меньше, что является ошибкой. Здесь и нужен ПИД, чтобы привести полученную температуру к требуемой.

[CENTER]
Звучит сложно?Не волнуйтесь, мы и сами не до конца понимаем весь этот матан. Но, как и магия вне Хогвартса - работает!

Итак, что делать если ПИД-регулятор не установлен? Ну, у нас есть постоянное колебание температуры. Почему? Допустим, фактическая температура крайне близка к желаемой. Но если ПИД установлен неверно, то постоянные попытки корректировки температуры будут бесполезны. Это не так критично только в том случае, если вы не печатаете. Если же ПИД установлен верно, то все эти колебания при нагреве будут либо устранены, либо полностью минимизированы.

Имейте ввиду, что ваш принтер может оказаться в таких условиях, которые активно влияют на работу хотэнда (печать на арктической станции, прямо под открытым окном маршрутки на ходу и т.д.). В этом случае, даже если ПИД установлен правильно, он может работать некорректно. Дело в том, что регулятор рассчитан на определенные условия, которые могут отличаться от тех, при которых вы ведете 3D-печать. Поэтому если вы заметили скачки температуры или хотэнд неприлично долго нагревается, ПИД нужно настроить.

Как установить ПИД-регулятор?

Итак, вам потребуются принтер, подключенный по USB и программа, которая позволяет отправлять команды на Гефешу. В качестве софта отлично подойдёт Cura, если потратить пару секнуд на некоторые “шамантсва”. Во-первых, через Machine settings переключите серийный порт с AUTO на тот, к которому подключен принтер. После этого пройдите по пути File -> Preferences… Там во вкладке Printing window type замените basic на Pronterface UI. Теперь вам стоит только закинуть произвольную модель и нажать на кнопку Printing with USB
Вместо привычной строки прогресса вы увидите такой вот интерфейс. С его помощью мы и отрегулируем ПИД. Для начала проверьте - действительно ли принтер подключен к компьютеру? Нажмите на кнопку в левом нижнем углу. После этого экструдер должен переместиться к домашним координатам.

Приятной для нас новостью будет то, что внутри прошивки заложена автонастройка ПИД-регулятора., которая выдаст нам верные значения Kp, Ki, Kd. Но есть нюанс! Фиксировать он будет те значения, которые верны для текущего положения принтера. Иначе говоря, если принтер стоит в комнате - расчет будет исходить из комнатной температуры. Поэтому настроить ПИД дома, увезти Гефешу в Арктику и рассчитывать при этом на грамотную работу прошивки не приходится. Настройка должна проводиться в том месте, где принтер будет эксплуатироваться, с желательно относительно неизменными внешними условиями.

Чтобы запустить автонастройку ПИД, введите Sn M303, где n - температура, при которой вы печатаете. В нашем случае, допустим, это будет 210. Тогда вводите:
S210 M303.
Когда вы нажмете Enter, вы увидите, что хотэнд принтера начал нагреваться. Автонастройка ПИД началась. Через некоторое время вы получите результаты - значения Кр, Ki, Kd. Вот что вышло у нас:
Теперь нам нужно заставить 3D-принтер использовать именно эти значения. В целом, это можно сделать двумя способами: изменением gcode в Cura или непосредственно модификацией прошивки.
В первом случае вам потребуется в start.Gcode добавить строчку с настройками вашего ПИД-регулятора - в нашем случае это M301 P14.82 I0.8 D68.25. Ваши значения для P, I и D будут отличаться.
Этот метод хоть и не совсем удобен, но лёгок в применении и хорошо подходит для проверки работоспособности вашего ПИД.
Во втором случае вам нужно скачать прошивку и отредактировать файл "configuration.h". Нас интересует часть "PIDTEMP" и значения переменных "DEFAULT_Kp", "DEFAULT_Ki", "DEFAULT_Kd". Измените их на те значения, которые вы получили при автонастройке.
На случай если кто-то не знает как загрузить код через Arduino: в первую очередь по пути Tools -> Board -> выберите плату своего принтера. У нашего Гефестоса это Arduino Mega or Mega 2560. Затем в Tools ->Port -> выберите тот порт, через который ваш принтер подключен к компьютеру. Наконец, нажмите кнопку с изображением стрелки, указывающей вправо (“Upload”). Таким образом вы загрузите модифицированную прошивку.
Итак, вы получили ПИД-регулятор, актуальный для ваших условий печати.Процесс можно повторять сколько угодно раз. Теперь вы всегда сможете справиться с колебаниями температуры в тех случаях, когда они для вас критичны.

[RIGHT]Улыбаемся и машем,
Команда Witbox Russia
Подписаться на 3Dtoday
14
Комментарии к статье

Комментарии

5 Июн 14:16
2
хм, интересно, а можно посмотреть на график применяемой мощности нагревателя, который выдается не пронтерфейсом, а репитер хостом с применением полученных 3-х результирующих? В пронтере нет такого графика.

Есть еще 1 вопрос по прошивке коль такое обсуждаем
Откуда получается переменная OVERSAMPLENR в данной формуле ниже, которая в начале данной части PID?
#define PID_dT ((OVERSAMPLENR * 8.0)/(F_CPU / 64.0 / 256.0))

Далее, как вы считаете, данная инструкция правильная или что тут не так?
//For manual adjustments:
//if it overshoots a lot and oscillates,
//either the integral gain needs to be increased or
//all gains should be reduced
//Too much overshoot? Increase D, decrease P.
//Response too damped? Increase P.
5 Июн 20:44
2
Переменную смотри здесь "thermistortables.h" - OVERSAMPLENR точность терморезистора в цепи делителя.
5 Июн 21:07
1
Ooo, пасибки большие! фактически формула берет константу 16... на фига так писать и грузить вычислитель арду каждый раз не ясно, ша поменяю на 16 и с этим вопросом закроем на всегда!
Еще раз месис, даже не догадался дать поиск переменной в каталоге :) бывает, стареем ...
5 Июн 21:39
0
Не стал бы я так делать;) это не просто так сделано. Температура плавать будет...вот таблицу можно, относительно своего термистора.
5 Июн 23:12
1
как раз наоборот, нижняя картина PID от меня, там стоит 16:) + Мне нужно освободить ресурс на ЦП для других задач
6 Июн 00:27
0
Т,К, характеристика не линейна, вычисляется погрешность - коэффициент от 1024 .
Тут вообщем есть все ; http://avr-start.ru/?p=590

"(5*512*2)/1024=5В — реальное измеренное значение напряжения
Некоторые программисты пишут программу так, чтобы микроконтроллер автоматически вычислял коэффициент делителя, для этого выходной сигнал измеряют образцовым прибором и заносят это значение в программу. Микроконтроллер сам соотносит истинное напряжение каждому значению АЦП, сам процесс однократный и носит название калибровки."
6 Июн 14:20
1
Весь вопрос - а реализовано ли такое в марлиновской прошивке? не думаю, так как смотрим на переменную в файле thermistortables.h
и видим прошитое жесткое значение 16 для переменной OVERSAMPLENR и конфиг обращается только thermistortables.h Зачем грузить переменной лишней ЦВ если цифра делителя может отработать из "конфиговской" зоны будущего HEX?:)
#define OVERSAMPLENR 16

Так и живем:) теоретики рекомендуют правильный подход, а буржуйские практики сокращают свой труд:)

Если наши с вами прошивки отличаются то плиз поделитесь вашей, очень интересно
3 Дек 17:16
0
OVERSAMPLENR не переменная. Это предопределение. на этапе компиляции все предопределения заменятся на код определенными ими. В данном случае на 16.
#define OVERSAMPLENR 16
Потом далее, #define PID_dT ((OVERSAMPLENR * 8.0)/(F_CPU / 64.0 / 256.0))
Если эта структура не зависима и не меняется в ходе работы программы, компилятор (читай оптимизатор) посчитает ее 1 раз и вставит в машинный код уже результат.
так что не стоит сильно парится. Хотя да соглашусь, юзать флоаты на атмеге... это реально тормозит ее работу. И сорян за поднятую тему.
5 Июн 15:07
1
хм, интересно, а можно посмотреть на график применяемой мощности нагревателя, который выдается не пронтерфейсом, а репитер хостом с применением полученных 3-х результирующих? В пронтере нет такого графика.
Как первый же оператор освободится - сделаем! Самим аж интересно стало.

Есть еще 1 вопрос по прошивке коль такое обсуждаем
Откуда получается переменная OVERSAMPLENR в данной формуле ниже, которая в начале данной части PID?
#define PID_dT ((OVERSAMPLENR * 8.0)/(F_CPU / 64.0 / 256.0))

А вот в прошивкокодинге мы, увы, не сильны. Но наверняка какой-нибудь специалист не поленится нам в комментариях дать развернутый ответ.
5 Июн 15:26
5
Чтобы температура хотэнда не скакала нужно обмотать алюминиевый блок стеклотканью и закрепить каптоновым скотчем. Примерно так:
5 Июн 15:32
0
А нагрев происходит быстрее? У меня на гефеше пока только ПИД есть, в среднем на треть как минимум стал быстрее греться
5 Июн 15:35
2
ПИД не ускоряет нагрев (он его поддерживает), а пуховичок ускоряет ;)
5 Июн 15:37
1
Непосредственно - нет, конечно) НО! За счёт более точного приближения к нужной температуре принтер становится "готов к труду и обороне" быстрее:D
5 Июн 15:43
1
Пусть будет так, не будем лезть в дебри прошивки ;)
5 Июн 15:46
0
Тут скорее дело в том, что у меня частенько нагрев вперёд "убегал" и потом выравнивал сам себя. Иначе говоря, печатаю я при 200 градусах, а иногда нагрев аж до 212 разгонялся
5 Июн 15:58
1
Заглянем в дебри прошивки Марлин :)
Если нагрев убегает нужно снижать параметр (ток)
#define BANG_MAX 255 // limits current to nozzle while in bang-bang mode; 255=full current
Это тоже имеет отношение к ПИДу ;)
5 Июн 16:01
0
О как :D Спасибо, вот про это дело не знал
P.S. "Bang-bang mode" вот просто в цитатник х)
5 Июн 17:27
2
Алексей джан, я настроил свой ПИД не изменяя данный параметр брат, он нужен как есть я считаю так как если понизить мощ искусственно то ответ системы будет очень тупым , с большими задержками и не будет дотягивать до заданной температуры, а вот что такое переменная OVERSAMPLENR пока разбираюсь и врят ли кто тут поможет.

Знаю одно, в самой первой прошивке и в нескольких поколениях на месте данной переменно OVERSAMPLENR стояла цифра 16.0...
я приблизительно, путем научного тыка понял одно - когда ставлю вместо этой переменной цифру 16 то ШИМ нагревателя работает интересней - когда прерывается ШИМ после резких осцилляций то идет таймаут до включения следующего ШИМ в 16 сек.
А по запрошенному результата тут я ожидаю увидеть вот такой график ШИМ как ниже, ожидать не вредно конечно так как вопрос был серьезный.
На основании моего личного опыта такой описанный подход как в данном посте к сожалению не рабочий на 100%. Почему так будут разбираться наши ребята. Прошивка мерлин опенсорс и там есть много не дороботок, в том числе данный так называемый автотюнинг.
Он дает приблизительные результаты, как минимум в 2 раза или повышено или понижено по цифрам
5 Июн 18:52
0
Хитрые китайЗЫ эти настройки даже в меню вывели...осталось только правильно настроить:D.
2015605184729.jpg


2015605184754.jpg
5 Июн 20:36
1
марлин отстой
5 Июн 20:57
2
Вот я тоже стал думать Илья, ты на репиторе как и я по феликсу живем, ты знаешь где живет его термистрорная таблица, я ее не нашел
Вообще , есть на портале спец по прошивке репитора?
5 Июн 20:58
0
Вы за репитер хост? К стати интересно почитать отзывы, кто ее уже использовал, говорят, что там плюшек больше и стабильность. www.repetier.com/download/repetier-firmware-0-83/
5 Июн 21:10
2
****кто ее уже использовал
что? вопрос разложите плз, не ясно.
5 Июн 21:54
0
Все сидят на марлине, кто пользуется репитер хостом, поделитесь мнением, впечатлением, опытом
5 Июн 22:00
0
Я пользуюсь. В чем конкретно вопрос - не понял. Прога как прога, функции свои выполняет. Это ж не слайсер.
5 Июн 23:21
2
репитер имеет несколько продуктов
2 из них
1, интерфейс управления принтером со встроенными слайсерами( в последних версиях плюсанули куру) стабильная проверенная версия интерфейса мной 0.95F , там все по человечески стрелки как стрелки кнопки как кнопки... я ей пользуюсь
2. их дифолт прошивка - ее не копал а вот прошивку феликса копал, и они сидят своим коммерческим принтаком на прошивке репитора и всегда апдейтят ее. Лично я дебагнул 3 ошибки, они откликнулись и поправили , сейчас она лучше, но так как я не знаю как там мать поставить правильно с пинами на арду я вынужденно пока на марлине. Скоро разберусь и перейду и прощай марлин. Феликс прошивка классная, очень аккуратная , очень тихо пашут ШД, не сильно внедряется в изменения скорости из за размера объекта, есть очень много счетчиков которых нет в марлине... вообще их прошивка отдельная тема. Вот бы нашелся бы спец по ней у нс в портале, бросил бы все и читал бы его!
6 Июн 00:40
0
Почему?
6 Июн 01:58
2
могу ответить коротко я
слишком большое внедрение в подаваемый код с изменением последнего
дергает ШД на большой скорости когда за 200мм/сек
нет необходимых счетчиков времени работы бота, затраченного филамента, автоматического sleep когда бот не используется
ПИД Г на палочке, пока я настроил показанный родил слона.
ШД работают очень тихо! ничего не греется!
6 Июн 11:47
0
Т.е. вы можете посоветовать репитер хост вместо бортового марлина?
6 Июн 11:50
2
Репитер хост это софт для управления, а есть еще прошивка просто репитер :-) а то вы все одним и тем же называете :-)
6 Июн 11:56
0
Ну всё, вы меня запутали... Точнее Илья запутал. Он-то когда ругал марлин что имел ввиду взамен? Допустим, прошивка репитер круче марлина. А чем? Вот я слышал, например, что марлин работая в связке с ардуной, сильно дискретезирует движения кареток, в итоге любая обтекаемая модель печатается гранёной. Вот у прошивки репитера эта проблема решена?
6 Июн 12:01
3
если стл имеет грани бот их повторит при любой прошивке и при любом ЦП
6 Июн 13:58
2
Допустим, прошивка репитер круче марлина. А чем?
Slonik мучался с Марлином для Румбы, а на Репетиере всё заработало. Самое интересное, что есть WEB интерфейс для настройки параметров прошивки Репетиер.
6 Июн 14:28
1
вау, пасиб Алексей, вот это да:) тонкий клиент для прошивки написали, умереть можно :) вот это да...не знал!
6 Июн 11:59
2
я могу сказать что разработанная и доведенная прошивка( фактически открытая, но коммерческая , если это вам что либо подсказывает) от компании Феликс Роботикс ( Голландия ) которая использует продукт репитора как прошивку, лучше чем марлин прошивка. А репитор хост как терминальное ПО к прошивке от того же вендора будет как раз кстати.
Вот она прошивка для феликса. Ее надо сделать по пинам и термисторам под стандартный арду
http://shop.felixprinters.com/downloads/firmware/20150210%20-%20FIRMWARE%20-%20Repetier%200.922%20-%20FELIX_3_0_SINGLE_extrusion.zip
6 Июн 12:05
0
Спасибо! А она сможет работать лишь на ардуино? На новых 32битных контроллерах она способна заработать?
6 Июн 12:15
2
нет, к сожалению для 32 битных риск процессоров данная пошивка не рассчитана, надо переделывать тотально!
6 Июн 12:21
0
Ясно!
6 Июн 12:27
2
единственная деталька, которая закрыта коммерчески на Феликс Роботикс - сама плата на меге как и наш арду... там много косяков и стоит ко всему 130 Евро...
Не стоит покупать вообще эту плату. Слабая, куркульная, очень слабые FET на плате... единственный плюс - все хорошо продуманно по разводке проводов и их монтажу
6 Июн 12:30
0
Буду иметь ввиду. Спасибо
5 Июн 22:00
1
пид не установлен. задаем 240 температура не поднимается выше 240 а гуляет 236/8-240. нагреватель обычный керамический резистор.
1324567890.png
5 Июн 23:22
2
Ооо браво:)) октопус! Молодец!
Давно на нем?
6 Июн 00:23
1
Второй день :-) если честно заказывал малинку для других целей. Но когда искал модель корпуса случайно наткнулся на это. Решил попробовать и уже доволен на все сто :-)
6 Июн 01:48
2
на ней наш сетевой хаб, конечно мы его перебрали на 80%, но корень подхода оставили:)
Думаю и надеюсь если будешь часто показывать то на твоем примере многие наконец нормальный шнурок засунут в попу бота:)

какая у тебя длина USB кабеля? вообщем сделай макс коротким его, у нас 15см с ферро фильтром
6 Июн 02:47
0
Пока проблем небыло. Шнурок из комплекта GoPro, чуть больше 20см. Малину питаю от dc/dc преобразователя отборными 5,2в :-) даже 2х амперные адаптеры от планшетов 4,9 выдают. Возможно в этом проблема бывает. Кстати думаю стыковать малину с контроллером минуя усб, по уарт. А уарт и по десятиметровому кабелю побежит :-)
6 Июн 07:53
2
нравится подход, вообще питалово это наше все:) У нас чуть по другому, в системном блоке все, экранировка 100%, Малинка и арду питаются от классного белoго БП от IBM:)
А что даст такое решение с UART? как с помехами? станет ли тупее на Rx? и зачем нужно выдвигать малинку так далеко? Или че то не так понял? хочешь пользоваться O/I малины для общения с арду через ?
6 Июн 08:32
1
У меня слишком маленький принтер поэтому малинке на одном боку не хватило места :-) по опыту скажу что в помещении с помехами в огромном спектре 15метровые сом порты не сбоили. По уарту хочу подключить чтобы упростить схему (свой контроллер хочу спаять) и заодно проверить на что конкретно влияет разряд статики вблизи принтера. У меня часто он останавливался когда я просто проходил мимо. Есть подозрение что усб отваливался потому как мышка иногда тоже переставала работать. Тем более что даже октопи предлагает такой вариант подключения без танцев с бубном.
6 Июн 11:19
2
Ищи проблему остановок в отсутствии экранировки высокоомных входов арду, это концевики, термисторы, ОТДЕЛЯЙ под СЕТКУ и на землю арду! все сетки в 1 точку, все сетки к земле 1 концом у арду только. На USB феррофильтр присобачь или найди такой кабель.
Да, серийка дуракаупорный протокол, я гнал на усилках 115000 до 100 метров.НО! у тебя явно не там проблемка. отделяй кабели как сказал, скручивай пупком как в UTP реализовано и в сетку. Все кабели ШД и концевиков тоже пупинизируй и разнеси. Совместное параллельное существование с ШИМ содержащим сократи до 20см
У меня старый моб. нокия. она зажигает светодиоды во время звонка когда они на дистанции 15см. Мы ведем тесты им - кладем моб на системный блок и звоним на него, если бот умер от EMI значит не достигли!
На 3DOPEX-G1 отработали все так что только ядерный взрыв его остановит своим сумасшедшим импульсом EMI :) к Сожалению на лампы перейти не можем, ПК бота будет в дом размером ::))
6 Июн 11:48
0
И в добавок нужен токопроводящий филламент и напечатать корпуса для электроники :-)
6 Июн 12:07
1
мы для системного блока используем дибонд, классно все заземляется :)
28 Ноя 20:41
0
А вот там приведена строчка, которую нужно вставить в G-code M301 P14.82 I0.8 D68.25. Параметр M301 одинаков для всех Prusa ?

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

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

Сборка принтера с Али. Prusa I3 от flsun3d на профиле 2020.

Закрытая камера для принтера за 100 рублей.

Подключение голого 12864B5 к RAMPS

3Dtoday за 60 секунд от 23 января

MakerPad превратит смартфон в дружелюбную систему 3D-дизайна

начало работы с Simplify3d или я узнал что такое слайсер, а что дальше?