Cuprins:

Meniul de control al vitezei pas cu pas pentru Arduino: 6 pași
Meniul de control al vitezei pas cu pas pentru Arduino: 6 pași

Video: Meniul de control al vitezei pas cu pas pentru Arduino: 6 pași

Video: Meniul de control al vitezei pas cu pas pentru Arduino: 6 pași
Video: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, Noiembrie
Anonim
Meniul de control al vitezei pas cu pas pentru Arduino
Meniul de control al vitezei pas cu pas pentru Arduino
Meniul de control al vitezei pas cu pas pentru Arduino
Meniul de control al vitezei pas cu pas pentru Arduino
Meniul de control al vitezei pas cu pas pentru Arduino
Meniul de control al vitezei pas cu pas pentru Arduino

Această bibliotecă SpeedStepper este o rescriere a bibliotecii AccelStepper pentru a permite controlul vitezei motorului pas cu pas. Biblioteca SpeedStepper vă permite să modificați viteza motorului setată și apoi accelerați / decelerați la noua viteză setată utilizând același algoritm ca biblioteca AccelStepper. Biblioteca SpeedStepper vă permite, de asemenea, să setați limita plus și minus și o poziție „acasă”. Există o comandă goHome pentru a reveni la poziția de pornire.

Limitări: biblioteca SpeedStepper acționează doar ieșirile de direcție și pas și, prin urmare, trebuie să fie conectată la un driver de motor, cum ar fi Easy Driver, pentru a conduce efectiv motorul pas cu pas. Biblioteca AccelStepper oferă mai multe opțiuni de conducere care ar putea fi copiate în această bibliotecă, dacă este necesar.

Sunt furnizate trei schițe de exemplu, fiecare dintre acestea putând fi rulat fără motor sau driver de motor. schița speedStepperPlot emite exemple de comenzi de viteză și comanda goHome și generează un grafic al vitezei și poziției rezultate. Schița speedStepperSetup oferă o configurare bazată pe meniu pentru a seta casa și limitele motorului și apoi porniți motorul și reglați viteza în sus și în jos și mergeți la Acasă pentru a termina. Schița speedStepperProfile arată un exemplu de configurare și executare a unui profil de viteză.

În timp ce biblioteca AccelStepper oferă un control bun al poziției, controlul vitezei a fost necesar pentru sonda prototip de topire a gheții pentru colectarea probelor biologice pe Europa. Iată un videoclip al unei versiuni anterioare a prototipului, care folosea greutatea în locul unui motor. Revizia 1.1 a adăugat profiluri de viteză după ce un utilizator a solicitat un mijloc de control al profilului de viteză al unei pompe.

Această bibliotecă rulează pe Arduino Uno și Mega2560, dar pentru prototip a fost folosit un procesor mai mare de memorie / mai rapid SparkFun Redboard Turbo.

Această instrucțiune este disponibilă și online la biblioteca Stepper Speed Control Library pentru Arduino

Provizii

Pentru a rula schițele de exemplu sunt necesare doar un Arduino UNO sau Mega2560 și bibliotecile software

Pentru testarea pe bancă a bibliotecii a fost utilizat un SparkFun Redboard Turbo cu un Easy Driver, un motor pas cu pas de 200 pași / turație, 12V 350mA și o sursă de 12 DC de 2A sau mai mare, de ex. https://www.sparkfun.com/products/14934. Cablu USB A la Micro Cablu serial USB la TTL Arduino IDE V1.8.9 și un computer pe care să-l ruleze Bibliotecă SpeedStepper pfod Biblioteca Parser pentru clasele de intrare nonBlocking și pfodBufferedStream milis Bibliotecă de întârziere pentru întârzieri care nu blochează

Pasul 1: Funcțiile bibliotecii

Biblioteca SpeedStepper rulează motorul pas cu pas limitat de limite stabilite de bibliotecă. Consultați fișierul SpeedStepper.h pentru diferite metode de bibliotecă disponibile. Iată o schiță a logicii din spatele lor.

Poziția pasului este urmărită prin numărarea numărului de pași (impulsuri). Biblioteca limitează poziția între pozițiile setPlusLimit (int32_t) și setMinusLimit (int32_t). Limita plus este întotdeauna> = 0, iar limita minus este întotdeauna <= 0. La pornire, poziția motorului este 0 (acasă), iar limitele sunt setate la numere +/- foarte mari (aproximativ +/- 1e9 pași). setAcceleration (float) setează viteza cu care motorul va schimba viteza în sus sau în jos. Pe măsură ce motorul se apropie de limita plus sau minus, acesta va decelera cu această rată până când se oprește la limită. La pornire, accelerația este setată la 1,0 pași / sec / sec. Setarea accelerației este întotdeauna un număr + ve. Semnul setării setSpeed (float) setează direcția în care se va deplasa motorul.

setSpeed (float) setează viteza de accelerare / decelerare a motorului de la viteza sa curentă. Viteza care poate fi setată prin setSpeed (float) este limitată, în valoare absolută, de setări, setMaxSpeed (float), implicit 1000 de pași / sec și setMinSpeed (float), implicit 0,003 pași / sec. Aceste valori implicite sunt, de asemenea, limitele absolute de viteză codificate pe hard pe care biblioteca le va accepta pentru setMaxSpeed () și setMinSpeed (). Dacă doriți să setați o viteză maximă> 1000 de pași / sec, va trebui să editați prima linie în fișierul SpeedStepper.cpp pentru a schimba maxMaxSpeed (1000) la viteza maximă dorită. În practică, viteza maximă este, de asemenea, limitată de timpul dintre apelurile către metoda run () a bibliotecii. Pentru 1000 de pași / secțiune, metoda run () trebuie apelată cel puțin la fiecare 1mS. Consultați secțiunea de latență de mai jos.

Încercarea de a seta o viteză mai mică decât viteza minimă va determina oprirea motorului. Fiecare dintre aceste setere are un getter corespunzător, consultați fișierul SpeedStepper.h. Pentru viteză, getSetSpeed () returnează viteza setată prin setSpeed (), în timp ce getSpeed () returnează viteza curentă a motorului, care variază pe măsură ce accelerează / decelerează la viteza setată. Dacă motorul nu merge în direcția în care te gândești la un + ve, poți apela invertDirectionLogic () pentru a schimba direcția în care se deplasează motorul pentru viteze + ve.

getCurrentPosition () returnează poziția curentă a motorului în comparație cu „acasă” (0). Puteți înlocui poziția curentă a motorului setCurrentPosition (int32_t). Noua poziție este limitată pentru a se încadra în limitele setate plus / minus.

Inițial motorul este oprit în poziția 0. Apelarea setSpeed (50.0) îl va face să înceapă să accelereze în direcția + ve la o viteză maximă de 50 de pași / min. Apelarea hardStop () va opri imediat motorul acolo unde este. Pe de altă parte, apelarea metodei stop () va seta viteza la zero și va decelera motorul la o oprire. Apelarea stopAndSetHome () va opri imediat motorul și își va seta poziția la 0. Valorile limitelor plus / minus nu sunt modificate, dar acum sunt referite la această nouă poziție 0 (acasă). Apelând goHome () va readuce pasul în această poziție 0 (acasă) și se va opri. Apelarea setSpeed () va anula plecarea acasă.

Biblioteca SpeedStepper asigură, de asemenea, controlul profilului de viteză prin metodele setProfile (SpeedProfileStruct * profileArray, size_t arrayLen), startProfile (), stopProfile (), pentru a întrerupe un profil în execuție și isProfileRunning (). Vedeți schița de exemplu speedStepperProfile.

Pasul 2: Rularea exemplului SpeedStepperPlot fără motor

Rularea exemplului SpeedStepperPlot fără motor
Rularea exemplului SpeedStepperPlot fără motor

Instalați Arduino IDE V1.8.9 Descărcați și instalați biblioteca SpeedStepper Salvați SpeedStepper.zip și apoi utilizați elementul de meniu Arduino IDE Sketch → Include Library → Add. ZIP library pentru a importa biblioteca Descărcați și instalați biblioteca MillisDelay

Deschideți exemplele → SpeedStepper → speedStepperPlot schiță de exemplu (reporniți IDE, dacă este necesar). Această schiță este configurată pentru a funcționa cu Serial, de ex. UNO și Mega etc. Pentru a rula pe SparkFun Redboard Turbo, consultați mai jos.

Nu este necesară nicio placă de driver sau motor pas cu pas pentru a rula acest exemplu. Aceste exemple folosesc D6 și D7 ca ieșiri. Puteți schimba pinii de ieșire la orice ieșire digitală modificând setările STEP_PIN și DIR_PIN din partea de sus a schiței.

Încărcați schița la bord și apoi deschideți Instrumente → Serial Plotter la 115200 baud pentru a afișa graficul vitezei (ROȘU) și poziției (ALBASTRU) Limita plus este setată la 360 ceea ce face ca viteza să devină zero de la aproximativ 100 puncte pe axa x. Limita minus este -510. Poziția se oprește la ~ -390, deoarece viteza a fost cerută la 0,0. În punctul 380 de pe axa x, se emite cmD-ul goHome care readuce pasul în poziția zero.

Această schiță speedStepperPlot folosește millisDelays pentru a comuta timpul între diferite viteze și accelerații. În multe cazuri, utilizarea unui SpeedStepperProfile, ca în exemplul următor, este mai simplă.

Pasul 3: Rularea exemplului SpeedStepperProfile fără motor

Rularea exemplului SpeedStepperProfile fără motor
Rularea exemplului SpeedStepperProfile fără motor

Deschideți exemplele → SpeedStepper → speedStepperPlot schiță de exemplu, această schiță produce graficul de mai sus folosind Arduino Serial Plotter și este un exemplu de rularea unui profil de viteză prescris, de exemplu, dacă rulați o pompă.

Stepper Speed Profiles sunt alcătuite dintr-o matrice de SpeedProfileStruct, care este definită în fișierul SpeedStepper.h.

struct SpeedProfileStruct {

viteza de plutire; // viteza țintă la sfârșitul acestui pas deltaTms lungi nesemnate; // timpul de accelerare de la viteza curentă (la începutul acestui pas) la viteza țintă};

Definiți o matrice de SpeedProfileStruct care conține viteza țintă pentru fiecare pas și ora, deltaTms, în mS, pentru a atinge acea viteză țintă de la viteza țintă anterioară. Dacă deltaTms este zero sau foarte mic, atunci viteza va sări imediat la noua viteză țintă. În caz contrar, accelerarea necesară va fi calculată setAcceleration () va fi apelată urmată de un apel pentru setSpeed () pentru noua viteză țintă. În toate cazurile, profilul va fi limitat de limitele de poziție plus și minus existente și de setările de viteză max / min. Dacă doriți să mențineți o viteză, repetați viteza anterioară cu timpul pe care îl doriți. Deoarece noua viteză țintă este aceeași cu viteza curentă, accelerația calculată va fi zero și nu se produce nicio modificare.

Această matrice SpeedProfileStruct a produs graficul de mai sus

const SpeedProfileStruct profile = {{0, 0}, // opriți imediat dacă nu este deja oprit {0, 1000}, // țineți zero timp de 1sec {-50, 0}, // săriți la -50 {-200, 2000}, // rampă la -200 {-200, 6000}, // mențineți la -200 timp de 6 secunde {-50, 2000}, // rampă la -50 {0, 0}, // // opriți imediat {0, 1500}, // țineți zero timp de 1,5 secunde {50, 0}, // săriți la 50 {200, 2000}, // ridicați la 200 {200, 6000}, // țineți 200 timp de 6 secunde {50, 2000}, // rampă la 50 {0, 0}, // // opriți imediat {0, 1000} // țineți zero // pentru graficarea ieșirii}; const size_t PROFILE_LEN = sizeof (profil) / sizeof (SpeedProfileStruct); // calculați dimensiunea matricei de profiluri

Profilul este setat apelând setProfile (SpeedProfileStruct * profileArray, size_t arrayLen) de ex. stepper.setProfile (profil, PROFILE_LEN);

Odată ce profilul a fost setat, apelați startProfile () pentru a începe rularea acestuia de la viteza curentă a motorului (de obicei veți porni de la oprit). La sfârșitul profilului, motorul va continua să ruleze la ultima viteză țintă. Metoda isProfileRunning () poate fi apelată pentru a vedea dacă profilul rulează în continuare. Dacă doriți să opriți profilul mai devreme, puteți apela stopProfile (), care va abandona profilul și va opri motorul.

Pasul 4: Rularea exemplului SpeedStepperSetup fără motor

Schița de exemplu este concepută pentru a se baza pentru propria aplicație cu motor pas cu pas. Oferă o interfață cu meniu care vă permite să vă deplasați la motor în poziția sa de pornire, dacă nu este deja acolo, apoi să resetați opțional limitele plus și minus și apoi să rulați motorul în intervalul respectiv. Meniul „alergare” vă permite să măriți și să micșorați viteza, să înghețați la viteza curentă, să vă opriți și să vă întoarceți acasă.

Această schiță ilustrează o serie de caracteristici software care mențin bucla () receptivă, astfel încât să puteți adăuga propriile intrări ale senzorului pentru a controla pasul cu pas. Este nevoie de dureri pentru a evita întârzierile care ar interfera cu controlul vitezei. (Vezi Întârzierile sunt rele)

Instalați bibliotecile utilizate pentru rularea SpeedStepperPlot, de mai sus, apoi instalați și biblioteca pfodParser. Biblioteca pfodParser furnizează clasele NonBlockingInput și pfodBufferedStream care sunt utilizate pentru a gestiona intrarea utilizatorului și ieșirea din meniu cu blocarea buclei () de la rulare.

Deschideți exemplele → SpeedStepper → speedSpeedSetup. Această schiță este configurată pentru a funcționa cu Serial, de ex. UNO și Mega etc. Pentru a rula pe SparkFun Redboard Turbo, consultați mai jos.

Nu este necesară nicio placă de driver sau motor pas cu pas pentru a rula acest exemplu. Aceste exemple folosesc D6 și D7 ca ieșiri. Puteți schimba pinii de ieșire la orice ieșire digitală modificând setările STEP_PIN și DIR_PIN din partea de sus a schiței. Încărcați schița pe tablă și apoi deschideți Instrumente → Monitor serial la 115200 pentru a vedea meniul SETUP.

SETUP pos: 0 sp: 0,00 + Lim: 500000 -Lim: -500 LATENȚĂ: pas cu pas: buclă 492uS: 0uS p - set Acasă l - setare limite h - goHome r - run>

Când schița rulează, poziția curentă a pasului este luată ca poziția „acasă” (0). Dacă trebuie să repoziționați stepper-ul în adevărata sa poziție „acasă”, introduceți comanda p pentru a afișa meniul SET HOME

SET HOME pos: 0 sp: 0.00 + Lim: 1073741808 -Lim: -1073741808 LATENȚĂ: pas cu pas: buclă 752uS: 3852uS x - set Acasă aici și ieșire + - Înainte - - Reverse s - swap Forward / Reverse - hardStop >

După cum puteți vedea, limitele codate în schiță au fost eliminate, astfel încât să puteți repoziționa stepperul oriunde. Trebuie să ai grijă să nu-l treci peste limitele fizice sau s-ar putea să rupi ceva.

Folosiți + cmd pentru a începe să mutați pasul înainte, dacă găsiți că se mișcă în direcția greșită, introduceți o comandă necomandă sau doar o linie goală pentru ao opri și apoi utilizați comanda pentru a schimba direcția înainte. Ar trebui să actualizați schița pentru a include un apel la invertDirectionLogic () în configurare pentru a remedia problema pentru următoarea rundă.

Folosiți + / - cmds pentru a poziționa pasul în poziția zero corectă. Motorul pornește lent și apoi crește viteza pe măsură ce continuă, pur și simplu folosiți și goliți linia pentru a-l opri. Viteza maximă pentru aceasta și meniul pentru limite este setată de MAX_SETUP_SPEED în partea de sus a setupMenus.cpp.

Odată ce motorul a fost poziționat în poziția sa „acasă”, utilizați x cmd pentru a restabili poziția curentă ca 0 și reveniți la meniul SETUP.

Dacă trebuie să setați limitele, de obicei numai pentru configurarea inițială, utilizați l cmd pentru a accesa meniul SET LIMITS

SET LIMITE pos: 0 sp: 0,00 + Lim: 1073741808 -Lim: -1073741808 LATENȚĂ: pas cu pas: buclă 944uS: 5796uS l - set Limită aici + - Înainte - - Reverse h - goHome x - exit - hardStop>

Utilizați + cmd pentru a avansa la limita plus și apoi utilizați l cmd pentru a o seta ca limită plus. Comanda h poate fi apoi utilizată pentru a reveni la 0 și - cmd se utilizează pentru a vă deplasa dacă revine la poziția motorului la limita minus. Folosiți din nou l cmd pentru a seta limita minus. Rețineți pozițiile limitelor plus și minus și actualizați instrucțiunile setPlusLimit și setMinusLimit ale metodelor setup () cu aceste valori.

Când limitele sunt setate, utilizați x cmd pentru a reveni la meniul SETUP și apoi puteți utiliza r cmd pentru a deschide meniul RUN

MENIU RUN pos: 0 sp: 3,31 + Lim: 500000 -Lim: -500 LATENȚĂ: pas cu pas: buclă 944uS: 5796uS + - Accelerați - - Accelerați h - goHome. - hardStop - Viteza de îngheț> + poziție: 4 sp: 9,49 + Lim: 500000 -Lim: -500 LATENȚĂ: pas cu pas: buclă 792uS: 5664uS poziție: 42 sp: 29,15 + Lim: 500000 -Lim: -500 LATENȚĂ: pas cu pas: 792uS buclă: 5664uS pos: 120 sp: 49,09 + Lim: 500000 -Lim: -500 LATENȚĂ: pas cu pas: 792uS buclă: 5664uS pos: 238 sp: 69,06 + Lim: 500000 -Lim: -500 LATENȚĂ: pas cu pas: 792uS buclă: 5664uS

+ Cmd începe să accelereze în direcția înainte și imprimă poziția și viteza la fiecare 2 secunde. Când motorul atinge viteza dorită, puteți opri accelerația cu orice altă tastă (sau o intrare goală). Puteți reduce viteza folosind - cmd în jos pentru a vă opri. Dacă este oprit, - cmd va accelera în sens invers.

Acest meniu RUN oferă controlul manual al proiectului dumneavoastră. Pentru controlul automat va trebui să adăugați alți senzori.

Pasul 5: latență

Controlul motorului pas cu pas depinde de software-ul care comandă fiecare pas. Pentru a menține viteza setată, schița dvs. trebuie să apeleze metoda stepper.run () suficient de des pentru a declanșa următorul pas la momentul potrivit pentru viteza curentă. Pentru controlul prin intermediul senzorilor, trebuie să puteți procesa prompt noi măsurători. Imprimarea poziției / vitezei include două măsurători LATENȚĂ pentru a vă permite să verificați schița dvs. este suficient de rapidă.

Latență pas cu pas (pfodBufferedStream)

Latența stepper măsoară întârzierea maximă între apelurile succesive la metoda stepper.run (). Pentru a rula motorul pas cu pas la 1000 de pași pe secundă, latența pas cu pas trebuie să fie mai mică de 1000uS (1mS). Prima versiune a acestei schițe a avut o latență de multe milisecunde. Pentru a depăși acest apel suplimentar la metoda runStepper () (care apelează stepper.run ()) unde a fost adăugat prin cod. Acest lucru nu a rezolvat complet problema, deoarece mențiunea și instrucțiunile de imprimare de ieșire au blocat schița odată ce micul tampon Serial Tx a fost plin. Pentru a evita această blocare, pfodBufferedStream din biblioteca pfodParser a fost folosit pentru a adăuga un buffer de imprimare de ieșire de 360 octeți pe care declarațiile de imprimare le-ar putea scrie rapid. Apoi pfodBufferedStream eliberează octeții la rata de transmisie specificată 115200 în acest caz. pfodBufferedStream are opțiunea de a bloca fie când bufferul este plin, fie de a renunța la caracterele de revărsare. Aici este setat să renunțe la orice caractere suplimentare atunci când bufferul este plin, astfel încât schița să nu fie blocată, așteptând ca Serial să trimită caractere.

Latența buclei (NonBlockingInput)

Latența buclei măsoară întârzierea maximă între apelurile succesive la metoda loop (). Aceasta stabilește cât de repede puteți procesa noi măsurători ale senzorului și regla turația setată a motorului. Cât de rapid trebuie să fie atunci depinde de ceea ce încercați să controlați.

Întârzierile datorate declarațiilor de tipărire au fost eliminate folosind pfodBufferedStream de mai sus, dar pentru a procesa intrarea utilizatorului trebuie să luați doar primul caracter al intrării și să ignorați restul liniei. Clasa NonBlockingInput din biblioteca pfodParer este utilizată pentru a returna un caracter diferit de zero atunci când există intrare, folosind readInput () și pentru a șterge și a arunca următoarele caractere, folosind clearInput (), până când nu se primesc caractere pentru 10mS fără blocarea buclei ()

Desigur, latența buclei va fi mărită cu codul suplimentar pe care îl adăugați pentru a citi senzorii și a calcula noua viteză setată. Multe biblioteci de senzori iau felul de a folosi doar întârzierea (..) între începerea unei măsurători și recuperarea rezultatului. Va trebui să rescrieți aceste biblioteci pentru a utiliza în schimb millisDelay, pentru a prelua măsurarea după o întârziere adecvată de blocare.

Pasul 6: Rularea SpeedStepperSetup cu un motor Stepper și SparkFun Redboard Turbo

Rularea SpeedStepperSetup cu un motor pas cu pas și SparkFun Redboard Turbo
Rularea SpeedStepperSetup cu un motor pas cu pas și SparkFun Redboard Turbo
Rularea SpeedStepperSetup cu un motor pas cu pas și SparkFun Redboard Turbo
Rularea SpeedStepperSetup cu un motor pas cu pas și SparkFun Redboard Turbo

Pentru a rula schița SpeedStepperSetup pe bune, veți avea nevoie de un motor pas cu pas, un driver și o sursă de alimentare, iar în acest exemplu SparkFun Redboard Turbo.

Schema de cabluri de mai sus (versiunea pdf) prezintă conexiunile. În schița SpeedStepperSetup schimbați SERIAL definește la #define SERIAL Serial1

Motor pas cu pas, sursă de alimentare, șofer și protecție

Există multe tipuri și dimensiuni de motoare pas cu pas. Aici se utilizează un motor pas cu două bobine de 12V 350mA pentru testare. Pentru a alimenta acest stepper aveți nevoie de o sursă de alimentare de 12V sau mai mult și mai mare de 350mA.

Această bibliotecă oferă doar o ieșire de direcție și pas, astfel încât aveți nevoie de un driver pentru interfața cu motorul pas cu pas. Easy Driver și Big Easy Driver controlează curentul la bobinele motorului, astfel încât să puteți utiliza în siguranță o sursă de tensiune mai mare, de exemplu, utilizând o sursă de 6V pentru un motor de 3,3V. Easy Driver poate furniza între 150mA / bobină și 700mA / bobină. Pentru curenți mai mari, Big Easy Driver poate furniza până la 2A pe bobină. Citiți întrebările frecvente din partea de jos a paginii Easy Drive.

Aceste exemple folosesc D6 și D7 ca ieșiri Step și Direction. Puteți schimba pinii de ieșire la orice ieșire digitală modificând setările STEP_PIN și DIR_PIN din partea de sus a schiței.

Programarea Sparkfun Redboard Turbo

Programarea Redboard Turbo este problematică. Dacă programul nu reușește, apăsați mai întâi butonul de resetare o dată și reselectați portul COM din meniul Arduino Tools și reîncercați. Dacă acest lucru nu funcționează, apăsați dublu pe butonul de resetare și încercați din nou.

Cablarea Easy Driver

Două motoare pas cu bobină au 4 fire. Utilizați un multimetru pentru a găsi perechile care se conectează la fiecare bobină și apoi conectați o bobină la terminalele Easy Driver A și cealaltă bobină la terminalul B. Nu contează în ce direcție le conectați, deoarece puteți utiliza s cmd în meniul de configurare pentru a schimba direcția de mișcare.

Sursa de alimentare a motorului este conectată la M + și GND Setați nivelul logic al plăcii cu legătura de 3 / 5V. Scurtați legătura împreună pentru ieșirile de microprocesor de 3,3 V, cum ar fi SparkFun Redboard Turbo (dacă îl lăsați deschis este potrivit pentru semnale digitale de 5 V, de ex. UNO, Mega) Conectați pinii GND, STEP, DIR la microprocesorul GND și pasul și pini de ieșire dir. Nu sunt necesare alte conexiuni pentru a acționa motorul.

Cablu serial USB la TTL

Când mutați schița SpeedStepperSetup de la Uno / Mega la Redboard Turbo, s-ar putea să înlocuiți în mod naiv doar #define SERIAL Serial cu #define SERIAL SerialUSB pentru a se potrivi conexiunii seriale USB Redboard Turbo, totuși ați descoperi că latența pasului rezultată este de aproximativ 10mS. Aceasta este de 10 ori mai lent decât pentru ONU. Acest lucru se datorează modului în care procesorul Redboard gestionează conexiunea USB. Pentru a rezolva acest lucru, conectați un USB la cablul serial TTL la D0 / D1 și setați # define SERIAL Serial1 pentru a utiliza conexiunea serială hardware pentru a controla motorul pas cu pas. Utilizarea Serial1 oferă LATENȚĂ: pas cu pas: buclă 345uS: 2016uS, care este de 3 ori mai rapid decât UNO pentru latența pas cu pas și buclă

Programul terminal

Arduino Serial Monitor este puțin mai greu de utilizat pentru a controla motorul pas cu pas, deoarece trebuie să introduceți caracterul în linia cmd și apoi să apăsați Enter pentru al trimite. Un mijloc mai rapid de reacție este de a deschide o fereastră de terminal, TeraTerm pentru PC (sau CoolTerm Mac), conectată la portul COM la cablul USB la TTL. Apoi, în acea fereastră, apăsând o tastă cmd o trimiteți imediat. Apăsând Enter, trimiteți doar o linie goală.

Setarea intervalului de turație a motorului

După cum s-a conectat mai sus, Easy Drive este configurat pentru trepte de 1/8, deci 1000 de trepte / sec va roti motorul la 1000/8/200 trepte / turație = 0,625 turații pe secundă sau maxim 37,5 rpm. Prin schimbarea intrărilor în MS1 / MS2 puteți comuta între 1/8, ¼, ½ și pași complet. Pentru pași complet conectați MS1 și MS2 la GND. Acest lucru va permite viteze de până la 300 rpm. Alegerea setărilor corespunzătoare MS1 / MS2 vă permite să reglați raportul de transmisie instalat între motor și piesa acționată.

Protecție hardware

În timp ce biblioteca SpeedStepper vă permite să setați limite de poziție pentru mișcarea motorului, fixarea poziției se face prin numărarea pașilor de ieșire de către software. Dacă motorul se oprește, adică cuplul este insuficient pentru a acționa motorul la pasul următor, atunci poziția software-ului nu va fi sincronizată cu poziția motorului. Atunci când utilizați comanda „goHome”, motorul va depăși poziția de pornire. Pentru a preveni deteriorarea hardware-ului, ar trebui să montați întrerupătoare de limită la limitele dure pentru a deconecta sursa de alimentare a motorului

Setarea limitei curentului motorului

Mai întâi, setați-l la cea mai mică setare a potențiometrului. adică tensiunea la TP1 este minimă. Potențiometrul este delicat, deci nu forțați potențiometrul să treacă peste opririle mecanice. Setați motorul la o viteză constantă lentă, apoi rotiți încet potențiometrul până când motorul nu trece sau se mișcă între pași.

Concluzie

Acest proiect arată cum să utilizați biblioteca SpeedStepper într-o aplicație practică. În timp ce biblioteca AccelStepper oferă un control bun al poziției, a fost necesar controlul vitezei pentru sonda de topire a gheaței pentru colectarea probelor biologice pe Europa, astfel biblioteca AccelStepper a fost rescrisă pentru a oferi controlul vitezei cu limite de capăt și o funcție goHome.

Recomandat: