© 2023 DiyTronic

Обновил Marlin до 1.1.8. Снова грабли.

На днях тут починил наконец грелку в принтере и чорт меня дёрнул до кучи обновить ещё и прошивку. Думаю ну пока уж занялся ремонтом то уж заодно и обновлюсь — дело-то нехитрое. Но не тут-то было — в итоге пришлось изрядно попотеть.

Итак — для начала мелочь — новый марлин категорически отказался компилироваться выдавая страшные надпись о нехватке какого-то файла LiquidCrystal.h Исправил этот косячок простой установкой в Arduino IDE одноимённой библиотеки стандартными средствами самой IDE. После этого проект успешно собрался и я не чуя подвоха смело залил прошивку в принтер.

Однако, наученный горьким опытом первым делом решил проверить работу осей Z. После того как принтер как-то раз чуть не выломал их после неудачной прошивки я в этом вопросе очень щепетилен. Дело в том, что у принтеров типа Prusa имеется 2-е независимых оси Z, которые работают от независимых двигателей, что требует дополнительных усилий по их синхронизации. В прошивке за это дело отвечает переменная:

#define Z_DUAL_STEPPER_DRIVERS

В общем вот этот define должен быть раскомментирован. Это важно! Иначе один двигатель работать не будет и если вы будете недостаточно проворными, чтобы вовремя остановить это безобразие то есть риск повредить конструкцию принтера.

Итак после обновления прошивки и включения принтера первым делом пробую вручную легонько подвигать осями Z из меню принтера. Но в этот раз с к своему удивлению обнаружил, что опять вращается только один двигатель. После многократных проверок и перепроверок я обнаружил, что крутятся оба двигателя, но почему-то с разной скоростью.

В итоге обнаружил аналогичную проблему у других пользователей Marlin-а. Вот обсуждение проблемы несинхронного вращения двигателей оси Z. По счастью решение нашлось. В общем многие, как впрочем и я, обновляли марлин пользуясь в качестве образца патченным китайцами марлином, заточенным под конкретный принтер. И в итоге многие настройки перекочевали «как есть». Как говорится в старой сисадминской поговорке — «работает — не тронь» — вот оно и работало до поры до времени.

У китайцев почему-то (я сам удивлялся) значение переменной POWER_SUPPLY было выставлено в единицу, что в общем-то означает, что у нас ATX блок питания, что в свою очередь означает, что один из пинов предназначен для включения этого блока.

/**
 * Select your power supply here. Use 0 if you haven't connected the PS_ON_PIN
 *
 * 0 = No Power Switch
 * 1 = ATX
 * 2 = X-Box 360 203Watts (the blue wire connected to PS_ON and the red wire to VCC)
 *
 * :{ 0:'No power switch', 1:'ATX', 2:'X-Box 360' }
 */
#define POWER_SUPPLY 0

В итоге в новой версии у марлина с этим вышел конфликт и на включения блока питания переназначился один из пинов, ответственный за управления двигателем. В общем эту переменную нужно выключить, установив нулевое значение, что впрочем вполне логично.

Ну и вторым моментом является смена типа материнской платы с BOARD_MKS_13 на BOARD_MKS_BASE, т. к. там тоже какие-то коллизии с пинами.

// The following define selects which electronics board you have.
// Please choose the name from boards.h that matches your setup
#ifndef MOTHERBOARD
  #define MOTHERBOARD BOARD_MKS_BASE
#endif

Я проверил — нужно исправлять именно обе переменные — по одной не срабатывает.

Итог

Обновил код на github — https://github.com/webhive/sunhokey-prusa-i4. Теперь там корректные файлы для версии 1.1.8

Комментарии