Съдържание:

Arduino Uno с мотор с шпиндел и стъпка: 19 стъпки
Arduino Uno с мотор с шпиндел и стъпка: 19 стъпки

Видео: Arduino Uno с мотор с шпиндел и стъпка: 19 стъпки

Видео: Arduino Uno с мотор с шпиндел и стъпка: 19 стъпки
Видео: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, Юли
Anonim
Image
Image
Използвани ресурси
Използвани ресурси

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

Следователно направих монтажа по -долу, който разкрива напредването на вретено от 2 мм и друго от 8 мм. Тези шпиндели TR8, които използвам, обикновено се използват в малки рутери и 3D принтери, особено по оста Z. Помнете, че като усвоите някои концепции, върху които ще работим тук, ще можете да проектирате всякакъв вид машини.

Стъпка 1: Използвани ресурси

  • Трапецовиден шпиндел с диаметър 8 мм и стъпка 2 мм
  • Трапецовиден шпиндел с диаметър 8 мм и стъпка 8 мм
  • 8x2 вретеново фланцово кестен
  • 8x8 шпиндел фланцов кестен
  • Лагери за шпиндели с диаметър 8 мм
  • Линеен цилиндричен водач с диаметър 10 мм
  • Цилиндрични ролкови лагери за 10 мм водачи
  • Скоби за 10 мм цилиндрични водачи
  • NEMA 17 Мотори
  • Съединители на вала
  • Arduino Uno
  • Драйвер DRV8825
  • 4x4 матрична клавиатура
  • Дисплей Nokia 5110
  • Разни пластмасови части
  • Болтове и гайки
  • Дървена основа
  • Външно 12V захранване

Стъпка 2: За вретената - какви са те?

За вретената - какви са те?
За вретената - какви са те?

Шпинделите са елементи на машини, като например винтове. Тоест те са прави пръти, образувани от нишки от непрекъснати стъпала. Те се използват в механизми, които изискват линейно движение и позициониране. Те могат да упражняват високи сили на опън и натиск и да предават въртящ момент. Те позволяват движение с автоматично заключване. Те могат да бъдат изработени от различни материали, като са най -разпространените алуминий и стомана.

Тъй като китайските компании произвеждат трапецовидните шпиндели, бих ви предложил да вземете този вид продукт вместо добре познатия болт с гайка. Това се дължи на по -атрактивната цена и съпротивлението, което смятам за ужасно.

На снимката поставям най -добрия шпиндел, който според мен е рециркулиращият сферичен шпиндел. Обикновено е изработена от много твърда стомана и топките се въртят около нея, вътре в кестена. Освен прецизността, която е страхотна, подчертавам и издръжливостта, тъй като този тип шпиндел може да възпроизведе милиарди движения, без да повреди механизма. По -евтин вариант, който използваме тук, е трапецовидното вретено.

Стъпка 3: За шпиндели - единични и сачмени нишки

За шпиндели - единични и сачмени нишки
За шпиндели - единични и сачмени нишки

Въртенето на топката, на снимката вляво, има полукръгли канали, където топките се търкалят. Те са сравнително по -скъпи и имат ниско триене в сравнение с едношнековите шпиндели, което води до много по -голям добив (триене при търкаляне).

Еднонишковите вретена от дясната страна на изображението обикновено имат трапецовидни профили, тъй като тази геометрия е по-подходяща за прилагане на сили в аксиална посока и плавно предаване на движение. Те са сравнително евтини и имат високо триене в сравнение с рециркулиращите сферични вретена, което води до нисък добив, т.е. триене при приплъзване.

Стъпка 4: За вретената - Приложения

За вретената - Приложения
За вретената - Приложения

Шпинделите могат да бъдат приложени към всеки механизъм, където се изисква линейно движение. Те се използват широко в индустрията в машини и процеси.

Някои приложения включват:

  • Товарни асансьори
  • Преси
  • Ягоди и стругове
  • CNC оборудване
  • Опаковъчни машини
  • 3D принтери
  • Оборудване за лазерно рязане
  • Индустриални процеси
  • Системи за позициониране и линейно движение

Стъпка 5: За шпиндели - параметри

За шпинделите - параметри
За шпинделите - параметри

Има няколко характеристики на шпиндела, които трябва да се имат предвид при проектирането на механизъм. В допълнение към неговия диаметър и стъпка, е необходимо да се признаят неговата якост на натиск, инерционният му момент (устойчивост на промяна в ротационното му състояние), конструктивният материал, скоростта на въртене, на която ще бъде подложен, посоката на работа (хоризонтална или вертикално), приложеното натоварване, наред с други.

Но въз основа на вече изградени механизми можем да интуираме няколко от тези параметри.

Нека разпознаем някои общи блага. Нека започнем със СТЪПКА.

Стъпка 6: За вретената - Стъпка (изместване и скорост)

За вретената - стъпка (изместване и скорост)
За вретената - стъпка (изместване и скорост)

Определя дължината, измината от гайката при всяко завъртане. Това обикновено е в мм / оборот.

2 мм шпиндел на оборот ще доведе до изместване от 2 мм при всяко завъртане, което шпиндела извършва. Това ще повлияе на линейната скорост на гайката, тъй като с увеличаването на скоростта на въртене броят на оборотите за единица време ще се увеличи и съответно и изминатото разстояние.

Ако 2 мм завъртане на оборот се върти при 60 об / мин (един оборот в секунда), гайката ще се движи с 2 мм в секунда.

Стъпка 7: Монтаж

Монтаж
Монтаж
Монтаж
Монтаж

В нашия монтаж имам два двигателя и нашата клавиатура с дисплея, който приличаше на калкулатор, защото им направих корица в 3D принтера. На дисплея на Nokia имаме следните опции:

F1: Полумесец - Fuso преминава от текущата позиция към позицията, която определям

F2: Низходящо - Завийте

F3: Скорост - Мога ли да променя ширината на импулса

F4: ESC

Стъпка 8: Монтаж - Материали

Монтаж - Материали
Монтаж - Материали

A - 10 мм линейни водачи

B - Трапецовидни вретена от стъпки 2 и 8 мм

C - Пробивна база

D - Лагери за шпиндели

E - Поставки за водачи

F - Кестени

G - Лагери

H - Съединители

I - Двигатели

J - Различни пластмасови части (курсори, скоби на двигателя, клинове, поддръжка на клавиатурата и дисплей

Стъпка 9: Сглобяване - Стъпка 01

Сглобяване - Стъпка 01
Сглобяване - Стъпка 01

След пробиването на основата (C) сглобяваме двата двигателя (I). За да ги закрепим, използваме скоби, направени в 3D принтера (J). Не затягайте нито един от винтовете в тази стъпка на позициониране. Това ще позволи необходимите корекции в стъпката за подравняване.

Стъпка 10: Сглобяване - Стъпка 02

Сглобяване - Стъпка 02
Сглобяване - Стъпка 02

Все още след пробиването на основата (C), поставете направляващите релси (E) и лагерите (D). Детайл за пластмасовата подложка (J), използвана за регулиране на височините на лагерите.

Стъпка 11: Монтиране - Стъпка 03

Монтаж - Стъпка 03
Монтаж - Стъпка 03

Създаваме курсор, използвайки отпечатана част, за да свържем лагера (G) с гайката (F). Използвахме два курсора, един отдясно, друг отляво. Неговата функция е да посочва позицията на скалата винаги, когато искаме да определим изместването, причинено от шпиндела.

Стъпка 12: Сглобяване - Стъпка 04

Сглобяване - Стъпка 04
Сглобяване - Стъпка 04
Сглобяване - Стъпка 04
Сглобяване - Стъпка 04

Поставете водача (A) и шпиндела (B) в съответния им лагер (D) и опората (E), срещу двигателя, след това поставете водача и шпиндела в лагера (G) и кестена (F) и при върха на шпиндела също вмъкваме съединителя (H). Взимаме ги и двамата, докато достигнат крайните си точки (противоположна опора и двигател).

Леко затегнете винтовете, за да позволите по -късна настройка. Повторете процедурата, като използвате останалия водач и шпиндела. С всички позиционирани компоненти, ние извършваме подравняването на частите, завършвайки етапа на механично сглобяване.

Стъпка 13: Монтаж - Електроника

Монтаж - електроника
Монтаж - електроника
Монтаж - електроника
Монтаж - електроника
Монтаж - електроника
Монтаж - електроника

С помощта на отпечатан пластмасов държач ние осигурихме дисплея на Nokia 5110 и 4x4 матрична клавиатура. В долното пространство на стойката ще се намира Arduino Uno, драйверът DRV8825.

Използвайки наличното пробиване в основата, закрепваме монтажа.

Стъпка 14: Електрическа схема

Електрическа схема
Електрическа схема

Схемата на свързване е проста. Имаме DRV8825 и същите две 17 огледала, тоест същата стъпка, която изпращаме към едно, отива към друго. Това, което се променя, е, че в един от двигателите имам 8 мм шпиндел, а в другия 2 мм шпиндел. Очевидно е, че първият, с 8 мм шпиндел, върви по -бързо. Все още в диаграмата са дисплеят и клавиатурата 4x4, която трябва да е матрична.

Стъпка 15: Изходен код

Включване на библиотеки и създаване на обекти

Тук имаме Lib, който направих, а това е StepDriver.h. Той е подготвен за драйверите 8825, 4988, а също и за TB6600. Създавам в тази стъпка обекта DRV8825, d1.

// Biblioteca responsável por capturar a tecla que foi pressionada no teclado #include // Biblioteca responsável pelos graficos do display #include // Biblioteca responsável pela comunicacao do display #include // Configuracao de pinos do Display // pin 6 - Сериен часовник (SCLK) // пин 5 - Сериен изход на данни (DIN) // щифт 4 - Избор на данни/команда (D/C) // щифт 3 - Избор на LCD чип (CS/CE) // щифт 2 - Нулиране на LCD (RST) Adafruit_PCD8544 дисплей = Adafruit_PCD8544 (6, 5, 4, 3, 2); // Biblioteca de motor de passo #include // Instancia o driver DRV8825 DRV8825 d1;

Константи и глобални променливи

В тази част на кода третирам матрицата, която преподавах в друг видео урок (ВРЪЗКА НА КЛАВИАТУРАТА). Все пак говоря за обекта Keypad, освен разстояние и скорост.

const байт LINHAS = 4; // numero de linhas do tecladoconst byte COLUNAS = 4; // número de colunas do teclado // дефинирайте uma matriz com os símbolos que deseja ser lido do teclado char SIMBOLOS [LINHAS] [COLUNAS] = {{'A', '1', '2', '3'}, { „B“, „4“, „5“, „6“}, {„C“, „7“, „8“, „9“}, {„D“, „c“, „0“, „e '}}; байт PINOS_LINHA [LINHAS] = {A2, A3, A4, A5}; // pinos que indicam като linhas do teclado byte PINOS_COLUNA [COLUNAS] = {0, 1, A0, A1}; // pinos que indicam as colunas do teclado // instancia de Keypad, response to capturar a tecla pressionada Keypad customKeypad = Keypad (makeKeymap (SIMBOLOS), PINOS_LINHA, PINOS_COLUNA, LINHAS, COLUNAS); // variáveis resposnsáveis por armazenar o valor digitado char customKey; без знак дълго разстояние = 0; безпредписана дълга велоцидада = 2000;

Функция за четене от клавиатурата

В тази стъпка имаме код, отнасящ се до дисплея, който работи при увеличаване и намаляване на печата.

// Funcao responsavel por ler o valor do usuario pelo teclado -------------------------------------- --- без подпис дълъг lerValor () {// Ескревиране на подменю que coleta os valores без дисплей display.clearDisplay (); display.fillRect (0, 0, 84, 11, 2); display.setCursor (27, 2); display.setTextColor (БЯЛ); display.print ("VALOR"); display.setTextColor (ЧЕРЕН); display.fillRect (0, 24, 21, 11, 2); display.setCursor (2, 26); display.setTextColor (БЯЛ); display.print ("CLR"); display.setTextColor (ЧЕРЕН); display.setCursor (23, 26); display.print ("LIMPAR"); display.fillRect (0, 36, 21, 11, 2); display.setCursor (5, 38); display.setTextColor (БЯЛ); display.print ("F4"); display.setTextColor (ЧЕРЕН); display.setCursor (23, 38); display.print ("VOLTAR"); display.setCursor (2, 14); display.display (); Низ valor = ""; char tecla = невярно;

цикъл в изчакване за натискане на клавиша

Тук обясняваме Loop програмиране, тоест къде въвеждате стойностите.

// Loop infinito enquanto nao chamar o return while (1) {tecla = customKeypad.getKey (); if (tecla) {switch (tecla) {// Se teclas de 0 a 9 forem pressionadas case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '0': valor += tecla; display.print (tecla); display.display (); прекъсване; // Se tecla CLR foi pressionada case 'c': // Limpa a string valor valor = ""; // Apaga o dolor do display display.fillRect (2, 14, 84, 8, 0); display.setCursor (2, 14); display.display (); прекъсване; // Se tecla ENT foi pressionada case 'e': // Retorna o valor return valor.toInt (); прекъсване; // Se tecla F4 (ESC) за натискане на случай „D“: връщане -1; по подразбиране: break; }} // Limpa o char tecla tecla = невярно; }}

Функция на моторно задвижване

В тази стъпка се работи по функцията „преместване“. Получавам броя на импулсите и посоката и след това правя "за".

// Funcao responsavel por mover или motor -------------------------------------- void mover (без подпис long pulsos, bool direcao) {for (unsigned long i = 0; i <pulsos; i ++) {d1.motorMove (direcao); }}

настройвам ()

Сега премествам дисплея и конфигурацията на драйвера и дори сложих закрепването в изходния код, за да го улесня. Инициализирам определени стойности и се занимавам с методите, които генерират настройките.

void setup () {// Configuracao do display ---------------------------------------- -------- display.begin (); display.setContrast (50); display.clearDisplay (); display.setTextSize (1); display.setTextColor (ЧЕРЕН); // Конфигуриране на драйвер DRV8825 ----------------------------------------- // щифт GND - Активиране (ENA) // щифт 13 - M0 // щифт 12 - M1 // щифт 11 - M2 // щифт 10 - Нулиране (RST) // щифт 9 - Sleep (SLP) // щифт 8 - Стъпка (STP) // щифт 7 - Посока (DIR) d1.pinConfig (99, 13, 12, 11, 10, 9, 8, 7); d1.сън (НИСКО); d1.reset (); d1.stepPerMm (100); d1.stepPerRound (200); d1.stepConfig (1); d1.motionConfig (50, velocidade, 5000); }

loop () - 1 -ва част - Чертожно меню

void loop () {// Escreve o Menu do Programa no display ----------------------------------- display.clearDisplay (); display.fillRect (0, 0, 15, 11, 2); display.setCursor (2, 2); display.setTextColor (БЯЛ); display.print ("F1"); display.setTextColor (ЧЕРЕН); display.setCursor (17, 2); display.print ("CRESCENTE"); display.fillRect (0, 12, 15, 11, 2); display.setCursor (2, 14); display.setTextColor (БЯЛ); display.print ("F2"); display.setTextColor (ЧЕРЕН); display.setCursor (17, 14); display.print ("DECRESCENTE"); display.fillRect (0, 24, 15, 11, 2); display.setCursor (2, 26); display.setTextColor (БЯЛ); display.print ("F3"); display.setTextColor (ЧЕРЕН); display.setCursor (17, 26); display.print ("VELOCIDADE");

loop () - Част 2 - Чертожно меню

display.fillRect (0, 36, 15, 11, 2); display.setCursor (2, 38); display.setTextColor (БЯЛ); display.print ("F4"); display.setTextColor (ЧЕРЕН); display.setCursor (17, 38); display.print ("ESC"); display.display (); bool esc = невярно;

loop () - Част 3 - Тичане

// Включваме циклично a tecla F4 (ESC) nao за pressionada while (! Esc) {// улавяме tecla pressionada до teclado customKey = customKeypad.getKey (); // caso alguma tecla foi pressionada if (customKey) {// Trata a tecla apertada switch (customKey) {// Se tecla F1 foi pressionada case 'A': distancia = lerValor (); // Se tecla ESC foi pressionada if (distancia == -1) {esc = true; } else {// Escreve a tela "Movendo" no display display.clearDisplay (); display.fillRect (0, 0, 84, 11, 2); display.setCursor (21, 2); display.setTextColor (БЯЛ); display.print ("MOVENDO"); display.setTextColor (ЧЕРЕН); display.setCursor (2, 14); display.print (дистанция); display.print ("Passos"); display.display ();

loop () - Част 4 - Тичане

// Move o motor mover (distancia, LOW); // Volta ao меню esc = true; } почивка; // Se tecla F2 foi pressionada case 'B': distancia = lerValor (); // Se tecla ESC foi pressionada if (distancia == -1) {esc = true; } else {// Escreve a tela "Movendo" no display display.clearDisplay (); display.fillRect (0, 0, 84, 11, 2); display.setCursor (21, 2); display.setTextColor (БЯЛ); display.print ("MOVENDO"); display.setTextColor (ЧЕРЕН); display.setCursor (2, 14); display.print (дистанция); display.print ("Passos"); display.display ();

loop () - Част 5 - Тичане

// Move o motor mover (distancia, HIGH); // Volta ao меню esc = true; } почивка; // Se tecla F3 foi pressionada case 'C': velocidade = lerValor (); if (velocidade == -1) {esc = вярно; } else {// Escreve a tela "Velocidade" no display display.clearDisplay (); display.fillRect (0, 0, 84, 11, 2); display.setCursor (12, 2); display.setTextColor (БЯЛ); display.print ("VELOCIDADE"); display.setTextColor (ЧЕРЕН); display.setCursor (2, 14); display.print (velocidade); display.print (char (229)); display.print ("s");

loop () - Част 6 - Тичане

display.fillRect (31, 24, 21, 11, 2); display.setCursor (33, 26); display.setTextColor (БЯЛ); display.println ("ОК!"); display.setTextColor (ЧЕРЕН); display.display (); // Configura nova velocidade ao motor d1.motionConfig (50, velocidade, 5000); забавяне (2000); // Volta ao меню esc = true; } почивка; // Se tecla F4 (ESC) за случай на натиск „D“: // Se tecla CLR за случай на натиск „c“: // Se tecla ENT за случай на натиск „e“: // Volta ao menu esc = true; по подразбиране: break; }} // Limpa o char customKey customKey = false; }}

Стъпка 16: За шпиндели - машинни конфигурации

За шпиндели - машинни конфигурации
За шпиндели - машинни конфигурации

При машини с ЦПУ, като например 3D принтери и рутери, програмата, отговорна за позиционирането на контрола, трябва да знае как ще се случват движенията в зависимост от броя на импулсите, подадени на стъпковия двигател.

Ако драйверът на стъпаловия двигател позволява прилагането на микростепени, тази конфигурация трябва да се вземе предвид при изчисляването на произведеното изместване.

Например, ако 200-стъпков двигател на оборот е свързан към драйвер, настроен на 1/16, тогава за един оборот на шпиндела ще са необходими 16 х 200 импулса, тоест 3200 импулса за всеки оборот. Ако този шпиндел има стъпка от 2 мм на оборот, ще са необходими 3200 импулса в задвижващия механизъм, за да се премести гайката с 2 мм.

Всъщност софтуерните контролери често използват причина да посочат това съотношение, „броя на импулсите на милиметър“или „стъпки / мм“.

Стъпка 17: Марлин

Марлин
Марлин

В Marlin например виждаме в раздела @section motion:

/ **

* Стъпки по ос по подразбиране за единица (стъпки / мм)

* Замяна с M92

* X, Y, Z, E0 [, E1 [, E2 [, E3 [, E4]

* /

#define DEFAULT_AXIS_STEPS_PER_UNIT {80, 80, 3200, 100}

В този пример можем да заключим, че осите X и Y имат точност от 80 импулса за преместване на 1 mm, докато Z се нуждае от 3200 импулса, а екструдерът E0 се нуждае от 100.

Стъпка 18: GRBL

GRBL
GRBL

По -долу виждаме командите за конфигуриране на GRBL. С командата $ 100 можем да регулираме броя на импулсите, необходими за предизвикване на едномилиметрово отместване по оста X.

В примера по -долу можем да видим, че текущата стойност е 250 импулса на мм.

Осите Y и Z могат да бъдат зададени съответно $ 101 и $ 102.

Препоръчано: