Fork me on GitHub

Quadrofly Building a quadrocopter

5Feb/130

I2C mit dem Raspberry PI

I2C Kommunikation mit dem Raspberry PI

Da ich sehr gute Erfahrungen mit der I2C-Kommunikation zwischen den Komponenten auf dem Quadrocopter gemacht habe und der Raspberry PI über seine GPIO I2C zur Verfügung stellt, kam mir die Idee, das Telemetrie-Modul mit einem Raspberry PI auszustatten. So kann ich I2C-Befehle per SSH auf den Bus schreiben und später einen Webserver implementieren um Telemetriedaten auf dem Quadrocopter in Echtzeit anzuzeigen und Variablen während der Laufzeit anzupassen.

Zum Testen der I2C-Kommunikation habe ich mir folgende Schaltung mit einem ATTiny2313 auf einem Breadboard gesteckt:

ATTiny I2C Schaltung

ATTiny I2C Schaltung

Anschließend habe ich eine vorhandene I2C-Softwareimplementierung angepasst und auf den ATTiny geflasht. Die erweiterte Firmware gibt es bei GitHub: https://github.com/ni-c/raspberry2c

Damit man die I2C-Schnittstelle auf dem Raspberry PI nutzen kann, muss man erst das dazugehörige Kernelmodul aktivieren. Dazu öffnet man die Datei /etc/modprobe.d/raspi-blacklist.conf:


$ sudo vi /etc/modprobe.d/raspi-blacklist.conf

sucht nach der Zeile:


blacklist i2c-bcm2708

und kommentiert sie aus:


#blacklist i2c-bcm2708

Dann kann man die benötigten Kernel-Module laden:


$ modprobe i2c-bcm2708
$ modprobe i2c_dev

Um komfortabel auf den I2C-Bus schreiben zu können, installiert man noch die I2C-Tools:


$ sudo apt-get install i2c-tools

Nun kann man sich die Geräte auf dem I2C-Bus 0 mit folgendem Befehl anzeigen lassen (Bei neueren Raspberry PI Modellen sind I2C-Bus 0 und 1 vertauscht, in diesem Fall liegt I2C-Bus 1 auf dem GPIO des Raspberry PI):


$ i2cdetect -y 0

0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- 1a -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

Der ATTiny wurde unter der Adresse 0x1a gefunden. Um das I2C-Register des ATTinys auszugeben, benutzt man den Befehl i2cdump:


$ i2cdump -y 0 0x1a

Und um nun den Wert 0xff an Adresse 0x00 des Gerätes mit der Adresse 0x1a zu setzen und damit die LED anzuschalten führt man i2cset aus:


$ i2cset -y 0 0x1a 0x00 0xff

23Jun/120

Motorcontrollerboard v1.0

Lochrasterentwurf Motorcontrollerboard

Das Motorcontrollerboard ist für die Ansteuerung der vier Motor-ESCs (Electronic speed control) und den Empfang der Funksignale der RC-Fernbedienung verantwortlich.

Die Elektronik auf diesem Board benötigt eine Spannung von 5 Volt, welche durch einen MAX-604 Spannungsregler erzeugt wird. Zum Empfang der Spektrum DSM2-Signale einer DSM2-Fernbedienung kommt ein Deltang Rx35 6-Kanal-Empfänger zum Einsatz welcher mit einem ATMega88-Microcontroller verbunden ist. Dieser decodiert das Summensignal des Empfängers und sendet es über I2C an das Controllerboard, außerdem empfängt er die Sollwerte für die Motoren über I2C und generiert daraus ein PWM-Signal zur Ansteuerung der ESCs.

Schaltplan Motorcontrollerboard

Das Motorcontrollerboard wird über einen 5-poligen Anschluss mit dem Hauptcontrollerboard verbunden, über diesen läuft die Spannungsversorgung sowie die I2C-Kommunikation mit dem Controllerboard.

Motorcontrollerboard V1 Lochraster-Layout
Motorcontrollerboard V1 Lochraster-Layout
motorcontrol.bb
Version: 1.0
38.4 KiB
1043 Downloads
Details...
Motorcontrollerboard V1 Schaltplan
Motorcontrollerboard V1 Schaltplan
motorcontrol.sch
Version: 1.0
325.1 KiB
951 Downloads
Details...