Ich habe SparkFun moto: bit, eine Art Motortreiber für micro: bit.
Es ist möglicherweise billiger als Kitroniks Motortreiberplatine, aber in der Basis ist GPIO direkt mit dem Motortreiber-IC verbunden. Es sieht nicht so aus. Wenn Sie sich auf [Schaltplan] beziehen (https://cdn.sparkfun.com/assets/learn_tutorials/6/4/1/SparkFun_Micro_Bit_Moto_Bit.pdf), verarbeitet der PSoC die von I2C und dem Motortreiber gesendeten Anweisungen Es scheint, dass es eine intelligente Sache geworden ist, zu kontrollieren.
Es ist schön, den Motor steuern zu können, ohne andere Eingangs- / Ausgangspins zu verbrauchen, aber die Benutzeroberfläche wird nur von Microsofts Makecode bereitgestellt. Ich wollte es von MicroPython aus verwenden, also habe ich mir die Blockimplementierung für Makecode angesehen, um zu sehen, wie I2C es steuert.
Die Quelle des moto: bit-Blocks (TypeScript) finden Sie unten.
https://github.com/sparkfun/pxt-moto-bit/blob/master/motobit.ts
Die I2C-Adresse lautet 0x59 (89).
Alle sind 2-Byte-Konfigurationen. Das erste Byte ist der Steuertyp und das zweite Byte ist der Parameter.
Bei Angabe der Drehzahl des linken Motors (LINKER MOTOR) ist das erste Byte 0x21, und bei Angabe der Drehzahl des rechten Motors (RECHTER MOTOR) ist das erste Byte 0x20.
Geben Sie im zweiten Byte die Fahrtrichtung und die Geschwindigkeit an.
Es gibt eine Spezifikation, um die Vorwärts- / Rückwärtsbewegung des Motors umzukehren.
Das erste Byte ist 0x13, wenn der linke Motor (LINKER MOTOR) invertiert ist, und das erste Byte ist 0x12, wenn der rechte Motor (RECHTER MOTOR) invertiert ist. Das zweite Byte ist die Angabe von Inversion / Nicht-Inversion. Wenn es 1 ist, ist es Inversion, und wenn es 0 ist, wird die Inversion gestoppt (wiederhergestellt).
Beim Aktivieren / Deaktivieren des Motors ist das erste Byte 0x70.
Das zweite Byte ist die Aktivierungs- / Deaktivierungsspezifikation. Wenn es 1 ist, wird es aktiviert, und wenn es 0 ist, wird es deaktiviert.
from microbit import i2c
class Motor:
# command
LEFT = 0x21
RIGHT = 0x20
LEFT_INVERT = 0x13
RIGHT_INVERT = 0x12
ENABLE = 0x70
# direction
FORWARD = 0x80
REVERSE = 0x00
# i2c
_I2C_ADDR = 0x59
_I2C_SDA = 20
_I2C_SCL = 19
_i2c_buf = bytearray(2)
def __init__(self, motor):
self.motor = motor
def set_speed(self, speed, direction=FORWARD):
pwr = speed * 127 // 100
Motor._i2c_buf[0] = self.motor
Motor._i2c_buf[1] = (pwr | direction) \
if direction == Motor.FORWARD else (127 - pwr)
i2c.write(Motor._I2C_ADDR, Motor._i2c_buf)
def invert(self, invert):
if self.motor == Motor.LEFT:
Motor._i2c_buf[0] = Motor.LEFT_INVERT
else:
Motor._i2c_buf[0] = Motor.RIGHT_INVERT
Motor._i2c_buf[1] = int(invert)
i2c.write(Motor._I2C_ADDR, Motor._i2c_buf)
@staticmethod
def enable():
Motor._i2c_buf[0] = Motor.ENABLE
Motor._i2c_buf[1] = 1
i2c.write(Motor._I2C_ADDR, Motor._i2c_buf)
@staticmethod
def disable():
Motor._i2c_buf[0] = Motor.ENABLE
Motor._i2c_buf[1] = 0
i2c.write(Motor._I2C_ADDR, Motor._i2c_buf)
motor_left = Motor(Motor.LEFT)
motor_right = Motor(Motor.RIGHT)
Ich habe auch die Quelle auf Github gestellt.
https://github.com/MinoruInachi/micropython-microbit-mylib/blob/master/motobit.py
import motobit
API
motobit.Motor.enable()
Motor aktivieren.
motobit.motor_left.set_speed(speed, direction=Motor.FORWARD)
Stellen Sie die Drehzahl des linken Motors ein. Drehzahl: Geben Sie die Motordrehzahl von 0-100 an. 100 ist die maximale Geschwindigkeit Richtung: Motor.VORWÄRTS, um sich vorwärts zu bewegen, Motor.REVERSE, um sich rückwärts zu bewegen
motobit.motor_right.set_speed(speed, direction=Motor.FORWARD)
Stellt die Drehzahl des richtigen Motors ein. Drehzahl: Geben Sie die Motordrehzahl von 0-100 an. 100 ist die maximale Geschwindigkeit Richtung: Motor.VORWÄRTS, um sich vorwärts zu bewegen, Motor.REVERSE, um sich rückwärts zu bewegen
motobit.motor_left.invert(invert)
Stellen Sie ein, ob die Fahrtrichtung des linken Motors umgekehrt werden soll. invertieren: True --Invert, False - Nicht invertieren
motobit.motor_left.invert(invert)
Stellen Sie ein, ob die Fahrtrichtung des rechten Motors umgekehrt werden soll. invertieren: True - auf invertieren setzen, False - nicht auf invertieren setzen
motobit.Motor.disable()
Motor deaktivieren.
Machen Sie in MicroPython dasselbe wie "Experiment 1: Fahren und Drehen" auf der SparkFun-Website Dies ist der Code, den ich geschrieben habe.
from microbit import button_a, sleep
from microbot import *
while True:
if button_a.is_pressed():
Motor.enable()
motor_left.set_speed(100)
motor_right.set_speed(100)
sleep(1000)
motor_left.set_speed(100, Motor.REVERSE)
motor_right.set_speed(100)
sleep(200)
motor_left.set_speed(100)
motor_right.set_speed(100)
sleep(1000)
Motor.disable()
micro: bot kit mit diesem moto: bit geht in Vorwärtsrichtung in Rückwärtsrichtung und in Rückwärtsrichtung in VORNE Richtung. Ich werde. Zuerst habe ich mich gefragt, ob es falsch zusammengesetzt wurde, aber SparkFuns Experimentelles Video funktioniert auch so. Es ist schrecklich.
Wenn ich microbit.i2c.init () in der MicroPython-Dokumentation verwendet habe, wurde eine Fehlermeldung angezeigt, wenn diese nicht definiert wurde. Nun, die Standardeinstellungen (freq = 100000, sda = pin20, scl = pin19) sind in Ordnung. Laut der Geschichte von Github wurde es am 11.11.2016 hinzugefügt, aber es scheint, dass es sich noch nicht in der Entwicklungsumgebung widerspiegelt.
Es ist schade, dass die MicroPython-Dokumentation auf der offiziellen Website von ~~ micro: bit nicht ins Japanische übersetzt wurde. Selbstübersetzung ist verfügbar. ~~ Japanisches Dokument wurde offiziell verlinkt.