Hallo!
Im vorherigen Teil habe ich bei der Tatsache angehalten, dass meine Raketen erfolgreich gestartet und gelandet sind und einer sogar einen Höhenmesser installiert hatte. In diesem Artikel werde ich Ihnen erklären, wie Sie einen einfachen Höhenmesser basierend auf dem STM32 Nucleo L031K6 und einem BMP 280-Drucksensor herstellen , der auch alle Daten im Flash-Speicher speichert.
Eisenauswahl
Grundvoraussetzungen für einen Höhenmesser:
- Auslesegeschwindigkeit in großer Höhe, da die Rakete nicht zu lang am Höhepunkt ist und ich die maximale Höhe wissen wollte;
- Geringer Stromverbrauch, um keine große Batterie zu legen;
- Kleine Abmessungen der gesamten Struktur.
Basierend auf ihnen nahm ich STM32 Nucleo L031K6 als Mikrocontroller (hohe Geschwindigkeit, geringer Stromverbrauch, geringe Größe). Ich beschloss, die Höhe mit dem BMP280-Barometer zu messen (aus den gleichen Gründen wie beim MK). Ich habe auch eine Schaltfläche hinzugefügt, die beim Drücken die Höhe aufzeichnet. Nun, die gesamte Elektronik wurde von einer CR2032-Batterie gespeist, die über einen Adapter angeschlossen war. Als Ergebnis haben wir das folgende Schema erhalten:
Verwendete Module
STM32 Nucleo L031K6
BMP280
CR2032
STM32 Nucleo L031K6
BMP280
CR2032
Codeentwicklung
Sie finden den Code auf meinem Github . STM32-Pins wurden in CubeMX für IAR konfiguriert. Um mit BMP280 zu arbeiten, habe ich diese Bibliothek verwendet , die Funktion hinzugefügt, die Höhe über dem Meeresspiegel mithilfe einer barometrischen Formel zu berechnen und den Sensor mit den Parametern der Lesefrequenz, Filterung usw. zu initialisieren, die ich benötigte. Da ich die Flughöhe relativ zum Boden messen wollte, musste ich zuerst die Höhe über dem Meeresspiegel in meinem Gebiet berechnen , als "Null" nehmen und die Flughöhe relativ dazu messen. Die Messfrequenz betrug 10 Hz.
Das Schreiben in den Flash-Speicher erfolgte wie folgt:
Speicherorganisation in STM32 L031K6
- Für alle Messungen habe ich 8 KB von 0x08006000 bis 0x08007FFF Adressen zugewiesen
- 2 Bytes für eine Dimension zugewiesen
- Ich habe 4 Bytes in Flash aufgeschrieben, also zwei Messungen gleichzeitig
- Die maximale Anzahl von Messungen betrug 4096, was ausreichte, um etwa 7 Flugminuten aufzuzeichnen
- Aufgezeichnete Höhe in Zentimetern für mehr Genauigkeit
Und die Aufnahme fand wie folgt statt :
- Wenn der Schreibiterator gerade ist, speichern wir die aktuelle Höhe in der unteren Hälfte des Wortes in der Variablen mit Daten zum Schreiben in Flash.
- Wenn der Schreibiterator ungerade ist, fügen Sie der Variablen mit Daten zum Schreiben in Flash die aktuelle Höhe zur oberen Hälfte des Wortes hinzu und speichern Sie diese Variable in der Flash-Zelle
Infolgedessen lautet der Algorithmus des Programms wie folgt:
- Nach dem Einschalten warten wir 5 Sekunden, bis wir die Taste drücken, um die Höhenmessungen zu starten.
- Wenn die Taste nicht gedrückt wurde, leuchten wir die eingebaute LED und beginnen mit der Übertragung der im Flash-Speicher aufgezeichneten Höhendaten über UART
- , .
- «» Flash- .
- UART , ;
- .
Als das STM über Pin 3.3V vom CR2032 mit Strom versorgt wurde, stellte ich fest, dass der Code nicht funktioniert . Das Problem war, dass beim Anlegen von Strom über dieses Bein der SB9 (neben den RX- und TX-Pins auf der Rückseite des MK) abgelötet werden musste, da sonst die Karte ständig neu gestartet wurde.
Nun musste die Genauigkeit des Höhenmessers überprüft werden. Ich nahm ein Maßband und begann, den Höhenmesser auf verschiedene Höhen anzuheben und zu sehen, was er misst. Die Testergebnisse befinden sich im entsprechenden Ordner auf dem Github . Textdateien enthalten Rohdaten aus STM, und Excel-Tabellen enthalten schöne Grafiken aller Tests. Die Genauigkeit entsprach den angegebenen - ± 10 cm. Es sei daran erinnert, dass ich die Höhe in Zentimetern gemessen habeDie Zahlen in der Tabelle sind also so groß.
Höhenmesser zusammenbauen
Da die Rakete während der Landung hart auf den Boden treffen kann, musste die gesamte Elektronik gut befestigt werden, damit die Verkabelung beim Schütteln oder, noch schlimmer, die Module selbst nicht abfällt. Der Höhenmesser wurde in einer 3D-gedruckten Halterung in die Kopfverkleidung eingesetzt (dort war genügend Platz und Stabilität aufgrund der Verschiebung des Schwerpunkts zur Kopfverkleidung wurde hinzugefügt). STM'ka stand senkrecht, BMP280 mit Kontakten nach oben und klebte einen Adapter für CR2032 unter die Halterung. Aufgrund der Tatsache, dass es nicht in den Raketenkörper passte, war es notwendig, die Minuskontakte ein wenig abzuschleifen. Neben den Kontakten in der Seitenwand der 3D-gedruckten Halterung machte ich eine vertikale Nut, um das Minus vom CR2032 hindurchzuziehen, und unter dem Plus bohrte ich ein Loch und steckte den Draht durch. Ich dachte daran, den Höhenmesser mit einer selbstschneidenden Schraube an der Kopfverkleidung zu befestigen, damit das Gehäuse ein Loch hat.aber dann gab er diese Idee auf.
3D gedrucktes Montagemodell
Zusammengebauter Höhenmesserblock
Ich klebte den Knopf neben dem BMP280, installierte die restlichen Module an ihren Stellen, löte alle Drähte und
Der Höhenmesser wurde fest in die Raketenverkleidung eingesetzt. Damit es nach dem Aufprall nirgendwo hinfliegt, zog ich ein Gummiband durch das Loch in der Halterung und verband den Raketenkörper und die Verkleidung.
Zusammengebauter Höhenmesser. Vorderansicht
Rückansicht. Sie können das Gummiband sehen, das den Höhenmesser mit der Rakete verbindet. Der
Höhenmesser war fertig! Jetzt musste ich es testen, was bedeutet, dass ich wieder zum Trainingsgelände ging!
Start- und Messergebnisse des Höhenmessers
Leider war der erste Start mit fehlerhaften Motoren, über die ich im letzten Artikel geschrieben habe.
Infolgedessen stellte sich das Diagramm folgendermaßen heraus:
Horizontal - Messnummer. Alle 10 Messungen - 1 Sekunde. Vertikal - Höhe in Zentimetern
Die Rakete startete 15 m und stürzte dann in den Boden. Nach dem Passieren des Apogäums begann nach 1 Sekunde eine Art Anomalie : Nach einem Wert von 12 m fielen die Messwerte aus irgendeinem Grund auf -8 m. Dies geschah zum Zeitpunkt des zweiten Motorstarts (was nicht hätte sein dürfen)Ich schließe also nicht aus, dass der fehlerhafte Motor den Höhenmesser irgendwie beeinflusst hat. In allen anderen Tests hat es gut funktioniert, so dass dies eindeutig kein Elektronikproblem war. Im Allgemeinen waren diese Tests des Höhenmessers nur zur Hälfte erfolgreich, da in der zweiten Hälfte des Fluges eine Anomalie auftrat. Sie finden das Diagramm selbst auf github , es heißt rocket_flight_fall_test .
Nachdem ich die Rakete repariert hatte, ging ich wieder zum Testgelände und diesmal waren die Tests erfolgreich. Der Flug war ausgezeichnet, die Höhenmesserwerte waren stabil und stimmten mit dem Flug überein. Der Flugplan sah folgendermaßen aus:
Horizontal - Messnummer. Alle 10 Messungen - 1 Sekunde. Vertikal - Höhe in Zentimetern Die Rakete stieg 150 m hoch
und landete erfolgreich.Somit war dieser Test völlig erfolgreich. Ich stellte sicher, dass der Höhenmesser funktionierte und begann, neue Bordausrüstung zu entwickeln.
Fazit
Am Ende habe ich einen kompakten Höhenmesser komplett zusammengebaut , der in ein kleines Raketenmodell passt. Die Tests waren erfolgreich, die Elektronik überlebte Start und Landung und maß die Flughöhe. Hier habe ich das Projekt zur Entwicklung eines Höhenmessers abgeschlossen, vielleicht werde ich ihn in Zukunft in einer der Raketen verwenden, da die Kenntnis der Flughöhe manchmal sehr nützlich ist (zum Beispiel, wenn Sie Raketen starten, um eine maximale oder eine bestimmte Höhe zu erreichen). Wie ich bereits sagte, entwickle ich jetzt eine Bordkamera mit einem Funksender, weil ich nicht vorhabe, eine Rakete mit solch ernsthafter Elektronik zu verlieren.
Vielen Dank für Ihre Aufmerksamkeit!