Дамы и господа, здравствуйте.

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

Разработка ещё не завершена и будет описано то, что сделано на данный момент.

Кому интересно, добро пожаловать под кат.

Почему своя разработка, а не готовое изделие.
У меня есть два станка по металлу (китайские): фрезерный и токарный.

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

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

  • почему бы не купить готовое изделие?
  • в сети есть много проектов DRO, разного уровня сложности, с подробными описаниями изготовления своими руками. Так почему бы не собрать одно из них?

Отвечаю сам себе.

Да, на рынке представлено множество изделий, как отечественных, так и зарубежных, с разными ценами и с разной функциональностью. Тот же Али предлагает готовые DRO с тремя оптическими линейками по цене порядка 13000 руб. – очень низкая цена для такого устройства. Но мне интересен сам процесс изготовления, поэтому вариант «купил и поставил», отпал.

Отвечая на второй вопрос, я поставил себя на место человека, который сам будет собирать устройство по какому-либо описанию, и что он должен сделать. А именно:

  • приобрести нужные компоненты: процессор, индикацию, кнопки и мелочевку типа резисторов, конденсаторов, стабилизаторов и т.д. (без этого конечно никуда);
  • в зависимости от сложности проекта, изготовить/приобрести печатную плату;
  • затем всё спаять и прошить процессор;
  • после, сделать работу над ошибками;

И только после этих шагов, получится законченное изделие. Каждый шаг занимает какое-то время, а так как человек существо ленивое и нетерпеливое (в хорошем смысле этих слов), то ему хочется как можно быстрее увидеть результат работы устройства, пусть даже промежуточный. И я все же решил разработать своё устройство таким образом, чтобы человек даже в самом начале процесса сборки, видел промежуточные результаты его работы.

Теперь нужно было выбрать плату для реализации.

Выбирал между Arduino на базе Atmega и STM.

Я программист верхнего уровня, но по работе приходилось программировать микроконтроллеры семейства Atmega и MSP-430, с STM я не был знаком. Поэтому выбрал Atmega. Выбрал самую дешевую плату (или нет? просто они у меня были) Arduino Nano на базе микроконтроллера Atmega328.

Характеристики shDRO:

(зачеркнута функциональность, которая ещё не реализована)

  • плата Arduino Nano, процессор Atmega328;
  • 12 независимых каналов/портов Arduino, к которым подключаются устройства считывания;
  • каждый канал имеет свойства: Type (CLKin, DATAin, Ain, Bin и т.д.), EI (Enable Interrupt), IL (Interrupt Level), Inv (инвентированный сигнал);
  • максимальное количество подключаемых устройств: 6;
  • каждому устройству можно назначить один или более каналов из 12ти доступных;
  • поддержка протоколов: 24BIT, 21BIT, BCD7, BIN6, квадратурный сигнал, периодический сигнал с тахометра (есть возможность добавления новых протоколов);
  • консоль: позволяет при помощи терминальной программы конфигурировать и тестировать shDRO в процессе сборки и эксплуатации;
  • в режиме консоли, реализован «псевдо» логический анализатор, который позволяет считывать уровни заданных в консоли каналов и определить протокол обмена. Максимальное количество выборок 256, минимальное замеряемое время между выборками 8мкс. Хотя бы один анализируемый канал должен быть настроен на прерывание;

Модульная схема:



Устройство состоит из следующих модулей:

  • три стабилизатора напряжения 5в., 3в., 1.5.в. Стабилизаторы на 3в. и 1.5.в. регулируемые. Данные уровни напряжения используются в цифровых штангенциркулях (1.5в.) и в линейках iGAGING (3в.);
  • 4 восьмиразрядных семисегментных индикатора на основе MAX7219, подключенных каскадно к аппаратному SPI;
  • клавиатура. Клавиатура состоит из двух резистивных матриц: 2х4 и 4х4 в этом случае разводка дорожек на плате проще (но можно сделать две матрицы 3х4, кому как удобнее). Каждая матрица подключена к каналу ADC;

    Использование резистивных матриц для меня большой минус, т.к. со временем, сопротивление кнопок будет расти, и соответственно будут изменяться уровни напряжения, замеряемые ADC. Но на «честную» матрицу просто не хватило ножек/портов платы (для 24х кнопок нужно 10 портов). Исходя из этого, в прошивке реализована функциональность обучения клавиатуры, обучение можно сделать в любое время, и при этом не нужна связь с терминальной программой (про обучение будет написано ниже).
  • динамик, подключенный к аппаратной ножке таймера 1;
  • плата адаптеров, которые предназначены для согласования уровней между устройствами и портами Arduino;
  • 4 разъема DB9 female (по хорошему нужно ставить 6 разъемов, т.к. shDRO поддерживает до 6 устройств, но я не стал загромождать будущую заднюю панель корпуса, предполагая что три разъема будут использованы для осей, а один разъем будет расшарен между остальными устройствами). Разъемы самые простые, с ножками для пайки проводов. Провода в свою очередь распаиваются на плату адаптеров;

    Выбор такого типа разъема обусловлен следующими причинами: надежность (по сравнению с USB разъемами и RJ-45), большое количество выводов и легкость распайки. И так же у меня есть одна оптическая линейка с разъемом такого типа.

Принципиальная схема:



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

Вторая часть.

Комментарии (25)


  1. andranick
    02.04.2019 12:03

    Не увидел, а какая точность измерения ожидается? И диапазоны измерения перемещений?


    1. xshura Автор
      02.04.2019 12:08

      А это зависит от подключенных линеек. Например у меня есть оптическая линейка с разрешением 0.005мм. Тесты показали, что импульсы при обработке я не теряю. Естественно есть ограничения по скорости перемещения. На своем станке я могу передвигать суппорт на 10мм за 3 сек.


      1. andranick
        02.04.2019 12:27

        Нет, я немножко не о том. Я спрашивал, какую точность измерения Вы желаете получить. Ведь обычно системы строятся по принципу определения желаемых характеристик, а уж затем рассматриваются пути и средства их достижения. Может, 5мкм — избыточная и механически недостижимая точность и достаточно 50мкм, а это совсем другое дело.


        1. xshura Автор
          02.04.2019 12:33

          Понял. Мне достаточно 0.01мм и то это за глаза. А у самой линейки можно конечно урезать точность до тех же 0.01мм.


          1. andranick
            02.04.2019 12:54

            Ок. Рискну предложить рецепт дешевого самодельно датчика. На прозрачной пленке распечатайте ряд вертикальных рисок (типа ||||||||||| ) длиной ну так сантиметров 15-20 (чисто для удобства). Расстояние между рисками и толщина рисок — одинаковые и минимальные, на что способен принтер, но четкие. Вырежьте ленту с рисками, разрежьте пополам и совместите два куска ленты. Попробуйте перемещать куски ленты вдоль. Светодиодом ловите изменение яркости. Лайфхак: перемещаемую часть ленты рекомендуется повернуть на небольшой угол.
            ЗЫ1: Готовая точная лента есть в старых струйниках эпсон.
            ЗЫ2: Неплохой датчик перемещений получается из матриц планшетных сканеров.


            1. xshura Автор
              02.04.2019 13:27

              Вы пишите немного в другой плоскости.
              Данная статья об устройстве для снятия показаний с уже готовых датчиков, но не о том, как «оцифровать» станок.
              У меня есть одна оптическая линейка (и то, купил её для тестирования своего устройства), несколько цифровых штангенциркулей и поворотный энкодер для снятия числа оборотов. Т.е. все датчики у меня уже есть. Пока нет готового устройства, чтобы снять с них показания.


              1. andranick
                02.04.2019 14:00

                Ок, разницу уяснил.


  1. AndyKorg
    02.04.2019 12:18

    Не понятно, причем тут Арудино? Про IDE, скетчи и пр. ардуиновской шняги не слова. Или это дальше?


    1. xshura Автор
      02.04.2019 12:26

      Данную статью пришлось урезать (то ли сайт глючит, то ли есть какие то ограничения на размер статьи, это моя первая статья).
      Да, далее будет продолжение.
      Плата Arduino тут используется в качестве основной.
      Прошивка будет в формате hex.


      1. AndyKorg
        02.04.2019 12:42

        Спасибо за пояснения, правильно я понял: планируете написать скетч в среде арудино и скомпилировать в hex, который в свою очередь залить в МК?


        1. xshura Автор
          02.04.2019 12:49

          Не совсем так.
          Прошивку я писал на чистом Си, не используя никаких ардуиновских библиотек. Т.е. я мог бы сделать свою плату, на которой распаять процессор и его обвязку. Но это дополнительные сложности для сборки. А плата Arduino дает законченное решение по обвязке проца.


  1. seri0shka
    03.04.2019 00:05

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


  1. marsdenden
    03.04.2019 04:37

    Лайфхак — честную матричную клаву можно сделать еще на одной ардуине и связать их между собой))


    1. xshura Автор
      03.04.2019 07:58

      :)
      Тогда уж легче на STM перейти, вот например:
      Али STM


      1. marsdenden
        03.04.2019 14:59

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


        1. xshura Автор
          03.04.2019 15:29

          По ценам платы сравнимы, но вы предлагаете вторую плату, т.е. цена получается удвоенная.
          А что касается сред разработки под STM, то бесплатные тоже есть.
          Я скорее всего доберусь до STM, тем более, знакомые без проблем под них прошивки пишут.
          Единственное что, на борту простых STM нет EEPROM, но читал что данные во флэш можно писать.


          1. marsdenden
            03.04.2019 15:46

            Я уже тоже задумываюсь, глядя на такие вкусняшки. Код только перелопатить придется. А EEPROM можно и внешнюю подцепить.


  1. koch777
    03.04.2019 07:54

    А можно вот эту ссылку здесь оставить? www.yuriystoys.com
    Парень давно таким же вопросом озаботился, начал с MSP430, сейчас уже готовые платы продает, хотя и дороговато. Есть вариант на Arduino. Плюс у него шикарное приложение на Android, которое все и показывает, а микроконтроллер — только для снятия собственно показаний с линеек. Проект более или менее открытый, достаточно много информации по протоколам и как все это вместе заставить работать


    1. xshura Автор
      03.04.2019 16:16

      Я знаю этот проект.
      Он достаточно интересный, но вроде бы (могу ошибаться), он «из коробки» мало видов линеек поддерживает. Хотя у меня сейчас так же.
      И птичку планшет жалко… марать его масляными руками :) Может быть я добавлю поддержку планшетов, вот только есть одно НО: в андроиде на данный момент не очень шарю.
      Мне все же самому хотелось собрать подобное устройство, чтобы так сказать пройти все стадии: продумывание архитектуры, анализ сигналов линеек, программирование, разводка платы (хотя может буду на макетке собирать), проектирование корпуса (корпус буду печатать на 3D принтере) — это всё для меня можно сказать «рабочий отдых» :)


      1. koch777
        04.04.2019 03:03

        Ну конечно, если хочется сделать самому — надо делать самому. Просто если парень ухитряется продавать свои поделки (причем он начал с выкладывания в свободный доступ всей информации для самостоятельного изготовления) значит он что-то такое делает правильно. И у него можно почерпнуть полезные идеи, которые весьма вероятно востребованы теми, кто покупает его платку.
        Совсем не обязательно делать приложение для смарта — отдельный самостоятельный блок будет даже удобнее.
        Я бы, сравнивая официальные цены Arduino (Али хоть и пользуюсь, но не очень то доверяю) и Raspberry Pi Zero + недорогой дисплей, вообще не стал бы с микроконтроллером связываться. 20 секунд загрузки при начале работы за станком погоды не сделают, а удобство и скорость программирования на том же Питоне гораздо выше. Но тут уж каждый выбирает, что ему ближе — кому STM32 милее сердцу, кому AVR, а кто-то вообще Spartan какой больше всего любит.


      1. koch777
        04.04.2019 03:16

        Насколько я помню, его прошивка поддерживает (или может поддерживать) почти все широко и не очень распространенные шкалы.
        И да, по поводу функциональности. Мой опыт с простенькими iGAGING говорит о том, что наиболее часто используемая — обнуление, чтоб начать отсчет с текущей позиции. Там вообще помимо показометра мало что востребовано. Все, что свыше этого, люди предпочитают реализовывать с помощью CNC-конверсии.


  1. slog2
    05.04.2019 23:00

    На мега328 не получится гарантированно без потерь считать сигнал с квадратурного датчика или линейки. Нужен аппаратный счётчик. STM32 некоторые годятся, у них таймер может считать квадратурные сигналы.


    1. xshura Автор
      05.04.2019 23:21

      не получится гарантированно без потерь считать сигнал с квадратурного датчика или линейки

      При какой частоте?


      1. slog2
        06.04.2019 15:18

        При любой. От вибраций импульсы с линейки идут с очень высокой частотой. Программный счётчик чего-нибудь обязательно напропускает. Вибрации обычное дело. Например будут когда в токарном патроне зажат шестигранник.


        1. xshura Автор
          06.04.2019 15:53

          А что вы подразумеваете под фразами «программный счетчик» и «аппаратный счетчик»?