Rotacija motora i spavanje
Što ovaj primjer prikazuje
Jedna puna rotacija, jedna puna rotacija unatrag, a zatim upravljač ulazi u stanje spavanja. Prijenos u stanje mirovanja smanjuje potrošnju struje upravljača kada motor ne mora držati položaj, što je razlog zašto su pinovi ENABLE, RESET i SLEEP priključeni na GPIO umjesto da su stalno spojeni na visoki logički nivo.
Primjer koristi DRV8825.CLOCK_WISE za prvu nogu i
DRV8825.COUNTER_CLOCK_WISE za drugi. Ta imena opisuju razinu DIR koju modul postavlja, a ne zajamčenu fizičku smjer: u kojem će se smjeru vratilo okretati ovisi o tome kako ste ožičili zavojnice. Zamijenite par zavojnica jedne zavojnice kako biste je preokrenuli.
U samom zaglavlju primjera ovaj se proizvod naziva: "RAD SA: DRV8825 upravljačka ploča za steper motor: www.solde.red/333000".
Primjer koda
Brojevi pinova su dodjela NULA DeepSleep ESP32-S3 iz Quick Start. Snimljeni primjer koristi GPIO 5, 18, 19, 21 i 22; GPIO18 nije izveden na toj ploči, a ESP32-S3 nema GPIO22. Ništa drugo nije promijenjeno.
from drv8825 import DRV8825
from time import sleep
# Define pin numbers (adjust to match your board setup)
DIR_PIN = 4 # GPIO4
STEP_PIN = 5 # GPIO5
EN_PIN = 6 # GPIO6 (optional)
RST_PIN = 7 # GPIO7 (optional)
SLP_PIN = 10 # GPIO10 (optional)
# The motor should be connected via the B1,B2,A1,A2 pins
# The motor power supply should be connected to the VIN and GND pins and have a
# parallel connected capacitor, reffer to your motors datasheet for more information
# Initialize the driver
motor = DRV8825()
motor.begin(DIR=DIR_PIN, STEP=STEP_PIN, EN=EN_PIN, RST=RST_PIN, SLP=SLP_PIN)
# Configure motor behavior
motor.setStepsPerRotation(200) # Typical for 1.8° stepper motors
motor.setStepPulseLength(1000) # Microseconds per step pulse
motor.setDirection(DRV8825.CLOCK_WISE)
motor.enable()
# Step the motor forward 200 steps (one full rotation)
print("Stepping forward...")
for _ in range(200):
motor.step()
sleep(0.005) # 5ms delay between steps
# Change direction and step back
motor.setDirection(DRV8825.COUNTER_CLOCK_WISE)
print("Stepping backward...")
for _ in range(200):
motor.step()
sleep(0.005)
# Put the motor to sleep
motor.sleep()
print("Motor is now sleeping.")
Očekivani rezultat:
Stepping forward...
Stepping backward...
Motor is now sleeping.
Te tri linije su vlastiti doslovni pozivi print() u primjeru, stoga je tekst
točan.
Motor se okreće 200 koraka, okreće se u suprotnom smjeru i završava na početnoj točki. Na motoru od 1,8° u punom koraku, 200 koraka je jedno puno okretanje. Promijenite postavku mikrokoraka pomoću M0, M1 ili M2 i isti 200 impulsa pokriva proporcionalno manje: pri mikrokoraku 1/8 to je jedna osmina okreta. setStepsPerRotation() ne zna za pinove za mikrokorak, stoga je na vama da uskladite ta dva.
Nakon zadnje linije, upravljač je u mirovanju, ne drži ništa, a vratilo se slobodno okreće rukom.
Koristene funkcije
DRV8825()returns DRV8825Stvara objekt upravljača. Sam po sebi ne konfigurira ništa; svaki pin se postavlja pomoću begin().
ReturnsNova instanca upravljača bez dodijeljenih pinova.
Parametri
Ovaj konstruktor ne prima parametre.
begin(DIR, STEP, EN=None, RST=None, SLP=None)returns boolDodjeljuje kontrolne pinove i konfigurira ih kao izlaze. DIR i STEP su obavezni. EN, RST i SLP su opcionalni; priključite ih samo ako ti pinovi idu na GPIO umjesto da budu vezani za fiksnu razinu. RST i SLP se inicijaliziraju na visoku razinu, što je razina potrebna upravljaču za rad.
ReturnsIstina kad su pinovi konfigurirani.
Parametri
| Tip | Naziv | Opis |
|---|---|---|
int | DIR | GPIO broj za pin smjera. |
int | STEP | GPIO broj za pin koraka. |
int | EN | broj GPIO-a za pin za omogućavanje. Neobavezno, zadano je None. |
int | RST | broj GPIO-a za pin za resetiranje. Neobavezno, zadano je None. Na početku rada je postavljen na visoku razinu. |
int | SLP | Broj GPIO-a za pin za spavanje. Neobavezno, zadano je None. Na početku rada postavlja se na visoku razinu. |
setStepsPerRotation(steps)returns NoneModulu govori koliko koraka čini jedno puno okretanje, kako bi mogao pratiti položaj unutar okreta. Motor od 1,8 stupnjeva pri punom koraku ima 200 koraka. To ne mijenja način na koji se motor pogoni.
ReturnsNišta.
Parametri
| Tip | Naziv | Opis |
|---|---|---|
int | steps | Koraci po punoj rotaciji. |
setStepPulseLength(length)returns NonePostavlja koliko dugo se STEP pin drži visok, a zatim nizak unutar svakog poziva step(), u mikrosekundama. Postavi na 0 i step() će prebaciti pin bez dodatnog odgađanja.
ReturnsNišta.
Parametri
| Tip | Naziv | Opis |
|---|---|---|
int | length | Duljina impulsa u mikrosekundama. |
setDirection(direction)returns boolPostavlja smjer pina. Koristite klase konstante DRV8825.CLOCK_WISE i DRV8825.COUNTER_CLOCK_WISE umjesto sirovih brojeva. Svaka druga vrijednost se odbacuje i pin ostaje nepromijenjen. Nazivi konstanti opisuju DIR razinu, a ne zajamčenu smjer osovine, koji ovisi o žičanju vaše zavojnice.
ReturnsIstina ako je smjer valjan, inače lažno.
Parametri
| Tip | Naziv | Opis |
|---|---|---|
int | smjer | DRV8825.PO SATU (1) ili DRV8825.PROTIV SATU (0). |
enable()returns boolOmogućuje izlaze upravljača povlačenjem ENABLE pin-a na nisku razinu. Vraća False ako nije proslijeđen ENABLE pin pozivu begin().
ReturnsIstina ako je pin omogućen, lažno ako nije konfiguriran pin za omogućavanje.
Parametri
Ova funkcija nema parametara.
step()returns NoneNapreduje motor za jedan korak: pulsira STEP visoko, zatim nisko, čekajući konfiguriranu duljinu pulsa na svakoj razini. Također povećava broj koraka i pomiče praćenu poziciju za jedan položaj u trenutnom smjeru.
ReturnsNišta.
Parametri
Ova funkcija nema parametara.
sleep()returns boolStavlja upravljač u stanje niskog potrošnje povlačeći pin SLEEP na nisku razinu. Pozovite wakeup() prije nego što ponovno uđete u ciklus. Vraća False ako begin() nije primio nijedan pin za spavanje.
ReturnsIstina ako je pin postavljen, lažno ako nije konfiguriran nijedan pin za spavanje.
Parametri
Ova funkcija nema parametara.
Sklapanje
Struktura je uvijek ista: begin() s vašim pinovima, opisivanje motora pomoću setStepsPerRotation() i setStepPulseLength(), enable(), a zatim izvođenje koraka.
Vremensko trajanje je na vama. setStepPulseLength(1000) drži svaku razinu STEP-a 1 ms, a sleep(0.005) u petlji dodaje 5 ms između koraka, tako da motor radi s otprilike 140 koraka u sekundi. Skratite bilo koji od njih za bržu vožnju.
Pogonska jedinica ostaje napajana dok je neaktivna, osim ako joj ne naredite drugačije, a ušteda od sleep() nije mala. Tehnički list navodi da vlastita struja napajanja DRV8825 iznosi tipično 5 mA u radu, nasuprot tipično 10 µA u mirovanju, a obje su mjerenja provedena pri 24 V.
wakeup() ga vraća u aktivno stanje, a isSleeping() izvještava o trenutnom stanju. Kod kontrolera na baterije isplati se ići u stanje mirovanja između svakog pokreta.
Dvije stvari se ne isključuju spavanjem. Motor se više ne drži, pa će se sve što je opterećeno vratiti unatrag: spavajte na kraju pokreta samo ako je gubitak položaja prihvatljiv ili ako se mehanizam sam drži. I sama PWR LED dioda ploče nastavlja crpiti struju bez obzira na to što upravljač radi, osim ako ne prekinete spoj na JP1.