2016-10-26 14 views
0

Я пытаюсь нарисовать круг или что-нибудь, что может быть близко к кривой (например, Sine), используя два двигателя на осях с двумя размерами. В основном я запускаю малину Pi и мотор HAT Adafruit с двумя двигателями nema17 steppers.Кривая чертежа с использованием двух осей двигателей

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

Делая некоторые математические, я могу работать скорость каждого двигателя: X = R соз (т) и Y = R sin (т) поэтому Vx = -R sin (t) и Vy = R cos (t)

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

Я также думал о вычислении всех положений x и y кривой, но опять же я не уверен, что точность моей сборки достаточно высока.

Чтобы заполнить, я использую библиотеку Adafruit: https://github.com/adafruit/Adafruit-Motor-HAT-Python-Library, поэтому я не разбираюсь в аппаратном коде, а просто использую функции, предлагаемые библиотекой. В принципе, я могу запускать каждый двигатель отдельно для x шагов. И это шаговая карта: https://www.adafruit.com/product/2348

Билда (это очень DIY): https://www.youtube.com/watch?v=uqSTZiI4KuY

+1

Если ваши шаговые двигатели довольно высоконаправленные, так что один шаг, например, 1 мм, тогда вам будет трудно получить что-то, что кажется гладким. OTOH, если один шаг является, например, 0,1 мм (или меньше), тогда вы должны иметь возможность получать плавные линии. Вам также придется сделать много шагов - если вы попытаетесь приблизиться к кругу, например. 8 образцов, тогда вы получите восьмиугольную форму. Чтобы получить более точную помощь, вам придется опубликовать свой код. – barny

+0

Я добавил детали к моему вопросу. Я считаю, что у меня может быть хорошее разрешение, я думаю, 1 шаг <0,1 мм. – batmat

+0

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

ответ

0

Первых некоторые характеристики были бы в порядке:

  1. Как выглядит ваше управление двигателем?

    Что делать, если вы управляете (скорость, +/- импульсы, ???) У вас есть блок коррекции (если вы ошибаетесь водителю, он будет вставлять и корректировать значения, чтобы двигатель не потерял позицию)? У вас есть процессоры управления движением или вы генерируете импульсы самостоятельно?

  2. Каковы ваши целевые показатели точности и разрешения?

Теперь некоторое представление:

Я не думаю, что ваш подход хорош, потому что вы не можете управлять вашими двигателями с любой скоростью, вместо этого вы должны поддерживать скорость соотношения между двигателем так крутизна движения, что тебе нужно. Это основные причины для наложения и искажения я обычно дело с:

  1. разрешение Шага

    Если вам удастся проехать скорость плавно, то для кривых можно иногда игнорировать разрешение шага, как это будет плавно переопределяться по инерции и гибкости конструкции. Поэтому, если у вас нет действительно больших шагов, которые не должны быть большой проблемой.

  2. Вибрации

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

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

    Если вы хотите определить, какие частоты являются проблемой, тогда приводьте двигатель с постоянной частотой, например 50Hz, в течение нескольких секунд, затем 100,150,200, 250,..., и когда вы начнете слышать шум или двигатель начнет прыгать/вибрировать, вы находитесь вблизи резонансной области , Чем ближе вы становитесь хуже, тем лучше!

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

  3. Блок управления

    Если вы отделились процессоры движения для каждого двигателя (как и многие CNC делают), то делает кривые не представляется возможным в лучшей точности механики и механизмы могут обеспечить. Поскольку отдельные блоки управления движением могут отлично выполнять линии (и только в лучшем случае), поскольку бит-поток, необходимый для кривых, должен генерироваться синхронно, что невозможно при такой настройке. В таком случае, если вы приближаете свою кривую по многим строкам, результат выглядит лучше. Если вы введете такую ​​настройку с помощью кривой, выход будет колебаться вокруг желаемой формы, особенно если вы получили разные механические свойства на каждую ось.

    Если вы создаете импульсы самостоятельно, тогда вы должны быть в порядке. Управление движением с интерполяцией кривой не является простым. Я делаю это, создавая контрольные точки вдоль кривой, которую я хочу «визуализировать», затем вычисляю скорости, чтобы двигатели не теряли положение, а материал не выполнялся быстрее, чем скорость инструмента, прикрепленного к объекту CNC. После этого я интерполирую кривую в разрешении шагов и создаю поток управления с +/- управляющими битами, присутствующими для каждого ведомого двигателя, и который затем синхронно посылается на двигатели. Но материал, который я вложил в несколько строк текста, настолько сложный, что он мог заполнять целые книги. Я кодирую этот материал для своей работы более десяти лет (поскольку он оплачивает мои счета), и я все еще новичок в этой области.

  4. Электрическая неисправность

    Иногда холодный сустав и или высокий уровень шума может вызвать много проблем, особенно непредвиденных на доме из HW. Новички обычно игнорируют такие вещи, как экранирование, длина и размещение кабелей, электромагнитный или радиочастотный шум, мощность/цифровая/блокировка и т. Д. Чтобы убедиться, что ваша электрика в порядке, вы можете ее протестировать. Подключите счетчик к вашему управлению двигателем и убедитесь, что количество импульсов как и должно быть. Также использование осциллографа для зондирования некоторых штырьков для работы с шумоподавлением не повредит. Двигатели и драйверы двигателей могут генерировать много шума, которые иногда могут искажать управление движением или данные с пометкой.

    Но прежде чем начать ковыряться прочитать:

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

+0

Спасибо, это очень полный ответ, я понимаю все ваши баллы за псевдонимы и разрешение, я добавил некоторые детали к моему вопросу. – batmat

+0

@batmat похоже, что процессор управления движением отсутствует (в HW), но у меня нет опыта с библиотекой Adafruit, поэтому я не могу решить, есть ли SW-уровень управления или нет, но я сильно сомневаюсь в этом, поэтому вы, скорее всего, проигнорируете материал в пуле № 3. – Spektre