|
Misol kodi - tezlashuv va sekinlashuv bilan ikkita step motorini boshqarish
|
bet | 8/13 | Sana | 09.02.2024 | Hajmi | 12,35 Mb. | | #153839 |
Bog'liq stepper word Misol kodi - tezlashuv va sekinlashuv bilan ikkita step motorini boshqarish
AccelStepper kutubxonasi yordamida tezlashtirish va sekinlashtirishni amalga oshirish bilan ikkita step motorini boshqarishning yana bir misoli.
/*
Controlling two stepper with the AccelStepper library
by Dejan, https://howtomechatronics.com
*/
#include
// Define the stepper motor and the pins that is connected to
AccelStepper stepper1(1, 2, 5); // (Typeof driver: with 2 pins, STEP, DIR)
AccelStepper stepper2(1, 3, 6);
void setup() {
stepper1.setMaxSpeed(1000); // Set maximum speed value for the stepper
stepper1.setAcceleration(500); // Set acceleration value for the stepper
stepper1.setCurrentPosition(0); // Set the current position to 0 steps
stepper2.setMaxSpeed(1000);
stepper2.setAcceleration(500);
stepper2.setCurrentPosition(0);
}
void loop() {
stepper1.moveTo(800); // Set desired move: 800 steps (in quater-step resolution that's one rotation)
stepper1.runToPosition(); // Moves the motor to target position w/ acceleration/ deceleration and it blocks until is in position
stepper2.moveTo(1600);
stepper2.runToPosition();
// Move back to position 0, using run() which is non-blocking - both motors will move at the same time
stepper1.moveTo(0);
stepper2.moveTo(0);
while (stepper1.currentPosition() != 0 || stepper2.currentPosition() != 0) {
stepper1.run(); // Move or step the motor implementing accelerations and decelerations to achieve the target position. Non-blocking function
stepper2.run();
//
//
}
}Kod tili: Arduino ( arduino )
Kod tavsifi:
Shunday qilib, biz ikkita pog'onali motorni aniqlashimiz kerak va sozlashda setAcceleration() funktsiyasidan foydalanib, motorlar uchun tezlashtirish qiymatini o'rnatamiz. setCurrentPosition() funksiyasidan foydalanib, biz motorlarning o'rnini 0 qadamda qilib qo'ydik.
Loop bo'limida biz moveTo() funktsiyasidan boshlaymiz, bu orqali biz motorni qaysi pozitsiyaga borishi yoki qancha qadam harakatlanishi kerakligini aytamiz. Chorak bosqichli rezolyutsiyada 800 qadam bitta to'liq aylanishni anglatadi. Keyin, runToPosition() funktsiyasi tezlashtirish va sekinlashtirishni amalga oshirishda motorni o'sha holatga o'tkazadi. Biroq, bu blokirovka qiluvchi funktsiyadir, shuning uchun kodning bajarilishi step vosita bu holatga kelgunga qadar qoladi.
Xuddi shu usul bilan biz ikkinchi motorni 1600 qadam yoki chorak bosqichli o'lchamlari bilan ikkita to'liq aylanishni harakatga keltiramiz.
Dvigatel maqsadli holatga kelguncha kodimiz bloklanishini istamasak, runToPosition() funksiyasidan foydalanish o‘rniga run() funksiyasidan foydalanishimiz kerak. Run() shuningdek, maqsadli pozitsiyaga erishish uchun tezlashtirish va sekinlashtirishni amalga oshiradi, lekin u har bir qo'ng'iroq uchun bir qadam qiladi. Shuning uchun, biz uni iloji boricha tez-tez chaqirishimiz kerak. Shu sababli, biz bu erda ikkala motor uchun run() funksiyalarini bu while tsikliga joylashtiramiz, bu ikkala step 0 holatiga kelgunga qadar bajariladi. Oldin ikki motorni moveTo() funksiyalari bilan 0-holatga o'tish uchun o'rnatdik.
Shuningdek, biz ushbu "while" tsikliga qo'shimcha kod qo'shishimiz va dvigatelni ishga tushirishda boshqa narsalarni qilishimiz mumkin. Aslida, motorlarni ishga tushirish va boshqa narsalarni qilishning ko'plab usullari mavjud. Men kutubxonaning chiroyli tasvirlangan hujjatlarini ko'rib chiqishni tavsiya qilaman, shunda siz har bir funktsiya qanday ishlashini tushunishingiz va ularni ehtiyojlaringizga ko'ra amalga oshirishingiz mumkin.
|
| |