tb6612 --- ไดรเวอร์มอเตอร์ TB6612

โมดูล tb6612 ให้ไดรเวอร์สำหรับ TB6612 motor driver โดยเปิดเผยคลาส Motor สำหรับขับเคลื่อนมอเตอร์ DC หนึ่งตัวบนหนึ่งในสองช่อง และคลาส Stepper สำหรับขับเคลื่อนมอเตอร์สเต็ปเปอร์แบบ 4 สาย

ทั้งสองคลาสใช้ pyb.Timer(4) ที่ 1 kHz บนพิน P7 และ P8 สำหรับเอาต์พุต PWM พินทิศทางของ Motor คือ P3/P2 (ช่อง 1) และ P1/P0 (ช่อง 2) Stepper ใช้พินทั้งสี่ (P3, P2, P1, P0) บวกกับช่อง PWM ทั้งสอง

ตัวอย่าง:

from tb6612 import Motor, Stepper

m = Motor(1)
m.set_speed(50)      # 50% duty forward

s = Stepper(stepnumber=200, rpms=2, power=50)
s.step(100)          # advance 100 steps

คลาส Motor

class tb6612.Motor(channel: int)

สร้างตัวควบคุมมอเตอร์ DC ที่ผูกกับหนึ่งในสองช่อง TB6612

  • channel: หมายเลขช่องมอเตอร์ 1 ใช้พินทิศทาง P3/P2 และพิน PWM P7 (timer 4, channel 1) 2 ใช้พินทิศทาง P1/P0 และพิน PWM P8 (timer 4, channel 2)

set_speed(pwm: int) None

ตั้งค่าความเร็วและทิศทางของมอเตอร์

  • pwm: Duty cycle แบบมีเครื่องหมายในช่วง -100 ถึง 100 ค่าบวกขับเคลื่อนมอเตอร์ไปข้างหน้า ค่าลบขับเคลื่อนในทิศทางกลับ ค่าสัมบูรณ์ถูกนำมาใช้เป็นเปอร์เซ็นต์ duty cycle PWM ไปยังพินพลังงาน

คลาส Stepper

class tb6612.Stepper(stepnumber: int = 200, rpms: int = 2, power: int = 50)

สร้างตัวควบคุมมอเตอร์สเต็ปเปอร์แบบ 4 สาย กำหนดค่าพินทิศทาง P3, P2, P1, P0 และช่อง PWM สองช่องบน P7 และ P8 จากนั้นใช้ความเร็วและพลังงานที่ร้องขอ

  • stepnumber: จำนวนขั้นตอนเต็มต่อรอบของมอเตอร์สเต็ปเปอร์ที่เชื่อมต่อ ใช้ร่วมกับ rpms เพื่อคำนวณเวลาหน่วงระหว่างขั้นตอน

  • rpms: ความเร็วการหมุนเป้าหมายเป็นรอบต่อนาที ส่งต่อไปยัง set_speed()

  • power: เปอร์เซ็นต์ duty cycle PWM (0-100) ที่ใช้กับช่องพลังงานทั้งสอง ส่งต่อไปยัง set_power()

phase_list() Generator[tuple[int, int, int, int], None, None]

เจเนอเรเตอร์ที่วนซ้ำรูปแบบไดรฟ์สี่เฟสอย่างไม่สิ้นสุด (1, 0, 0, 0), (0, 0, 1, 0), (0, 1, 0, 0), (0, 0, 0, 1) ที่ใช้โดย step() แต่ละองค์ประกอบทูเพิลคือค่าที่จะเขียนไปยัง pin1, pin2, pin3, pin4 ตามลำดับ

set_speed(rpms: int) None

อัปเดตความเร็วการก้าว

  • rpms: ความเร็วการหมุนเป้าหมายเป็นรอบต่อนาที เวลาหน่วงต่อครึ่งขั้นตอน (เป็นไมโครวินาที) จะถูกคำนวณใหม่เป็น 1000000 / (rpms * stepnumber) / 2

set_power(power: int) None

ตั้งค่า duty cycle PWM ที่ใช้กับช่องพลังงานทั้งสอง

  • power: เปอร์เซ็นต์ duty cycle ในช่วง 0 ถึง 100

step(num: int) None

ขยับสเต็ปเปอร์ไปข้างหน้า num การเปลี่ยนเฟส โดยใช้เฟสถัดไปจาก phase_list() และรอเวลาหน่วงระหว่างขั้นตอนที่กำหนดค่าไว้ (ผ่าน pyb.udelay) ระหว่างการเปลี่ยนแปลง

  • num: จำนวนขั้นตอนเฟสที่จะก้าว แต่ละการเรียก step ก้าวไปข้างหน้าตามจำนวนเฟสนี้เท่านั้น ทิศทางถูกกำหนดคงที่ (เจเนอเรเตอร์เฟสพื้นฐานวนซ้ำไปข้างหน้าเท่านั้น)