Работа 3D принтера без компьютера

    Здравствуйте, уважаемые хабравчане!
    Вот и закончился мой переезд, кандидатский минимум сдан, первая катушка пластика закончилась и пришло время написать обещанную статью об электронной начинке моего принтера.
    В этой статье речь пойдет об автоматизации моего 3D принтера PRUSA I3, а именно о подключении экрана, кнопок (вместо энкодера) и картридера ну и системы питания для всей дополнительной электроники.
    За подробностями прошу под кат.

    Хотелось бы сразу оговориться, что элементы на данные платы я брал из своих запасов. То, что было под рукой.

    Начнем, пожалуй, с питания.

    Тут все просто. Стабилизатор на 5 вольт (я взял L7805CV с выходным током до 1,5А) для питания ардуины и дисплея. Обвязка — два конденсатора. Стабилизатор подключается к 12 вольтам. От него через резистор подключаем светодиод для индикации работы. Стабилизатор напряжения на 3.3 вольта (LD1117A33 с выходным током до 1А) для питания SD карты подключается к 5 вольтам. Обвязка так же — два конденсатора (ну и по аналогии светодиод через резистор).
    Конкретные значения для конденсаторов выбираются по спецификации стабилизаторов, значения резисторов по току потребления диодов и напряжения питания (ну или опытным путем).

    На RAMPS’е есть место для пайки диода D1. При его подключении на пин Vin ардуины подается 12 вольт и идет в стабилизатор на ардуине. Поначалу я его припаял, и все вместе даже работало, но через несколько минут принтер просто выключился и без подключения USB кабеля его было не включить (наверное, стабилизатор перегрелся или сгорел). Поэтому было решено выпаять диод и подключить внешний стабилизатор.

    Картридер

    Для питания карты памяти нужно 3.3 вольта, логические уровни карты тоже 3.3 вольта. В готовых модулях под названием SDRamps используется стабилизатор (его мы уже собрали) и микросхема преобразователя уровней (5->3.3). Так как такой микросхемы у меня не было, поэтому было решено использовать обычный резистивный делитель.
    Карта подключается в режиме SPI. Используются: 3 линии SCK, CS, MOSI от ардуины к карте через делители; линия MISO напрямую с карты к ардуине; так же подключается питание 3.3 вольта; земля; и еще я подключил детектор наличия карты. Картхолдер был выпаян со старого смартфона, но можно использовать переходник SD-microSD (но у него отсутствует детектор наличия карты).

    Экран

    Подойдет любой символьный дисплей, начиная от 2 строк на 16 символов. Чем больше строк, тем больше данных на нем можно отобразить. Так же можно подключить графический дисплей SPI LCD 128x64 (Controller ST7565R graphic Display Family). Подключаем по схеме описанной тут. 4 линии данных, RS, Enable, 5 вольт, земля и подстроечный резистор на 10кОм для регулирования контраста.

    Кнопки

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

    Мосфет на нагреваемый столик

    Как я уже упоминал в прошлой статье, этот самый мосфет сильно греется из-за неправильной работы. Я заменил его на APM2509N, взятый с видеокарты. Так же были нарощены дорожки питания столика. Скальпелем аккуратно срезано лаковое покрытие и пропаяно толстым слоем припоя. Предыдущий мосфет грелся так, что через 30-50 минут об него можно было обжечь палец. А новый максимально нагревался до 38 градусов за 6 часовую печать. И да, мосфет стоит без радиатора.
    Столик теперь нагревается до 100°С за 15-17 минут (раньше минут за 30). Да и светодиод на столике стал светить как-то ярче (а может это только кажется).

    Подключаем

    Выход со стабилизатора 5 вольт подключаем к любому пину 5V на RAMPS'е.
    Картриадер подключается к разъему AUX-3 (слева пины RAMPS, справа — SD):
    пин D50(MISO) — DO(MISO);
    пин D51(MOSI) — делитель — DI(MOSI);
    пин D52(SCK) — делитель — SCK;
    пин D53 — делитель — CS;
    3.3 вольта (со стабилизатора) — VCC;
    GND — GND(VSS);
    и при наличии SD Detect подключаем к нему пин D43 разъема AUX-4.

    Кнопки и дисплей подключаются к разъему AUX-4.
    Дисплей (слева пины RAMPS, справа — дисплея (шина данных начинается с D0)):
    пин D16 — RS;
    пин D17 — Enable (E);
    пин D23 — Data 4 (D4);
    пин D25 — Data 5 (D5);
    пин D27 — Data 6 (D6);
    пин D29 — Data 7 (D7);
    5 вольт — VDD;
    GND — VSS;
    Подстроечный резистор подключаем к 5 вольтам и земле, а выход к пину VO(контрастность);
    Пин RS дисплея подключаем к земле;
    При наличии подсветки, подключаем 5 вольт через резистор 1.8кОм и землю.

    Кнопки подключаются к земле и:
    пин D31 — Up;
    пин D33 — Down;
    пин D35 — Click;
    По умолчанию в прошивке настроены именно эти пины. Для подключения к другим, необходимо подправить файл pins.h в прошивке.

    Для запуска поддержки SD карт, символьного дисплея и кнопок в прошивке в файле configuration.h раскомментируем строку:
    #define REPRAP_DISCOUNT_SMART_CONTROLLER

    При этом автоматически определяются ULTIPANEL, NEWPANEL, SDSUPPORT и ULTRA_LCD, отвечающие за работу дисплея, кнопок и картриадера.
    Имя принтера, отображаемое на экране, задается строкой:
    #define CUSTOM_MENDEL_NAME "This Mendel"

    Количество символов и строк дисплея задается параметрами LCD_WIDTH и LCD_HEIGHT соответственно:
    задаем размер дисплея
    #ifdef ULTIPANEL
    //  #define NEWPANEL  //enable this if you have a click-encoder panel
      #define SDSUPPORT
      #define ULTRA_LCD
      #ifdef DOGLCD // Change number of lines to match the DOG graphic display
        #define LCD_WIDTH 20
        #define LCD_HEIGHT 5
      #else
        #define LCD_WIDTH 20   // менять эти
        #define LCD_HEIGHT 4   // два параметра
      #endif
    #else //no panel but just LCD
      #ifdef ULTRA_LCD
      #ifdef DOGLCD // Change number of lines to match the 128x64 graphics display
        #define LCD_WIDTH 20
        #define LCD_HEIGHT 5
      #else
        #define LCD_WIDTH 16
        #define LCD_HEIGHT 2
      #endif
      #endif
    #endif
    

    Для поддержки кнопок вместо энкодера в файле ultralcd.cpp
    находим строки
        //manage encoder rotation
        uint8_t enc=0;
        if(buttons&EN_A)
            enc|=(1<<0);
        if(buttons&EN_B)
            enc|=(1<<1);
        if(enc != lastEncoderBits)
        {
            switch(enc)
            {
            case encrot0:
                if(lastEncoderBits==encrot3)
                    encoderDiff++;
                else if(lastEncoderBits==encrot1)
                    encoderDiff--;
                break;
            case encrot1:
                if(lastEncoderBits==encrot0)
                    encoderDiff++;
                else if(lastEncoderBits==encrot2)
                    encoderDiff--;
                break;
            case encrot2:
                if(lastEncoderBits==encrot1)
                    encoderDiff++;
                else if(lastEncoderBits==encrot3)
                    encoderDiff--;
                break;
            case encrot3:
                if(lastEncoderBits==encrot2)
                    encoderDiff++;
                else if(lastEncoderBits==encrot0)
                    encoderDiff--;
                break;
            }
        }
        lastEncoderBits = enc;
    

    меняем на
    //manage encoder rotation
        uint8_t enc=0;
        if(buttons&EN_A) {
    		 encoderDiff = 1;
    		 delay(10);
        }
        if(buttons&EN_B){
    		 encoderDiff = -1;
    		 delay(10);
        }
    

    При правильной сборке, после заливки прошивки, можно убрать USB кабель в ящик стола и печатать с SD карты.

    На этом пока все. Как обычно с нетерпением жду вопросов и комментариев.

    P.S. В ближайшем будущем планирую поставить автокалибровку стола с сервомотором. И собрать каркас второго принтера.

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 7

      +5
      Вы этим паяли?
      image
        +1
        По фотографии похоже что этим.
        Просто по этим дорожкам идет ток 11А. На форуме вычитал, что после замены мосфета начинает перегреваться предохранитель и там советовали нарастить дорожки, что собственно я и сделал. Зато теперь ничего не перегревается, да и сторона пайки не лицевая.
          +2
          В таком случае лучше сделать медную шину в форме дорожки ПП и напаять её поверх дорожки. Либо вспомнить древнее правило — канифоли много не бывает и, аккуратно сняв защитную маску с части дорожки, пропаять дорожку с избытком канифоли/лти-120/rma или своего любимого флюса — получится красивый наплав олова, а видок, что плату спаяли паяльником для лужения вёдер.
          П.С. Если перегревается предохранитель, то это не дорожки фиговые, а предохранитель фиговый, либо теплоотвода от него нет.
        +1
        Тут еще к статье стоит добавить, что те, кто используют компьютерные блоки питания могут обойтись и без пайки. К сожалению по моему опыту общения с сообществом RepRap очень мало людей знают про 5VSb контакт ATX блока:

        Скрытый текст


        На нем есть 5 вольт независимо от того включен блок или нет, его нужно использовать для питания логики.
          0
          Отличное дополнение. Спасибо! Сам использую БП 12 вольт 20 ампер, поэтому про компьютерные БП совсем забыл.
            0
            Ну и если электроника ramps, то питание ардуйны осуществляется от 12 вольт, надо только впаять дополнительный диод
              +1
              Вы невнимательно читали, этот диод у автора был, вот только регулятор на Arduino долго не прожил. Я бы вообще не стал использовать ардуиновский регулятор для чего-то, так как он там совсем без теплоотвода, а RAMPS сверху еще и накрывает, не давая воздуху там циркулировать.

          Only users with full accounts can post comments. Log in, please.