Металл2024 Реклама
Метобр2024 Реклама

Датчик контроля филамента для Tevo Tarantula Pro на основе оптической мыши. Продолжение

I.Petrov
Идет загрузка
Загрузка
20.04.2020
3206
8
Техничка

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.

Отписаться от уведомлений вы всегда сможете в профиле автора.

1
Статья относится к принтерам:
TEVO Tarantula
  •         Начало статьи см. здесь

            Замечание: по результатам "опытной эксплуатации" слегка доработана конструкция датчика, модели двух поправленных деталей выложены по адресу: https://3dtoday.ru/3d-models/detali-dlya-3d-printerov/raznoe/datchik-kontrolya-filamenta-dlya-tevo-tarantula-pro-na-osnove-opticheskoy-myshi-v2

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

    Во второй части постараюсь более подробно описать следующие моменты:

        - схема контроллера датчика

                    - использованное железо

                    - подключение мыши в качестве датчика

                    - подключение принтера

                                - назначение пина для приема сигнала тревоги

                                - назначение пинов для получения копий сигналов шаговика экструдера

                                - изменения в прошивке принтера

                    - кнопки управления и дисплей

                    - что в итоге получилось

        - прошивка для контроллера датчика, работа с устройством

        - описание работы с устройством

             Итак, начнем.

             Можно читать первый раз "по заголовкам"

     

    1. Схема контроллера датчика

     1.1. Использованное железо

            У меня была свободная Ардуина Про Мини 5В 16МГц на ATmega328 и рассказываю я про этот вариант.

            Аналогично (из имеющегося) были выбраны дисплей и мышь.

            Хотя полагаю, что для данного проекта с минимальными изменениями подойдет любая Ардуина, причем проще будет использовать Уну или Нану - у них в отличие от Про Мини есть встроенный стабилизатор на 3.3 В. Или вообще использовать Про Мини на 3.3 В - проще будет подключать дисплей, а питание +5 В можно будет подать на вывод RAW.

     1.2. Подключение мыши в качестве датчика  

            Для датчика я применил мышь с интерфейсом PS/2 на ИС PAW3101DB. При подключении через PS/2 тип ИС датчика на схему подключения не влияет, в программе изменения минимальны - следует лишь правильно указать используемое по умолчанию разрешение. Соображения по выбору датчика были приведены в первой части.

               Схему подключения взял "стандартную" для многих "мышиных" библиотек:

    PS/2Arduino
    DATA_PIN5
    CLOCK_PIN6

     Распиновку разъема PS/2 и основы работы с мышью можно посмотреть здесь .

     Питание для мыши берется от материнки принтера - об этом чуть позже.

     

    1.3. Подключение принтера

        Хорошая инструкция по методике выбора и назначения контактов приведена в работах:

              - https://www.thingiverse.com/thing:3071723 и

              - https://www.thingiverse.com/thing:3926841

         Здесь же я приведу лишь результаты.

     1.3.1. Назначение пина для приема сигнала "тревоги"

             В случае возникновения ситуации "тревоги" я решил формировать низкий уровень сигнала на контакте 7 Ардуины.

             Если по тревоге хотим переводить принтер в режим паузы, а не просто включать ревун - необходимо определить соответствующий контакт на материнской плате принтера.

             В конфигурации Марлина нужный контакт имеет имя  FIL_RUNOUT_PIN  и для Tevo Tarantula определен в файле pins_RAMPS.h как пин 4.  И он же определен как SERVO3_PIN  - по этому обозначению мы сравнительно легко находим его на мат. плате принтера (см. фото ниже), и поэтому менять его смысла нет.

     1.3.2. Получение копий сигналов шаговика экструдера

               От принтера нам нужно получить сигналы, повторяющие сигналы ШАГ(STEP) и НАПРАВЛЕНИЕ(DIRECTION) шаговика подачи экструдера - таких контактов, конечно, нет, поэтому определяем их сами. В файле pins_RAMPS.h после строк 63 и 64:

    #define SERVO1_PIN          6    

    #define SERVO2_PIN         5

    пишем:

    // Added 20200407 - (I.Petrov) ++++++++

    #define E0_DIR_COPY_PIN SERVO1_PIN  // копия E0_DIR_PIN для датчика движения филамента

    #define E0_STEP_COPY_PIN SERVO2_PIN // копия E0_STEP_PIN для датчика движения филамента

    // --------------------------

    Расположение этих пинов на плате: Датчик контроля филамента для Tevo Tarantula Pro на основе оптической мыши. ПродолжениеДатчик контроля филамента для Tevo Tarantula Pro на основе оптической мыши. Продолжение

     1.3.3. Изменения в прошивке принтера

             Кроме описанных выше назначений пинов (правка файла pins_RAMPS.h) необходимо сделать так, чтобы копии сигналов ШАГ(STEP) и НАПРАВЛЕНИЕ(DIRECTION) действительно появлялись на этих пинах.    Для этого идем в файл stepper_indirection.h и вносим следующие правки:   - строки 306, 307 комментарим, а ниже пишем свой вариант макросов для сигнала направления:

    //  20200407 - ++++++(I.Petrov) +++++++

    //  #define E0_DIR_INIT SET_OUTPUT(E0_DIR_PIN)

    //  #define E0_DIR_WRITE(STATE) WRITE(E0_DIR_PIN,STATE)  

    #define E0_DIR_INIT { SET_OUTPUT(E0_DIR_PIN); SET_OUTPUT(E0_DIR_COPY_PIN); }  

    #define E0_DIR_WRITE(STATE) { WRITE(E0_DIR_PIN,STATE); WRITE(E0_DIR_COPY_PIN,STATE); }

    // ----- 20200407 - (I.Petrov)---

     аналогично поступаем с макросами сигнала шага (парой строк ниже):

    //  20200407 - ++++(I.Petrov)+++++++

    //#define E0_STEP_INIT SET_OUTPUT(E0_STEP_PIN)

    //#define E0_STEP_WRITE(STATE) WRITE(E0_STEP_PIN,STATE)

    #define E0_STEP_INIT { SET_OUTPUT(E0_STEP_PIN); SET_OUTPUT(E0_STEP_COPY_PIN); }

    #define E0_STEP_WRITE(STATE) { WRITE(E0_STEP_PIN,STATE); WRITE(E0_STEP_COPY_PIN,STATE); }

    // --- 20200407 ---(I.Petrov)-----

             Если по тревоге хотим переводить принтер в режим паузы и отводить сопло от печатаемой детали - необходимо включение опций "FILAMENT_RUNOUT_SENSOR", "ADVANCED_PAUSE_FEATURE" и "NOZZLE_PARK_FEATURE". 

             Для этого раскомментируем соответствующие строки в файле Configuration.h:  

    // 20200407 - (I.Petrov) - uncomment

    #define FILAMENT_RUNOUT_SENSOR

    ,

        // 20200407 - (I.Petrov) - uncomment     #define NOZZLE_PARK_FEATURE

      и в Configuration_adv.h раскомментируем строку 981 и вносим правки по вкусу в нижеследующий блок, который у меня стал выглядеть так:

    // 20200407 - ----(I.Petrov) --- раскомментил

    #define ADVANCED_PAUSE_FEATURE

    #if ENABLED(ADVANCED_PAUSE_FEATURE)

      #define PAUSE_PARK_RETRACT_FEEDRATE         60  // (mm/s) Initial retract feedrate.

      #define PAUSE_PARK_RETRACT_LENGTH            2  // (mm) Initial retract.

                                                      // This short retract is done immediately, before parking the nozzle.

      #define FILAMENT_CHANGE_UNLOAD_FEEDRATE     10  // (mm/s) Unload filament feedrate. This can be pretty fast.

      #define FILAMENT_CHANGE_UNLOAD_ACCEL        25  // (mm/s^2) Lower acceleration may allow a faster feedrate.

    //  #define FILAMENT_CHANGE_UNLOAD_LENGTH      100  // (mm) The length of filament for a complete unload.

      #define FILAMENT_CHANGE_UNLOAD_LENGTH      0  // (mm) The length of filament for a complete unload.

                                                      //   For Bowden, the full length of the tube and nozzle.

                                                      //   For direct drive, the full length of the nozzle.

                                                      //   Set to 0 for manual unloading.

      #define FILAMENT_CHANGE_SLOW_LOAD_FEEDRATE   6  // (mm/s) Slow move when starting load.

      #define FILAMENT_CHANGE_SLOW_LOAD_LENGTH     0  // (mm) Slow length, to allow time to insert material.

                                                      // 0 to disable start loading and skip to fast load only

      #define FILAMENT_CHANGE_FAST_LOAD_FEEDRATE   6  // (mm/s) Load filament feedrate. This can be pretty fast.

      #define FILAMENT_CHANGE_FAST_LOAD_ACCEL     25  // (mm/s^2) Lower acceleration may allow a faster feedrate.

      #define FILAMENT_CHANGE_FAST_LOAD_LENGTH     0  // (mm) Load length of filament, from extruder gear to nozzle.

                                                      //   For Bowden, the full length of the tube and nozzle.

                                                      //   For direct drive, the full length of the nozzle.

      //#define ADVANCED_PAUSE_CONTINUOUS_PURGE       // Purge continuously up to the purge length until interrupted.

      #define ADVANCED_PAUSE_PURGE_FEEDRATE        3  // (mm/s) Extrude feedrate (after loading). Should be slower

    than load feedrate.

    //  #define ADVANCED_PAUSE_PURGE_LENGTH         50  // (mm) Length to extrude after loading.

      #define ADVANCED_PAUSE_PURGE_LENGTH         0  // (mm) Length to extrude after loading. //  20200407 

                                                      //   Set to 0 for manual extrusion.

                                                      //   Filament can be extruded repeatedly from the Filament Change menu

                                                      //   until extrusion is consistent, and to purge old filament.

                                                      // Filament Unload does a Retract, Delay, and Purge first:

      #define FILAMENT_UNLOAD_RETRACT_LENGTH      13  // (mm) Unload initial retract length.

      #define FILAMENT_UNLOAD_DELAY             5000  // (ms) Delay for the filament to cool after retract.

      #define FILAMENT_UNLOAD_PURGE_LENGTH         8  // (mm) An unretract is done, then this length is purged.

    //  #define PAUSE_PARK_NOZZLE_TIMEOUT           45  // (seconds) Time limit before the nozzle is turned off for safety.

      #define PAUSE_PARK_NOZZLE_TIMEOUT           240  // (seconds) Time limit before the nozzle is turned off for safety.

    //  20200407 

      #define FILAMENT_CHANGE_ALERT_BEEPS         10  // Number of alert beeps to play when a response is needed.

      #define PAUSE_PARK_NO_STEPPER_TIMEOUT           // Enable for XYZ steppers to stay powered on during filament change.

      //  20200407 - ---(I.Petrov) раскомментил

      #define PARK_HEAD_ON_PAUSE                    // Park the nozzle during pause and filament change (включение координат парковки сопла)

      //#define HOME_BEFORE_FILAMENT_CHANGE           // Ensure homing has been completed prior to parking for filament change

      //#define FILAMENT_LOAD_UNLOAD_GCODES           // Add M701/M702 Load/Unload G-codes, plus Load/Unload in the LCD Prepare menu.

      //#define FILAMENT_UNLOAD_ALL_EXTRUDERS         // Allow M702 to unload all extruders above a minimum target temp (as set by M302)

    #endif

                Кроме вышеописанного я, пользуясь случаем, подключил пункт меню "Bad Start"  по рекомендациям StasBronchukov,  за что ему отдельное спасибо.

     1.4. Кнопки управления и дисплей                

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

             Дисплей 5110 имеет следующие контакты:

    1ResetСброс. подключаем параллельно выводу Reset Ардуины
    2CE(CS)выбор чипа (низким уровнем)
    3D/Cданные/команды
    4DINпоследовательные данные
    5CLKсинхронизация
    6VCCнапряжение питания !!! 3,3 В !!!
    7BLпитание светодиодов подсветки
    8Gnd"земля"

     

        Дизайн программы у меня основан на примера Stopwatch из библиотеки S. Reifel & Co.  ArduinoUserInterface   - схема подключения дисплея и кнопок управления заимствована из материалов библиотеки и слегка переработана под Про Мини.

     1.5. Что в итоге получилось

            Итоговая схема:Датчик контроля филамента для Tevo Tarantula Pro на основе оптической мыши. Продолжение

     2. Прошивка для контроллера датчика

             Комментарии по тексту программ.

             Создаем каталог FilamentControl, в него кладем файлы  FilamentControl.inolight.h  и  ps2mouse.h    из архива, который я загрузил как модель по адресу https://3dtoday.ru/3d-models/detali-dlya-3d-printerov/raznoe/datchik-kontrolya-filamenta-dlya-tevo-tarantula-pro-na-osnove-opticheskoy-myshi-proshivka

     3.     Описание процесса работы с устройством        

            Устройство может работать и без проведения калибровки - при этом программа берет "теоретическое" значение отсчетов на мм, вычисляемое как значение разрешения мыши (800cpi)/25.4 == 31.496.

            Поскольку реально снимаемые с датчика показания зависят от места установки сенсора - рекомендуется калибровка.

            На видео показан процесс калибровки без реальной подачи филамента (отсоединяется трубка боудена), но, возможно, правильнее делать при реальном выдавливании филамента через сопло. Можно даже запускать процесс калибровки во время реальной печати.

    Общий порядок действий таков:

        0.    Подключаем устройство к материнке принтера, включаем принтер.

        1.    Включаем нагрев сопла (либо реальную печать) - без нагретого сопла двигатель экструдера не включится.

        2.    Нажимает кнопку "Start" (SW1-SELECT) на устройстве - теперь оно будет следить за импульсами шагового двигателя и показаниями датчика мыши по оси X и сравнивать полученные значения перемещения филамента. После достижения установленного максимального значения счетчики сбрасываются в ноль и процесс начинается снова. Если срабатывает защита - формируется сигнал тревоги, начинает мигать подсветка экрана. Из режима тревоги можно выйти повторным нажатием SW1.

        3.    Если в основном окне нажать на кнопку "Back" (SW2) - попадаем в меню, из которого можно остановить контроль либо выбрать режим калибровки.

        4.    Выход из меню осуществляется нажатием кнопки SW2.

    Порядок калибровки:

         1.    Запускаем движение филамента через экструдер (как вариант - запускаем печать)

         2.    После прохождения 10-30 мм, можно нажать SW1 - тогда показываемое на экране значение запишется в EEPROM, либо SW2 - для отказа от калибровки. В любом случае попадаем обратно в меню.

          Заключение

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

            При этом следует иметь в виду, что протекающие процессы заметно сложнее, чем могло показаться вначале. Так, например, при первоначальных опытах с датчиком на больших (порядка 80-100см) перемещениях "с приводом от руки" выяснилось, что повторяемость результатов измерений отсутствует, т.е. результаты измерений имеют разброс почти до 10% - полагаю, что причина этого кроется в принципе работы оптических датчиков, т.е. попытках методами математической статистики измерять перемещения на матрице размером 15х15 или 18х18. 

             Поэтому я:

         - отказался от работы датчика в режиме "счетчика"

         - считаю, что уровень ошибки для срабатывания датчика нельзя устанавливать меньше, чем 15-20%

         - не стал устранять ошибку измерения по прерываниям от шаговика, связанную со сравнительно долгим временем обработки прерывания таймера (обмен по PS/2 с частотой 20Гц блокирует порядка 10% прерываний шаговика)

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

     

           В заключение выражаю благодарность авторам и участникам обсуждений следующих использованных мной в данной работе публикаций:

      - https://www.thingiverse.com/thing:3071723

      - https://www.thingiverse.com/thing:3926841

      - https://3dtoday.ru/blogs/dagov/counter-filament-from-an-old-mouse

      - https://3dtoday.ru/blogs/kick-2/sensor-the-stopend-of-the-filament-from-the-mouse/

      - https://sites.google.com/site/tunelldev/home/filamentmonitor#TOC-3D-Printer-Filament-Monitor

      - https://3dtoday.ru/blogs/evgen2/test-sensor-filament-

      - https://3dtoday.ru/blogs/levscha/kontroller-podachi-filamenta-na-osnove-gmr-datchika-ugla

      - https://habr.com/ru/post/128972/

      - https://3dtoday.ru/questions/i-snova-pro-datchik-okonchaniya-filamenta

      - http://3dtoday.ru/questions/alarm-stop-feeding-filament/

      - https://3dtoday.ru/blogs/elementus/sobiraem-datchik-dvizheniya-plastika-dlya-3d-printera-iz-ekstrudera/

     

    Подпишитесь на автора

    Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.

    Отписаться от уведомлений вы всегда сможете в профиле автора.

    1
    Комментарии к статье
    Кремень КБ Реклама
    Кремень КМ Реклама