На днях тут починил наконец грелку в принтере и чорт меня дёрнул до кучи обновить ещё и прошивку. Думаю ну пока уж занялся ремонтом то уж заодно и обновлюсь — дело-то нехитрое. Но не тут-то было — в итоге пришлось изрядно попотеть.
Итак — для начала мелочь — новый марлин категорически отказался компилироваться выдавая страшные надпись о нехватке какого-то файла 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
Комментарии