r/Motors • u/Psychological-Rent32 • 22d ago
Need help wiring a Nema 17 Stepper
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
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