UNIDINGS SERVO read/write SBUS PPM PWM BLHELI USW

Das UNIDINGS ist ein Universal Basteladapter, und läuft auf dem Arduino Nano / Uno
Es kann:
Servosignale ausgeben
Servosignal einlesen
SUM-analog PPM Stream einlesen
SBUS einlesen
PWM 2-80000Hz mit duty 1-99% ausgeben
Serial einlesen (Debug)
Optional ist es ein BLHeli OneWire Adapter, auch für AVRootloader, Unisens u.s.w.
Und es ist natürlich um weitere Ideen erweiterbar.

Alles das wird über den Serialmonitor gemacht, keine Bastelei oder Löterei, Uno aus der Kiste nehmen, und los. (Motto, mal eben schnell, ohne Display u.s.w.)

Software:
Die Ino-Datei ist im Anhang, einfach drauftüdeln, und gut.
Wichtig war mir keinerlei Libs zu verwenden, weil, ohne Libs, keine Probleme mit Libs… ;-)

Danach meldet sich UNIDINGS im Serialmonitor (57600Baud)
UNIDingsstart.png


Hardware:
Arduino Nano / Uno
Alles passiert am Pin 9, sämtliche Ein und Ausgaben.
Optional, um in den BLHeli-Mode zu gelangen muss Pin11 auf Masse geschaltet werden.

Das war es eigentlich auch schon, gäbe Gäbe es nicht die „Luxusvariante“,
Das kann man, muss man aber nicht so machen:
Servokabelimpuls an Pin9 löten, Minus an GND, Plus an +5V
Am anderem Ende einen 6er Pinwürfel, die Dinger die beim Arduino meist eh dabei liegen. Der 6er sind dann quasi 2 3er Servoanschluss nebeneinander, einmal den mittleren aber vorher rausgezogen (+5V) dann hat man einen Anschluss mit und einen ohne 5V. Nun noch ein Servo-Stecker-Stecker-Kabel, dann hat man Viererlei.
Optional kann ein 3er Pfosten als Jumper für den BLHeli-Mode gesetzt werden. D11 wird dazu auf Masse gezogen, am ISP Anschluss ist auch D11 zwischen GND und +5V, hier gebogene Pins fand ich besonders schick.
UD1.jpeg
UD2.jpeg
UD3.jpeg




Ich mache jetzt nach und nach die einzelnen Funktionen Beitragsweise…
 

Anhänge

  • UNIDINGS.ino.txt
    7,8 KB · Aufrufe: 215
Zuletzt bearbeitet:
Funktion 1 Servotester
Servo an PinD9

Im Serialmonitor nach dem Start " 1 " tippen, dann gelangen wir in den Servotester.
Nun kann man direkt die Pulsweite in µS eintippen, immer mit einem S davor, z.B: S1500 für Servomitte

Das sieht dann so aus (inkl Fehlermeldung wenn man versucht falsche Pulslängen einzugeben):
1 write Servo .png
 
Zuletzt bearbeitet:
Funktion 2 Servo-einlesen
Servosignal an PinD9

Im Serialmonitor nach dem Start " 2 " tippen, dann gelangen wir in das Programm um ein einzelnes Servosignal einzulesen, es wird in µS angezeigt, das sieht dann so aus:
2 read single Servo.png
 
Funktion 3 und 4 Servo Stream PPM oder SBUS einlesen

Im Serialmonitor nach dem Start " 3 " eintippen, um analogen PPM SUM Stream einzulesen
Im Serialmonitor nach dem Start " 4 " eintippen, um SBUS SUM Stream einzulesen

Sieht dann so aus:
3_4 read PPM SBUS.png
 
Zuletzt bearbeitet:
Funktion 1 Universal PWM Ausgabe 2-80000Hz
PWM-Ausgabe an PinD9

Im Serialmonitor nach dem Start " 5" tippen, dann gelangen wir zu der PWM Ausgabe
Zuerst wird eine PWM 1KHz 50% gestartet,
Um die Frequenz zu ändern z.B. F5000 für 5KHz eingeben
Um die Pulsweite auf z.B. 70% zu ändern %70 eingeben

Das sieht dann so aus
5 write PWM.png



-


Ein paar Bilder vom Oswald dazu:

1KHz 50%
PWM 1000 50.jpeg


1KHz 10%
PWM 1000 10.jpeg



50KHz 10%
PWM 50000 10.jpeg
 
Zuletzt bearbeitet:
Funktion 6 Serialdebug
Serial-IN an PinD9

Es ist die Baudrate, die auch im Ino-Programm gewählt wurde, default 57600Baud.
Würde man eine andere wählen, müsste man den Serialmonitor danach die Baudrate wechseln, und damit einen Soft-Reset auslösen.
Für eine andere Baudrate dann auch oben in der Ino die Baudrate ändern.

BTw, im BLHelimod hat man zugleich einen Serialdebugger mit 19200Baud

Im Serialmonitor nach dem Start " 6 " tippen, dann gelangen wir in den Serialdebugger. (Ohne Bild)
 
Zuletzt bearbeitet:
Zusatzprogramm BLHeliadapter auch AVRootloader und alle möglichen anderen One-Wire Anwendungen (Achtung-5Volt !)

Hierzu muss der Pin D11 auf Masse gezogen werden, über Soft lässt sich das nicht starten, da das BLHeliprogramm beim Start einen Softreset auslöst. Im erstem Beitrag ist eine schicke Möglichkeit das Ganze als Jumper auszuführen.

Wenn man beim Start den Serialmonitor anlässt (nicht nötig, nur für Kontrolletti !) dann meldet sich der Adapter kurz, (vor dem starten von BLHeli/AVRootloader den Serialmonitor schliesen !).
BLHELI-MODE.png




Sooo, grob habe ich es fertig.
Es sind noch weitere Module auf dem Plan, immer wenn mal Zeit ist, und eine Idee ins Haus steht. Natürlich ist Jeder eingeladen mitzumachen.
Das Ganze ist natürlich Freie-Sauce, kann Jeder mit tun was immer ihm beliebt.
 
Zuletzt bearbeitet:
Wer noch ein Unitest-2 hat, das kann man auch mit dem UniDings auslesen:

Unitest anschliesen (ohne +5V)
Com1
-- und T
readUntest.jpeg




Unidings mit 6 für Serialdebug starten
Unitest auf 57600 Baud stellen
Unitest > Datenspeicher > Speicher->PC

Sieht dann so aus:
readUnitest.png



Besser ist es natürlich vor der Datenübertragung noch "Ausgabe löschen" im Serialmonitor drücken ;)
Ich übernehme keine Haftung für brennende Unitests !!!
 
Motor Start Rampe

Programm starten mit 7
Dann Akku anklemmen (Signal steht bei Leerlauf 1050µS)
Dann R mit der Sekundenzahl für die Hochlaufzeit hinterher.
Der Motor beginnt zu starten, läuft in der vorgegebenen Zeit hoch, wartet kurz bei Vollgas, und fährt dann sanft wieder herunter.

Test vorab immer ohne Propeller !!!

Rampe.png




Ich habe noch eine Rampe für das Motorvermessen hinzugefügt. Brauchen tun das wahrscheinlich nur sehr wenige, damit kann man recht einfach den Teillastwirkungsgrad verschiedener Regler/Reglereinstellung vergleichen. Der Motor läuft sehr langsam hoch, dabei wird Eingangsleistung vs Propellerdrehzahl geloggt. In einer Tabellenkalkulation lässt sich das dann recht hübsch vergleichen.
Hier ein älterer Vergleich, die Linien sind wegen der geringes Framerate des Loggers (2Hz) sehr wellig, aber man sieht die Unterschiede.
reglervergleich.jpeg
 
Zuletzt bearbeitet:
Hallo Holger,

ich habe Dein Unidings auf einen Nano geflashed, geht!
Aber mir ist aufgefallen das alle SBUS Kanalwerte etwa 20 - 22µs zu niedrig sind.
Mein Sendermonitor (Horus FRSky mit opentx) sagt mir z.B. 1500µs, der zugehörige SBUS Kanal aber 1479µs. Ein weiteres, Unitest 2 vergleichbares Tool zeigt auf dem jeweiligen Kanal dagegen auch 1500µs an.
Hast Du solch eine Abweichung auch bemerkt?

Viele Grüße
Günter
 
Ich glaube es hat sich geklärt, das ist der feine Unterschied Futaba Servomitte 1520µs vs. FrSky Servomitte 1500µs.
Wenn ich 20µs draufzähle:
for(uint8_t i=0; i<16; i++){Ch=Ch*5/8+880;} // Ändern auf µS (+20µs für FrSky )von irgendwas
dann passt es auch bei FrSky Empfängern.

Viele Grüße
Günter
 

RayX

User
Moin,

Es ist zwar richtig das Futaba 1520µs als Mitte definiert, kann aber eigentlich von der Logik nichts mit Futaba zu tun haben.
Egal welcher Sender, wenn der 1500µs Sendet sollten auch 1500µs Empfangen / gemessen werden.
 
Ja, denke ich auch....aber, was hat Holger im Bild von Beitrag #4 als Sender verwendet, einen Futaba Sender, dessen Kanäle 0% oder aber 1520us senden?
 
Hallo Günter
Ich habe einen Hott Sender, das kann aber auch die Ursache sein, ich habe keinen anderen SBus Sender :-(

Mein Denkfehler könnte in der Zeile *5/8+880 stecken
Lasse ich das Umrechnen weg,
Code:
 for(uint8_t i=0; i<16; i++){Ch[i]=Ch[i];}
Bekomme ich
Mitte 1024

Ende1 1663
Ende2 385


Der Sender sollte dabei 1100-1900µS senden.
Vielleich magst Du ja mal gegenchecken ?

Muss ich auch nochmal grübeln, sobald mein Hirn wieder aufgetaut ist ;)
 
Hi Holger, die *5/8+880 das stammt von mir. Du hast 860 darin stehen. Ich habe das auf 880 geändert, damit bekomme ich mit FrSky 1500 gemessen, wenn der Sender 1500 rausgibt.
 

RayX

User
Was mir nicht klar ist...
Wenn 1500µS gesendet werden müssen folglich auch 1500µS gemessen werden egal mit welchem Sender die 1500µS gesendet wurden.
Ich denke es wäre günstig mal mit einem Oszi zu prüfen, sonst macht das ganze messen doch wenig Sinn.
Oder was meint Ihr dazu ?
 
Moin Holger,

welchen Bereich gibt dein Hot Sender in wirklich aus ?

1100-1900µS (siehe auch Beitrag 3 ...)


Es kann auch sein das Graupner die Norm von Futaba zu genau genommen hat, und für Servomitte für GRaupner 1500µS darum +20 für Futaba rausrotzt.
Ich denke Günters +880 passen wohl. Ich änder es erstmal so ab, und dann mal vielerorts testen.


EDIT
Günter, jepp das passt wie Du sagst, habe mal ein bissl andere Libs gegoogelt, wie andere das gerechnet haben (hätt ich gleich machen sollen, hätte eine Menge Zeit gespart :D) Danke für den Hinweis :)

hier z.B. in Zeile 243 sind es auch *5 /8 + 880 (statt 860)
 
Zuletzt bearbeitet:
Hab mal die V2 hochgeladen

Änderungen:
-Motor Startrampe hinzugefügt (Prog7)
-Einfachen Logik-Tester hinzugefügt (Prog8)
-SBUS Leseausgabe korrigiert

Auf Rückfrage, den Jumper braucht man nur wenn man auch das UNIDINGS als BLHeli-Adapter nutzen möchte, ansonsten einfach weglassen.

Code:
UNIDINGS, (Jumper open)
type:
1 for Servotester
2 for read single Servo
3 for read PPM Stream
4 for read SBUS
5 for PWM-OUT 2Hz-80KHz
6 for SerialRead 57600 BAUD
7 for Motor-Start-Rampe
8 for Logiktester
 

Anhänge

  • UNIDINGS_V2.ino.txt
    9,6 KB · Aufrufe: 173
Ansicht hell / dunkel umschalten
Oben Unten