Turinys:

„Arduino“valdomas žingsninio greičio valdymo meniu: 6 žingsniai
„Arduino“valdomas žingsninio greičio valdymo meniu: 6 žingsniai

Video: „Arduino“valdomas žingsninio greičio valdymo meniu: 6 žingsniai

Video: „Arduino“valdomas žingsninio greičio valdymo meniu: 6 žingsniai
Video: Lesson 95: Using L293D 4 DC Motors Shield for Arduino UNO and Mega | Arduino Step By Step Course 2024, Liepa
Anonim
Žingsninio greičio valdymo meniu, sukurtas „Arduino“
Žingsninio greičio valdymo meniu, sukurtas „Arduino“
Žingsninio greičio valdymo meniu, sukurtas „Arduino“
Žingsninio greičio valdymo meniu, sukurtas „Arduino“
Žingsninio greičio valdymo meniu, sukurtas „Arduino“
Žingsninio greičio valdymo meniu, sukurtas „Arduino“

Ši „SpeedStepper“biblioteka yra „AccelStepper“bibliotekos perrašymas, leidžiantis valdyti žingsninio variklio greitį. „SpeedStepper“biblioteka leidžia pakeisti nustatytą variklio greitį ir tada pagreitinti/sulėtinti iki naujo nustatyto greičio, naudojant tą patį algoritmą kaip ir „AccelStepper“biblioteka. „SpeedStepper“biblioteka taip pat leidžia nustatyti pliuso ir minuso ribą ir „namų“padėtį. Yra „goHome“komanda, skirta grįžti į pradinę padėtį.

Apribojimai: „SpeedStepper“biblioteka valdo tik krypties ir žingsnių išėjimus, todėl, norint iš tikrųjų valdyti žingsninį variklį, ji turi būti prijungta prie variklio tvarkyklės, pvz., „Easy Driver“. „AccelStepper“bibliotekoje yra daugiau vairavimo parinkčių, kurias prireikus galima nukopijuoti į šią biblioteką.

Pateikiami trys eskizų pavyzdžiai, kurių kiekvieną galima paleisti be variklio ar variklio tvarkyklės. speedStepperPlot eskizas išduoda greičio komandų ir komandos „goHome“pavyzdžius ir sukuria gauto greičio ir padėties brėžinį. „SpeedStepperSetup“eskizas suteikia meniu nustatymą, skirtą nustatyti variklio pagrindą ir ribas, tada paleisti variklį ir sureguliuoti greitį aukštyn ir žemyn, o „goHome“baigti. „SpeedStepperProfile“eskizas rodo greičio profilio nustatymo ir vykdymo pavyzdį.

Nors „AccelStepper“biblioteka užtikrina gerą padėties valdymą, ledo tirpimo zondo prototipo, skirto biologiniams mėginiams rinkti „Europa“, greičio kontrolė buvo reikalinga. Čia yra ankstesnės prototipo versijos vaizdo įrašas, kuriame vietoj variklio buvo naudojamas svoris. 1.1 peržiūra pridėjo greičio profilių, kai vartotojas paprašė siurblio greičio profilio valdymo priemonių.

Ši biblioteka veikia su „Arduino Uno“ir „Mega2560“, tačiau prototipui buvo naudojama didesnė atmintis / spartesnis procesorius „SparkFun Redboard Turbo“.

Ši instrukcija taip pat prieinama internete „Arduino“„Stepper Speed Control Library“bibliotekoje

Prekės

Norėdami paleisti pavyzdinius eskizus, reikia tik „Arduino UNO“arba „Mega2560“ir programinės įrangos bibliotekų

Bibliotekos bandymams ant stendo „SparkFun Redboard Turbo“buvo naudojamas su „Easy Driver“, 200 žingsnių/apsukų, 12 V 350 mA žingsniniu varikliu ir 12 DC maitinimo šaltiniu 2A ar didesniu, pvz. https://www.sparkfun.com/products/14934. USB A į mikro kabelį USB į TTL nuoseklųjį kabelį „Arduino IDE V1.8.9“ir kompiuterį, kuriame galima jį paleisti. „SpeedStepper“biblioteka „pfodParser“, skirta „nonBlockingInput“ir „pfodBufferedStream“klasėms, biblioteka, skirta blokuoti vėlavimą

1 žingsnis: bibliotekos funkcijos

„SpeedStepper“bibliotekoje veikia žingsninis variklis, kurį riboja bibliotekos nustatytos ribos. Žiūrėkite „SpeedStepper.h“failą, kuriame pateikiami įvairūs galimi bibliotekos metodai. Čia yra jų logikos eskizas.

Stepperio padėtis stebima skaičiuojant žingsnių (impulsų) skaičių. Biblioteka riboja padėtį tarp pozicijų setPlusLimit (int32_t) ir setMinusLimit (int32_t). Pliuso riba visada yra> = 0, o minuso riba visada yra <= 0. Įjungus variklio padėtis yra 0 (namuose), o ribos nustatomos į labai didelius +/- skaičius (apie +/- 1e9 žingsnius). setAcceleration (plūdė) nustato, kaip greitai variklis pakeis greitį aukštyn arba žemyn. Varikliui artėjant prie pliuso ar minuso ribos, jis sulėtės tokiu greičiu, kol sustos ties riba. Paleidžiant pagreitis nustatytas 1,0 žingsnio per sekundę. Pagreičio nustatymas visada yra +ve skaičius. „SetSpeed“(plūdės) nustatymo ženklas nustato variklio judėjimo kryptį.

setSpeed (plūdė) nustato greitį, kuriuo pagreitina / sulėtina variklį, nuo dabartinio greičio. Greitis, kurį galima nustatyti naudojant „setSpeed“(plūdė), absoliučia verte yra ribojamas nustatymų, „setMaxSpeed“(plūdės), numatytojo 1000 žingsnių per sekundę ir „setMinSpeed“(plūdės), numatytojo 0,003 žingsnio per sekundę. Šie numatytieji nustatymai taip pat yra absoliučiai griežtai koduoti greičio apribojimai, kuriuos biblioteka priims nustatymams setMaxSpeed () ir setMinSpeed (). Jei norite nustatyti maksimalų greitį> 1000 žingsnių per sekundę, turėsite redaguoti pirmąją „SpeedStepper.cpp“failo eilutę, kad pakeistumėte „maxMaxSpeed“(1000) į norimą maksimalų greitį. Praktiškai maksimalų greitį taip pat riboja laikas tarp skambučių į bibliotekos paleidimo () metodą. 1000 žingsnių per sekundę „run ()“metodas turi būti iškviestas bent kas 1 mS. Žiūrėkite skyrių „Laikas“.

Bandant nustatyti mažesnį nei min. Greitį, variklis sustos. Kiekvienas iš šių nustatytojų turi atitinkamą getterį, žr. Failą „SpeedStepper.h“. Norėdami gauti greitį, „getSetSpeed“() grąžina greitį, kurį nustatėte naudodami „setSpeed“(), o „getSpeed“() grąžina esamą variklio greitį, kuris kinta, kai jis pagreitina/sulėtina jūsų nustatytą greitį. Jei variklis neina ta kryptimi, kurią jūs manote apie +ve, galite paskambinti invertDirectionLogic () ir pakeisti variklio judėjimo kryptį +ve greičiui.

„getCurrentPosition“() grąžina esamą variklio padėtį, palyginti su „namų“(0). Galite nepaisyti esamos variklio padėties setCurrentPosition (int32_t). Naujoji pozicija ribojama nustatytose pliuso/minuso ribose.

Iš pradžių variklis sustabdomas 0 padėtyje. Paskambinus „setSpeed“(50,0), jis pradės spartėti +ve kryptimi iki maksimalaus 50 žingsnių per minutę greičio. Skambinus „hardStop“(), variklis iškart sustabdomas ten, kur jis yra. Kita vertus, paskambinus stop () metodu, greitis bus nustatytas į nulį ir variklis sulėtės iki sustojimo. Skambinimas stopAndSetHome () nedelsiant sustabdys variklį ir nustatys jo padėtį į 0. Pliuso/minuso ribos vertės nesikeičia, bet dabar nurodomos į šią naują 0 (namų) padėtį. Skambinimas „goHome“() grąžins žingsnelį į šią 0 (namų) padėtį ir sustos. Skambinimas setSpeed () atšauks kelionę namo.

„SpeedStepper“biblioteka taip pat suteikia greičio profilio valdymą metodais setProfile („SpeedProfileStruct* profileArray“, size_t arrayLen), „startProfile“(), „stopProfile“(), norėdami nutraukti veikiantį profilį ir „isProfileRunning“(). Peržiūrėkite „speedStepperProfile“eskizo pavyzdį.

2 žingsnis: „SpeedStepperPlot“pavyzdžio paleidimas be variklio

„SpeedStepperPlot“pavyzdžio paleidimas be variklio
„SpeedStepperPlot“pavyzdžio paleidimas be variklio

Įdiekite „Arduino IDE V1.8.9“Atsisiųskite ir įdiekite „SpeedStepper“biblioteką Išsaugokite „SpeedStepper.zip“ir naudokite meniu „Arduino IDE“elementą Eskizas → Įtraukti biblioteką → Pridėti. ZIP biblioteką, kad importuotumėte biblioteką Atsisiųskite ir įdiekite „millisDelay“biblioteką

Atidarykite Pavyzdžiai → SpeedStepper → speedStepperPlot pavyzdinis eskizas (jei reikia, iš naujo paleiskite IDE). Šis eskizas sukonfigūruotas dirbti su „Serial“, pvz. UNO ir Mega ir tt Jei norite naudoti „SparkFun Redboard Turbo“, žr.

Šiam pavyzdžiui paleisti nereikia vairuotojo lentos ar žingsninio variklio. Šiuose pavyzdžiuose kaip išėjimai naudojami D6 ir D7. Išvesties kaiščius galite pakeisti į bet kurią skaitmeninę išvestį, pakeisdami eskizo viršuje esančius STEP_PIN ir DIR_PIN nustatymus.

Įkelkite eskizą į lentą ir atidarykite Įrankiai → Serijinis braižytuvas 115200 baudų greičiu (RAUDONA) ir padėtimi (MĖLYNA). Pliuso riba nustatyta į 360, todėl greitis sumažėja iki nulio nuo maždaug 100 taškų x ašyje. Minuso riba yra -510. Pozicija sustoja ties ~ -390, nes buvo reikalaujama greičio iki 0,0. 380 taške x ašyje išduodamas „goHome“cmd, kuris grąžina žingsnį į nulinę padėtį.

Šis „speedStepperPlot“eskizas naudoja „millisDelays“, kad perjungtų laiką tarp įvairių greičių ir pagreičių. Daugeliu atvejų „SpeedStepperProfile“naudojimas, kaip ir kitame pavyzdyje, yra paprastesnis.

3 žingsnis: „SpeedStepperProfile“pavyzdžio paleidimas be variklio

„SpeedStepperProfile“pavyzdžio paleidimas be variklio
„SpeedStepperProfile“pavyzdžio paleidimas be variklio

Atidarykite pavyzdžių → SpeedStepper → speedStepperPlot eskizo pavyzdį, šis eskizas sukuria aukščiau pateiktą grafiką naudojant „Arduino“serijos braižytuvą ir yra nustatyto greičio profilio paleidimo pavyzdys, pavyzdžiui, naudojant siurblį.

„Stepper Speed Profiles“sudarytas iš „SpeedProfileStruct“masyvo, kuris yra apibrėžtas „SpeedStepper.h“faile.

structure SpeedProfileStruct {

plūdės greitis; // tikslinis greitis šio žingsnio pabaigoje unsigned long deltaTms; // laikas įsibėgėti nuo dabartinio greičio (šio žingsnio pradžioje) iki tikslinio greičio};

Apibrėžkite „SpeedProfileStruct“masyvą, kuriame yra kiekvieno žingsnio tikslinis greitis ir laikas, deltaTms, mS, norint pasiekti tą tikslinį greitį iš ankstesnio tikslinio greičio. Jei „deltaTms“yra lygus nuliui arba labai mažas, tada greitis iškart šoktelės iki naujo tikslinio greičio. Priešingu atveju bus apskaičiuotas reikiamas pagreitis setAcceleration (), po kurio bus iškviestas setSpeed () naujas tikslinis greitis. Visais atvejais profilį ribos esamos pliuso ir minuso padėties ribos ir maksimalaus/min greičio nustatymai. Jei norite išlaikyti greitį, tiesiog pakartokite ankstesnį greitį su norimu greičiu. Kadangi naujas tikslinis greitis yra toks pat kaip dabartinis greitis, apskaičiuotas pagreitis bus lygus nuliui ir greitis nepasikeis.

Šis „SpeedProfileStruct“masyvas sukūrė aukščiau pateiktą schemą

const SpeedProfileStruct profilis = {{0, 0}, // nedelsiant sustabdyti, jei dar nesustabdytas {0, 1000}, // palaikyti nulį 1 sekundę {-50, 0}, // pereiti prie -50 {-200, 2000}, // pakilti iki -200 {-200, 6000}, // palaikyti -200 6 sekundes {-50, 2000}, // pakilti iki -50 {0, 0}, // // nedelsiant sustoti {0, 1500}, // palaikykite nulį 1,5 sek. {50, 0}, // pereikite prie 50 {200, 2000}, // pakilkite iki 200 {200, 6000}, // palaikykite 200 6 sekundes {50, 2000}, // pakelti iki 50 {0, 0}, // // nedelsiant sustoti {0, 1000} // palaikyti nulį //, norint nubrėžti išvestį}; const size_t PROFILE_LEN = sizeof (profilis) / sizeof („SpeedProfileStruct“); // apskaičiuoti profilio masyvo dydį

Profilis nustatomas skambinant setProfile (SpeedProfileStruct* profileArray, size_t arrayLen) pvz. stepper.setProfile (profilis, PROFILE_LEN);

Nustatę profilį, paskambinkite startProfile (), kad pradėtumėte jį naudoti nuo esamo variklio greičio (paprastai pradėsite nuo sustabdyto). Pasibaigus profiliui, variklis ir toliau veiks paskutiniu tiksliniu greičiu. Galima iškviesti metodą isProfileRunning (), kad pamatytumėte, ar profilis vis dar veikia. Jei norite anksti sustabdyti profilį, galite paskambinti stopProfile (), kuris atsisakys profilio ir sustabdys variklį.

4 veiksmas: paleiskite „SpeedStepperSetup“pavyzdį be variklio

Eskizo pavyzdys yra sukurtas pagal jūsų pačių žingsninio variklio taikymo pagrindus. Jame yra meniu valdoma sąsaja, leidžianti perkelti variklį į pradinę padėtį, jei dar nėra, ir pasirinktinai iš naujo nustatyti pliuso ir minuso ribas ir tada paleisti variklį tame diapazone. Meniu „Vykdyti“leidžia padidinti ir sumažinti greitį, užšaldyti esamu greičiu, sustoti ir taip pat grįžti namo.

Šis eskizas iliustruoja daugybę programinės įrangos funkcijų, kurios nuolat reaguoja į kilpą (), kad galėtumėte pridėti savo jutiklio įvestis, kad valdytumėte žingsnį. Reikia labai stengtis išvengti vėlavimų, kurie trukdytų valdyti greitį. (Žr. Vėlavimai yra blogi)

Įdiekite aukščiau esančias bibliotekas, naudojamas „SpeedStepperPlot“, ir taip pat įdiekite „pfodParser“biblioteką. Biblioteka „pfodParser“tiekia klases „NonBlockingInput“ir „pfodBufferedStream“, kurios naudojamos vartotojo įvesties ir meniu išvesties valdymui, blokuojant ciklo () veikimą.

Atidarykite Pavyzdžiai → SpeedStepper → speedSpeedSetup pavyzdys. Šis eskizas sukonfigūruotas dirbti su „Serial“, pvz. UNO ir Mega ir tt Kaip veikti „SparkFun Redboard Turbo“, žiūrėkite žemiau.

Šiam pavyzdžiui paleisti nereikia vairuotojo lentos ar žingsninio variklio. Šiuose pavyzdžiuose kaip išėjimai naudojami D6 ir D7. Išvesties kaiščius galite pakeisti į bet kurią skaitmeninę išvestį, pakeisdami eskizo viršuje esančius STEP_PIN ir DIR_PIN nustatymus. Įkelkite eskizą į lentą ir atidarykite Įrankiai → Serial Monitor adresu 115200, kad pamatytumėte SETUP meniu.

NUSTATYMAS poz.: 0 sp: 0.00 +Lim: 500000 -Lim: -500 LATENCY: stepper: 492uS loop: 0uS p -set Home l -set limits h -goHome r -run>

Kai eskizas paleidžiamas, esama žingsnininko padėtis laikoma „namų“(0) padėtimi. Jei jums reikia perkelti žingsniuką į tikrąją pradinę padėtį, įveskite komandą p, kad būtų rodomas meniu SET HOME

SET HOME pos: 0 sp: 0.00 + Lim: 1073741808 -Lim: -1073741808 LATENCIJA: žingsninis: 752uS kilpa: 3852uS x -setHome čia ir išeiti + -Pirmyn - -Atvirkštinė s -apsikeisti pirmyn/atgal -hardStop >

Kaip matote, eskize užkoduotos ribos buvo pašalintos, todėl žingsnelį galite bet kur pakeisti. Turite pasirūpinti, kad neperžengtumėte fizinių ribų, kitaip galite ką nors sulaužyti.

Naudokite + cmd, kad pradėtumėte judinti žingsnį į priekį, jei pastebite, kad jis juda ne ta kryptimi, įveskite ne komandą arba tiesiog tuščią eilutę, kad jį sustabdytumėte, tada naudokite komandą, kad pakeistumėte pirmyn kryptį. Turėtumėte atnaujinti eskizą, kad į sąranką įtrauktumėte skambutį į invertDirectionLogic (), kad išspręstumėte tai kitam paleidimui.

Naudokite + / - cmds, kad nustatytumėte žingsnelį į teisingą nulinę padėtį. Variklis įsijungia lėtai, o toliau didina greitį, tiesiog naudokite ir tuščią eilutę, kad jį sustabdytumėte. Maksimalų greitį šiam ir apribojimų meniu nustato „MAX_SETUP_SPEED“, esantis „setupMenus.cpp“viršuje.

Kai variklis bus pastatytas į pradinę padėtį, naudokite x cmd, kad iš naujo nustatytumėte dabartinę padėtį kaip 0 ir grįžtumėte į SETUP meniu.

Jei reikia nustatyti ribas, paprastai tik pradinėje sąrankoje, naudokite l cmd, kad įeitumėte į meniu NUSTATYTI RIBAS

NUSTATYTI RIBAS pos: 0 sp: 0.00 + Lim: 1073741808 -Lim: -1073741808 LATENCIJA: žingsninis: 944uS kilpa: 5796uS l -setLimit here + -Pirmyn - -Atvirkštinis h -goHome x -exit -hardStop>

Naudokite + cmd, kad pereitumėte prie pliuso ribos, tada naudokite l cmd, kad nustatytumėte jį kaip pliuso ribą. Tada komanda h gali būti naudojama grįžti į 0, o - cmd - judėti, jei variklis yra ties minuso riba. Dar kartą naudokite l cmd, kad nustatytumėte minuso ribą. Atkreipkite dėmesį į pliuso ir minuso ribų pozicijas ir atnaujinkite sąrankos () metodo setPlusLimit ir setMinusLimit teiginius šiomis reikšmėmis.

Kai nustatytos ribos, naudokite x cmd, kad grįžtumėte į SETUP meniu, tada galite naudoti r cmd, kad atidarytumėte meniu RUN

RUN MENU pos: 0 sp: 3.31 + Lim: 500000 -Lim: -500 LATENCY: stepper: 944uS loop: 5796uS + -Speed up - -Speed down h -goHome. -„hardStop“-užšaldymo greitis> +poz.: 4 sp: 9.49 +Lim: 500000 -Lim: -500 LATENCY: stepper: 792uS loop: 5664uS pos: 42 sp: 29.15 +Lim: 500000 -Lim: -500 LATENCY: step: 792uS kilpa: 5664uS poz.: 120 sp: 49.09 +Lim: 500000 -Lim: -500 LATENCY: stepper: 792uS loop: 5664uS poz: 238 sp: 69.06 +Lim: 500000 -Lim: -500 LATENCY: stepper: 792uS loop: 5664uS

+ Cmd pradeda greitėti pirmyn ir kas 2 sekundes išspausdina padėtį ir greitį. Kai variklis pasiekia norimą greitį, galite sustabdyti greitėjimą naudodami bet kurį kitą klavišą (arba tuščią įvestį). Greitį galite sumažinti paspausdami - cmd žemyn. Sustabdžius - cmd įsibėgės atvirkščiai.

Šis RUN meniu leidžia rankiniu būdu valdyti jūsų projektą. Automatiniam valdymui turėsite pridėti keletą kitų jutiklių.

5 žingsnis: vėlavimas

Žingsninio variklio valdymas priklauso nuo programinės įrangos, nurodančios kiekvieną žingsnį. Kad išlaikytumėte nustatytą greitį, eskizas turi pakviesti metodą stepper.run () pakankamai dažnai, kad būtų galima atlikti kitą veiksmą tinkamu laiku pagal esamą greitį. Norėdami valdyti per jutiklius, turite sugebėti greitai apdoroti naujus matavimus. Padėties/greičio spausdinimas apima du LATENCY matavimus, kad galėtumėte patikrinti, ar eskizas pakankamai greitas.

„Stepper Latentcy“(„pfodBufferedStream“)

Stepper latencija matuoja maksimalų vėlavimą tarp nuoseklių iškvietimų į stepper.run () metodą. Kad žingsninis variklis veiktų 1000 žingsnių per sekundę, žingsnio delsos laikas turi būti mažesnis nei 1000 uS (1 mS). Pirmoji šio eskizo versija delsė daugelį milisekundžių. Norėdami įveikti šiuos papildomus skambučius į metodą runStepper () (kuris iškviečia stepper.run ()), kur jis pridėtas naudojant kodą. Tai visiškai neišsprendė problemos, nes meniu ir išvesties spausdinimo teiginiai užblokavo eskizą, kai mažas Serial Tx buferis buvo pilnas. Siekiant išvengti šio blokavimo, „pfodBufferedStream“iš „pfodParser“bibliotekos buvo naudojamas 360 baitų išvesties buferiui, į kurį spausdinimo pareiškimai galėtų greitai įrašyti, pridėti. Tada „pfodBufferedStream“atleidžia baitus šiuo atveju 115200 duomenų perdavimo sparta. „pfodBufferedStream“turi pasirinkti blokuoti, kai buferis yra pilnas, arba tiesiog atsisakyti perpildymo simbolių. Čia nustatyta, kad, kai buferis yra pilnas, bus atsisakyta bet kokių papildomų simbolių, kad eskizas nebūtų užblokuotas laukiant, kol „Serial“atsiųs simbolius.

Ciklo vėlavimas (NonBlockingInput)

Ciklo vėlavimas matuoja maksimalų vėlavimą tarp nuoseklių skambučių į ciklo () metodą. Tai nustato, kaip greitai galite apdoroti naujus jutiklių matavimus ir reguliuoti nustatytą variklio greitį. Kaip greitai tai turi būti, priklauso nuo to, ką bandote kontroliuoti.

Vėlavimai dėl spausdinimo pareiškimų buvo pašalinti naudojant aukščiau pateiktą pfodBufferedStream, tačiau norint apdoroti vartotojo įvestį, reikia paimti pirmąjį įvesties ženklą ir nekreipti dėmesio į likusią eilutės dalį. „NonflockingInput“klasė „pfodParer“bibliotekoje naudojama norint grąžinti ne nulinį simbolį, kai yra įvestis, naudojant „ReadInput“(), ir išvalyti bei atmesti šiuos simbolius naudojant „ClearInput“(), kol nebus gauta jokių simbolių už 10 mS, neužblokavus ciklo ()

Žinoma, ciklo delsą padidins papildomas kodas, kurį pridėsite skaitydami jutiklius ir apskaičiuodami naują nustatytą greitį. Daugelis jutiklių bibliotekų naudoja tik atidėjimą (..) nuo matavimo pradžios iki rezultato gavimo. Turėsite perrašyti šias bibliotekas, kad galėtumėte naudoti „millisDelay“, kad gautumėte matavimą po tinkamo neužblokavimo delsos.

6 veiksmas: paleiskite „SpeedStepperSetup“su žingsniniu varikliu ir „SparkFun Redboard Turbo“

„SpeedStepperSetup“veikimas su žingsniniu varikliu ir „SparkFun Redboard Turbo“
„SpeedStepperSetup“veikimas su žingsniniu varikliu ir „SparkFun Redboard Turbo“
„SpeedStepperSetup“veikimas su žingsniniu varikliu ir „SparkFun Redboard Turbo“
„SpeedStepperSetup“veikimas su žingsniniu varikliu ir „SparkFun Redboard Turbo“

Norėdami realiai paleisti „SpeedStepperSetup“eskizą, jums reikės žingsninio variklio, tvarkyklės ir maitinimo šaltinio, o šiame pavyzdyje - „SparkFun Redboard Turbo“.

Prijungimo schema aukščiau (pdf versija) rodo jungtis. „SpeedStepperSetup“eskize pakeiskite SERIAL apibrėžimą į #define SERIAL Serial1

Žingsninis variklis, maitinimo šaltinis, vairuotojas ir apsauga

Yra daugybė žingsninių variklių tipų ir dydžių. Čia bandymui naudojamas dviejų ritių 12 V 350 mA žingsninis variklis. Norėdami maitinti šį žingsnį, jums reikia 12 V ar didesnio ir didesnio nei 350 mA maitinimo šaltinio.

Šioje bibliotekoje pateikiama tik kryptis ir žingsnių išvestis, todėl jums reikia tvarkyklės, kad būtų galima sąsaja su žingsniniu varikliu. „Easy Driver“ir „Big Easy Driver“valdo variklio ritės srovę, kad galėtumėte saugiai naudoti aukštesnės įtampos maitinimo šaltinį, pavyzdžiui, naudodami 6 V maitinimą 3,3 V varikliui. „Easy Driver“gali tiekti nuo 150 mA/ritė iki 700 mA/ritė. Didesnėms srovėms „Big Easy Driver“gali tiekti iki 2 A. Perskaitykite DUK „Easy Drive“puslapio apačioje.

Šiuose pavyzdžiuose kaip žingsnio ir krypties išėjimai naudojami D6 ir D7. Išvesties kaiščius galite pakeisti į bet kurią skaitmeninę išvestį, pakeisdami eskizo viršuje esančius STEP_PIN ir DIR_PIN nustatymus.

„Sparkfun Redboard Turbo“programavimas

„Redboard Turbo“programavimas yra problemiškas. Jei nepavyksta užprogramuoti, pirmiausia vieną kartą paspauskite atstatymo mygtuką ir iš naujo pasirinkite COM prievadą „Arduino Tools“meniu ir bandykite dar kartą. Jei tai nepadeda, du kartus paspauskite atstatymo mygtuką ir bandykite dar kartą.

„Easy Driver“prijungimas

Du ritininiai žingsniniai varikliai turi 4 laidus. Naudokite multimetrą, kad surastumėte poras, kurios jungiasi prie kiekvienos ritės, tada vieną ritę prijunkite prie „Easy Driver A“gnybtų, o kitą - į „B“gnybtą. Nesvarbu, kokiu būdu juos prijungti, nes sąrankos meniu galite naudoti s cmd, kad pakeistumėte judėjimo kryptį.

Variklio maitinimo šaltinis prijungtas prie M+ ir GNDS Nustatykite plokštės loginį lygį su 3/5V jungtimi. Sutrumpinkite 3,3 V mikroprocesoriaus išėjimų, pvz., „SparkFun Redboard Turbo“, jungtį (jei paliksite ją atidarytą, ji tinka 5 V skaitmeniniams signalams, pvz., UNO, Mega) Prijunkite GND, STEP, DIR kaiščius prie mikroprocesoriaus GND ir žingsnio ir dir išvesties kaiščiai. Varikliui vairuoti nereikia jokių kitų jungčių.

USB -TTL nuoseklusis kabelis

Perkeldami „SpeedStepperSetup“eskizą iš „Uno“/„Mega“į „Redboard Turbo“, galite naiviai pakeisti „#define SERIAL Serial“į „#define SERIAL SerialUSB“, kad tiktų „Redboard Turbo“USB nuosekliajam ryšiui, tačiau pastebėsite, kad gautas žingsninis delsimas yra apie 10 mS. Tai 10 kartų lėčiau nei UNO. Taip yra dėl to, kaip „Redboard“procesorius tvarko USB ryšį. Norėdami tai padaryti, prijunkite USB prie TTL nuoseklųjį kabelį prie D0/D1 ir nustatykite#define SERIAL Serial1, kad žingsninis variklis būtų valdomas naudojant aparatūros nuoseklųjį ryšį. Naudojant „Serial1“, gaunamas LATENCY: stepper: 345uS loop: 2016uS, kuris yra 3 kartus greitesnis nei UNO, skirtas stepperiui ir ciklo vėlavimui

Terminalo programa

„Arduino“serijinį monitorių naudoti šiek tiek sunkiau, norint valdyti žingsninį variklį, nes cmd eilutėje turite įvesti simbolį ir paspausti „Enter“. Greičiau reaguojanti priemonė yra atidaryti terminalo langą „TeraTerm for PC“(arba „CoolTerm Mac“), prijungtą prie USB prie TTL kabelio COM prievado. Tada tame lange paspaudus „cmd“klavišą jis iškart išsiunčiamas. Paspaudus „Enter“tiesiog atsiųskite tuščią eilutę.

Variklio sūkių diapazono nustatymas

Kaip parodyta aukščiau, „Easy Drive“yra sukonfigūruotas 1/8 žingsniams, todėl 1000 žingsnių per sekundę variklį pasuks 1000/8/200 žingsnių/apsisukimų = 0,625 apsisukimų per sekundę arba maksimaliai 37,5 aps./min. Pakeitus įėjimus į MS1/MS2, galite perjungti 1/8, ¼, ½ ir visus žingsnius. Norėdami atlikti visus veiksmus, prijunkite MS1 ir MS2 prie GND. Tai leis pasiekti greitį iki 300 aps / min. Pasirinkę tinkamus MS1/MS2 nustatymus, galite reguliuoti sumontuotą variklio ir varomos dalies pavaros santykį.

Aparatūros apsauga

Nors „SpeedStepper“biblioteka leidžia nustatyti variklio judesio padėties ribas, padėtis fiksuojama skaičiuojant programinės įrangos išvestus žingsnius. Jei variklis užstringa, t. Y. Sukimo momento nepakanka varikliui valdyti kitame žingsnyje, tada programinės įrangos padėtis nesuderinama su variklio padėtimi. Tada, kai naudojate komandą „goHome“, variklis peržengs pradinę padėtį. Kad nepažeistumėte techninės įrangos, turite atjungti galinius jungiklius prie kietųjų ribų, kad atjungtumėte variklio maitinimą

Variklio srovės ribos nustatymas

Pirmiausia nustatykite žemiausią potenciometro nustatymą. y., įtampa TP1 yra minimali. Potenciometras yra subtilus, todėl nespauskite potenciometro pro mechaninius stabdžius. Nustatykite, kad variklis lėtai, pastoviu greičiu važiuotų lėtai, tada lėtai pasukite potenciometrą, kol variklis nesileis ir netrūkčioja tarp žingsnių.

Išvada

Šis projektas parodo, kaip praktiškai naudoti „SpeedStepper“biblioteką. Nors „AccelStepper“biblioteka užtikrina gerą padėties valdymą, ledo tirpimo zondo prototipo, skirto biologiniams mėginiams rinkti „Europa“, greičio kontrolė buvo reikalinga, todėl „AccelStepper“biblioteka buvo perrašyta taip, kad būtų užtikrintas greičio valdymas su galinėmis ribomis ir „goHome“funkcija.

Rekomenduojamas: