Kingroon KP3S (Pro) Marlin
Russian version | English version
Приветствую!
Совсем недавно я приобрел Kingroon KP3S Pro. И, конечно же, занялся его калибровкой и улучшением. К сожалению, на сайте присутствует достаточно старая версия прошивки и хотелось поставить самую свежую, чтобы поиграться и с Linear Advance и с Input Shaping.
У производителя на сайте присутствует запись про то, как собрать Marlin для принтера и за основу была взята именно эта статья. Там же есть ссылка на модель чтобы перевернуть экран, если это актуально.
Как я понял по обрывочным сведениям из интернета - на этих принтерах можно встретить два контроллера: STM32F103 и GD32F303. Мне, конечно же, попался вариант со вторым типом контроллера.
При сборке прошивки большой разницы нет, кроме одной критической проблемы - после перепрошивки на GD32F303 перестаёт работать печать с карты, в консоль пишет SD read error и карта начинает откровенно сбоить. И это не проблема карты.
Проблема в неправильной настройке канала DMA в прошивке для этого контроллера. С аналогичной проблемой столкнулись и здесь. Решение - отредактировать файл Marlin/src/HAL/STM32/tft/tft_fsmc.cpp, где изменить канал DMA для случая STM32F1xx, примерно здесь. Было:
__HAL_RCC_DMA2_CLK_ENABLE();
#ifdef STM32F1xx
DMAtx.Instance = DMA2_Channel1;
#elif defined(STM32F4xx)
DMAtx.Instance = DMA2_Stream0;
Стало:
#ifdef STM32F1xx
__HAL_RCC_DMA1_CLK_ENABLE();
DMAtx.Instance = DMA1_Channel1;
#elif defined(STM32F4xx)
__HAL_RCC_DMA2_CLK_ENABLE();
DMAtx.Instance = DMA2_Stream0;
После этого собираем прошивку и SD-карта корректно работает.
Также из неочевидного:
Свежие версии исходного кода не дают поставить максимальную температуру выше чем -15 градусов от максимальной для термодатчика. Т.е. поставить максимальную температуру в 315 градусов (при 320 для термодатчика) просто не получится, максимум - 305 градусов.
После выбора драйверов TMC2208_STANDALONE (что значит, что ток на них не выставляется программно) вместо A4988 - вроде как стало потише, но, возможно, это дело и в других настройках.
#define X_DRIVER_TYPE TMC2208_STANDALONE
#define Y_DRIVER_TYPE TMC2208_STANDALONE
#define Z_DRIVER_TYPE TMC2208_STANDALONE
#define E0_DRIVER_TYPE TMC2208_STANDALONE
В моём случае понадобилось развернуть мотор по оси Y относительно исходного конфига, иначе он ехал не в ту сторону.
#define INVERT_X_DIR true
#define INVERT_Y_DIR false
#define INVERT_Z_DIR true
#define INVERT_E0_DIR true
English version
Hello!
I'd bought a Kingroon KP3S Pro 3D Printer for my home. And, of course, I'd started to do a calibrations and improvement. But some of them requires to have a fresh Marlin version, like an Input Shaping. Also I'm not sure Linear Advance enabled in a stock firmware. Same time, stock firmware is pretty old (two years from now).
Actually, most of things are described here. But it wasn't enough in my case.
These printers may have two different MCU: STM32F103 and GD32F303. They are mostly identical and requires same steps for a firmware preparation, except one: on my GD32F303 I got a broken SD-card printing. When I tried to print something (file listing was OK at the first time) - it fails. Also it was printing "SD read error" when I was connected by a USB cable.
While digging in a sources I got thoughts about wrong work wigh DMA on this controller. Same time I'd found someone else also faced with a same issue and provided similar fix.
Solution is an editing file Marlin/src/HAL/STM32/tft/tft_fsmc.cpp and change DMA channel in case of STM32F1xx (link on gh).
__HAL_RCC_DMA2_CLK_ENABLE();
#ifdef STM32F1xx
DMAtx.Instance = DMA2_Channel1;
#elif defined(STM32F4xx)
DMAtx.Instance = DMA2_Stream0;
Change to:
#ifdef STM32F1xx
__HAL_RCC_DMA1_CLK_ENABLE();
DMAtx.Instance = DMA1_Channel1;
#elif defined(STM32F4xx)
__HAL_RCC_DMA2_CLK_ENABLE();
DMAtx.Instance = DMA2_Stream0;
After that an SD-card became working as expected. So, it wasn't an SD-card issue, as mentioned in a many sources. It was a real issue in the firmware
Also I changed a drivers from A4988 to TCM2208_STANDALONE. And for me printer's motors became more smooth and silent. But maybe it is an effect from another source.
#define X_DRIVER_TYPE TMC2208_STANDALONE
#define Y_DRIVER_TYPE TMC2208_STANDALONE
#define Z_DRIVER_TYPE TMC2208_STANDALONE
#define E0_DRIVER_TYPE TMC2208_STANDALONE
Another, slightly unexpected thing, is a wrong Y-motor direction on my printer. So, I'd aligned directions like this:
#define INVERT_X_DIR true
#define INVERT_Y_DIR false
#define INVERT_Z_DIR true
#define INVERT_E0_DIR true