পাঠ ৩৯ · ৫৭-এর মধ্যে · মডিউল ৯
Home / Courses / Microprocessors, Embedded Systems & IoT / স্টেপার মোটর

স্টেপার মোটর কন্ট্রোল

Stepper motor control
৯ মিনিট পড়া মধ্যম · Intermediate Python সিমুলেশনসহ সম্পূর্ণ বাংলায়

এই পাঠে যা শিখবেন

  • স্টেপার মোটর কীভাবে DC/সার্ভো মোটর থেকে ভিন্নভাবে কাজ করে
  • ফুল-স্টেপ ও হাফ-স্টেপ কয়েল-এনার্জাইজেশন সিকোয়েন্স টেবিল
  • কীভাবে স্টেপ সংখ্যা থেকে প্রকৃত পজিশন/অ্যাঙ্গেল গণনা করতে হয়
  • সিকোয়েন্স উল্টে দিক পরিবর্তনের সফটওয়্যার কৌশল

১ · স্টেপার মোটর কীভাবে ভিন্ন

L38-এর DC ও সার্ভো মোটর উভয়ই একটি "অ্যানালগ-স্টাইল" ইনপুট (ডিউটি সাইকেল বা পালস-উইথ) নিয়ে কাজ করে। একটি স্টেপার মোটরStepper Motorএকটি মোটর যা একটি নির্দিষ্ট কয়েল-এনার্জাইজেশন সিকোয়েন্স অনুসরণ করে প্রতিবার একটি নির্ভুল, বিচ্ছিন্ন কোণ ("এক স্টেপ") করে ঘোরে। সম্পূর্ণ ভিন্ন — এর ভেতরে একাধিক কয়েল থাকে, আর মাইক্রোকন্ট্রোলার একটি নির্দিষ্ট ক্রমে (সিকোয়েন্সে) সেগুলো ON/OFF করে। প্রতিটি সিকোয়েন্স-এন্ট্রি মোটরের রোটরকে একটি নির্দিষ্ট, পূর্বনির্ধারিত কোণে ("এক স্টেপ") ঘোরায় — এই কারণেই স্টেপার মোটর দিয়ে খুবই নির্ভুল, বিচ্ছিন্ন (discrete) পজিশনিং সম্ভব (যেমন 3D প্রিন্টার, CNC মেশিন), যা DC মোটরে সরাসরি সম্ভব নয়।

২ · ফুল-স্টেপ ও হাফ-স্টেপ সিকোয়েন্স

একটি সাধারণ ৪-কয়েল (২-ফেজ) স্টেপার মোটরের জন্য প্রতিটি সিকোয়েন্স-এন্ট্রিকে একটি ৪-বিট প্যাটার্ন হিসেবে লেখা যায় (প্রতিটি বিট একটি কয়েল ON/OFF নির্দেশ করে)। ফুল-স্টেপ (দুটো কয়েল একসাথে ON, বেশি টর্ক) সিকোয়েন্সে ৪টি প্যাটার্ন একটি সাইকেল তৈরি করে:

স্টেপ # কয়েল প্যাটার্ন (৪-বিট)
01100
10110
20011
31001

হাফ-স্টেপ সিকোয়েন্স এক-কয়েল-ON ও দুই-কয়েল-ON প্যাটার্ন পালাক্রমে ব্যবহার করে ৮টি প্যাটার্নের একটি সাইকেল তৈরি করে — ফলে প্রতি স্টেপে ঘূর্ণন কোণ অর্ধেক হয়ে যায় (দ্বিগুণ রেজোলিউশন, কিন্তু একটু কম টর্ক)। উভয় সিকোয়েন্সেই ক্রমটি উল্টে চালালে মোটর বিপরীত দিকে ঘোরে — এটি নিচের কোড সেলে সরাসরি দেখানো হয়েছে।

স্টেপ-সিকোয়েন্স টেবিল (৪ বা ৮ প্যাটার্ন) পরবর্তী কয়েল প্যাটার্ন রোটর ঘোরে (এক স্টেপ কোণ) নতুন পজিশন (steps, angle)
প্রতি স্টেপে সিকোয়েন্স টেবিল থেকে পরবর্তী কয়েল প্যাটার্ন প্রয়োগ করলে রোটর একটি নির্দিষ্ট, নির্ভুল কোণে অগ্রসর হয়।

৩ · Python সিমুলেশন — স্টেপ সিকোয়েন্স, পজিশন ও অ্যাঙ্গেল ট্র্যাকিং

নিচের কোড সেলে ফুল-স্টেপ ও হাফ-স্টেপ উভয় সিকোয়েন্স টেবিল বাস্তবায়ন করা হয়েছে একটি Stepper ক্লাসে। প্রতিটি step() কলে সিকোয়েন্স ইনডেক্স পরিবর্তন হয় (দিক অনুযায়ী +1 বা -1), সামগ্রিক পজিশন (মোট স্টেপ) আপডেট হয়, এবং steps_per_rev (রিভলিউশন প্রতি মোট স্টেপ সংখ্যা) দেওয়া থাকলে সেখান থেকে বর্তমান কোণও গণনা করা হয়। ফরওয়ার্ড ও রিভার্স দুই দিকেই স্টেপ ইস্যু করে দেখানো হয়েছে।

Python
# ফুল-স্টেপ সিকোয়েন্স (৪ প্যাটার্ন, দুই-কয়েল-ON, বেশি টর্ক)
FULL_STEP_SEQUENCE = [0b1100, 0b0110, 0b0011, 0b1001]

# হাফ-স্টেপ সিকোয়েন্স (৮ প্যাটার্ন, এক-কয়েল-ON ও দুই-কয়েল-ON পালাক্রমে, দ্বিগুণ রেজোলিউশন)
HALF_STEP_SEQUENCE = [0b1000, 0b1100, 0b0100, 0b0110, 0b0010, 0b0011, 0b0001, 0b1001]


class Stepper:
    def __init__(self, sequence, steps_per_rev):
        self.sequence = sequence
        self.steps_per_rev = steps_per_rev
        self.seq_index = 0
        self.position_steps = 0   # মোট (সাইন-সহ) স্টেপ সংখ্যা, শুরুর অবস্থান থেকে

    def step(self, direction=1):
        # direction=+1 মানে ফরওয়ার্ড (সিকোয়েন্সে সামনে আগানো), -1 মানে রিভার্স (পেছনে যাওয়া)
        self.seq_index = (self.seq_index + direction) % len(self.sequence)
        self.position_steps += direction
        return self.sequence[self.seq_index]

    def angle_deg(self):
        return (self.position_steps % self.steps_per_rev) * (360 / self.steps_per_rev)


STEPS_PER_REV_FULL = 200   # সাধারণ ১.৮°/স্টেপ স্টেপার মোটরের ফুল-স্টেপ রেজোলিউশন

motor = Stepper(FULL_STEP_SEQUENCE, STEPS_PER_REV_FULL)
print(f"ফুল-স্টেপ মোটর -- প্রতি রিভলিউশনে {STEPS_PER_REV_FULL} স্টেপ, প্রতি স্টেপ {360/STEPS_PER_REV_FULL:.2f}°\n")

print("ফরওয়ার্ড দিকে ৬টি স্টেপ:")
for i in range(6):
    pattern = motor.step(direction=1)
    print(f"  step {i+1}: coil = {format(pattern, '04b')}\tposition = {motor.position_steps:+d} steps"
          f"\tangle = {motor.angle_deg():.2f}°")

print("\nএখন রিভার্স দিকে ৩টি স্টেপ:")
for i in range(3):
    pattern = motor.step(direction=-1)
    print(f"  step {i+1}: coil = {format(pattern, '04b')}\tposition = {motor.position_steps:+d} steps"
          f"\tangle = {motor.angle_deg():.2f}°")

# --- হাফ-স্টেপ মোটর: দ্বিগুণ রেজোলিউশন ---
STEPS_PER_REV_HALF = 400   # হাফ-স্টেপে একই মোটরের রেজোলিউশন দ্বিগুণ (৪০০ স্টেপ/রিভলিউশন)

motor2 = Stepper(HALF_STEP_SEQUENCE, STEPS_PER_REV_HALF)
print(f"\n\nহাফ-স্টেপ মোটর -- প্রতি রিভলিউশনে {STEPS_PER_REV_HALF} স্টেপ, প্রতি স্টেপ {360/STEPS_PER_REV_HALF:.2f}°\n")

print("ফরওয়ার্ড দিকে ১০টি স্টেপ:")
for i in range(10):
    pattern = motor2.step(direction=1)
    print(f"  step {i+1}: coil = {format(pattern, '04b')}\tposition = {motor2.position_steps:+d} steps"
          f"\tangle = {motor2.angle_deg():.2f}°")

    
ফুল-স্টেপ অংশে ফরওয়ার্ড ৬ স্টেপের পর পজিশন +6 এবং অ্যাঙ্গেল ১০.৮০°, তারপর রিভার্স ৩ স্টেপের পর পজিশন কমে +3 এবং অ্যাঙ্গেল ৫.৪০° — অর্থাৎ সিকোয়েন্স ঠিক তার আগের প্যাটার্নগুলোতেই ফিরে যাচ্ছে, যা প্রমাণ করে direction=-1 সত্যিই বিপরীত দিকের ঘূর্ণন সিমুলেট করছে। হাফ-স্টেপ অংশে একই সংখ্যক ভৌত ঘূর্ণনের জন্য দ্বিগুণ স্টেপ লাগে (এবং প্রতি স্টেপ অর্ধেক কোণ), যা রেজোলিউশন-টর্ক ট্রেড-অফের একটি সরাসরি গণনাকৃত উদাহরণ।
মূল কথা · Key takeaway

স্টেপার মোটর একটি নির্দিষ্ট কয়েল-এনার্জাইজেশন সিকোয়েন্স অনুসরণ করে বিচ্ছিন্ন, নির্ভুল স্টেপে ঘোরে — ফুল-স্টেপ বেশি টর্ক দেয়, হাফ-স্টেপ দ্বিগুণ রেজোলিউশন দেয়, আর সিকোয়েন্স উল্টে দিলে (সফটওয়্যারেই) দিক উল্টে যায়, কোনো আলাদা H-ব্রিজ-স্টাইল হার্ডওয়্যারের দরকার হয় না। পরের পাঠ (L40) দেখাবে একাধিক সেন্সর রিডিং একসাথে মিলিয়ে (সেন্সর ফিউশন) কীভাবে একটি নির্ভুল অনুমান পাওয়া যায়।

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।

প্র ০১ উপরের কোড সেলে self.seq_index = (self.seq_index + direction) % len(self.sequence) লাইনে % (মডুলো) অপারেটরটি কেন প্রয়োজনীয়?

কারণ সিকোয়েন্স টেবিল একটি বৃত্তাকার (circular) কাঠামো — শেষ প্যাটার্নের পরের প্যাটার্নটি আবার প্রথমটিতে ফিরে যায় (এবং direction=-1-এ প্রথম প্যাটার্নের আগেরটি শেষে চলে যায়)। মডুলো অপারেটর ইনডেক্স সবসময় 0 থেকে len(sequence)-1-এর মধ্যে রাখে, ফলে সিকোয়েন্স স্বাভাবিকভাবে চক্রাকারে চলতে থাকে — এই কারণেই ৪-স্টেপ সাইকেলের ৫ম স্টেপ আবার প্রথম প্যাটার্নে ফিরে যায়।

প্র ০২ একটি নির্দিষ্ট মোটরের ফুল-স্টেপ রেজোলিউশন 200 স্টেপ/রিভলিউশন হলে, একই মোটরে হাফ-স্টেপ ব্যবহার করলে রেজোলিউশন কত হবে, এবং কেন?

400 স্টেপ/রিভলিউশন — দ্বিগুণ। কারণ হাফ-স্টেপ সিকোয়েন্স একই ভৌত রোটর ঘূর্ণনের মধ্যে দ্বিগুণ সংখ্যক মধ্যবর্তী কয়েল-প্যাটার্ন (এক-কয়েল ও দুই-কয়েল-ON পর্যায়ক্রমে) ব্যবহার করে, ফলে প্রতিটি প্রকৃত স্টেপের কোণ অর্ধেক হয়ে যায় — একই সংখ্যক পূর্ণ ঘূর্ণনের জন্য দ্বিগুণ সফটওয়্যার-স্টেপ লাগে।

প্র ০৩ উপরের কোড সেলে angle_deg() মেথডে self.position_steps % self.steps_per_rev ব্যবহার করার কারণ কী, শুধু self.position_steps ব্যবহার না করে?

কারণ position_steps একাধিক পূর্ণ ঘূর্ণনের পরও বাড়তেই থাকতে পারে (যেমন ৩০০ স্টেপ = দেড় ঘূর্ণন), কিন্তু "কোণ" ধারণাটি সবসময় একটি একক ঘূর্ণনের (0° থেকে 360°) মধ্যে অর্থবহ। মডুলো অপারেটর মোট স্টেপ সংখ্যাকে একক-ঘূর্ণন রেঞ্জে "মুড়িয়ে" (wrap around) আনে, ফলে angle_deg() সবসময় একটি বাস্তবসম্মত 0°-360° মান ফেরত দেয়, পূর্ণ ঘূর্ণনের সংখ্যা যত বেশিই হোক না কেন।

অনুশীলন

  1. চিন্তা করুন: ফুল-স্টেপ মোটরে ৪০০টি ফরওয়ার্ড স্টেপ ইস্যু করলে (200 স্টেপ/রিভলিউশন ধরে) angle_deg()-এর মান কত হবে বলে আপনার ধারণা?

    $400 \mod 200 = 0$, তাই অ্যাঙ্গেল $0°$ হবে — অর্থাৎ ৪০০ স্টেপ মানে ঠিক দুটো পূর্ণ ঘূর্ণন, তাই রোটর আবার তার শুরুর অবস্থানে ফিরে আসবে।

  2. পরীক্ষা করুন: উপরের কোড সেলে motor-এর ফরওয়ার্ড লুপ ৬-এর বদলে ৪ বার চালিয়ে Run চেপে দেখুন শেষ কয়েল প্যাটার্ন সিকোয়েন্সের কোন এন্ট্রিতে ফিরে আসে।

    যেহেতু FULL_STEP_SEQUENCE-এর দৈর্ঘ্য ৪, তাই ঠিক ৪টি ফরওয়ার্ড স্টেপের পর seq_index আবার ০-তে ফিরে আসবে এবং কয়েল প্যাটার্ন আবার প্রথম এন্ট্রি 1100-তে ফিরে যাবে — position অবশ্য +4-ই থাকবে (সিকোয়েন্স চক্রাকারে ফিরলেও মোট স্টেপ গণনা রিসেট হয় না)।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

  • কোর্সের সম্পূর্ণ সিলেবাস দেখুন ৫৭টি পাঠ মাইক্রোপ্রসেসর আর্কিটেকচার, এমবেডেড C, GPIO, টাইমার/PWM/ADC, সিরিয়াল প্রোটোকল, RTOS, সেন্সর/অ্যাকচুয়েটর, IoT আর্কিটেকচার, ওয়্যারলেস প্রোটোকল, MQTT/CoAP ও IoT সিকিউরিটি — বাকি পাঠগুলো শীঘ্রই যুক্ত হবে।
  • Computer Architecture & Digital Logic কোর্স সহোদর কোর্স বিট-প্যাটার্ন ও রেজিস্টার-স্টাইল ডেটার সাধারণ ভিত্তি সেই কোর্সের সাথে সম্পর্কিত এই কোর্সের L10-এ কভার করা হয়েছে।
  • সব Courses দেখুন ABCL TECH C, C++, Python, Java, JavaScript, DSA, DBMS, Discrete Mathematics, System Design, Cybersecurity, Cloud Computing & DevOps, Computer Networks, Operating Systems, Computer Architecture, Design and Analysis of Algorithms ও আরও অনেক কোর্স — সব এক জায়গায়।
আগের পাঠ
DC ও সার্ভো মোটর কন্ট্রোল