THIS WEBSITE IS DEPRECATED.
My new website: makomi.net.

homeprojectsIT › MSB sensor

8-Kanal Sensor für den Multiplex Sensor Bus (MSB)



[sch main]     [brd top]     [3d top]    

[sch adc]     [brd bottom]     [3d bottom]    


Hintergrund
Der MSB wird im Modellflug verwendet, um Sensoren an Bord eines Fluggeräts mit einem Modellbauempfänger der Firma Multiplex zu verbinden. Über den MSB können für den Piloten wichtige Messwerte wie unter anderem Spannung, Strom und Temperatur von einem Sensor an den Modellbauempfänger übermittelt werden. Der Modellbauempfänger wiederum reicht sie via M-Link Protokoll an die Fernsteuerung des Piloten am Boden weiter. Der Modellbauempfänger fungiert hierbei also sowohl als Empfänger für die Steuersignale vom Piloten als auch als Rückkanal für die per MSB von den Sensoren erhaltenen Messwerte.

Motivation
Da die Sensoren der Firma Multiplex relativ teuer sind und mindestens drei von ihnen verbaut werden müssen, um z.B. einen Quadrokopter mit neuen Motorstellern sicher einzufliegen, habe ich mich dazu entschlossen einen eigenen Sensor zu entwickeln. Er kann bis zu 8 Spannungs-, Strom- oder Temperaturmessungen, beziehungsweise eine frei wählbare Kombination davon, durchführen. Anschließend können entweder direkt die gemessenen Werte oder daraus berechnete Werte, wie z.B. die Leistung, auf den MSB ausgeben werden.

Anforderungen

Implementierung
Der Sensor wird von mir in C auf einem ATmega168 implementiert. Zur Verwaltung des Quelltextes benutze ich Git und zu seiner Dokumentation Doxygen. Zum Schaltplanentwurf und Platinendesign verwende ich KiCAD. Eine angepasste Makefile automatisiert typische Aufgaben der Softwareentwicklung.

Der Sensor besteht prinzipiell aus 3 zentralen Softwaremodulen:

MSB
Das MSB-Modul implementiert die MSB-Protokollspezifikation von Multiplex, um den Sensor mit dem Modellbauempfänger an Bord des Fluggeräts zu verbinden. Hierzu verwendet es einen interrupt-gesteuerten Hardware UART sowie einen 8-bit Timer. Sobald ein vollständiger UART Frame empfangen wurde, wird die entsprechende Interrupt Service Routine (ISR) zu seiner Verarbeitung aufgerufen. Im Zuge der Verarbeitung wird der Timer benutzt, um den Idle Line Timeout zu erkennen, der signalisiert, dass der gerade empfangene Frame eine Anfrage des MSB-Masters war.

MVP
Das „Measured Value Processing“-Modul berechnet die physikalisch korrekten Messwerte und stellt sie dem MSB-Modul zur Verfügung. Hierfür wird es jede Sekunde von einem Timer aufgerufen. Ich habe mich entschieden dem Piloten nur jede Sekunde einen neuen Messwert zukommen zu lassen, da dies erlaubt mit dem 10 bit ADC auf 12 bit zu oversamplen.
Um neben der Auflösung auch die Messgenauigkeit zu verbessern, ist es möglich eine Offset- und Gain-Kalibrierung für die gesuchten physikalisch korrekten Messwerte (Spannung, Strom und Temperatur) durchzuführen. Da für die Temperatur jedoch die Beziehung zwischen Widerstandswert des Temperaturelements und der gemessenen Temperatur nichtlinear ist, wird zuvor die PT100-Widerstandskennlinie angewendet, um einen linearen Zusammenhang herzustellen.

CLI
Das „Command Line Interface“-Modul dient der Konfiguration des Sensors durch den Benutzer und wird in main() ausgeführt, d.h. wenn gerade keine wichtigeren Module ausgeführt werden müssen.

Prozesspriorisierung
Zur Priorisierung der einzelnen Prozesse im Sensor existieren 3 Prioritätsstufen:
  1. nicht unterbrechbare ISRs
  2. unterbrechbare periodisch aufgerufene ISR
  3. eine Endlosschleife in main()
Die nicht unterbrechbaren ISRs haben die höchste Priorität. Da sie den Prozessor effektiv für andere Prozesse blockieren, sind sie so kurz wie möglich gehalten und haben eine feste Laufzeit. Sie werden für alle Aufgaben verwendet, die unverzüglich ausgeführt werden müssen. Hierunter fällt zum Beispiel das bereits angesprochene Anstoßen der Verarbeitung eines neu empfangenen UART Frames.
Es gibt eine unterbrechbare ISR, die periodisch aufgerufen wird. Mit ihr werden in regelmäßigen Abständen die neuen Messwerte berechnet und aktualisiert.
Alle übrigen nicht zeitkritischen Prozesse werden in einer Endlosschleife in main() bearbeitet. Diese Schleife wird nur ausgeführt, wenn gerade kein Interrupt abgearbeitet wird. In ihr befinden sich alle Aufgaben, die problemlos als letztes ausgeführt werden können, da sie nicht zeitkritisch sind. Hierunter fällt im Augenblick vor allem die Verarbeitung der Benutzereingaben von der seriellen Schnittstelle für die Kommandozeile des Sensors.

Vision

Download



Lizenz

GPL v2

Stichwörter

KiCAD; Git; C; ATMEL ATmega168; quadrocopter; MSB; Multiplex Sensor Bus.