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
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