SparkFun moto: Bit I2C-Betrieb und Verwendung von MicroPython

Auslösen

Ich habe SparkFun moto: bit, eine Art Motortreiber für micro: bit.

IMG_4065.JPG

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

Umfrageergebnisse

I2C-Adresse

Die I2C-Adresse lautet 0x59 (89).

Format der von I2C gesendeten Steuerinformationen

Alle sind 2-Byte-Konfigurationen. Das erste Byte ist der Steuertyp und das zweite Byte ist der Parameter.

Geschwindigkeit angeben

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.

Inversionsbezeichnung der Fahrtrichtung

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).

Festlegen, ob der Motor aktiviert / deaktiviert werden soll

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.

Deshalb habe ich die MycroPython-Bibliothek erstellt

Quellcode

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

Wie benutzt man

Modulimport

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.

Beispielcode

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()

Beiseite

  1. 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.

  2. 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.

  3. 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.

Recommended Posts

SparkFun moto: Bit I2C-Betrieb und Verwendung von MicroPython
Lesen und verwenden Sie Python-Dateien aus Python
Bitoperation
Verwenden Sie dein.vim und ckw-mod mit Windows7 32bit PowerShell