Um die Geschwindigkeitsbestimmung mithilfe der Hallsensoren zu durchzuführen, muss in Control Desk 7.1 manuell die Puls Modulation Breite des Antriebmotors eingestellt werden.
Anfang des Wintersemesters 23/24 funktioniert das manuelle Ansteuern mit der aktuellen Software der Revision 9142 nicht!
Der Wiki-Artikel [[Hall-Sensor]] beschreibt die Funktionsweise der Richtungsbestimmung und [[Softwarearchitektur des Fahrzeugs]] die Implementation.
Daher wird im Folgenden der Quellcode der S-Funktion "get_direction" zur Richtungsbestimmung mit den Hallsensoren bzw. Taktflanken dieser analysiert:
=== Quellcode der S-Funktion get_direction ===
<div class="mw-collapsible mw-collapsed">
<syntaxhighlight lang="c++">
// CASES:
//
// A B C CaseNum
// 1 0 1 1
// 1 0 0 2
// 1 1 0 3
// 0 1 0 4
// 0 1 1 5
// 0 0 1 6
#define FORWARD 1
#define BACKWARD 0
static int last_case = 0;
static int last_dir = FORWARD;
int state;
int case_num = 0;
state = 0;
if(HALL_A[0]>0){
state +=100;
}
if(HALL_B[0]>0){
state+=10;
}
if(HALL_C[0]>0){
state+=1;
}
switch(state){
case 101:
case_num = 1;
break;
case 100:
case_num = 2;
break;
case 110:
case_num = 3;
break;
case 10:
case_num = 4;
break;
case 11:
case_num = 5;
break;
case 1:
case_num = 6;
break;
default:
break;
}
//Case: Forward Wrap-Around 6->1
if(case_num == 1 && last_case == 6){
direction[0] = FORWARD;
last_dir = FORWARD;
//Case: Backward Wrap-Around 1->6
}else if(case_num == 6 && last_case == 1){
direction[0] = BACKWARD;
last_dir = BACKWARD;
//Case: Forward 1->2 .. 5->6
}else if(case_num > last_case){
direction[0] = FORWARD;
last_dir = FORWARD;
//Case: Backward 6->5 .. 2->1
}else if(case_num < last_case){
direction[0] = BACKWARD;
last_dir = BACKWARD;
//Case: No change
}else if(case_num == last_case){
direction[0] = last_dir;
}
current_state[0] = case_num;
//save current case number
last_case = case_num;
</syntaxhighlight>
</div>
== Beschreibung der S-Funktion get_direction ==
Die Funktion fragt jeden Sampleschritt den Zustand der digitalen Eingänge C2, C3 und C4 ab. Die Hallsensoren sind so angeordnet,
dass die HIGH und LOW Flanken der Hallsensoren gestaffelt hintereinander erzeugt werden.
Durch die Bestimmung der Reihenfolge der Flanken kann die Fahrtrichtung des CCF ermittelt werden.
Dafür werden die sechs möglichen Zustände definiert, die über eine Switch Case Verzweigung abgefragt werden.
Weitere Ergebnisse werden im [[https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/Dokumentation/Taetigkeitsbericht/Vorlage/Excel-Tool_Problemloesungsblatt.xlsx|Problemloesungsblatt]] erläutert.
== Beispiel: Test der Sensoren und Aktoren des Fahrzeugs ==
== Beispiel: Test der Sensoren und Aktoren des Fahrzeugs ==
Dieser Artikel beschäftigt sich mit dem Sensor-/Aktortest für das Carolo Cup Fahrzeug. Für den Test liegt ein Simulink-Modell vor, welches als Grundlage für das ControlDesk-Projekt dient.
Sämtliche Sensorwerte sind somit in ControlDesk sichtbar und alle Aktoren ansteuerbar. Vor einer Inbetriebnahme des Fahrzeuges sollten sämtliche Prüfschritte durchlaufen und in dem
entsprechenden Prüfprotokoll dokumentiert werden.
Simulink-Modell (SVN Revision 9139)
ControlDesk-Oberfläche
Lichtsteuerung
Lichtsteuerung
Tasterabfrage
Gas & Lenkung
IR-Sensore
Fernbedienungssignale
Gierratensensor
Test Beschleunigung für Hall-Test
Um die Geschwindigkeitsbestimmung mithilfe der Hallsensoren zu durchzuführen, muss in Control Desk 7.1 manuell die Puls Modulation Breite des Antriebmotors eingestellt werden.
Anfang des Wintersemesters 23/24 funktioniert das manuelle Ansteuern mit der aktuellen Software der Revision 9142 nicht!
Der Wiki-Artikel Hall-Sensor beschreibt die Funktionsweise der Richtungsbestimmung und Softwarearchitektur des Fahrzeugs die Implementation.
Daher wird im Folgenden der Quellcode der S-Funktion "get_direction" zur Richtungsbestimmung mit den Hallsensoren bzw. Taktflanken dieser analysiert:
Quellcode der S-Funktion get_direction
// CASES://// A B C CaseNum // 1 0 1 1// 1 0 0 2 // 1 1 0 3// 0 1 0 4// 0 1 1 5// 0 0 1 6#define FORWARD 1#define BACKWARD 0staticintlast_case=0;staticintlast_dir=FORWARD;intstate;intcase_num=0;state=0;if(HALL_A[0]>0){state+=100;}if(HALL_B[0]>0){state+=10;}if(HALL_C[0]>0){state+=1;}switch(state){case101:case_num=1;break;case100:case_num=2;break;case110:case_num=3;break;case10:case_num=4;break;case11:case_num=5;break;case1:case_num=6;break;default:break;}//Case: Forward Wrap-Around 6->1if(case_num==1&&last_case==6){direction[0]=FORWARD;last_dir=FORWARD;//Case: Backward Wrap-Around 1->6 }elseif(case_num==6&&last_case==1){direction[0]=BACKWARD;last_dir=BACKWARD;//Case: Forward 1->2 .. 5->6}elseif(case_num>last_case){direction[0]=FORWARD;last_dir=FORWARD;//Case: Backward 6->5 .. 2->1}elseif(case_num<last_case){direction[0]=BACKWARD;last_dir=BACKWARD;//Case: No change}elseif(case_num==last_case){direction[0]=last_dir;}current_state[0]=case_num;//save current case numberlast_case=case_num;
Beschreibung der S-Funktion get_direction
Die Funktion fragt jeden Sampleschritt den Zustand der digitalen Eingänge C2, C3 und C4 ab. Die Hallsensoren sind so angeordnet,
dass die HIGH und LOW Flanken der Hallsensoren gestaffelt hintereinander erzeugt werden.
Durch die Bestimmung der Reihenfolge der Flanken kann die Fahrtrichtung des CCF ermittelt werden.
Dafür werden die sechs möglichen Zustände definiert, die über eine Switch Case Verzweigung abgefragt werden.
Tabelle:Funktionsfähigkeit von IR-Sensor Hinten links
Vorbedingung 1
Testfall 2 erfolgreich durchgeführt
-
-
die Live-Werte sind angezeigt
die Live-Werte sind angezeigt
i.O
-
Testschritt 1
Objekt Abstand kleiner als 4cm
Messwerte steht auf 0.19
Abstand zwischen Objekt und Infrarotsensor weniger als 4 cm
Messwerte steht auf 0.19
Messwerte steht auf 0.19
i.O
-
Testschritt 2
Objekt Abstand zwischen 4 und 30cm
Messwerte steht auf 0.19
Objekt bewegt sich zwischen 4 und 30cm
Bei Verändern des Abstandes des Objektes zum Sensor verändert sich auch der angezeigte Messwert
Bei Verändern des Abstandes des Objektes zum Sensor verändert sich auch der angezeigte Messwert
i.O
Je größer die Entfernung, desto kleiner der Messwert
Testschritt 3
Objekt Abstand größer als 30 cm
Messwerte sind nicht stabil
Abstand zwischen Objekt und Infrarotsensor größer als 30 cm
Messwerte steht auf 0.19
Messwerte steht auf 0.19
i.O
-
Testfall 18
Bezeichnung: Gierratensensor
Tester: Xiangyao Liu,Yuhan Pan, Tim Schonlau
Datum: 05.10.2023
Status: getestet
Testinstanz: Online am Fahrzeug
Verwendete Software: ControlDesk 7.1
Schritt Nr.
Beschreibung
Ausgangszustand
Aktion(en)
Erwartetes Ergebnis
Ergebnis
Bewertung
Bemerkung
Tabelle:Funktionsfähigkeit von Gierratensensor
Vorbedingung 1
Testfall 2 erfolgreich durchgeführt
-
-
die Live-Werte sind angezeigt
die Live-Werte sind angezeigt
i.O
-
Testschritt 1
Fahrzeug dreht sich horizontal hin und her
Fahrzeug auf der Bücher und Messwerte sind nicht stabil
das Fahrzeug heben und horizontal hin und her drehen
Eines der Sensorsignale schwankt zwischen positiv und negativ
Alle vier Sensorsignale schwingen mit der gleichen Frequenz und Amplitude und sind immer größer als 0
n.i.O
-
Testschritt 2
Fahrzeug dreht sich vertikal hin und her
Fahrzeug auf der Bücher und Messwerte sind nicht stabil
das Fahrzeug heben und vertikal hin und her drehen
Eines der Sensorsignale schwankt zwischen positiv und negativ
Alle vier Sensorsignale schwingen mit der gleichen Frequenz und Amplitude und sind immer größer als 0
n.i.O
-
Testfall 19
Bezeichnung: Test mit Online Software
Tester: Tim Schonlau
Datum: 26.09.2023
Status: getestet
Testinstanz: Online am Fahrzeug
Verwendete Software: ControlDesk 7.1
Schritt Nr.
Beschreibung
Ausgangszustand
Aktion(en)
Erwartetes Ergebnis
Ergebnis
Bewertung
Bemerkung
Tabelle:Funktionsfähigkeit von Gierratensensor
Vorbedingung 1
Control Desk 7.1 ist mit dem Online Modell geöffnet
-
-
die Live-Werte sind angezeigt
i.O
-
Testschritt 1
Vorwärtsbeschleunigung
Die Räder stehen still.
Manuell die Beschleunigung in Control Desk ansteuern.
Die Räder drehen sich so, dass das CCF nach vorne fährt.
Die Räder beginnen sich zu drehen, nach ein paar Sekunden stürzt Control Desk ab
Alle vier Sensorsignale schwingen mit der gleichen Frequenz und Amplitude und sind immer größer als 0