Startseite>I<+>2<+>C-Workshop Teil 29: Motor ansteuern mit dem DRV8830
Aus Raspberry Pi Geek 02/2020

I<+>2<+>C-Workshop Teil 29: Motor ansteuern mit dem DRV8830 (Seite 2)

Listing 2

### eine Richtung (langsam)
$ i2cset -y 1 0x64 0x00 0x61;
### andere Richtung (langsam)
$ i2cset -y 1 0x64 0x00 0x62;
### Leerlauf
$ i2cset -y 1 0x64 0x00 0x00;
### Bremsen
$ i2cset -y 1 0x64 0x00 0x03;
### Schnelllauf
$ i2cset -y 1 0x64 0x00 0xF1;
### Fehlerregister löschen
$ i2cset -y 1 0x64 0x01 0x80;
### Fehlerregister auslesen
$ i2cget -y 1 0x64 0x01 0x04;

Testprogramm

Das Testprogramm aus Listing 3 beschleunigt den Motor langsam auf die maximale Geschwindigkeit und bremst ihn dann wieder ab. Anschließend wechselt es die Drehrichtung und beginnt das Spiel von vorne. Das Testprogramm in Aktion zeigt ein Youtube-Video [4].

Nach dem Laden aller nötigen Bibliotheken baut das Programm eine I2C-Verbindung zum Gerät mit der Adresse 0x64 auf. Die Drehrichtung (Variable direction) wird auf 1 gesetzt (Register 0, Bit 0), dann beginnt eine Endlosschleife. Innerhalb der Schleife befinden sich zwei For-Schleifen. Die eine zählt die Werte (Variable speed) für den PWM-Generator hoch, die andere wieder herunter.

Danach prüft eine If-Anweisung, welchen Wert die direction-Variable besitzt. Bei einem Wert von 1 wird direction auf 2 (Register 0, Bit 1) gesetzt, bei einem Wert von 2 setzt sie direction auf 1 zurück. So erreichen wir, dass sich die Drehrichtung nach jedem Beschleunigen und Bremsen ändert. Sie starten das Programm im Terminal mit dem Aufruf go run motor.go.

Listing 3

package main
import (
  "fmt"
  "gobot.io/x/gobot/drivers/i2c"
  "gobot.io/x/gobot/sysfs"
  "time"
)
func main() {
  bus,_ := sysfs.NewI2cDevice("/dev/i2c-1")
  device := i2c.NewConnection(bus,0x64)
  defer func() {device.Close()}()
  var (control uint8
     speed uint8
     direction uint8 =1
    )
  for;;{
    fmt.Println("speed up")
    for speed = 0x06; speed<0x3F ; speed++ {
      control = (speed<<2)+direction
      device.WriteByteData(0x00,control)
      time.Sleep(200*time.Millisecond)
    }
    fmt.Println("slow down")
    for speed = 0x3F; speed>0x06 ; speed-- {
      control = (speed<<2)+direction
      device.WriteByteData(0x00,control)
      time.Sleep(200*time.Millisecond)
    }
    if (direction==1){direction=2} else {direction=1}
    fmt.Println("change direction")
  }// for;;
}//main

Fazit

Der Halbleiter DRV8830 findet sicherlich in vielen Projekten seinen Platz. Der große Vorteil: Ein Motor lässt sich direkt aus einem Controller heraus ansteuern, und man muss sich fast keine Gedanken um die Treiberendstufen machen. Wer schon einmal versucht hat, eine H-Brücke aus diskreten Bauteilen zusammenzulöten, der weiß, was gemeint ist: Da kann eine Menge schiefgehen. Eine falsch angesteuerte H-Brücke verursacht zuweilen spektakuläre Kurzschlüsse. 

Der Autor

Martin Mohr entwickelte schon in früher Jugend eine Vorliebe für alles, was blinkt. Das verstärkte sich durch eine Ausbildung zum Elektroniker. Nach einem Studium der Informatik entwickelte er überwiegend Java-Applikationen. Mit dem RasPi erwachte die alte Liebe zur Elektronik wieder.

Infos

  1. DRV8830-Modul: https://de.aliexpress.com/item/32711389232.html
  2. Datenblatt DRV8830: http://www.ti.com/lit/ds/symlink/drv8830.pdf
  3. I2C-Workshop (Teil 18): Martin Mohr, “Unter Kontrolle”, RPG 04/2018, S. 80, https://www.raspi-geek.de/40583
  4. Video des Testprogramms: https://youtu.be/tf4N8rSKQso
DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 5 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
€0,99 – Kaufen
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland