Настройка термистора 3d принтера
В статье мы постараемся подробно разобрать вопросы возникающие с колебанием температурного режима при работе 3Д принтера. Ниже описаны самые распространенные проблемы и вопросы пользователей 3Д принтеров. Тысячи часов профессиональной 3D-печати за нашей спиной, чтобы помочь вам справится с вашим 3Д принтером.
Температура Hotend колеблется вокруг заданной температуры
Хотим отметить, что колебания до ± 10 °C вокруг заданной температуры во время предварительного нагрева и печати считается нормой.
После начального нагрева встроенное программное обеспечение 3D принтера имеет алгоритм управления пропорционально-интегральной производной (PID), который стабилизирует значения, когда она достигает ± 10 °C от целевой температуры. ПИД-регулятор также помогает поддерживать температуру во время печати.
Если есть частые колебания, которые превышают 10 °C, или выравнивания занимает более 2 минут, при стабилизации к заданной температуре, сначала убедитесь в правильности установки вентиляторов, головка и термодатчик должны быть незагрязненные остатками пластика. Возможно не откалиброван PID.
Откалибруйте его следующим образом:
1. Подключите ваш 3Д принтер к компьютеру через USB.
2. Запустите Repetier Host (Pronterface ) и подключитесь к принтеру.
3. Используйте команду [M303 C8 S235] (C = циклы и S = заданная температура) и дождитесь ее запуска и возврата с измеренными значениями [kp] [ki] [kd] на консоли. Чем больше циклов (C), тем точнее может быть калибровка.
4. На панели управления принтера перейдите к Конфигурация => Конфигурация EEPROM и измените значения [PID-P] [PID-I] [PID-D].
5. Нажмите «ОК», чтобы сохранить новые настройки PID.
Проблемы с нагреванием
Температура не увеличивается
Означает проблему с керамическим нагревателем на печатающей головке.
Выполните действия по диагностике:
Используйте мультиметр и измерьте сопротивление на его клеммах. Измеримое сопротивление покажет, что оно работает нормально. Сопротивление -1 будет означать, что сам нагреватель поврежден.
Проверьте на появления плохих соединений во всех точках между нагревателем и платой управления.
Проверьте, не потрескалась ли керамическая нагревательная пластина в нагревательном блоке.
Показания температуры 0 ° C
Указывает на проблему с термистором. Чтобы проверить, не поврежден ли он, используйте мультиметр для измерения сопротивления на его клеммах. Измеренное сопротивление должно упасть около 100К, тогда как сопротивление -1 будет означать, что оно повреждено.
Также проверьте все соединения между термистором и платой управления, может вызывать скачки температуры во время печати.
Иногда происходит облом проводов в соединении терморезистора и провода. Это происходит из-за некачественной пайки, или неаккуратного оборачивания проводов у основания нагревательного блока 3Д принтера.
Неправильное чтение температуры.
Причиной этой проблемы, вероятно, является то, что термистор не на своем месте т.е. каким то образом выпал из своего посадочного места. Аккуратно переместите терморезистор обратно в центр отверстия так, чтобы датчик не касался своими проводами за края отверстия.
Также неправильное показания, примерно на 10 – 20 °C, вызывает нагар или расплавленный пластик попавший в установочное место терморезистора. Это происходит при недолжном соблюдении чистоты нагревательного блока.
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Статья относится к принтерам:
Точная настройка термистора в Marlin.
Какие строки кода нужно поменять?
Если Вы используете прошивку marlin, то тип термистора выбирается во вкладке configuration.h
Как видно, в прошивку уже включен ряд термисторов, которые можно активировать, выбрав соответствующую цифру. Если у Вас термистор “100k thermistor - best choice for EPCOS 100k (4.7k pullup)” то в строке, которая отвечает за термистор хотэнда, нужно поставить цифру “1”. Если у вас другой термистор, то выбираем необходимый.
Как узнать какой у Вас термистор?
Что бы узнать, какой именно у Вас термистор, нужно посмотреть его технические характеристики и сопоставить с тем списком, который указан в прошивке и выбрать необходимый. Что делать если у вас нет таких данных? И вы точно не знаете какой у вас термистор?
В таком случае Вам понадобится дополнительное устройство, которое будет показывать температуру хотэнда, например, мультиметр с возможностью измерения температуры (в комплект должна входить термопара). Как вы уже поняли, термопара будет показывать “реальное” значение температуры хотэнда, и это значение необходимо сравнивать с показаниями Вашего термистора.
Процедура подбора будет заключаться в следующем:
1. Выставить в прошивке значение первого термистора, залить на плату;.
2. Термопару мультиметра приложить как можно ближе к термистору хотэнда (для чистоты эксперимента);
3. Включить прогрев хотэнда (например, до 200 градусов) и подождать пока температура «устаканится».
4. Сравнить значение температуры, которую выдает термопара и термистор;
5. Если температура на термопаре и на термисторе совпадает (в идеале температура не должна отличаться более 5 градусов), то вы выбрали правильный термистор;
6. Если температуры будут сильно отличаться, значит в прошивке Вы выбрали не тот термистор. В прошивке выбираем следующую цифру, заливаем на плату и делаем пункты 1-6 до тех пор, когда температуры на термопаре и на термисторе не будет одинаковая (в пределах погрешности).
Пример подбора термистора.
Теперь давайте рассмотрим конкретный пример, мы взяли новый термистор SEMITEC NTC 100 кОм (Япония). Нам нужно выставить правильный тип в прошивке. Для начала выставим значение “1” и зальем на плату.
Далее соберем импровизированный «испытательный стенд» (испытательный нагревательный блок).
Мы просверлили нагревательный блок сверлом 3.2мм насквозь, с одной стороны (на фото левая) закрепили терпомапару (наш “эталонный” измеритель), а с другой стороны приложили термистор. Вам не обязательно в точности повторять такую варварскую процедуру со своим нагревательным блоком, но постарайтесь разместить термопару, как можно ближе к термистору.
После того как все собрали, включаем прогрев экструдера и ждем пока температура «устаканиться» и смотрим на показания прибора.
Как видим, действительная температура 186 градусов, а термистор показывает 201 градус, то есть разброс на 15 градусов, значит тип термистора в прошивке мы указали не верный.
В прошивке нужно выбрать другой тип термистора, и проделать все тоже самое. Мы покажем Вам уже верный тип термистора, который соответствует значению “5” - is 100K thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (4.7k pullup). После изменения и заливки прошивки получаем следующее:
Полученные значения гуляют в пределах 2-3 градусов. Согласитесь не плохой результат, значит в прошивке мы указали верный тип термистора.
В прошивке нет нужного термистора.
Что делать, если вы перепробовали все типы термисторов в прошивке, а показания не соответствует действительности? Есть несколько вариантов:
1. Выбрать оптимальный термистор в прошивке, что бы разность температуры между “реальной” и нашим термистором была минимальна;
2. Добавить в прошивку собственный термистор со своими характеристиками.
В данном разделе мы покажем, как в прошивку marlin добавить собственный термистор, что бы показанные им значения совпадали с действительностью. Для этого нам понадобиться та же самая термопара с мультиметром.
Для начала зайдем в кладку thermistortables.h
Здесь содержится вся информация о всех типах термисторов, которые включены в прошивку. Открываем вкладку и видим следующее
Каждому термистору соответствует своя таблица значений температур и значения АЦП. Значения справа это температура, а слева значения АЦП, которые мы как раз и будем менять.
Откуда брать эти значения АЦП?
Теперь приступим непосредственно к самой калибровке, прогреваем хотэнд до тех пор, пока мультиметр не покажет 30 градусов. После того как температура на мультиметре «устканилась», смотрим на значения АЦП которые ему соответствует. Записываем на лист бумаги или сразу в Exel. Например, температура-30 и АЦП-966. Еще раз напомим, что 30 градусов - это температура, которую показывает мультиметр.
Далее начинаем прогревать хотэнд до того момента, пока термопара не покажет 35 градусов. Записываем снова значения АЦП – 950. И так мы должны постепенно с интервалом в 5 градусов, прогревать хотэнд и одновременно записывать значения АЦП.
В итоге мы получим точно такую же таблицу как в прошивке, но со своими значениями. Все значения старых АЦП меняем на свои и заливаем на плату. После заливки можно проверить правильность наших действий, прогреть хотэнд и сравнить температуры термистора и термопары, если все сделано правильно, то они будут равны (в пределах погрешности). После всех манипуляций не забывайте сделать несколько раз PID регуляцию.
Результаты печати с откалиброванным термистором:
Напечатано на нашем 3D-принтере Prusa I3 Steel серебристым PLA (фото ниже -черный PLA) от компании REC.
- Высота слоя 0,15мм
- Плотность заполнения 20%
- Толщина стенок 0,8мм
- Температура экструдера 200ºC
- Температура стола 50ºC
- Обдув модели 100%
- Скорость печати 50 мм/c
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
PID (ПИД, Пропорционально-интегрально-дифференцирующий регулятор) - регулятор, использующий сумму трех значения входного сигнала (Kp, Ki, Kd) для задания и поддержки температуры стола\хотенда в установленных пределах. Данные значения будут разными в зависимости от используемого железа, наличия обдува, силиконового носка и множества других факторов, поэтому калибровку необходимо производить как после первого запуска принтера, так и после изменения конфигурации хотенда\стола. Так же данную процедуру необходимо проводить при скачкообразных изменениях температуры и большом разбросе при удержании заданного значения.
В прошивку Marlin встроены инструменты для автоматической калибровки PID как для хотенда, так и для стола. Для управления нагревом стола с помощью PID необходимо предварительно активировать в прошивке параметр "PIDTEMPBED" (подробнее в разделе Прошивка -> Стол, данную процедуру необходимо провести перед калибровкой стола и прошить принтер, по умолчанию параметр выключен). Процедуру калибровки желательно проводить на максимально приближенных к печатным условиям, если у вас закрытый корпус - необходимо закрыть дверцу и надеть кожух\колпак, при калибровке хотенда стол должен находиться в непосредственной близости к соплу и обдув должен быть включен на максимум (либо значение, которое вы используете чаще всего). Внимание, во время проведения калибровки вам может показаться, что принтер завис, но это не так - тест довольно длительный и время его проведения зависит от количества установленных повторений.
Полученные значения можно внести в прошивку или сохранить в EEPROM, данная процедура описана в разделе "Прошивка". Также для калибровки хотенда можно воспользоваться готовым GCod'ом который проведет калибровку за вас и сохранит значения в EEPROM. Для этого необходимо скопировать код, описанный ниже (установив в нем свои значения номера экструдера, температуры, а также количество повторений) в текстовый файл, сохранить его с расширением ".gcode" и запустить на исполнение на вашем принтере; результаты тестирования будут автоматически сохранены. После завершения в терминал будут выведены текущие значения EEPROM для проверки, значения PID для экструдера находятся в строке с командой "M301".;HotEnd_PID_calibration.gcode
G28 ;Вернуться в начало координат
G1 Y100.0 X100.0 Z5.00 F1500 ;Переместить хотэнд на координаты X100 Y100 Z5
M106 S255 ; включить обдув модели на 100%
;
M303 E0 S240 C7 U ;E0<номер экструдера> S<температура> C<циклы> U<применить полученные значения>
M106 S0 ; выключить обдув модели
M500 ;Сохранить полученные значения в EEPROM
;
M503 ;Вывести текущие значения EEPROM для проверки
(необходимо активировать параметр PIDTEMPBED в прошивке)
Процедура калибровки PID для стола практически не отличается от калибровки хотенда. При наличии корпуса закройте дверцу и установите крышку принтера, чтобы создать закрытый объем внутри принтера. Обратите внимание, что команды для калибровки стола и хотенда совпадают, отличается лишь параметр номера экструдера, для стола это всегда будет "-1"
Полученные значения также вносятся в прошивку или сохраняются в EEPROM. Для тестирования стола также можно использовать GCode, указанный ниже, сохранив его в файл с расширением ".gcode" и запустив на принтере; он проведет тестирование и автоматически сохранит значения в EEPROM. После завершения в терминал будут выведены текущие значения EEPROM для проверки, значения PID для стола находятся в строке с командой "M304".
;Bed_PID_calibration.gcode
G28 ;Вернуться в начало координат
G1 Y100.0 X100.0 Z5.00 F1500 ;Переместить хотэнд на координаты X100 Y100 Z5
M106 S255 ; включить обдув модели на 100%
;
M303 E-1 S80 C7 U ;E-1<стол> S<температура> C<циклы> U<применить полученные значения>
M106 S0 ; выключить обдув модели
M500 ;Сохранить полученные значения в EEPROM
;
M503 ;Вывести текущие значения EEPROM для проверки
Значения, полученные после PID калибровки, записываются в разделе "PID Settings" в файле "Configuration.h" по порядку (без кавычек):
Для управления нагревом стола через PID необходимо раскомментировать параметр "PIDTEMPBED" (убрать "//"), после чего можно по порядку ввести значения Kp, Ki, Kd в разделе "PID > Bed Temperature Control" в файле "Configuration.h":
После прошивки принтера необходимо стереть EEPROM и загрузить в него значения, установленные нами в прошивке, для этого в терминале принтера нужно ввести две команды по порядку (до точки с запятой):
Терминал принтера
M502 ; Загрузить значения указанные в прошивке
M500 ; Сохранить значения в EEPROM
Не стоит забывать, что значения PID хранятся в энергонезависимой памяти контроллера и после перепрошивки вам необходимо либо восстановить в EEPROM значения, указанные нами в прошивке, либо, если вы не хотите перепрошивать свой принтер, вы можете сохранить значения напрямую в EEPROM, но не забывайте, что при использовании команды "M502" (записать значения из прошивки в EEPROM) придется повторно записать PID значения в EEPROM, так как они будут заменены теми, что указаны в прошивке. Для хранения данных значений предпочтительнее указывать их в прошивке - это убережет вас от множества проблем.
Терминал принтера:
M301 P<Kp value> I<Ki value> D<Kd value> ;Установить значения PID для хотенда
M304 P<Kp bed value> I<Ki bed value> D<Kd bed value> ;Установить значения PID для стола
M500 ; Сохранить значения в EEPROM
Хотэнд (HotEnd) - блок из нагревателя, термодатчика, сопла и корпуса, который отвечает за нагрев пластика
Стол (Bed, HeatBed) - Рабочая поверхность принтера, на которой располагается модель
EEPROM (ПЗУ) - Память контроллера для хранения настроек, которые сохраняются после отключения электроэнерги
M500 - Cохранить текущие значения в EEPROM
M502 - Загрузить значения из прошивки
M503 - Вывести текущие значения EEPROM
M106 S<speed> - Включение обдува модели (0 - выключить)
M301 P<Kp value> I<Ki value> D<Kd value> - Установить значения PID для хотенда
M303 E<номер экструдера(стол -1)> S<температура> C<циклы> U<применить полученные значения> - Автокалибровка PID
M304 P<Kp bed value> I<Ki bed value> D<Kd bed value>- Установить значения PID для стола
Надеюсь данный гайд был полезен, так же прошу прощения за упрощения\упущения и тавтологию данный текст в основном направлен на новичков в 3D печати посему упрощенно по максимуму. Если мой вариант изложения информации будет доступным и понравиться людям продолжу публиковать минигайды относительно 3D печати.
Когда-то хроники происшествий пугали нас возгораниями ламповых телевизоров, теперь эстафету переняли 3D-принтеры. У большинства из них имеется защита от неконтролируемого перегрева стола, и если температура превышает заданную, происходит отключение нагревателя. Никогда не деактивируйте эту функцию.
Но МОП-транзисторы и твердотельные реле, управляющие нагревателем, иногда «вылетают», после чего стол разогревается до максимально достижимой температуры, и отключить его программно становится невозможно. Особенно опасны нагреватели с сетевым питанием.
Предлагаемый прибор измеряет термистором температуру стола, после доработки он может дополнительно мониторить нагрев других точек, например, сопла и драйверов ШД. При перегреве он отключает сетевое питание принтера.
При всём многообразии датчиков для измерения температуры, выбор автора пал на 100-килоомный термистор типа 3950 с отрицательным температурным коэффициентом. Он используется и в самих 3D-принтерах, поэтому прибором можно испытывать такие термисторы.
- Arduino Uno или Nano (автор использовал Nano с модулем расширения)
- ЖКИ на 2 строки по 16 символов с последовательным интерфейсом и адаптером для шины I 2 C
- Энкодер KY040
- Релейный модуль для Arduino с опторазвязкой и пятивольтовым управлением (переводчик добавил бы после него контактор с мостиковыми контактами)
- Пятивольтовый звукоизлучатель со встроенным генератором
- 100-килоомный термистор типа 3950 с отрицательным температурным коэффициентом. Дополнительные такие же термисторы, если собираетесь делать прибор с многоточечным измерением
- Вводной 3-контактный разъём для стандартного компьютерного шнура питания
- Розетка с заземляющим контактом для подключения вашего 3D-принтера
- 12-вольтовый блок питания, например, от роутера.
- Проводники, метизы, паяльник, 3D-принтер для печати корпуса прибора, и т.д.
При сборке руководствуйтесь схемой и комментариями в скетче. Можно применять перемычки Дюпон или припаивать провода к штырькам на плате. Используйте провода такой длины, чтобы всё поместилось в корпус, а при снятии передней панели ничего не натягивалось. Линия Vref подключена к источнику 3,3В для повышения точности.
Вводной разъём и розетку можно разместить на корпусе, а можно сделать конструкцию несъёмной, включив её в разрыв шнура питания принтера. Будьте осторожны при работе с сетевым напряжением.
Применение нормально разомкнутых контактов обеспечивает подачу напряжения на принтер лишь при одновременном соблюдении двух условий: «сторож» запитан, а перегрева нет. После обнаружения перегрева принтер остаётся отключённым даже при пропадании и восстановлении сетевого напряжения, пока устройство не сбросят вручную.
Перед заливкой скетча необходимо добавить в Arduino IDE библиотеки LiquidCrystal_I2C и EEPROM.
После включения ЖКИ покажет текущую температуру и максимальную температуру за всё время наблюдений.
Затем ЖКИ покажет целевую температуру.
Чтобы сбросить максимальную температуру, нажмите на ручку энкодера.
Задайте целевую температуру вращением ручки, затем нажатием сохраните изменение.
При обнаружении перегрева «сторож» отключит принтер и подаст звуковой сигнал длительностью в одну минуту. Устройство не возобновит подачу питания до ручного сброса.
Для сброса и возобновления подачи питания на принтер нажмите ручку энкодера.
Максимальная и целевая температуры, а также состояние перегрева хранятся в энергонезависимой памяти во избежание самопроизвольного включения принтера при пропадании и восстановлении сетевого напряжения.
Давненько я не писал занудных статей. Но то, что я хочу высказать сегодня - коротко не сформулируешь. В общем, началось всё с того, что забросил Гугль меня на один ресурс, на одну очень замечательную статью. Ресурс я тот уже много лет не посещаю из-за несогласия с действиями администрации в мой адрес, но когда поисковик меня туда забрасывает (читаем: счётчик посещений всё равно увеличился), статьи читаю. Статья была очень и очень замечательная. Там автор победил скачки температуры, запитав дисплей своего принтера от отдельного стабилизатора +5 вольт. Сразу скажу, вторая часть моей статьи полностью подтвердит методику того автора, но рассказ я буду вести в той последовательности, в которой шли мои проверки.
Итак. У меня есть два принтера. Первый - MZ3D, в который я пару лет назад засунул плату на базе микроконтроллера ARM, самостоятельно "доточив" штатный исходный код от Arduino. Тогда у меня тоже были большие проблемы со стабильностью температуры. Я отнёс их к тому, что не совсем корректно реализовал поддержку АЦП. Будучи человеком ленивым, я тогда просто изменил алгоритм усреднения, благо в STM32F4 АЦП работает быстрее, чем в AtMega. Я просто набирал большую выборку, далее - усреднял, после чего - откидывал все результаты, которые сильно отличались от среднего значения, затем - усреднял, что осталось. Тогда это позволило принтеру не тормозить по 5-10 минут перед запуском печати, ожидая стабильных показаний термодатчика (при том, что вообще-то принтер уже прогрет).
Но второй мой принтер - китайская Дельта. И у него тоже есть проблемы. Он может начать печатать сразу, а может - долго и вдумчиво "тупить", считая, что температура не стабильна. Поэтому я решил проверить доводы автора оригинальной статьи. Мне очень не нравится ждать начала печати по 7-10 минут.
Скажем так, когда я оторвал дисплей, стабильность всё равно была такая, что принтер тупил. Тут-то я и вспомнил события пятнадцатилетней давности. Тогда наша контора делала поддержку USB для одного контроллера, при помощи внешнего моста PDIUSBD12. У ребят всё было написано верно, но ничего не работало, и мы начали разбираться в деталях. Выяснилось, что фронты сильно шумят. Сначала мы просто вносили задержки при анализе. Но потом стало ясно, что длительность шумов - штука непостоянная, а если сделать задержки гарантированно большими, то быстродействие системы станет неприемлемым. Поэтому пришлось разбираться с физикой процесса.
Времена были дикими, мы выживали как могли, но через три дня один из сотрудников сумел по очень серьёзному знакомству выпросить во временное пользование жутко дорогую и дефицитную вещь - осциллограф. Ещё аналоговый. Ладно, долой ностальгию, даёшь только суть! А суть была следующей: Все сигналы были промодулированы синусоидой. Поэтому фронты на осциллограмме выглядели примерно так:
И оцифровывалось это примерно так:
Реально частота была чуть иной, поэтому дребезг на фронтах был жуткий. А всё потому, что Заказчики дали нам две платы. На одной был контроллер, на другой - тот самый PDIUSBD12. И соединены они были метровым кабелем. Одна плата передавала на другую тактовые импульсы (несколько мегагерц). А длинный провод - это же как конденсатор. Есть обкладки (токоведущие жилы), есть - диэлектрик. Провод длинный - площадь обкладок велика. Посему переменный ток тактовой частоты создавал емкостные наводки на все остальные линии.
Выкинули провод - фронты стали идеальными. Почему я вспомнил о том проекте? А вот почему:
Перед нами - длинный кабель, в котором тоже есть импульсы - ШИМ контроллер, питающий нагреватель. В MZ3D кабель короче, но зато в нём ещё две обмотки шагового двигателя получают импульсы (правда, в них фронты не прямоугольные, да и во время прогрева головки, там нет импульсов, но всё же).
Ну что ж. Подключаемся к выходу этого кабеля осциллографом и смотрим. Пока идёт равномерный прогрев хотэнда - там всё чистенько. Но когда включается ШИМ (а PID контроллер начинает играть им за 10 градусов до требуемой температуры) - начинается веселуха
Правда, мнения разделились. Мой знакомый уверял, что такой импульс не может влиять на АЦП. Тем не менее, я решил попытаться его задавить.
Я вижу два варианта. Первый - заэкранировать провод, идущий к термистору. Так получилось, что я играл в это дело на новогодних каникулах, поэтому сходить в магазин за проводом МГТФ-Э было невозможно, так что этот вариант был отброшен. Второй типовой вариант - отделить АЦП от шумящего кабеля проходным низкоомным резистором. Здесь только важна точка его включения. Вот так выглядит схема нашего узла
Резистор R и термистор образуют делитель напряжения. В зависимости от температуры, сопротивление термистора изменяется, в результате - изменяется коэффициент деления. Ну, а значит - напряжение на линии, уходящей к АЦП. Ну, а конденсатор C фильтрует это напряжение. А молния бьёт по проводам. И конденсатор не справляется с этой фильтрацией. Причём в MZ3D у меня с момента переделки стоит керамика, это не помогает.
Если включить проходной резистор где-то левее точки подключения резистора R, то изменится коэффициент деления. Поэтому проходной резистор следует включать уже после делителя, но до конденсатора. Этот новый резистор в паре с конденсатором, образуют RC фильтр
Сопротивление резистора я выбрал 56 Ом. Ну, потому что мне в куче резисторов первыми попались низкоомные именно этого номинала. Возможно, имеет смысл задуматься насчёт 100 Ом. Но я уже подслеповат, поэтому лишний раз перепаивать резисторы 0805 для проверки не очень хочется. Так что у меня стоят на 56 Ом.
После указанной доработки, поведение принтеров стало различаться. MZ3D стал работать идеально. Все шевеления температуры ушли. А вот Дельта - хоть и стала стабильно стартовать, но всё равно температура продолжала плясать. Просто получается, она стала плясать в пределах трёх градусов, заложенных в "прошивке" на допустимую погрешность. В целом, можно было бы так и оставить, но раз уж маховик доработок раскручен, я решил попытаться довести дело до конца.
И вот тут выяснилось, что в некоторых местах платы MKS Gen v1.4, напряжение питания выглядит вот так:
Как минимум 0.3 вольта пульсаций! А если мы внимательно посмотрим на схему выше, то увидим, что питающее напряжение крайне важно. Именно относительно него АЦП проводит замеры (так уж заложено в "прошивке"). Причём повторю, в разных местах платы пульсации разные, поэтому контроллер берёт одно опорное, а делитель из резистора R и термистора - делит совсем другое. Если дисплей отключён, то напряжение становится таким:
Уже лучше. Именно этого добился автор статьи, сподвигнувшей меня на возню. Но всё-таки пульсации есть. Теперь смотрим, что частота пульсаций - примерно 230 КГц
наверняка это частота работы импульсного стабилизатора. Но давайте докажем это от противного. Поставим вот такой здоровенный электролит на плату дисплея.
Осциллограмма напряжения на основной плате не изменилась. Что и требовалось доказать. Это не помеха от внешнего дисплея. Просто ёмкость установленных на ней конденсаторов так мала, что её не хватает для удержания напряжения на более-менее постоянном уровне. Добавим этой ёмкости.
Вообще-то то, что я сделал - делать не стоит. Конденсаторы на плату следовало бы напаять. У разъёмов имеется условно высокое сопротивление, плюс - от вибрации они могут начать дребезжать. Но мне так уже надоело собирать и разбирать принтеры, что я бы не вынес ещё одного полного отключения платы, а затем - её подключения. Поэтому пока что сделал временный вариант. Напаял конденсаторы на разъёмы и подключил их к плате вот так:
Я насадил их на разъём программирования SPI (так как он расположен рядом с контроллером) и на тот же разъём, к которому подключён дисплей (потому что это - самый большой потребитель).
Осциллограмма питающего напряжения стала просто-таки замечательной. Остались какие-то ВЧ помехи, а частота импульсного преобразователя - ушла.
Нестабильность температуры стала не случайная, а периодическая. Было ясно, что просто PID регулятор не выходит на стабильный участок. Поэтому я его быстренько перекалибровал командой
M303 S220
Затем - вбил получившиеся значения. У меня это было
M301 P19.17 I1.81 D50.64
и сохранил их в EEPROM
M500
После этого, график температуры стал вот таким:
Его почти не видно за красной линией, такой он прямой.
Собственно, всё. Мои проблемы - решены. Теперь делаем выводы:
Заключение
Китайские схемотехники делают достаточно большое количество оплошностей. Часть оплошностей автор уже описывал в предыдущих статьях, часть - описана в настоящей статье.
Иногда проблема имеет сразу несколько причин. В частности, у модифицированного MZ3D причина была одна, а у Дельты - сразу две.
Пляски температуры - это никакие не пляски. Это галлюцинации, которые возникают у "прошивки" на основе неверных показаний, считываемых с АЦП. Но попытки компенсации кажущихся плясок температуры, приводят к реальным пляскам.
Одна из возможных причин галлюцинаций - емкостные наводки в длинном кабеле, вызванные двенадцати или даже двадцатичетврёхвольтовыми импульсами, подаваемыми ШИМ-контроллером в нагреватель. Для их устранения можно попытаться применять экранированный кабель к термистору (не проверено), а можно - добавить проходной резистор, заменив чисто емкостной фильтр на RC-фильтр. Важно только не изменить коэффициент деления в делителе напряжения. У автора это решило проблемы галлюцинаций на модифицированном MZ3D и уменьшило уровень галлюцинаций на Дельте, но не устранило их полностью.
Плата MKS Gen v1.4 хоть и содержит импульсный стабилизатор (который в теории даёт больший ток, чем линейный), но суммарная ёмкость установленных на ней конденсаторов такова, что при потреблении, заложенном производителем DIY-комплекта, получаются большие пульсации по питанию, приводящие к галлюцинациям скачков температуры. Таким образом, совершенно не обязательно питать дисплей от отдельного источника, можно просто добавить конденсаторов на основную плату MKS Gen v1.4.
После устранения всех помех, следует произвести повторную калибровку PID-регулятора
Читайте также: