PPM2DSM Konverter mit STM32F030 (kein Arduino)

adrock

User
Hi,

hatte vor kurzem Bedarf an einem kleinen DSM2-Sender, jedoch nur noch so ein MLP4DSM rumliegen, wo doch die MX-12 viel schöner ist... also kurz gegoogelt und gefreut, das Graupner mittlerweile das serielle DSM-Protokoll in die Firmware eingebaut hat, den Spektrumsender geschlachtet um das Sendemodul auszulöten... leider kam etwas später die Ernüchterung, dass es mal wieder nur bei den gehobeneren Graupner-Sendern implementiert wurde, also nix mit MX-12.

Ein kleiner STM32F030 flog noch rum und diverse Arduino-Projekte im Netz lieferten die Info zum Protokoll. Ein fertiges Modul bestellen war keine Option, natürlich :-)

Anbei das Ergebnis als Sourcecode ohne Arduino, falls es mal jemand gebrauchen kann.

Um die Schaltung mit der MX-12 zu verheiraten, war dann allerdings noch eine kleine Transistorschaltung zur Pegelanpassung notwendig, da an der MX-12 das PPM L/S-Signal relativ unglücklich über einen Kondensator entkoppelt ist. Siehe auch hier: https://fpv-community.de/threads/mx12-und-flugsimulator-gas-kanal-geht-nicht.12583/

Zum Programm:

- Die Auswertung der PPM-Impulsdauer erfolgt über die Hardware (Timer mit Input Capture)
- Nach jedem erkannten Impuls wird ein IRQ ausgelöst der die Dauer des letzten Impulses dann in ein Array schreibt
- Das Hauptprogramm wartet darauf, dass ein kompletter PPM-Frame (also in diesem Fall 6 Kanäle) erfasst wurde, wandelt die PPM-Impulslängen in das digitale Spektrum-Format um und sendet sie seriell über den UART
- Als IDE sollte sich eigentlich alles eignen was STM32F0xx kann, es wird nur CMSIS verwendet, kein Cube-MX o.ä.

Hardware (habe keinen Schaltplan gemacht, da wirklich trivial):

- STM32F030 F4P6 (ist die kleinste Version im TSSOP20 Gehäuse) in Basis-Beschaltung (Betriebsspannung, BOOT0 pulldown, Programmierinterface)
- Soll der Controller von der Funke versorgt werden, ist ggfs. noch ein 5V -> 3,3V Spannungsregler notwendig (z.B. LM 1117-3.3)

Anschluss der Pripherie:

- PA0 LED Ausgang (active low, am besten rote LED mit 680..1000 Ohm in Serie an 3,3V)
- PA1 Bind-Taster Eingang, interner Pullup aktiviert, über Taster an Masse anschließen
- PA2 Seriell Ausgang, mit dem Eingang des DSM-Sendemoduls verbinden
- PA9 PPM Eingang, 0...5V

Da man hier wohl nichts direkt hochladen kann, habe ich einfach mal Github ausprobiert:

https://github.com/mmabln/ppm2dsm

Gruß
Markus
 

Propi

User
Hallo Markus

Tolles Projekt, mal was mit nem ARM ;-)
Gibt unterdessen übrigens noch einen kleineren STM-Controller mit nur 8 Pins -> STM32G031J6

Habe mit diesem folgende Projekte für meine Multiplex SX9 bzw. deren Empfänger realisiert:
- MSB-Vario mit BMP280
- MSB-Vario, GPS mit 128kByte FRAM-Logger und Display (STM32G031F8 20-Pin)
- MSB-Drehzahlmesser optisch
- MSB-Datenlogger mit 128kByte FRAM
- Servo-Expander mit SRXL-Protokoll
- PowerSwitch mit SRXL-Protokoll

habe das mit dem Mecrisp Forth-Kernel von Matthias Koch programmiert.

Gruss Ralph
 
Ansicht hell / dunkel umschalten
Oben Unten