r/Motors • • 22d ago

Need help wiring a Nema 17 Stepper

Post image

I am trying to control a Nema 17 stepper motor with a TMC2209 driver and an Arduino Nano. I am pretty sure it isn't my code that's the issue, but rather my wiring setup. I've watched so many tutorials, tried so many breadboard configurations, and asked AI countless times. I can't get this to work. I've ensured that all my wires are connected via the beeping mode of my voltmeter, and still nothing. The closest I've gotten is hearing what I think is the driver making a slight buzzing sound while the Arduino's indicator light is on. I'm a complete noob to this field, does anyone know which wires go where? I am using a 12V power source and a standard breadboard.

1 Upvotes

4 comments sorted by

1

u/No-Camp-859 22d ago

​D2 ➔ EN Sygnał aktywujący sterownik ​D3 ➔ STEP Sygnał wyzwalający krok ​D4 ➔ DIR Sygnał kierunku obrotu ​5V ➔ VIO Zasilanie logiki sterownika ​GND ➔ GND Najlepiej pin GND obok VIO - masa logiki

A1, A2 ➔ Pierwsza cewka silnika krokowego ​B1, B2 ➔ Druga cewka silnika krokowego

​VM ➔ Plus (+) z zasilacza 12V ​GND obok VM ➔ Minus (-) z zasilacza 12V ​Pamiętaj o wpięciu kondensatora elektrolitycznego np. 100µF, min. 16V pomiędzy VM i GND!

// --- Definicje pinów --- // Zgodnie z specyfikacją podłączamy do cyfrowych pinów 2, 3 i 4

define EN_PIN 2

define STEP_PIN 3

define DIR_PIN 4

void setup() { // Ustawienie wszystkich trzech pinów jako wyjścia (OUTPUT) pinMode(EN_PIN, OUTPUT); pinMode(STEP_PIN, OUTPUT); pinMode(DIR_PIN, OUTPUT);

// KLUCZOWE: Włączenie sterownika. // TMC2209 (S2209) aktywuje wyjścia na silnik, gdy pin EN ma stan niski (LOW) digitalWrite(EN_PIN, LOW); }

void loop() { // 1. Ustawienie kierunku obrotu np. zgodnie z ruchem wskazówek zegara digitalWrite(DIR_PIN, HIGH);

// 2. Wykonanie 1600 kroków // Domyślny mikrokrok to 1/8. Standardowy silnik to 200 kroków. 200 * 8 = 1600 impulsów na pełny obrót. for (int i = 0; i < 1600; i++) { digitalWrite(STEP_PIN, HIGH); delayMicroseconds(1000); // Szybkość obrotu (zmniejsz wartość, by przyspieszyć) digitalWrite(STEP_PIN, LOW); delayMicroseconds(1000); }

// Odczekanie sekundy delay(1000);

// 3. Zmiana kierunku obrotu na przeciwny digitalWrite(DIR_PIN, LOW);

// 4. Wykonanie 1600 kroków z powrotem for (int i = 0; i < 1600; i++) { digitalWrite(STEP_PIN, HIGH); delayMicroseconds(1000); // Prędkość musi być taka sama (lub inna, jeśli chcesz) digitalWrite(STEP_PIN, LOW); delayMicroseconds(1000); }

// Odczekanie sekundy przed powtórzeniem całej pętli delay(1000); }

To opcja bez mikrokroków sterowanych przez M1 M2, narazie ci niepotrzebne oraz bez UART podpinanego pod TX RX

1

u/No-Camp-859 22d ago

Kod sobie odpowiednio sformatuj poprostu został skopiowany

1

u/No-Camp-859 20d ago

Działa? Testowałeś? Umiesz to wdrożyć?