กลับไปหน้ารวมไฟล์
unipolar-stepper-motor-controlling-library-8824dd.md

Uni polar Stepper Library สำหรับ Arduino

จัดไปวัยรุ่น! วันนี้พี่จะมาแนะนำไลบรารีควบคุมสเต็ปเปอร์มอเตอร์แบบ Unipolar ที่พี่เขียนขึ้นมาเองเลย ไลบรารีนี้ใช้ได้กับมอเตอร์ Unipolar แบบ 4 เฟสทุกตัว อยากให้หมุนกี่องศา อยากให้เร็วแค่ไหน อยากให้หมุนไปทางไหน จัดให้หมด!

ฟีเจอร์เด็ดๆ ของไลบรารีตัวนี้:

  1. ควบคุมสเต็ปเปอร์มอเตอร์ Unipolar 4 เฟสได้ทุกตัว
  2. ควบคุมทิศทางการหมุน (ตาม/ทวนเข็ม)
  3. ควบคุมจำนวนรอบการหมุนได้เป๊ะๆ 1, 2, 3,... รอบ
  4. ควบคุมความเร็ว (RPM) ได้แม่นยำถึง 95%
  5. หมุนไปยังมุมที่ต้องการ (0-360 องศา) ได้แม่นยำ 80-100%

วิธีติดตั้ง: ง่ายมาก! แค่ลากโฟลเดอร์ Uni_polar_Stepper ไปวางในโฟลเดอร์ libraries ของ Arduino ซะ เช่น C:\arduino-1.6.7\libraries จากนั้นก็เรียกใช้ได้เลยในสเก็ตช์ สู้งานนะน้อง!


Project Overview

ไลบรารี "Stepper-Lib" ตัวนี้พี่ออกแบบมาให้แน่นปึ๊กตามหลัก Industrial Motion Control เลยนะ เน้นการควบคุมลำดับเฟส (Phase-Sequence Orchestration) และความแม่นยำเชิงมุมสูง ใช้เทคนิค RPM-Precision Heuristic เพื่อให้ได้ความเร็วที่แม่นยำถึง 95% ตัวไลบรารีจัดการเรื่องการสับสัญญาณ การลดผลกระทบจากแรงดันย้อนกลับ (back-EMF) และโครงสร้างโค้ดให้เป็นโมดูลาร์ เพื่อให้ใช้ง่ายและเสถียร


รายละเอียดฟังก์ชันในไลบรารี:

  1. Uni_polar_Stepper(int pin1, int pin2, int pin3, int pin4) ฟังก์ชันเริ่มต้น (Constructor) ใช้สร้างออบเจ็กต์สำหรับควบคุมมอเตอร์ โดยต้องกำหนดขาพินบน Arduino ที่จะใช้ขับมอเตอร์ทั้ง 4 เฟส ห้ามช็อตนะตัวนี้

  2. set_step_per_rev(int steps) ตั้งค่าจำนวนสเต็ปที่มอเตอร์ต้องใช้ในการหมุน 1 รอบ (Step Angle/Resolution) ต้องตั้งค่าให้ถูกต้อง มอเตอร์ถึงจะหมุนได้แม่นยำ

  3. set_RPM(int rpm) ตั้งค่าความเร็วการหมุนเป็นหน่วย RPM มอเตอร์จะหมุนด้วยความเร็วนี้โดยมีความแม่นยำสูงถึง 95%

  4. rotate_CW() สั่งให้มอเตอร์เริ่มหมุนตามเข็มนาฬิกา ถ้าอยากให้หมุนต่อเนื่อง ก็เอาไปใส่ในลูป loop() เลย

  5. rotate_CCW() สั่งให้มอเตอร์เริ่มหมุนทวนเข็มนาฬิกา (หลักการเดียวกันกับ rotate_CW())

  6. rotate(int dir) สั่งหมุนมอเตอร์ตามทิศทางที่กำหนด ถ้า dir = 1 มอเตอร์หมุนตามเข็ม, นอกนั้นหมุนทวน

  7. rotate_one_rev(int dir) สั่งให้มอเตอร์หมุนเป๊ะๆ 1 รอบ ในทิศทางที่เลือก (dir)

  8. rotate_n_rev(int dir, int num) สั่งให้มอเตอร์หมุนตามจำนวนรอบ (num) ที่ต้องการ ในทิศทางที่เลือก (dir)

  9. rotate_x_deg(int deg) สั่งให้มอเตอร์หมุนไปยังมุมที่ต้องการ (0-360 องศา) ด้วยความแม่นยำ 80-100%

ลงลึกกันแบบช่างๆ

  • การจัดระเบียบการสลับเฟสและการวิเคราะห์เฟส (Commutation-Orchestration & Phase Forensics):
    • ศูนย์กลางลอจิก 4 เฟส (The 4-Phase Logic-Hub): ระบบทำงานโดยการลำดับกระแสผ่านขดลวดคู่ที่มีจุดศูนย์กลาง (dual-center-tapped windings) การวิเคราะห์ (Forensics) เกี่ยวข้องกับการวัด "ความกว้างของพัลส์ก้าวตามเวลา (Step-Pulse Temporal-Width)" โดยการปรับดีเลย์ระหว่างการจ่ายไฟให้แต่ละเฟส เฟิร์มแวร์จะควบคุมฮาร์มอนิกของแรงบิด (torque-harmonics) และความแม่นยำของสเต็ป (step-fidelity) การวินิจฉัยมุ่งเน้นไปที่ "การวิเคราะห์ความอิ่มตัวของขดลวด (Coil-Saturate Analytics)" เพื่อให้แน่ใจว่ารอบการทำงาน (duty-cycle) ยังคงอยู่ภายใน $thermal-threshold$ ของการวินิจฉัยขดลวดมอเตอร์
    • การวินิจฉัยลำดับเฟส (Phase-Sequence Diagnostics): ไลบรารีรองรับฮิวริสติกการสลับเฟสแบบ Wave-Drive, Full-Step และ Half-Step การวิเคราะห์ (Forensics) รวมถึงการตรวจสอบรูปแบบลอจิก 4 บิต $(เช่น 0\text{b}1001 \rightarrow 0\text{b}1100)$ เพื่อให้มั่นใจว่าการเปลี่ยนผ่านทางกลไกจะราบรื่นโดยไม่ก่อให้เกิดฮาร์มอนิกแบบกระโดด (resonance-skip harmonics)
  • ความแม่นยำความเร็วและฮิวริสติกเชิงมุม (Velocity-Precision & Angular Heuristics):
    • โพรบปรับเทียบรอบ (The RPM-Calibration Probe): ระบบใช้โปรไฟล์การเคลื่อนที่แบบอิงเวลา (time-based motion-profile) การวิเคราะห์ (Forensics) เกี่ยวข้องกับการคำนวณดีเลย์ไมโครวินาที $(\Delta t = \frac{60 \times 10^6}{\text{Steps} \times \text{RPM}})$ เพื่อให้ได้ความเร็วเป้าหมาย การวินิจฉัยมุ่งเน้นไปที่ "การวิเคราะห์ความไม่แน่นอนของรอบสัญญาณนาฬิกา (Clock-Cycle Jitter Analytics)" เพื่อให้มั่นใจว่าการหมุนของเพลาจะคงที่ในช่วง 1 ถึง 200 RPM
    • การวิเคราะห์การกระจัดเชิงมุม (Angular-Displacement Forensics): ฟังก์ชัน rotate_x_deg() ช่วยให้สามารถกำหนดตำแหน่งที่แม่นยำได้ตั้งแต่ 0 ถึง 360 องศา การวิเคราะห์ (Forensics) รวมถึงการคำนวณฮิวริสติกของเศษสเต็ป (step-remainder heuristics) สำหรับเป้าหมายเชิงมุมที่ไม่ใช่จำนวนเต็ม

วิศวกรรมและการนำไปใช้

  • การวิเคราะห์สเตจขับและการสวิงของลอจิก (Driver-Stage & Logic-Swing Forensics):
    • การวิเคราะห์อาร์เรย์ ULN2003A (ULN2003A-Array Analytics): ใช้คู่ดาร์ลิงตันแบบโอเพ่นคอลเลกเตอร์ (open-collector Darlington pairs) เพื่อขับโหลดแบบเหนี่ยวนำ การวิเคราะห์ (Forensics) รวมถึงการตรวจสอบเส้นทาง "การระงับไดโอดฟลายแบ็ก (Flyback-Diode Suppression)" เพื่อป้องกันไม่ให้แรงดันย้อนกลับจากขดลวดเหนี่ยวนำ (inductive-kickback) ก่อให้เกิดการวินิจฉัยการรีเซ็ต MCU
    • การวินิจฉัยโหลดบนบัส (Bus-Load Diagnostics): การนำไปใช้จัดการกับฮาร์มอนิกชั่วขณะกระแสสูง $(\ประมาณ 500\text{mA})$ การวิเคราะห์ (Forensics) มุ่งเน้นไปที่ "ความสมบูรณ์ของกราวด์เพลนแคโทดร่วม (Common-Cathode Ground-Plane Integrity)" เพื่อรักษาระดับลอจิก (logic-thresholds) ให้สะอาด
  • การซ่อนความซับซ้อนของไลบรารีและฮาร์มอนิกของ UI (Library Abstraction & UI Harmonics):
    • เฟิร์มแวร์นี้แสดงถึง "สุนทรียะการสลับเฟสเชิงวัตถุ (Object-Oriented Commutation-Aesthetic)" โดยห่อหุ้มการจัดการบิตระดับต่ำไว้ภายในฟังก์ชัน API ระดับสูง 9 ฟังก์ชันที่อธิบายไว้ข้างต้น การวิเคราะห์ (Forensics) รวมถึงการวัด "ความล่าช้าของปริมาณคำสั่ง (Instruction-Throughput Lag)" เพื่อให้แน่ใจว่าการเรียกคำสั่งเคลื่อนที่ (motion-calls) จะไม่บล็อกการวินิจฉัยการอ่านค่าจากเซนเซอร์เสริม (auxiliary sensor-polling diagnostics)

ตัวอย่างการใช้งาน:

  1. หมุนมอเตอร์ไปทางเดียวต่อเนื่องที่ 60 RPM

/*this program will continuously rotate 4-phase unipolar stepper motor

  • with 1.8 deg step angle (200 steps/rev) at 60 RPM
  • created by Ashutosh Bhatt on 12/10/16 */

#include<Uni_polar_Stepper.h> #define steps 200 // change this steps as per motor Uni_polar_Stepper my_step_motor(8, 9, 10, 11); int rpm =60; voidsetup() { // put your setup code here, to run once: Serial.begin(9600); Serial.println("Unipolar stepper motor library test program"); my_step_motor.set_step_per_rev(steps); my_step_motor.set_RPM(rpm); Serial.println("motor rotates clockwise"); } void loop() { my_step_motor.rotate_CW(); }

  1. หมุนมอเตอร์ 1 รอบตามเข็มและ 1 รอบทวนเข็มต่อเนื่องกัน

/*this program will rotate 4-phase unipolar stepper motor

  • with 7.5 deg step angle (48 steps/rev)
  • as 1 revolution clockwise (CW) and one revolution
  • counter clockwise (CCW) at 30 RPM continuously
  • created by Ashutosh Bhatt on 12/10/16 */

#include<Uni_polar_Stepper.h> #define steps 48 Uni_polar_Stepper my_step_motor(8, 9, 10, 11); int rpm = 30; void setup() { // put your setup code here, to run once: Serial.begin(9600); Serial.println("Unipolar stepper motor library test program created by Ashutosh Bhatt"); my_step_motor.set_step_per_rev(steps); my_step_motor.set_RPM(rpm); } void loop() { Serial.println("motor rotates clockwise"); my_step_motor.rotate_one_rev(1); delay(1000); Serial.println("motor rotates anti-clockwise"); my_step_motor.rotate_one_rev(0); delay(1000); }

  1. หมุนมอเตอร์ตามเข็มที่ 100 RPM และทวนเข็มที่ 50 RPM ต่อเนื่อง

/*โปรแกรมนี้จะหมุนมอเตอร์สเต็ปเปอร์แบบ 4 เฟส แบบยูนิโพลาร์

  • ที่มีมุมสเต็ป 7.5 องศา (48 สเต็ป/รอบ)
  • ตามเข็มนาฬิกา (CW) สักหลายๆ รอบที่ 100 RPM แล้วก็
  • ทวนเข็มนาฬิกา (CCW) สักหลายๆ รอบที่ 50 RPM
  • วนลูปไปเรื่อยๆ
  • สร้างโดย Ashutosh Bhatt เมื่อ 12/10/16 */
#include<Uni_polar_Stepper.h>
#define steps 48
Uni_polar_Stepper my_step_motor(2, 3, 4, 5);
int i;
void setup()
{
Serial.begin(9600);
Serial.println("Unipolar stepper motor library test program created by Ashutosh Bhatt");
my_step_motor.set_step_per_rev(steps);
}
void loop()
{
my_step_motor.set_RPM(100);
for(i=0;i<100;i++) my_step_motor.rotate(1);
delay(2000);
my_step_motor.set_RPM(50);
for(i=0;i<100;i++)my_step_motor.rotate(0);
delay(2000);
}
  1. หมุนมอเตอร์ 4 รอบตามเข็มที่ 20 RPM และ 2 รอบทวนเข็มที่ 10 RPM วนลูปไปเรื่อยๆ

/*โปรแกรมนี้จะหมุนมอเตอร์สเต็ปเปอร์แบบ 4 เฟส แบบยูนิโพลาร์

  • ที่มีมุมสเต็ป 1.8 องศา (200 สเต็ป/รอบ)
  • 4 รอบตามเข็มนาฬิกา (CW) ที่ 20 RPM แล้วก็
  • 2 รอบทวนเข็มนาฬิกา (CCW) ที่ 10 RPM
  • วนลูปไปเรื่อยๆ
  • สร้างโดย Ashutosh Bhatt เมื่อ 12/10/16 */
#include<Uni_polar_Stepper.h>
#define steps 200
Uni_polar_Stepper my_step_motor(2, 3, 4, 5);
int i;
void setup()
{
Serial.begin(9600);
Serial.println("Unipolar stepper motor library test program created by Ashutosh Bhatt");
my_step_motor.set_step_per_rev(steps);
}
void loop()
{
my_step_motor.set_RPM(20);
my_step_motor.rotate_n_rev(1, 4);
delay(2000);
my_step_motor.set_RPM(10);
my_step_motor.rotate_n_rev(0, 2);
delay(2000);
}
  1. หมุนมอเตอร์ 90 องศาตามเข็ม และ 90 องศาทวนเข็ม วนลูปไปเรื่อยๆ ที่ 30 RPM

/*โปรแกรมนี้จะหมุนมอเตอร์สเต็ปเปอร์แบบ 4 เฟส แบบยูนิโพลาร์

  • ที่มีมุมสเต็ป 1.8 องศา (200 สเต็ป/รอบ) ที่ 30 RPM
  • ไป 90 องศาตามเข็ม และ 90 องศาทวนเข็ม วนลูปไปเรื่อยๆ
  • สร้างโดย Ashutosh Bhatt เมื่อ 22/10/16 */
#include<Uni_polar_Stepper.h>
# define motor_steps 200
Uni_polar_Stepper my_step_motor(8, 9, 10, 11);
int rpm = 30;
void setup()
{
// put your setup code here, to run once:
Serial.begin(9600);
Serial.println("Unipolar stepper motor library test program");
my_step_motor.set_step_per_rev(motor_steps);
my_step_motor.set_RPM(rpm);
Serial.println("motor rotates 90 deg back and forth");
}
void loop()
{
my_step_motor.rotate_x_deg(90);
delay(2000);
my_step_motor.rotate_x_deg(270);
delay(2000);
}

สรุปสั้นๆ ว่าเจ๋งแค่ไหน

Stepper-Lib นี่แหละตัวดี! มันคือสุดยอดของ การวินิจฉัยการเคลื่อนที่แบบอะซิงโครนัสในระดับอุตสาหกรรม เลยนะน้อง พอเราเชี่ยวชาญเรื่อง การสืบสวนการสลับขั้วแบบยูนิโพลาร์ และ การจัดลำดับเฟสแบบฮิวริสติก แล้วล่ะก็ งานนี้ ambhatt เขาจัดมาให้เราเต็มที่เลย เป็นเฟรมเวิร์กระดับโปรที่แข็งแกร่งมากๆ ช่วยให้เราเห็นภาพการควบคุมเพลาอย่างชัดเจนแจ่มแจ๋วผ่านการวินิจฉัยสเต็ปเปอร์มอเตอร์ขั้นสูง


Motion Persistence: การควบคุมโทรเมทรีแม่เหล็กไฟฟ้าให้อยู่หมัด ผ่านการสืบสวนการสลับขั้ว

ข้อมูล Frontmatter ดั้งเดิม

apps:
  - "1x Arduino IDE"
author: "ambhatt"
category: "Motors & Robotics"
components:
  - "1x Arduino UNO"
  - "1x BOOSTXL-ULN2003 ULN2003A Dual Stepper Motor BoosterPack"
description: "ไลบรารีสำหรับ Arduino ตัวนี้จัดไปเลย ใช้ควบคุมมอเตอร์สเต็ปเปอร์แบบ Unipolar ได้ทุกตัว ฟังก์ชันเทพๆ ให้เลือกใช้หมุนมอเตอร์ได้ตามใจ งานช่างตึงๆ แบบนี้ต้องลอง!"
difficulty: "Intermediate"
documentationLinks: []
downloadableFiles:
  - "https://projects.arduinocontent.cc/184bf7b8-da3b-444d-9516-1a5f69ac7838.zip"
  - "https://projects.arduinocontent.cc/184bf7b8-da3b-444d-9516-1a5f69ac7838.zip"
  - "https://projects.arduinocontent.cc/744ca444-1603-400e-ad34-d0d2a56cd0d6.zip"
encryptedPayload: "U2FsdGVkX1+7TVepC80edUmJ9bGFjnMqCH4Hm+DNUS9nDdEWiFANLIFpnzFjKTomjn/h4ZXiv9Yp2Q1CCHgmAjxHfJtBWv2xYJaKrVi2VmM="
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/unipolar-stepper-motor-controlling-library-8824dd_cover.jpg"
lang: "en"
likes: 8
passwordHash: "312ec9097a28602dc1c478a3e8cda984752b5398cf18fc14b1c69afb96a3a467"
price: 699
seoDescription: "Arduino library for controlling Unipolar Stepper Motor with various functionalities for all unipolar types."
tags:
  - "unipolar stepper motor"
  - "stepper motor driver"
  - "stepper motor"
title: "ไลบรารีควบคุม Unipolar Stepper Motor งานง่ายแต่หล่อ"
tools: []
videoLinks:
  - "https://www.youtube.com/embed/rxzb31dq2iw"
  - "https://www.youtube.com/embed/JIedbBU12y0"
views: 22937