Aus RN-Wissen.de
Version vom 3. Oktober 2012, 20:14 Uhr von Dirk (Diskussion | Beiträge) (Kompassmodul HDMM01)

Wechseln zu: Navigation, Suche
Rasenmaehroboter fuer schwierige und grosse Gaerten im Test

RP6v2 Orientierung: Hardware

In diesem Projekt soll eine "Exp" (RP6#Experimentierplatine, CONRAD 191537) für den RP6v2 (natürlich auch für den RP6) "gebaut" werden, mit der sich der RP6v2 besser im Raum orientieren kann.

Die Sensoren des RP6v2 (Odometrie, ACS, Helligkeitssensoren, Bumper) helfen ihm zwar schon dabei, sich im Raum zu orientieren, aber das geht noch besser:

  • Wenn er einen Kompass bekommen würde, könnte er eine bestimmte Richtung einhalten oder genauere Kurven fahren. Ein einfach zu verwendendes Kompassmodul auf Basis des MMC2120MG von MEMSIC ist das HDMM01 (Pollin Best.-Nr. 810164). Es kann über den I2C-Bus ausgelesen und an 5V betrieben werden. Zudem ist es recht preisgünstig.
  • Wenn er auch noch einen Beschleunigungssensor bekommen würde, könnte er Bewegungen und Beschleunigungen messen. ELV bietet ein 3-Achsen-Beschleunigungssensor-Modul (ELV Best.-Nr. 91521) auf Basis des BMA020 von Bosch Sensortec an. Auch dieses Modul kann an 5V betrieben werden und verfügt über I2C-Pegelwandler, um es an einen I2C-Bus mit 5V-Pegeln anschliessen zu können.
  • Wenn er sogar noch ein GPS-Modul bekäme, könnte er seine eigene Position bestimmen. Geeignet für unsere Zwecke ist das GPS-Modul NL-552ETTL von Navilock auf Basis des u-blox5 GPS-Chipsets UBX-G5000-BT (auch z.B. bei ELV erhältlich: Artikel-Nr. 68-094241. Bitte unbedingt auch das Anschlusskabel: Artikel-Nr. 68-081846 mit bestellen!). Das Modul kann ebenfalls mit 5V betrieben werden,- leider arbeitet seine serielle Schnittstelle mit 3,3V-Pegeln. Dies ist aber kein wesentliches Problem, weil nur TX des Moduls mit einem UART-Eingangspin (RX) des Microcontrollers (µC) verbunden werden muss, und der versteht die 3,3V-TTL-Logik in der Regel ohne Probleme. Ob ein GPS-Modul für einen Roboter, der eigentlich nur in Innenräumen fahren kann, sinnvoll ist, muss jeder selbst eintscheiden. Das verwendete GPS-Modul soll allerdings mit seiner sog. SuperSense Technik auch in schwierigen Empfangssituationen noch Ergebnisse bringen.
  • Da wir schon dabei sind, können wir auch noch eine 3,3V-Pegel-Anpassung des I2C-Busses des RP6v2 auf der Exp vorsehen: Man kann dann auch I2C-Slave-Bausteine, die nur an einem 3,3V-I2C-Bus arbeiten, an den RP6v2 anschließen.

Was braucht man allgemein für den Aufbau einer Schaltung auf der Exp:

  • Seitenschneider, Schere, Zange
  • Lötkolben 25..30 Watt, Lötzinn
  • Plastik 70 Schutzlack (CONRAD 813621)
  • Isolierter Schaltdraht YV 0,20 mm² (CONRAD 606065)
  • Versilberter CU-Draht 0,6 mm (CONRAD 605581)

Mit dem versilberten CU-Draht stellt man auf der Unterseite (= Lötseite) der Exp Verbindungen zwischen den Bauteilen her; mit dem isolierten Schaltdraht werden Drahtbrücken auf der Oberseite (= Bestückungsseite) der Exp eingesetzt.

Aufbau

Hier der Schaltplan:

RP6v2 Orientierung SP.JPG

Teileliste:
C1  Elko 10µF, 16V
C2  Keram. Kondensator 0,1µF
C3  Keram. Kondensator 0,1µF
C4  Keram. Kondensator 0,1µF

R1  Kohleschicht-Widerstand 4,7 kOhm, 1/4 Watt
R2  Kohleschicht-Widerstand 10 kOhm, 1/4 Watt
R3  Kohleschicht-Widerstand 4,7 kOhm, 1/4 Watt
R4  Kohleschicht-Widerstand 10 kOhm, 1/4 Watt
R5  Kohleschicht-Widerstand 4,7 kOhm, 1/4 Watt
R6  Kohleschicht-Widerstand 4,7 kOhm, 1/4 Watt
R7  Kohleschicht-Widerstand 2,2 kOhm, 1/4 Watt

Q1  MOSFET BSN10A
Q2  MOSFET BSN10A

3,3V Spannungsregler  ST L78L33A

Viel Erfolg beim Aufbau!

Natürlich muss man nicht alle drei Sensoren aufbauen!
Man kann einfach den/die Sensor/en weglassen, die man nicht nutzen will!

Schaltungsbeschreibung

Die Schaltung ist primär ausgelegt für den Aufbau auf einer RP6 Experimentierplatine. Über den XBUS (rechte Steckverbindung) erfolgt der Anschluß der Schaltung an den I2C-Bus eines µCs und die Stromversorgung mit 5V.

Die vom XBUS nach links führenden Leiterbahnen stellen (von oben nach unten) die wesentlichen Verbindungen dar:

  • VDD (+5V)
  • GND (Masse, Minuspol des Akkus)
  • INT1 (Interrupt-Leitung)
  • SCL (5V-I2C-Bus: SCL)
  • SDA (5V-I2C-Bus: SDA)

Im RP6-System ist die XBUS-INT1-Leitung mit unterschiedlichen Portpins verbunden,- siehe: RP6#Interrupt-Zuordnung_.C3.A4ndern. Auf der RP6v2 Base liegt diese Leitung über einen 10kOhm Pulldown-Widerstand (R34) an GND. Wenn ein Pullup-Widerstand an INT1 benötigt wird, kann dieser (R7; 2,2kOhm) mit JP14 eingeschaltet werden. Über INT1 kann ein angeschlossener Sensor z.B. mitteilen, ob Daten vom Master (über den I2C-Bus) zu lesen sind.

Links im Schaltplan ist der USRBUS zu erkennen. Er dient hier nur zur Verbindung des GPS-Moduls mit dem UART eines µCs.

Kompassmodul HDMM01

Das Kompassmodul kann mit den Jumpern JP1..3 komplett deaktiviert werden. Die Verschaltung weist sonst keinerlei Besonderheiten auf.

Eine wichtige Entscheidung ist, WO man den Sensor anbringt. Er sollte möglichst weit weg von Magnetfeldern (z.B. den Motoren des RP6!) montiert sein. Ich habe ihn etwas erhöht auf der Exp ganz vorn rechts angebracht, wobei diese Exp "Orientierung" sowieso als oberste Platine auf den vorderen Stapel gehört.

Beschleunigungssensor 3D-BS

Auch dieser Sensor kann komplett deaktiviert werden (JP4..7). Er ist wie das Kompassmodul mit dem I2C-Bus (SCL, SDA) verbunden. Sein INT-Anschluß kann über JP6 mit der XBUS-INT1-Leitung verbunden werden. Zur Nutzung des INT-Anschlusses siehe das Datenblatt zum BMA020!

Ich habe den 3D-BS etwas erhöht rechts hinten auf der Exp montiert.

GPS-Modul NL-552ETTL

Das GPS-Modul kann deaktiviert werden, indem die 5-polige Steckverbindung zwischen Modul und ST1 gelöst wird. Alternativ kann auch JP8 geöffnet werden (Modul ohne Versorgungsspannung!). Das GPS-Modul sendet permanent serielle Daten im NMEA 0183 Format. Sein TX-Ausgang (3,3V-TTL-Logik) wird daher mit einem RX-Eingang eines µCs verbunden. Die Verbindung kann über den USRBUS (Y6) oder ST2 (Pin 2) erfolgen.

Für die Konfiguration des GPS-Moduls müssen auch serielle Daten an das Modul gesendet werden. Dies kann mit 5V-TTL-Pegel über den USRBUS (Y8) erfolgen (JP9 geschlossen!) oder über ST2 (Pin 3). Normalerweise wird man diese Verbindung nicht benötigen, kann also JP9 offen lassen und an Pin 3 von ST2 nichts anschliessen.

Das GPS-Modul sitzt bei mir vorn direkt an der Einbuchtung der Exp. Ich habe es mit Klett-Klebepads 25x25mm befestigt. An das Anschlußkabel des NL-552ETTL habe ich eine 5-polige Buchsenleiste angelötet, die auf ST1 gesteckt wird.

3,3V-I2C-Bus

Der 3,3V-I2C-Bus kann mit den Jumpern JP10..13 komplett deaktiviert werden. Er dient zum Anschluß von I2C-Slave-Bausteinen, die einen 3,3V-Pegel benötigen. Über ST3 (Pins 1, 2) können solche Slaves auch mit 3,3V (max. 100mA) versorgt werden. Wenn der Slave nicht über eigene Pullup-Widerstände am I2C-Bus verfügt, kann für SDA mit JP15 ein Pullup aktiviert werden. Mit JP16 ist das auch möglich für die INT-Leitung an ST3 (Pin 4).

Beispiele von Sensoren, die an ST3 anschließbar sind:

Allgemeine Daten und Tabellen

Stecker

Stecker Pins Bedeutung
ST1 5 Anschluß GPS-Modul
ST2 3 µC-Anschluß für GPS-Modul
ST3 7 3,3V-I2C-Bus Anschluß

ST1

Pin Funktion E/A Bedeutung
1 VCC NL-552ETTL +5V *
2 GND NL-552ETTL GND
3 Abschirmung NL-552ETTL Abschirmung
4 TX A NL-552ETTL TX (3,3V)
5 RX E NL-552ETTL RX (3,3V)

Zu *) Falls JP8 = ON!

An diesen Stecker ST1 wird das GPS-Modul NL-552ETTL mit seinem 5-poligen Verbindungskabel angeschlossen. Die schwarze Ader des Kabels gehört an Pin 1 von ST1! Soll das GPS-Modul nicht benutzt werden, sollte das Modul nicht mit ST1 verbunden sein (Steckverbindung!).

ST2

Pin Funktion E/A Bedeutung
1 GND NL-552ETTL GND
2 TX A NL-552ETTL TX (3,3V)
3 RX E NL-552ETTL RX (5V)

Ein µC kann auf zwei Arten Daten vom GPS-Modul empfangen:

  • 1. Über diesen Stecker ST2: In der Regel braucht man nur eine 2-adrige Verbindung von Pins 1 und 2 zum µC. Dabei wird Pin 2 mit dem UART-Eingang RX des µCs verbunden. Den 3,3V-TTL-Ausgangspegel des GPS-Moduls sollte eigentlich jeder AVR-µC verstehen, auch wenn er mit 5V betrieben wird. VORSICHT: Diesen Pin 2 nie mit einem AUSGANG eines µCs verbinden!
  • 2. Über den USRBUS: Der Ausgang TX des GPS-Moduls ist mit Pin Y6 (µC RX) des USRBUS verbunden. Auf der auswertenden Platine (Base, M32, M128, M256 WiFi) muss dann Y6 des USRBUS mit UART-Eingang RX des µCs verbunden werden.

Soll ein µC auch Daten zum GPS-Modul senden (nur nötig zur Konfiguration des Moduls!), gelingt das auch auf zwei Arten:

  • 1. Über diesen Stecker ST2: Der UART-Ausgang TX eines µCs wird mit Pin 3 dieses Steckers verbunden.
  • 2. Über den USRBUS: Der Eingang RX des GPS-Moduls ist über einen Spannungsteiler R1/R2 mit Pin Y8 (µC TX) des USRBUS verbunden, wenn JP9 geschlossen (ON) ist. Auf der steuernden Platine (Base, M32, M128, M256 WiFi) muss dann Y8 des USRBUS mit UART-Ausgang TX des µCs verbunden werden.

ST3

Pin Funktion E/A Bedeutung
1 VCC A VCC 3,3V max. 100mA *
2 VCC A VCC 3,3V max. 100mA *
3 GND 3,3V-I2C-Bus GND
4 INT E 3,3V-I2C-Bus INT Eingang
5 GND 3,3V-I2C-Bus GND
6 SDA E/A 3,3V-I2C-Bus SDA
7 SCL A 3,3V-I2C-Bus SCL Ausgang

Zu *) Falls JP13 = ON!

An diesen Stecker ST3 können 3,3V-I2C-Slave-Devices angeschlossen werden. Wenn diese über eine eigene 3,3V-Spannungsversorgung verfügen, braucht man zum Anschluß nur die Pins 5..7 von ST3 (GND, SDA, SCL). ST3 kann aber auch externe I2C-Slaves über Pins 1 und 2 mit 3,3V versorgen (JP13 geschlossen!). Bitte beide Pins zusammen mit nicht mehr als 100mA belasten!

An Pin 4 von ST3 befindet sich noch der Eingang INT. Über ihn kann ein Slave mitteilen, dass z.B. Daten bereit liegen.

Jumper

Zeichenerklärung:

  • Zweipolige Jumper:
    • Stellung ON = Jumper aufgesteckt (Kontakt geschlossen)
    • Stellung OFF = Jumper abgezogen (Kontakt offen)
Jumper Stellung Bedeutung
JP1 OFF HDMM01 SDA getrennt
JP1 ON (S) HDMM01 SDA verbunden
JP2 OFF HDMM01 SCL getrennt
JP2 ON (S) HDMM01 SCL verbunden
JP3 OFF HDMM01 Power AUS
JP3 ON (S) HDMM01 Power AN
JP4 OFF 3D-BS SDA getrennt
JP4 ON (S) 3D-BS SDA verbunden
JP5 OFF 3D-BS SCL getrennt
JP5 ON (S) 3D-BS SCL verbunden
JP6 OFF (S) 3D-BS INT getrennt
JP6 ON 3D-BS INT verbunden *
JP7 OFF 3D-BS Power AUS
JP7 ON (S) 3D-BS Power AN
JP8 OFF NL-552ETTL Power AUS
JP8 ON (S) NL-552ETTL Power AN
JP9 OFF (S) NL-552ETTL RX getrennt von USRBUS
JP9 ON NL-552ETTL RX verbunden mit USRBUS
JP10 OFF 3,3V-I2C-Bus SDA getrennt
JP10 ON (S) 3,3V-I2C-Bus SDA verbunden
JP11 OFF 3,3V-I2C-Bus SCL getrennt
JP11 ON (S) 3,3V-I2C-Bus SCL verbunden
JP12 OFF (S) 3,3V-I2C-Bus INT getrennt
JP12 ON 3,3V-I2C-Bus INT verbunden *
JP13 OFF 3,3V-I2C-Bus Power AUS
JP13 ON (S) 3,3V-I2C-Bus Power AN
JP14 OFF (S) INT 5V Pullup AUS
JP14 ON INT 5V Pullup AN **
JP15 OFF SDA 3,3V Pullup AUS
JP15 ON (S) SDA 3,3V Pullup AN ***
JP16 OFF INT 3,3V Pullup AUS
JP16 ON (S) INT 3,3V Pullup AN

Zu (S) Standard-Stellung der Jumper!

Zu *) Am XBUS steht in dieser Schaltung nur EINE Interrupt-Leitung (INT1) zur Verfügung. Es kann also nur die Interrupt-Auswertung von EINEM Sensor auf dieser Platine erfolgen. JP6 und JP12 sollten also nicht gleichzeitig ON sein!

Zu **) Da INT1 auf der RP6v2 Base mit einem 10kOhm Pulldown-Widerstand (R34) verbunden ist, muss man auf dieser Platine ggf. den Pullup-Widerstand 2,2kOhm (R7) einschalten (JP14 = ON!).

Zu ***) Wenn der an ST3 angeschlossene I2C-Slave keinen Pullup-Widerstand an SDA hat, muss R5 eingeschaltet werden (JP15 = ON!).


RP6v2 Orientierung: Software

... KANN DAUERN ...

Kompassmodul HDMM01

Hier zunächst zwei Funktionen zum Lesen der Roh-Daten des HDMM01 und zur Berechnung der Peilung:

// The I2C slave address of the HDMM01:
#define HDMM01_ADR		 	0x60

// Internal registers:
#define INTERNAL_REGISTER	0x00
#define MSB_X_AXIS			0x01
#define LSB_X_AXIS			0x02
#define MSB_Y_AXIS			0x03
#define LSB_Y_AXIS			0x04

// Commands:
#define CMD_TM				0b00000001
#define CMD_SET				0b00000010
#define CMD_RESET			0b00000100

// Axis centre points:
#define X_CENTRE			1945.0
#define Y_CENTRE			2029.5

/*****************************************************************************/
// Variables:

uint16_t x_axis, y_axis;

/*****************************************************************************/
// HDMM01 functions:

/**
 * This function reads the X-axis and Y-axis values from the HDMM01 and
 * stores them in the global variables x_axis and y_axis.
 * It returns the Internal register of the HDMM01.
 */
uint8_t readHDMM01(void)
{
	uint8_t readBuf[5];
	I2CTWI_transmit2Bytes(HDMM01_ADR, INTERNAL_REGISTER, CMD_TM); // Measure
	mSleep(5);
	I2CTWI_transmitByte(HDMM01_ADR, INTERNAL_REGISTER);
	I2CTWI_readBytes(HDMM01_ADR, readBuf, 5); // Read Int. reg. & X-/Y-Axis
	x_axis = ((readBuf[MSB_X_AXIS] & 0x0f) << 8) + readBuf[LSB_X_AXIS];
	y_axis = ((readBuf[MSB_Y_AXIS] & 0x0f) << 8) + readBuf[LSB_Y_AXIS];
	return readBuf[INTERNAL_REGISTER];
}

/**
 * This function calculates the bearing (heading relative to the sensor's
 * position). The bearing is a value from 0 to 359. If the robot's front
 * points to ...
 *   north -> bearing is 0,
 *   west  -> bearing is 90,
 *   south -> bearing is 180,
 *   east  -> bearing is 270.
 */
uint16_t bearingHDMM01(void)
{
	double x, y, bearing;
	x = x_axis - X_CENTRE;
	y = y_axis - Y_CENTRE;
	bearing = atan2(x, y) * 180 / M_PI;
	if(bearing < 0) bearing += 360.0;
	return ((uint16_t) bearing);
}

Die Werte für X_CENTRE und Y_CENTRE hängen vom aktuellen Standort und lokalen Magnetfeldbesonderheiten ab. Man kann sie für den eigenen Standort ermitteln, indem man den RP6 um 360° dreht und dabei mindestens 10 X- und Y-Werte notiert. Dann errechnet man die beiden Mittelwerte. Diese trägt man als Werte für X_CENTRE und Y_CENTRE ein.

Beschleunigungssensor 3D-BS

GPS-Modul NL-552ETTL

3,3V-I2C-Bus

Siehe auch


Quellen


Autoren

--Dirk 10:59, 3. Okt 2012 (CET)


LiFePO4 Speicher Test