HiTechnics Kompass mit Matlab/Simulink: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Zeile 90: Zeile 90:
Für die Auflösung allgemein gilt:
Für die Auflösung allgemein gilt:


<math> Aufloesung = \frac{5v}{2^n} </math>
<math> Aufloesung = \frac{5V}{2^n-bit} </math>
<math> Auflösung=  \frac{5V}{2^n}  </math>
<math> Auflösung=  \frac{5V}{2^n}  </math>
<math> Theta= arctan  \frac{V1}{V2}  </math>
<math> Theta= arctan  \frac{V1}{V2}  </math>


===Gründe für ein ADU/Alternativen===
===Gründe für ein ADU/Alternativen===

Version vom 3. Juli 2018, 08:34 Uhr

Sensor: HiTechnic NXT Compass Sensor


Seite in Bearbeitung!!

Autor: Andre Adämmer

Betreuer: Prof. Dr. Ulrich Schneider


Einleitung

Dieser Wiki-Eintrag stellt die semesterbegleitende Prüfung des Faches Signalverarbeitende Systeme SS 18 dar. Es gilt den oben genannten Sensor über Matlab/Simulink auszulesen, und die Signalverarbeitungskette dabei zu untersuchen, zu beschreiben und zu verstehen. Dazu werden folgende Fragestellungen über den oben genannten Sensor beantwortet:

  1. Auswahl eines Primärsensors
    1. Wie funktioniert der Sensor?
    2. Welche Rohsignale liefert der Sensor?
  2. Signalvorverarbeitung
    1. Sollen Messwerte oder vorverarbeitete Daten übertragen werden?
    2. Wie lässt sich eine Vorverarbeitung umsetzen?
    3. Wird eine Kennlinie eingesetzt? Wenn ja, wie wird diese kalibriert?
  3. Analog-Digital-Umsetzer
    1. Wie werden die analogen Signale umgesetzt?
    2. Welcher ADU kommt zum Einsatz?
    3. Welche Gründe sprechen für diesen ADU? Alternativen?
  4. Bussystem
    1. Wird ein Bussystem zwischen Sensor und Mikrocontroller eingesetzt?
    2. Wenn ja, wie funktioniert dieses Bussystem?
  5. Digitale Signalverarbeitung
    1. Welche Verarbeitungsschritte sind notwendig?
    2. Welche Filter werden angewendet?
    3. Bestimmen Sie Auflösung, Empfindlichkeit und Messunsicherheit des Sensors.
  6. Darstellung der Ergebnisse
    1. Welche Fehler treten in welchem Verarbeitungsschritt auf?
    2. Stellen Sie die Messunsicherheit bzw. das Vertrauensintervall dar.

Lernziele und Projektplanung

Lernziele und Motivation

Lernziele und Motivation sind dementsprechend die Signalverarbeitungskette zu verstehen und Fehleranalysen betreiben zu können. Außerdem wird die Hardware-Komponente, das heißt, wie kann ich einen Sensor anschließen ersichtlich. Des weiteren soll deutlich werden, wann und aus welchen Gründen Filter für die Bearbeitung der Signale, ob analog oder digital, zum Einsatz kommen, beziehungsweise zum Einsatz kommen müssen, da möglicherweise die Signale ohne Filter für eine entsprechende Anwendung nicht brauchbar sind.

Projektplanung

Die Projektplanung habe ich mit Hilfe einer fortlaufend geführten Exceltabelle realisiert, welche ich bereits für ein anderes Projekt im Fach Systems Design Engieering genutzt habe. Prof. Dr. Göbel hat dabei den Umgang mit so einer Art der Projektführung erläutert. Zunächst einmal werden dabei bestimmte Tage festgelegt, an welchen man was machen will. Wenn ein Arbeitsschritt vollzogen worden ist, wird das sogenannte Protokolldatum eingestellt und gleichzeitig werden Maßnahmen, Lösungswege und Kommentare in die entsprechenden Zellen geschrieben. Unter Umständen werden dann neue Arbeitsschritte, beziehungsweise Arbeitspakete erstellt, und mit einem Einstelldatum versehen. Da keine spezielle Software, wie zum Beispiel MS Project verwendet werden muss, kann das "Project-Tracking" von nahezu jedem PC aus geschehen. Es ist somit ein einfacher und zugleich sehr effektiver Weg, um den Ablauf des Projekts für sich selber und für andere verfolgen zu können.

Kompass

Allgemein

Ein Kompass dient gemeinhin zur Orientierung bezüglich der Himmelsrichtung und damit zur Navigation. Der am häufigsten verwendte Kompass ist der Magentkompass, welcher mit Hilfe des Erdmagnetfelds die Festlegung der Nordrichtung vollzieht, durch welches hindurch die Ermittlung der anderen Himmelsrichtungen erfolgt. Die geographischen Pole und die Magentpole sind in etwa in einer ähnlichen Lage, weshalb die Ausrichtung der Magnetnadel genutzt werden kann. Elektrische Kompasse nutzen ebenfalls diesen terristischen Effekt, jedoch erfolgt die Bestimmung, also die Messung des Magnetfeldes über den sogenannten Hall-Effekt. Die elektrische Messung ist um eingies genauer als die des Magnetkompass, ist dafür aber auch Störanfällig in der Umgebung von Erzeugen von elektromagnetischen Strahlungen.[1]

HiTechnics Compass

Abb. 1: HiTechnic NXT Compass Sensor[2]

Der Sensor: HiTechnic NXT Compass Sensor ist für die verbesserte Navigation eines Mindstroms NXT Projektes gedacht. Dabei misst der Sensor magnetische Signale, um festzustellen, in welcher Richtung sich Norden befindet. Dabei sind im NXT-Brick Monitor bereits Werte von 0-359 zu lesen. Beispielsweise wird er beim "NXT-robotsoocer" dafür genutzt, um das gegnerische Tor ausfindig zu machen.[2] Wie das genau funktioniert, das heißt wie aus der Detektierung ein Wertebereich von 1-360 Grad entsteht, wird in den nächsten Abschnitten beschrieben, so, auf ebendiese Weise, dass die oben aufgelisteten Fragen beantwortet werden.

Auswahl eines Primärsensors

Funktionsweise des Sensors

Über den HiTechnis NXT Compass sind leider keine akademisch hochwertigen Datenblätter zu finden. Wie oben bereits beschrieben liefert der Sensor Werte von 0-359. Da es sich um einen digitalen Sensor handelt, wird mittels I2C Protokoll eine Verbindung zum Microcontroller hergestellt. Das kann über EV3, NXT oder wie hier später vorgestellt über ein Arduino-Microcontrollerboard realisiert werden. Der Sensor führt 100 Messungen in der Sekunde durch und sendet somit immer eine bestimmte Ausrichtung in der er sich befindet. Im Lesemodus übermittelt der Sensor Werte als I2C Protokoll. Ein weiterer Modus ermöglicht die Kalibrierung des Sensors. Laut HiTechnis ist dieser Modus nur dann wichtig, wenn der Aufbau des Roboters nicht verhindert, dass permanent störende Magnetfelder anderer Roboterbausteine den Sensor irritieren. Durch den Modus der Kalibrierung ist es möglich die Abweichungen des Sensor zu nullen, das heißt diese mit einem Offset beaufschlagen, so dass diese nicht mehr bei der Ermittlung des Erdmagnetfelds stören.[2]


Rohsignale des Sensors

Da der Sensor laut Hersteller über eine I2C Verbindung mit dem Microcontroller kommuniziert, heißt das, dass bereits eine Umwandlung von analogen Rohwerten und deren Digitalisierung im Sensor, also im Sensorgehäuse entsprechende Komponenten vorhanden sein müssen. Leider ist es mir nicht möglich gewesen diesbezüglich akademisch verwendbare Informationen, trotz mehrmaligen Anschreiben des Technischen Supports des Herstellers, herauszufinden. Über den oben genannten Sensor bleibt der innere Aufbau und die interne ADU Umwandlung unbekannt und wird an dieser Stelle mittels Rückschlüsse auf ähnlich funktioniernder Sensoren erläutert.

Abb. 2: Prinzip Fluxgate Kompass:Durch Veränderung eines angelegten Stroms an der Triebspule wird die Sättigung in der Sensorspule verändert.[3]

In der mobilen Robotik werden weitesgehend zwei Kompassprinzipien verwendet. Zum einen der sogenannte Halbleiterkompass (Fluxgate Compass) welcher die magnetische Feldstärke misst, indem die Stärke eines Elektromagneten gezielt geändert wird. Er besteht aus zwei Spulen. Einer Feld und einer Sensorspule, welche beide gemeinsam um einen Kern gewickelt werden. Dabei werden sich die Sättigungseigenschaften des Spulenkerns zunutze gemacht. Ein durchläassiger ungesättigter Spulenkern zieht magnetische Feldlinien hinsich hinein. Ein gesättigter Spulenkern hat keine Auswirkung auf die magnetischen Feldlinien. Andersherum kann man durch Abwechselung zwischen Sättigung und Entsättigung des Spulenkerns der Triebspule, also durch Wechseln der Stärke des angelegten Stroms einen unterschiedlichen magnetischen Fluss erzeugen, welcher dann unterschiedliche Spannungen in der Sensorspule induziert. Diese Spannung hängt dann vom magnetischen Feld ab, in welchem die Spulen gedreht werden. Um nun die Richtung für magnetisch Nord zu bestimmen, werden zwei Spulen orthogonal zueinander angeordnet. Der Winkel, der den jeweiligen Spulenstrom bestimmt, ergibt sich aus den beiden Spannungen (V1,V2), die in den beiden Sensorspulen gemessen werden. Der sich ändernde Winkel ist bei orthogonaler Anordunung über den Tangens beschreibbar.[3]


[3]


Ähnlich funktioniert der Hall-Effekt-Kompass. Dieser nutzt zwei zueinander angeordnete Hall-Sensoren, welche den Änderungswinkels zu den magnetischen Erdfeldlinien über die Änderung der magnetischen Flussdichte(B)der beiden Sensoren beschrieben. Das Prinzip beruht auf den Hall-Effekt,also das Auftreten einer elektrischen Spannung durch ein stromdurchflossenden Leiter, welcher sich in einem stationären Magnetfeld befindet.[3] An dieser Stelle wird lediglich noch der mathematische Zusammenhang beschrieben. Analog für die Winkeländerung des Fluxgate Kompasses gilt hier:


[3]

Signalvorverarbeitung

Um für den Roboter nützliche Werte bezüglich der Ausrichtung zu bekommen, müssen Signale eventuell aufbereitet werden, bevor sie digitalisiert werden. Durch äußere magnetische Felder verändert sich der Spannungsverlauf in der Spule des Fluxgate Kompasses. Dieser Spannungsverlauf muss nun aufbereitet werden, damit er schließlich digitalisiert werden kann. Wie genau das im HiTechnis NXT Compass Sensor vollzogen wird, ist nicht klar, da keine passende Literatur verfügbar ist.

Analog-Digital-Umsetzer

Ein Analog-Digital-Umwandler, kurz ADU oder ADC (engl. Analog-Digital-Converter)ist eine wesentliche Komponente, die in nahezu allen Messketten vorzufinden ist. Die Spannung, hier durch Hall-Sensoren oder Fluxgate Kompass, wird nach wahrscheinlicher Signalaufarbeitung in ein digitales Signal umgewandlet. Das alles, so viel steht fest, geschieht durch eingebaute Komponenten im Sensor.Der ADU liest Spannung zeit-und wertekontinuierlich ein, und wandelt dieses Signal in ein wertediskretes um. Die Umwandlung der Zeitdiskretisierung erfolgt über die Taktung des ADU und ist kein Vorgang als solches. Ein analoger Wertebereich wird somit digital. Die Auflösung bewegt sich von einem Bit im Falle des einfachen Komparators hinzu 24 Bit. Je kleiner die Auflösung desto größer der Quantisierungsfehler. Der Quantisirungsfehler ist Teil der binären Umwandlung und entsteht durch Rundungen der Werte. Dadurch kann die digitale Auflösung unter keinen Umständen, die der Analogen erreichen. Durch bestimmte Filter kann jedoch ein Art Informationsgewinn durch Prädiktion erlangt werden.[3] Bei iterativen Wandlern muss die Eingangsgröße über den Wandlungsvorgang konstant gehalten werden. Dafür werden 'Track and Hold' Schaltungen oder 'Sample and Hold' Schaltungen benötigt. Diese können das Eingangssignal einfrieren, solange der AD-Wandler läuft. Im Wesentlichen werden ein ADU- Wandler über Genauigkeit, Schnelligekeit, das heißt Frequenz der Abtastrate und Preis kategorisiert. [4]

Abb. 3: Blockschaltbild eines analogen Delta-Sigma-Modulators[5]


ADU im Kompass Sensor

Da nur sehr spärlich Informationen über den ADU, der sich im Sensor befindet vorhanden sind, wird an dieser Stelle eine Annahme getätigt. Digitale Sensoren, welche über I2C- oder SPI-Bus zu Microprozessoren kommunizieren, verwenden häufig eine interne Anlog-Digital-Umwandlung. Dieses wird in vielen Fällen über eine sogenannte Delta-Sigma-ADC Schaltung realisiert.Delta-Sigma-Wandler sind neben Flash-Wanlder, Rampen-Wandler und Sukzessiver-Approximations-Wanlder die meist eingesetzten Wandler. Ein Delta-Sigma-Modulator erzuegt ein bitserielles Signal, also einen Bitstrom und enthält einen Tiefpassfilter. Der Bitstrom stellt dabei immer den Mittelwert des Eingagnssignales dar. In Abbildung 3 ist zu erkennen, dass der Komparator letztlich entscheidet ob das integrierte Eingangssignal größer oder kleiner als ein vorgebener Schwellenwert ist, und dann ein passendes 1-Bit Signal ausgibt. Der Integrator ermöglicht eine beliebeige Auswahl des Schwellenwertes, integriert also Abweichung zwischen dem analogen Eingangssignal und dem wieder umgewandelten Signal aus dem Bitstrom. Der Bitstrom wird bereits im Sensor digital gefiltert. Mehr dazu im Kapitel Filteranwendung. Die Anzahl der Rückkopplung bestimmt die Ordunung eines Delta-Sigma-Wandlers, das heißt ein Wandler zweiter Ordunung besitzt anstelle einer Rückkopplung und eines Integrators, wie in Abbildung 3 zu sehen, zwei Rückkopplungen mit jeweils zwei Integraotren.Durch die Erhöhung der Ordung wird im wesentlichen die Frequenz des Rauschens höher. Diese Dynamikerhöhung verbessert unter Umständen genauere Ergebnisse des analogen Signals.

Für die Auflösung allgemein gilt:

Gründe für ein ADU/Alternativen

Bussystem

I2C

USB PC-Arduino

Digitale Signalverarbeitung

Filteranwendung

Auflösung,Empfindlichkeit und Messunsicherheit

Darstellung der Ergebnisse

Video

Zusammenfassung

Video

Ablage

// --------------------------------------
// i2c_scanner
//
// Version 1
//    This program (or code that looks like it)
//    can be found in many places.
//    For example on the Arduino.cc forum.
//    The original author is not know.
// Version 2, Juni 2012, Using Arduino 1.0.1
//     Adapted to be as simple as possible by Arduino.cc user Krodal
// Version 3, Feb 26  2013
//    V3 by louarnold
// Version 4, March 3, 2013, Using Arduino 1.0.3
//    by Arduino.cc user Krodal.
//    Changes by louarnold removed.
//    Scanning addresses changed from 0...127 to 1...119,
//    according to the i2c scanner by Nick Gammon
//    http://www.gammon.com.au/forum/?id=10896
// Version 5, March 28, 2013
//    As version 4, but address scans now to 127.
//    A sensor seems to use address 120.
// Version 6, November 27, 2015.
//    Added waiting for the Leonardo serial communication.
//
//
// This sketch tests the standard 7-bit addresses
// Devices with higher bit address might not be seen properly.
//
 
#include <Wire.h>
 
 
void setup()
{
  Wire.begin();
 
  Serial.begin(9600);
  while (!Serial);             // Leonardo: wait for serial monitor
  Serial.println("\nI2C Scanner");
}
 
 
void loop()
{
  byte error, address;
  int nDevices;
 
  Serial.println("Scanning...");
 
  nDevices = 0;
  for(address = 1; address < 127; address++ )
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    error = Wire.endTransmission();
 
    if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");
 
      nDevices++;
    }
    else if (error==4)
    {
      Serial.print("Unknown error at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");
 
  delay(5000);           // wait 5 seconds for next scan
}


[6]

   
Editor: Andre Adämmer
Ersteller/Quelle:https://robosoccerbot.wordpress.com/3-add-sensors/hitechnic-compass-sensor/
Letzte Änderung:03.07.2018

int compassAddress = 0x01; //Information von I2C Scanner
int TestValue;  //Anlegen der Variable

void setup() {
  Serial.begin(9600); //Aufstellen des Seriellen Monitors

  // Hier wird eine I2C mit Hilfe einer Wire Bibliothek hergestellt
  //und eine Testverbindung hergestellt
  
  Wire.begin();  //I2C einschalten
  Wire.beginTransmission(compassAddress); //Kommunikation zwischen Sensor
  Wire.write(0x00); //leere Daten
  Wire.endTransmission(); //Kommunikation geschlossen
  while(Wire.available() > 0)
     Wire.read();
}

void loop() {   
  ReadCompassSensor();  //Aufruf der untenstehenden Funktion
  Serial.println(TestValue); //Ausgabe der Kompassrichtung
  delay(100); //Warte für bessere Übersicht im seriellen Monitor
}

void ReadCompassSensor(){
  //Arduino befehle wie es den Sensor anzusteuern gilt
  Wire.beginTransmission(compassAddress);
  Wire.write(0x44);
  Wire.endTransmission();

  // Der untere Code benötigt 2 Byte für die Kommunikation speichert diese
  // in einen Wert von 0-360 unter TestValue 
  
  Wire.requestFrom(compassAddress, 2); 
   while(Wire.available() < 2);
   byte lowbyte = Wire.read();  
   byte highbyte = Wire.read();
   TestValue = word(highbyte, lowbyte); 
}


Literatur

  1. Kompass. Abgerufen am 30. Juni 2018.
  2. 2,0 2,1 2,2 HiTechnic NXT Compass SensorAbgerufen am 30. Juni 2018. Referenzfehler: Ungültiges <ref>-Tag. Der Name „HiTechnic NXT Compass Sensor“ wurde mehrere Male mit einem unterschiedlichen Inhalt definiert. Referenzfehler: Ungültiges <ref>-Tag. Der Name „HiTechnic NXT Compass Sensor“ wurde mehrere Male mit einem unterschiedlichen Inhalt definiert.
  3. 3,0 3,1 3,2 3,3 3,4 3,5 NEHMZOW,UlRICH:Digitale Robotik. Abgerufen am 1. Juli2018. Referenzfehler: Ungültiges <ref>-Tag. Der Name „NEHMZOW,UlRICH:Digitale Robotik“ wurde mehrere Male mit einem unterschiedlichen Inhalt definiert. Referenzfehler: Ungültiges <ref>-Tag. Der Name „NEHMZOW,UlRICH:Digitale Robotik“ wurde mehrere Male mit einem unterschiedlichen Inhalt definiert.
  4. Prof. Dr. Schneider,Ulrich:Signalverarbeitende Systeme SoSe 2018 Analog-Digital-Umsetzer. Hochschule Hamm-Lippstadt.
  5. Prinzip Delta-Sigma-ModulationAbgerufen am 02. Juli 2018.
  6. Arduino-Libraries. Abgerufen am 30.Mai 2018.



→ zurück zum Hauptartikel: Signalverarbeitende Systeme