Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
motion [2019/02/04 14:10]
127.0.0.1 Externe Bearbeitung
motion [2019/07/26 07:42] (aktuell)
huwi
Zeile 14: Zeile 14:
  
  
->>>​>​{{:​umlprojekt13gg.jpg?​400|}}+>​{{:​umlprojekt13gg.jpg?​400|}}
  
  
Zeile 23: Zeile 23:
 Natürlich schauen wir uns zuerst im Framework um, ob es eine Treiberklasse für den Bewegungssensor gibt. Die wollen wir uns als Erstes näher betrachten. Über den Explorer oder den Navigator/​UML-Pakete lassen sich die einzelnen Bausteine erreichen. Es ergibt sich folgendes Gesamtbild zu der vorhandenen Lösung für den Bewegungssensor:​ Natürlich schauen wir uns zuerst im Framework um, ob es eine Treiberklasse für den Bewegungssensor gibt. Die wollen wir uns als Erstes näher betrachten. Über den Explorer oder den Navigator/​UML-Pakete lassen sich die einzelnen Bausteine erreichen. Es ergibt sich folgendes Gesamtbild zu der vorhandenen Lösung für den Bewegungssensor:​
  
->>>​{{:​classmotion.jpg?​700|}}+>​{{:​classmotion.jpg?​700|}}
  
 Aus dem Schaltplan für das STM32F4-Discovery ist zu entnehmen, dass der Bewegungssensor fest mit dem Baustein SPI1 des Controllers verbunden ist. Die Leitung CS (chip select) ist fest mit Pin PE3 verbunden. Das Protokoll zum Auslesen der Beschleunigungswerte ist in der Operation //getAcc// realisiert. Diese erwartet für X, Y und Z als Referenzparameter drei vorzeichenbehaftete 32-Bit Werte. Damit lässt sich die geforderte Lösung in folgendem Blockbild skizzieren: Aus dem Schaltplan für das STM32F4-Discovery ist zu entnehmen, dass der Bewegungssensor fest mit dem Baustein SPI1 des Controllers verbunden ist. Die Leitung CS (chip select) ist fest mit Pin PE3 verbunden. Das Protokoll zum Auslesen der Beschleunigungswerte ist in der Operation //getAcc// realisiert. Diese erwartet für X, Y und Z als Referenzparameter drei vorzeichenbehaftete 32-Bit Werte. Damit lässt sich die geforderte Lösung in folgendem Blockbild skizzieren:
  
->>>​{{:​motionblock.jpg?​750|}}+>​{{:​motionblock.jpg?​750|}}
  
 Der Bewegungssensor ist an SPI1 angeschlossen,​ als Datenverbindung zum PC nutzen wir die bewährte USART3. Die optische Anzeige der Beschleunigung soll über die LEDs an PD12, PD13 und PD14 erfolgen. Das ist der Plan! Der Bewegungssensor ist an SPI1 angeschlossen,​ als Datenverbindung zum PC nutzen wir die bewährte USART3. Die optische Anzeige der Beschleunigung soll über die LEDs an PD12, PD13 und PD14 erfolgen. Das ist der Plan!
Zeile 34: Zeile 34:
 Der Bewegungssensor ist laut Datenblatt des STM32F4-Discovery an SPI1 angeschlossen. Das Framework bietet uns für diesen Sensor die oben vorgestellte Treiberklasse. Die Beschleunigungswerte sollen für die Achsen X, Y und Z über drei LEDs und via UART ausgegeben werden. Der Klassenentwurf für die angestrebte Lösung sieht wie folgt aus: Der Bewegungssensor ist laut Datenblatt des STM32F4-Discovery an SPI1 angeschlossen. Das Framework bietet uns für diesen Sensor die oben vorgestellte Treiberklasse. Die Beschleunigungswerte sollen für die Achsen X, Y und Z über drei LEDs und via UART ausgegeben werden. Der Klassenentwurf für die angestrebte Lösung sieht wie folgt aus:
  
->>​{{:​motionclass.png?​700|}}+>​{{:​motionclass.png?​700|}}
  
 __Hinweis:​__ Versionsabhängig ist ein unterschiedlicher Bewegungssensor auf dem Board verbaut. Dementsprechend ist die verfügbare Klasse auszuwählen. __Hinweis:​__ Versionsabhängig ist ein unterschiedlicher Bewegungssensor auf dem Board verbaut. Dementsprechend ist die verfügbare Klasse auszuwählen.
Zeile 41: Zeile 41:
  
  
->>>​**//​Controller::​onWork://​** +>​**//​Controller::​onWork://​** 
->>><​code cpp>+><​code cpp>
 // aktuelle Sensorwerte holen // aktuelle Sensorwerte holen
 // WENN x>0 DANN LED1 an SONST aus // WENN x>0 DANN LED1 an SONST aus
Zeile 54: Zeile 54:
 Die Realisierung soll in zwei Schritten erfolgen. Zunächst wollen wir einfach nur die aktuellen Werte für die drei Achsen sehen. Diese schicken wir per UART an das SiSy-Controlcenter. Über die LEDs visualisieren wir, ob die Werte größer oder kleiner Null sind. Die Realisierung soll in zwei Schritten erfolgen. Zunächst wollen wir einfach nur die aktuellen Werte für die drei Achsen sehen. Diese schicken wir per UART an das SiSy-Controlcenter. Über die LEDs visualisieren wir, ob die Werte größer oder kleiner Null sind.
  
->>>​**//​Controller::​onstart//​** +>​**//​Controller::​onstart//​** 
->>><​code cpp>+><​code cpp>
 motion.connect(spiMaster);​ motion.connect(spiMaster);​
 motion.init();​ motion.init();​
 </​code>​ </​code>​
  
->>>​{{:​motionstart.png?​300|}}+>​{{:​motionstart.png?​300|}}
  
  
  
->>>​**//​Controller::​onWork://​** +>​**//​Controller::​onWork://​** 
->>><​code cpp>+><​code cpp>
 waitMs(200);​ waitMs(200);​
 ///////// Motion ///////// Motion
Zeile 89: Zeile 89:
   - ControlCenter starten   - ControlCenter starten
  
->>>​>​{{:​erstellenbrennen.png?​500|}}+>​{{:​erstellenbrennen.png?​500|}}
  
 >​{{:​lage1.jpg?​400|}}{{:​motioncontrol.jpg?​320|}} >​{{:​lage1.jpg?​400|}}{{:​motioncontrol.jpg?​320|}}
Zeile 99: Zeile 99:
 Im ersten Anlauf haben wir die absoluten Werte zyklisch erfasst und ausgewertet. Im zweiten Anlauf wollen wir die Änderung als die Differenz zwischen zwei Messungen auswerten. Der Einfachheit halber erst mal nur für die Y-Achse. Dabei sollen positive und negative Veränderungen in Y-Richtung unterschieden werden. Parallel zur Anzeige über die LEDs soll ein UART-Protokoll mitlaufen. ​ Im ersten Anlauf haben wir die absoluten Werte zyklisch erfasst und ausgewertet. Im zweiten Anlauf wollen wir die Änderung als die Differenz zwischen zwei Messungen auswerten. Der Einfachheit halber erst mal nur für die Y-Achse. Dabei sollen positive und negative Veränderungen in Y-Richtung unterschieden werden. Parallel zur Anzeige über die LEDs soll ein UART-Protokoll mitlaufen. ​
  
->>>​**//​Controller::​onWork://​** +>​**//​Controller::​onWork://​** 
->>><​code c>+><​code c>
 // Delta festlegen // Delta festlegen
 // Textbuffer leeren // Textbuffer leeren
Zeile 124: Zeile 124:
 Die erste Lösung war geeignet Werte zu ermitteln, die eine bestimmte Lage des Boards repräsentieren. Die folgende Erweiterung soll ermitteln, ob das Board in eine bestimmte Richtung bewegt wurde. Die Empfindlichkeit der Beschleunigungsmessung soll dabei einstellbar realisiert werden. So können unbeabsichtigte kleine und langsame Bewegungen von bewusst ausgeführten Bewegungen, zum Beispiel das Schütteln des Boards, unterschieden werden. Die erste Lösung war geeignet Werte zu ermitteln, die eine bestimmte Lage des Boards repräsentieren. Die folgende Erweiterung soll ermitteln, ob das Board in eine bestimmte Richtung bewegt wurde. Die Empfindlichkeit der Beschleunigungsmessung soll dabei einstellbar realisiert werden. So können unbeabsichtigte kleine und langsame Bewegungen von bewusst ausgeführten Bewegungen, zum Beispiel das Schütteln des Boards, unterschieden werden.
  
->>>​**//​Controller::​onWork://​** +>​**//​Controller::​onWork://​** 
->>><​code c>+><​code c>
 static int16_t oldValueY=0;​ static int16_t oldValueY=0;​
 int16_t x,​y,​z,​delta;​ int16_t x,​y,​z,​delta;​
Zeile 160: Zeile 160:
 </​code>​ </​code>​
  
->>>​{{:​motionseq2.jpg?​600|}}+>​{{:​motionseq2.jpg?​600|}}
  
 ===== Die Erweiterung testen ===== ===== Die Erweiterung testen =====
Zeile 167: Zeile 167:
   - Brennen   - Brennen
  
->>>​{{:​bewegungssensor.png?​550|}}+>​{{:​bewegungssensor.png?​550|}}
  
 Das Anstupsen des Boards wird jetzt über die LEDs signalisiert. Es ist leicht möglich die Bewegung explizit nur in einer Richtung zu ermitteln. Na wenn dass nicht der erste Ansatz für eine Spielsteuerung ist ;-) Das Anstupsen des Boards wird jetzt über die LEDs signalisiert. Es ist leicht möglich die Bewegung explizit nur in einer Richtung zu ermitteln. Na wenn dass nicht der erste Ansatz für eine Spielsteuerung ist ;-)
Zeile 187: Zeile 187:
 Und hier diesen Abschnitt wiederum als Videozusammenfassung:​ Und hier diesen Abschnitt wiederum als Videozusammenfassung:​
  
->>><​html><​iframe width="​640"​ height="​400"​ src="​https://​www.youtube.com/​embed/​pdgOm97n3-c"​ frameborder="​0"​ allowfullscreen></​iframe></​html>​+><​html><​iframe width="​640"​ height="​400"​ src="​https://​www.youtube.com/​embed/​pdgOm97n3-c"​ frameborder="​0"​ allowfullscreen></​iframe></​html>​
  
 ====== Übung ====== ====== Übung ======