W dzisiejszym wpisie poświęconym popularnemu sterownikowi silników bipolarnych DRV8825 dowiesz się:
- Jak działa DRV8825
- Poznasz Pinout DRV8825
- jak podłączyć silnik krokowy do DRV8825
- jak podłączyć DRV8825 do Arduino
- napiszemy kod do sterowania silnikiem i wytłumaczymy jego działanie
- pokażemy jak wyregulować sterownik aby dostosować jego działanie do wybranego silnika
Wykorzystanie DRV8825
Jeśli planujesz zbudować własną drukarkę 3d lub maszynę CNC będziesz potrzebował sterownika kontrolującego dokładnie pracę zamontowanych tam silników. Jeśli będziesz realizował to samym mikrokontrolerem bez wykorzystania dodatkowych sterowników takich jak DRV8825 czy A4988, nie pozostanie Ci prawdopodobnie ani jedno wolne wyjście. Dlatego należy do tego celu wykorzystać dedykowane sterowniki, które pozwolą nam na sterownie silnikami bipolarnymi takimi jak NEMA17 przy pomocy zaledwie 2 pinów! Czy może być prościej?
Jak działa silnik krokowy?
Silnik krokowy wykorzystuje koło zębate i elektromagnesy by wykonać jeden krok za każdym razem. Każde podanie napięcia na cewkę uruchamia elektromagnes i przyciąga najbliższy ząb na kole w silniku co daje nam jeden krok.
Sposób w jaki podajemy zasilanie na cewki determinuje obroty silnika.
- Odpowiednia sekwencja impulsów determinuje kierunek obrotów
- Częstotliwość impulsów odpowiada za szybkość obrotu
- Ilość impulsów odpowiada o ile obróci się silnik.
SILNIK KROKOWY W ZESTAWIE Z RADIATOREM MOŻESZ ZAKUPIĆ W NASZYM SKLEPIE INTERNETOWYM KILIKAJĄC TUTAJ -> DRV8825 sterownik silnika krokowego
Wszystkie sprzedawane produkty są najwyższej jakości i pochodzą od sprawdzonych dostawców!
Budowa DRV8825
W sercu modułu znajduje się chip wyprodukowany przez Texas Instruments o nazwie DRV8825 odpowiada on za ruch silnikiem.
Posiada on możliwość sterowania napięciem do 45V i może podać aż do 2.2A na cewkę. Ma wbudowany wewnętrzny translator pozwalający na łatwiejsze sterowanie. Dzięki niemu została zredukowana liczba pinów potrzebnych do obsługi do zaledwie 2.
1 pin odpowiada za kontrolę korków, 2 pin za kierunek obrotu. Sterownik obsługuje 6 różnych rozdzielczości kroków czyli: pełny krok, 1/2 kroku, 1/4 kroku, 1/8 kroku, 1/16 kroku, 1/32 kroku.
DRV8825 Pinout
Sterownik posiada 16 pinów, które opisano na poniższym rysunku:
Zapoznamy się teraz z każdym pinem.
PINY ZASILANIA:
VMOT, GND MOT, GND LOGIC
Nasz sterownik posiada tylko jeden pin od zasilania, VMOT i GND MOT dostarczają napięcie do silnika z przedziału od 8.2V do 45V. Nie posiada on osobnego pinu do zasilania, podbiera on napięcie z tych pinów przez wewnętrzny regulator 3.3V. Należy jednak pamiętać, żeby połączyć GND Logic do masy naszego mikrokontrolera. Według noty producenta należy umieścić blisko płytki sterownika kondensator wytrzymujący prąd do 4A na przewodach od zasilania silnika.
Sterownik DRV8825 ma wbudowany ceramiczny kondensator filtrujący skoki napięcia. Jednak w przypadku gdy przekroczą one 45V, moduł może ulec całkowitemu uszkodzeniu. Dlatego dobrą praktyką jest zastosowanie dużego kondensatora około 100uF (najmniej 50uF) na przewodach zasilających silnik.
PINY M0, M1, M2
są to piny wyboru mikrokroków. Dzięki tym ustawieniom cewka zasilana jest z pośrednim natężeniem co pozwala silnikowi na zrobienie tylko małej części pełnego kroku. Dla przykładu NEMA17 mająca obrót 1.8° czyli 200 kroków na obrót, w trybie 1/4 kroku pozwala jej na zrobienie 800 mikrokroków co daje nam obrót o zaledwie 0.45°.
Ustawiając odpowiednie poziomy logiczne na powyżej wymienionych pinach możemy ustawić kroki jak w poniższej tabelce:
Piny mają ma płytce rezystory pull-down co oznacza, że jeśli pozostawiamy je nie podłączone ich stan ustawiony jest na LOW i silnik będzie pracował w trybie pełnych kroków.
PINY STEP 7 i DIR 8
STEP 7 odpowiada za mikrokroki silnika. Każdy impuls HIGH wysłany na ten port powoduje zrobienie jednego kroku (lub mikrokroku w zależności od ustawień) przez nasz silnik. Im wyższa częstotliwość pojawiania się stanu wysokiego na tym pinie tym szybciej będzie obracał się nasz silnik.
DIR 8 kontroluje kierunek obrotu silnika. Utrzymanie stanu wysokiego na tym pinie powoduje obracanie się zgodnie z kierunkiem wskazówek zegara, stan niski powoduje obrót w stronę przeciwną.
Jeśli silnik będzie w Twoim projekcie obracał się tylko w jednym kierunku, możesz zmostkować ten pin z plusem lub masą na stałe.
PINY EN, RST, SLP
Piny te pozwalają na kontrolę zasilania.
EN pin ten domyślnie ma ustawiony poziom logiczny na LOW co oznacza Enable czyli włączony. Podając na ten pin stan wysoki HIGH sprawimy, że sterownik zostanie wyłączony.
SLP pin ten zostaje aktywowany podaniem stanu niskiego LOW. Po podaniu LOW sterownik przechodzi w stan uśpienia, dzięki temu minimalizujemy zużycie prądu. Możesz wykorzystać go jeśli jakiś silnik dłużej pozostaje w spoczynku.
RST ten pin również aktywuje się stanem niskim LOW. Jeśli podasz na niego stan niski wszystkie ustawienia kroków zostaną zignorowane aż nie zostanie podany stan wysoki HIGH.
PIN wyjściowy FAULT
Pin ten zostaje uaktywniony zazwyczaj kiedy uruchomi się ochrona przed za dużym natężeniem prądu lub sterownik się przegrzeje i zostanie wyłączony. W każdym z tych przypadków stan na tym pinie zostanie automatyczny ustawiony na LOW. Pozostaje tak póki nie skorzystamy z piny RESET lub VMOT nie zostanie ponownie odłączone i podpięte.
PINY A1, A2, B1, B2
Kanały wyjściowe sterownika mają numery 11, 12, 13, 14 możemy połączyć je z silnikami krokowymi działającymi z napięciem z przedziału 8.2V do 45W. Każdy pin może dostarczyć do 2.2A. Jednak należy mieć na uwadze aby zapewnić odpowiednie zasilanie modułu, chłodzenie oraz dobrać ograniczniki natężenia prądu.
Grzanie się DRV8825
Podczas korzystania ze sterownika możemy zaobserwować znaczne podwyższenie temperatury. Należy mieć na uwadze, że nawet jeśli sterownik obsługuje maksymalnie 2.2A na cewkę to największy prąd aby się nie przegrzewał wynosi 1.5A . Aby zapobiec przegrzewaniu się do zestawu został dołączony radiator i należy go bezwzględnie zamocować przed przystąpieniem do korzystania z DRV8825.
Potencjometr ograniczający natężenie
Jeśli zastanawiałeś się do czego służy potencjometr na DRV8825 to jest on przeznaczony do ograniczania maksymalnego natężenia jakie może płynąć przez sterownik do silnika. Dzięki temu możemy lepiej chronić silnik przed uszkodzeniem. Należy go ustawić na takie natężenie jakie obsługuje nasz silnik lub delikatnie poniżej.
Podpowiem wam w jaki sposób najłatwiej to wykonać:
SPOSÓB 1 – wykorzystamy tutaj pomiar napięcia na pinie referencyjnym Vref.
- Sprawdzamy w karcie katalogowej naszego silnik jakie obsługuje natężenie, w naszym przypadku NEMA17 ma 350mA.
- Ustawiamy sterownik w tryb FULL STEP czyli wszystkie piny ustawień kroków zostawiamy odłączone.
- Przytrzymaj silnik w ustalonej pozycji bez podawania sygnału Kroku na PIN STEP.
- Zmierz napięcie Vref na metalowym potencjometrze i podstaw do wzoru:
Limit natężenia = Vref x 2
Jeśli nasz silnik jest oznaczona jako 350mA dzielimy to na 2 i wychodzi nam wynik 0.175V i tyle ustawiamy kręcąc potencjometrem
SPOSÓB 2 – wepniemy się pod jedną cewkę i sprawdzimy pobór prądu
- Powtarzamy kroki od 1 do 3 ze sposobu pierwszego
- Podpinamy miernik w szeregu z jedną cewką i badamy przepływ natężenia.
- Potencjometrem ustawiamy limit natężenia zgodnie z zaleceniami producenta silnika.
W naszym przypadku kręcimy potencjometrem aż multimetr nie wskaże 350mA
Jak podłączyć DRV8825 do Arduino?
To bardzo proste, zacznij od złączenia pinów RST i SLP do 5V w Arduino by sterownik utrzymać w stanie załączonym. Podepnij GND LOGIC do masy GND w Arduino. DIR i STEP można podłączyć przkładowo do pinów cyfrowych 2 i 3 w Arduino. B1, B2 oraz A1 i A2 podepnij do swojego silnika krokowego.
UWAGA PODŁĄCZANIE I ODŁĄCZANIE SILNIKA PODCZAS GDY DRV8825 JEST POD ZASILANIEM MOŻE SKUTKOWAĆ USZKODZENIEM STEROWNIKA.
Piny odpowiedzialne za mikro-kroki pozostawiamy odłączone. Na koniec podpinamy VMOT i GND MOT do naszego źródła prądu. Pamiętajmy aby zastosować kondensator dla zwiększenia bezpieczeństwa.
Schemat podłączenia zamieszamy poniżej:
Przykładowy kod dla Arduino do sterowania silnikiem przy pomocy DRV8825
Kod jest stosunkowo prosty, a wszystko zostanie wyłumaczone komentarzami przy każdej ważnej linijce:
// tworzymy stałe z numerami pinów podłączonych do Arduino dla DIR i STEP oraz podajemy liczbę kroków na obrót
const int dirPin = 2;
const int stepPin = 3;
const int stepsPerRevolution = 200;
void setup()
{
// deklarujemy piny jako wyjściowe
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
}
void loop()
{
// ustalamy kierunek obrotu zgodny z kierunkiem wskazówek zegara
digitalWrite(dirPin, HIGH);
// wolno obracamy silnikiem
for(int x = 0; x < stepsPerRevolution; x++)
{
digitalWrite(stepPin, HIGH);
delayMicroseconds(2000);
digitalWrite(stepPin, LOW);
delayMicroseconds(2000);
}
delay(1000); // czekamy sekundę
// zmieniamy kierunek obrotu silnika
digitalWrite(dirPin, LOW);
// obracamy szybko
for(int x = 0; x < stepsPerRevolution; x++)
{
digitalWrite(stepPin, HIGH);
delayMicroseconds(1000);
digitalWrite(stepPin, LOW);
delayMicroseconds(1000);
}
delay(1000); // czekamy sekunde
}
Przykładowy kod dla Arduino i DRV8825 z wykorzystaniem biblioteki AccelStepper.
W poniższym przykładzie pokazujemy jak w prosty sposób kontrolować pracę silnika wykorzystując bibliotekę AccelStepper. Aby zainstalować bibliotekę należy ja doinstalować ponieważ nie jest dołączona do ArduinoIDE. W tym celu wejdź w SZKIC -> Dołącz Bibliotekę -> Zarządzaj Bibliotekami
Wyszukaj accelstepper i zainstaluj najnowszą wersję.
Teraz przejdziemy do szkicu wraz z komentarzami opisującymi działanie konkretnych linijek:
// dołączamy bibliotekę AccelStepper
#include <AccelStepper.h>
// Definiujemy piny wpięte do Arduino do sterowania kierunkiem i krokiem
const int dirPin = 2;
const int stepPin = 3;
// Define motor interface type
#define motorInterfaceType 1
// Creates an instance
AccelStepper myStepper(motorInterfaceType, stepPin, dirPin);
void setup() {
// ustawiamy kolejno: prędkość maksymalną, przyspieszenie
// prędkość domyślą, ilość kroków do wykonania
myStepper.setMaxSpeed(1000);
myStepper.setAcceleration(50);
myStepper.setSpeed(200);
myStepper.moveTo(200);
}
void loop() {
// jeśli silnik osiągnie 200 kroków ustalony w moveTo to zmieniamy kierunek obrotu
if (myStepper.distanceToGo() == 0)
myStepper.moveTo(-myStepper.currentPosition());
// funkcja uruchamiająca silnik, dopiero po jej wywołaniu następuje obrót według ustalonych parametrów
myStepper.run();
}
Podsumowując to co dzieje się w kodzie kolejno:
dodajemy do sketchu bibliotekę AccelStepper, potem tworzymy stałe dirPin oraz stepPin i nadajemy im wartość jednakową z portem Arduino, który jest podłączony do pinów STEP i DIR na naszym DRV8825. Jeśli chodzi o motorInterfaceType to w naszym przypadku będzie to wartość 1, inne można odszukać w dokumentacji do biblioteki. Kolejno tworzymy obiekt myStepper i podajemy wymagane argumenty.
W sekcji SETUP ustalamy maksymalna prędkość na 1000, przyspieszenie na 50 i całkowity obrót silnika wokół osi na 200.
Następnie ustalamy, że chcemy aby wykonał 200 kroków wpisując tą wartość do moveTo();
W sekcji LOOP warunkiem if sprawdzamy ile kroków pozostało do końca ustalonego ruchu – w naszym przypadku było to 200 kroków. Pomaga nam w tym funkcja distanceToGo() która zwraca wynik w postaci pozostałej ilości kroków. Jeśli licznik dojdzie do 0 zmieniamy kierunek obrotu silnika linijką myStepper.moveTo(-myStepper.currentPosition());
Najważniejszą funkcją jest myStepper.run(); silnik wprawi się w ruch dopiero po tym jak zostanie ona wykonana.
Jeśli podobał Ci się ten artykuł polub nasz fanpage na facebooku
Dzięki temu dowiesz się jako pierwszy o nowych interesujących wpisach!