Здравствуйте! Мой первый пост у вас.
По вопросам настройки термистора внятной инфы у вас на форуме не нашел. Решил поделиться личным опытом.
Изначально реальная температура HotEnd (многие его ласково называют "горячий конец") гораздо ниже температуры показываемой в пронтерфейсе.
Перебирал в прошивке (Marlin) варианты - так и не нашел подходящего. Более того, в результате переборов типа термистора в configuration.h принтер вообще перестал реагировать на смену термистора. Как это понимать не знаю. То есть тип термистора меняем, а реакции никакой. Пока не залил прошивку из архива - так и не полегчало.
Сопротивление моего термистора при комнатной температуре приблизительно равно 126 кОм. По этому не ясно, то ли это 100к термистор, то ли 200к, то ли хз что такое. Плата у меня Gen6, сопротивление в делителе напряжения термистора было 4,7кОм.
Попытался воспользоваться командой автонастройки PID (M303 Stemp)... Кстати. А вы знаете, что такое PID? Я вот не знал. Оказывается это вот что такое
http://ru.wikipedia.org/wiki/%D0%9F%D0% ... 0%BE%D1%80 Так вот. Результат от использования команды не дал ничего.
То есть полученные данные я внес в конфиг, но стало еще хуже. Температура колебалась около назначенной с амплитудой 10 градусов не достигая t-target даже за несколько минут.
Как компромиссный вариант был куплен китайский пирометр. Приблизительно измерена t HotEnd и я начал печатать наобум. То есть ставил температуру 230, вместо 185 градусов (печатаю PLA) и печатал. Но скачки температуры...
Стало нестерпимо интересно, что же там за температура? В измерениях принимали участие три термометра. 1-й пирометр (ИК термометр известной китайской фирмы Noname). По моему мнению его показаниям вполне можно верить +-5 градусов, но им сложно измерять температуру маленьких объектов. Сложно точно навести. Его либо надо жестко закрепить на каком-то штативе, но даже в этом случае пятно измерения температуры будет наверное больше площади HotEnd. 2-й электронный термометр на базе DALLAS 18B20. Имеет хорошую точность, но диапазон до 126 градусов и инерционен сильно. Он занижает температуру охлаждаясь через подключенные провода. Имеет пластиковый корпус с низкой теплопроводностью. Я его использовал для проверки показаний пирометра. Такой же DALLAS у меня установлен в термостабилизации стола (у меня на плате Gen6 нет контроля темп. стола). Там он вполне уместен. 3-й термометр это термопара, которая шла в комплекте к мультиметру UNI-T UT30C. Очень быстро реагирует. На него в основном и полагался, проверив его пирометром и далласом. Вроде не врет. Примотал его на термопасте к HotEnd фум-лентой.
Но тут еще проблема, как узнать значение raw, которое фигурирует в thermistortable.h в отношении к температуре? Я так и не нашел простых способов. Пришлось обратиться к другу, он пишет. Говорит на Си. Что это значит? я без понятия. Всегда, когда вижу строки кода я впадаю в депрессию. Так вот. Он посмотрел код. Матюгнулся 3 раза (вы когда-нибудь видели программиста, который не ругается читая чужой код?) и вписал в temperature.cpp вот такое:
#ifdef PIDTEMP
pid_input = analog2temp(current_raw[e], e);
SERIAL_ECHOLN((1023 * 16 - current_raw[e]) / 16);
Эта черная магия, видимо, стала выдавать в консоль значение АЦП по температуре. Я правда просил его сделать, чтоб оно не сыпало как попало, а усредняло за несколько секунд и выдавало среднее, но он так устал, читая чужой код!
В итоге я начал с шагом 5 градусов менять температуру и записывать raw в таблицу. Время измерения для каждой точки около 1,5 минуты, пока перестанет ползти температура на тестере. Оказалось, что в районе моих 185 градусов (реальных, а не установленных около 240) для печати PLA зависимость raw от t снижалась практически до 1 raw на градус. А о измерении температур в районе 230 градусов для ABS вообще не стоит и мечтать. Там разрешения падает менее 1 raw на градус. Так наобум решил сместить рабочую точку повыше по напряжению, так как значение raw при температуре близкой к 250 градусам устремлялось к минимальному. То есть raw, естественно, обратнопропорционален температуре. Резистор 4,7 кОм подтяжки к +5В заменил на 1 кОм. Странно, но это помогло. Я сначала думал, что просто вырастет значение raw, но разрешение не улучшится. Но оно значительно возросло. Я для себя это так и не смог однозначно объяснить. То ли АЦП сам по себе нелинеен в районе низких напряжений. То ли что-то в коде прошивки. То ли я увеличил ток через термистор и это привело к такому результату.
Нужно было внести данные в thermistortable.h. В принципе можно внести и "непричесанные" данные как есть с шагом как получилось. Но я боялся, что где-то мог допустить ошибку в измерениях и какой-то участок характеристики окажется проваленным или выпученным. Для того, чтоб получить значения raw от температуры с шагом 5 градусов можно было данные из таблицы внести в ЭВМ и апроксимировать, как меня учили в институте. Но я взял листок в клеточку и нарисовал график. Как меня учили в школе. Потом ликалом апроксимировал точки. Списал данные в thermistortable.h с шагом в 5 реальных градусов.
В итоге, как говорят, "с поносом наладилось". Разрешение в районе 190 градусов возросло до 4 raw на градус. Теперь при печати колебания температуры +-2 градуса, что считаю вполне себе ничего. С автонастройкой PID больше не затевался. Поставил пресет для Mendel Kp=63 Ki=2.25 Kd=440.
Единственное температуру для печати PLA все же завышаю на 10 градусов - 195 вместо 185. Если ставить 185 проскальзывает подача. Связываю это с тем, что измерения проводились в покое без охлаждения. Экструдер был замотан т.е. утеплен. По этому "поправку на ветер" таки пришлось ввести. Хотя можно данные в thermistortable.h сдвинуть.
Кстати, небольшой совет. Для визуального контроля равномерности подачи я нанес на прижимной подшипник подачи полоски маркером. По прутку никак не определишь, едет он или нет. А так сразу видно. Ну и по печати конечно видно, если глаз пристрелян.
А вот вопрос, если кто знает. Что вот это за такое? В общем там коментарии конечно есть. Это да. Но как в той известной песне: "Нет, все понятно! Но что конкретно? Что ты имела ввиду?"
#ifdef PIDTEMP
//#define PID_DEBUG // Sends debug data to the serial port.
//#define PID_OPENLOOP 1 // Puts PID in open loop. M104 sets the output power in %
#define PID_INTEGRAL_DRIVE_MAX 255 //limit for the integral term
#define K1 0.95 //smoothing factor withing the PID
#define PID_dT ((16.0 * 8.0)/(F_CPU / 64.0 / 256.0)) //sampling period of the
Я пытался раскоментировать первые две строки, но тогда проект не компиллится... Остальные три строки так и не понял до конца что значат, и на что влияют.
Всех с наступающим!