Оглавление:
- Шаг 1. Материалы, инструменты, устройства, используемые для запуска проекта
- Шаг 2: аппаратные средства, которые необходимо выполнить
- Шаг 3: Кодирование Arduino
- Шаг 4. Программное обеспечение Visual Studio C #
- Шаг 5: результаты
Видео: Инструмент для измерения скорости подачи с ЧПУ из лома: 5 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:53
Кто-нибудь когда-нибудь хотел измерить реальную скорость подачи на станке с ЧПУ? Вероятно, нет, пока фрезерные биты не будут исправны после работы с ЧПУ … но когда они начнут регулярно ломаться, возможно, пришло время исследовать. В этом руководстве вы можете выполнить квест по определению фактической скорости подачи станка с ЧПУ. Он будет охватывать часть обратной инженерии принтера, прошивку Arduino, программное обеспечение для ПК, а также результаты, которые я получил с помощью моих коллег, а также мусор, превращенный в сокровище.
Шаг 1. Материалы, инструменты, устройства, используемые для запуска проекта
Когда я начал работать над этим, я придумал небольшой список вещей, которые нам понадобятся:
- разобранный механизм каретки принтера
- ручные инструменты, чтобы настроить это
- паяльник, припой, провода
- мультиметр
- осциллограф или логический анализатор - это не обязательно
- источник питания
- микроскоп
- Распиновка Arduino nano +
- ПК с Arduino IDE, Visual Studio 2008 Express + MS Charting tools
- (MPU6050 - в итоге я этим не пользовался)
- готов просматривать все, что вы не знаете, как делать
Вначале я думал, что плата MPU6050 позволит мне измерять скорость подачи сразу по всем трем осям. Имея внутри акселерометр, я был уверен, что суммирование данных акселерометра даст мне желаемое значение - скорость по каждой оси. После загрузки и изменения фрагмента кода Arduino, который отображал необработанные данные на последовательном мониторе, я написал небольшую программу для ПК в Visual Studio, которая обрабатывала данные и наносила их на диаграмму для облегчения интерпретации. Для этого мне пришлось загрузить как Visual Studio C # Express 2008, так и инструменты построения графиков.
После некоторого кодирования и поиска всего, что мне нужно для последовательной связи, я получил значения, нанесенные на график, но что бы я ни делал, их нельзя было использовать. Небольшие, но резкие движения могут привести к огромным скачкам, в то время как более длительные путешествия даже не будут отображаться на графиках. После двух дней работы с MPU6050 я наконец сдался и обратился к чему-то другому - разобранному механизму обратной связи по положению принтера.
Шаг 2: аппаратные средства, которые необходимо выполнить
Обратный инжиниринг
Конечно, у механизма принтера не было номера детали, который я мог бы использовать для определения его точных свойств, требовалось небольшое реверс-инжиниринг, чтобы получить то, что мы хотели. Внимательно изучив механизм и электронику, я решил, что первым делом нужно идентифицировать контакты оптического датчика. Это нужно было сделать, чтобы связать все это с Arduino. Я разобрал черную пластиковую часть, извлек плату и осмотрел сенсор: на нем было написано ROHM RPI-2150. Это меня порадовало, была велика надежда, что я найду лист данных. К сожалению, это либо старая, либо нестандартная деталь - нигде в Интернете не было таблицы. Это означало, что мне пришлось взять дело в свои руки: зная, что в этих датчиках обычно есть инфракрасный светодиод и два фототранзистора внутри, я взял мультиметр, установил его в режим измерения диодов и начал измерения между контактами.
Контакты питания обычно легко найти - на них есть конденсаторы, и они обычно соединяются широкими дорожками на печатных платах. Дорожки заземления часто подключаются к нескольким контактным площадкам для лучшего подавления шума.
Однако входные и выходные контакты не так уж и просты. При измерении через диод измеритель покажет прямое напряжение в одном направлении и перегрузку (бесконечную) в другом. Мне удалось идентифицировать четыре диода между контактами, я пришел к выводу, что четвертый диод должен быть каким-то стабилитроном или TVS-диодом, поскольку он был прямо между контактами питания компонента. Обнаружить инфракрасный излучатель было несложно, с ним был включен резистор 89R. У меня осталось два измерения диодов на оставшихся двух контактах, это должны были быть два приемника.
Примечание. Эти датчики имеют два приемника, чтобы можно было определять направление движения в дополнение к определению положения путем подсчета импульсов. Эти два выходных сигнала сдвинуты по фазе на 90 °, это используется для создания импульса обратного или обратного отсчета. По количеству этих импульсов можно определить точное положение печатающей головки.
Когда эмиттер и два приемника были обнаружены, я припаял провода к их контактам, чтобы я мог соединить датчик с Arduino. Перед этим я снабдил датчик напряжением 3,3 В, пару раз натянул полосу между датчиком и наблюдал прямоугольную волну на выходах. Частота прямоугольной волны менялась в зависимости от скорости движения, и я пришел к выводу, что измерительная система теперь готова к подключению к Arduino.
Подключение Arduino
Подключить этот новый «датчик» очень просто. Просто подключите выходы датчиков к D2 и D3 (контакты с возможностью прерывания!) И линии питания, и можно начинать кодирование.
Шаг 3: Кодирование Arduino
Код Arduino довольно прост. Я назначил функцию, которая выполняется каждый раз, когда D2 видит нарастающий фронт, это функция истечения из кода Arduino, который я прикрепил. Если вы посмотрите на сигналы квадратичного энкодера, вы увидите следующее:
- в одном направлении фаза A имеет высокий логический уровень на каждом нарастающем фронте фазы B
- в другом направлении фаза A имеет низкий логический уровень на каждом нарастающем фронте фазы B
Этим свойством кодировщика я воспользовался: поскольку функция elapse выполняется каждый раз, когда D2 имеет нарастающий фронт, я просто написал if, которое увеличивает счетчик, когда D3 высокий, и уменьшает его, когда D3 низкий. Это сработало с первой попытки, я отправил значение счетчика на монитор последовательного порта и наблюдал, как оно увеличивается / уменьшается, когда я перемещаю головку принтера на валу.
Короче говоря, прошивка выполняет следующие функции в цикле:
- проверяет буфер последовательного приема на наличие любых входящих данных
- если есть входящие данные, проверьте, есть ли это '1' или нет
- если это '1', это означает, что программное обеспечение ПК запрашивает значение счетчика
- отправить значение счетчика на ПК через последовательный порт
- начать с 1.
Теперь все зависит от программного обеспечения ПК. Давайте рассмотрим это!
Шаг 4. Программное обеспечение Visual Studio C #
Целью программы VS C # было переложить вычислительную нагрузку с Arduino на ПК. Это программное обеспечение получает данные, предоставляемые Arduino, вычисляет и отображает скорость в виде графика.
Первым делом я погуглил, как установить последовательную связь на C #. Я нашел много полезной информации на MSDN.com вместе с хорошим примером, а затем просто выбросил то, что мне было не нужно - в основном все, кроме части чтения. Я настроил COM-порт и скорость так, чтобы они соответствовали скорости Arduino, затем просто сделал несколько попыток и выгружал все, что поступало на последовательный порт, в многострочное текстовое поле.
После того, как значения были прочитаны, я мог просто использовать функции readto и split, чтобы изолировать одни измерения друг от друга и от символов-разделителей. Они были нанесены на график, и значения начали появляться на экране.
Если вы не видите элемент управления Chart на панели инструментов VS, вы можете погуглить проблему и найти решение здесь (ищите ответ №1): ссылка
Принцип измерения
Чтобы найти связь между количеством отсчетов и расстоянием, которое проходит головка, мы обнулили значение отсчета, вручную переместили печатающую головку на 100 мм и наблюдали за изменением отсчетов. В итоге мы пришли к следующей пропорции: 1 отсчет = 0,17094 мм.
Так как мы можем запросить расстояние и мы можем измерить время между выборками, мы можем вычислить скорость, с которой происходит сдвиг позиции - мы можем вычислить скорость!
Приблизительный программный отсчет времени составляет 50 мс, благодаря TMR0, но мы заметили, что это время не было слишком точным. Фактически, после некоторых программных измерений скорости мы обнаружили, что рассчитанные по времени 50 мс - это вовсе не 50 мс. Это означало, что образцы не были взяты с фиксированным интервалом, поэтому для расчета скорости также нельзя было использовать фиксированную временную базу. Как только мы обнаружили эту проблему, двигаться дальше стало легко: мы взяли разницу в расстоянии и разницу во времени и рассчитали скорость как D_distance / D_time (вместо D-distance / 50ms).
Кроме того, поскольку наше уравнение вернет скорость в миллиметрах / 50 мсек, нам нужно умножить это на 1200, чтобы получить расстояние, которое головка пройдет за одну минуту, в [мм / минуту].
Примечание: программное обеспечение для управления фрезерным станком Mach 3 с ЧПУ определяет скорость подачи в единицах [мм / мин].
Фильтрация
С этого момента измерения казались довольно точными, но в измеряемом сигнале был некоторый шум. Мы подозревали, что это произошло из-за механических несоответствий в валу, муфте вала и т. Д., Поэтому решили отфильтровать это, чтобы получить хорошее среднее значение того, что измеряется.
Тонкая настройка программного обеспечения
Чтобы изменить частоту дискретизации и частоту фильтрации во время выполнения, были добавлены полосы прокрутки - по одной для каждой. Также была введена возможность скрывать сюжеты.
Шаг 5: результаты
После того, как аппаратная и программная части были готовы, мы выполнили три серии измерений с Mach 3 + мое программное обеспечение, вы можете увидеть результаты на прилагаемых изображениях. Поздние эксперименты показали лучшую точность, с увеличенными как фильтром, так и частотой дискретизации. Графики показывают измеренную скорость сплошным красным цветом, а среднюю скорость - синим штрихпунктиром.
При этом похоже, что Mach 3 довольно точно обрабатывает эти настройки скорости, но теперь мы знаем наверняка:)
Надеюсь, вам понравился этот краткий инструктаж о реверс-инжиниринге и превращении воды в вино!
Ваше здоровье!
Рекомендуемые:
Модуль измерения мощности постоянного тока для Arduino своими руками: 8 шагов
Модуль измерения мощности постоянного тока для Arduino: в этом проекте мы увидим, как сделать модуль измерения мощности постоянного тока с помощью Arduino
Устройство подачи карточек для торгового автомата: 10 шагов (с изображениями)
Устройство подачи карточек для автомата с коллекционными картами: устройство подачи карточек для автомата с коллекционными картами Предыстория Когда я был молод, я собирал тонны коллекционных карточек, но в течение нескольких лет страсть к коллекционированию уменьшалась. А пока у меня есть дети, и медленно, но верно они тоже начинают
Зонд для измерения уровня грунтовых вод для условий с низким уровнем ресурсов: 4 шага (с изображениями)
Зонд для измерения уровня грунтовых вод для условий с низким уровнем ресурсов: Введение Мы получили запрос от Oxfam на разработку простого способа, с помощью которого школьники в Афганистане могли бы контролировать уровень грунтовых вод в близлежащих колодцах. Эта страница была переведена на дари доктором Амиром Хайдари, и перевод может быть f
4 способа подачи питания на Arduino: 6 шагов
4 способа подачи питания на Arduino: Arduino действительно полезны и совместимы практически со всеми электронными компонентами, но, как и все устройства, они нуждаются в питании. И есть много способов сделать это! Эта инструкция посвящена подаче питания на Arduinos и получению от них энергии (
Устройство подачи бумаги и оловянной фольги: 5 шагов
Устройство ввода из бумаги и оловянной фольги: это руководство покажет вам, как сделать дешевое и уродливое устройство ввода для вашего компьютера. В этом случае я использую логическую плату Monome 40h для отправки сигналов на компьютер от сетки кнопок размером восемь на восемь, но эти планы можно легко изменить, т