FRsky Taranis und Variometer FVAS-02H

Status
Nicht offen für weitere Antworten.

Norbert

Erfahrener Benutzer
Hy,

da demnächst ja das Vario-update kommt, hier mal eine
kurze Zusammenfassung wie man das macht.

Oder allgemein: S_Port Sensoren updaten ohne Fallstricke


Helle
Danke Helle für die allgemeine Info. Dazu eine Ergänzung:

Hatte wie im Schaltbild von FrSky die Kleindiode 1N4148 eingefügt und mich gewundert, warum es nicht klappt. Erst durch parallelschalten einer 2ten Diode funktionierte es bei mir - warum? Keine Ahnung, grosse Ströme fliesen hier ja nicht - die Diode war übrigens iO, habe sie extra nochmals gemessen.

Vielleicht doch eine 1N4001 verwenden.

Norbert
 

Rangarid

Erfahrener Benutzer
da demnächst ja das Vario-update kommt, hier mal eine
kurze Zusammenfassung wie man das macht.
Habe mich erst ein paar Tagen mit dem Vario beschäftigt, was genau bringt das Update denn? Wenn die Genauigkeit usw. verbessert wird, bringt das überhaupt was an der Funke?

@Tempo ich würde mich an der Tonerzeugung beteiligen, hab aber nur ne 9X mit der ich rumspielen kann. Die kann ja nur über den Buzzer. Wie habt ihr das an der Taranis denn geplannt? Auch über den Buzzer oder über Sprachdateien?

Übrigens hier gibt es ein DIY Arduino Vario:
http://www.rcgroups.com/forums/showthread.php?t=1749208

Die Tongebung finde ich recht gelungen. Beispielvideo:
http://www.youtube.com/watch?v=NB_vknk4_vw

Code ist auf der Seite, könnte man sich also abgucken. Was hälst du davon?
 
Zuletzt bearbeitet:

Tempo

Erfahrener Benutzer
Habe mich erst ein paar Tagen mit dem Vario beschäftigt, was genau bringt das Update denn? Wenn die Genauigkeit usw. verbessert wird, bringt das überhaupt was an der Funke?

@Tempo ich würde mich an der Tonerzeugung beteiligen, hab aber nur ne 9X mit der ich rumspielen kann. Die kann ja nur über den Buzzer. Wie habt ihr das an der Taranis denn geplannt? Auch über den Buzzer oder über Sprachdateien?
Der Tongenerator ist in der openTX-software programmiert. Bei der TARANIS geschieht die Tonwiedergabe entweder über den eingebauten Lautsprecher oder über einen anzusteckenden Ohrhörer. Ein Buzzer oder Piezo-akkustischer Wandler ist von der Tonqualität ungeeignet.
Es geht also um die Veränderung der entsprecheden Module in openTX.
Am besten rufst Du mich deswegen an. Du hast meine Telefonnummer unter "Fliegen am Wochenende". Ich zeige Dir auch zum Vergleich gerne ein professionelles Vario bzw. lasse es Dich abhören.
 
Zuletzt bearbeitet:

Rangarid

Erfahrener Benutzer
Ja vielleicht heute abend ;). Ich hab OpenTX auf der 9x drauf. Deshalb interessiert mich das hier jetzt ja. Die hat aber nur den eingebauten Piezo. Mein Vario ist aber auch noch nicht da, deshalb konnt ich noch nicht testen... Schau mal nochmal meinen vorherigen Post an, habe ein Video angehängt wo der Ton wie bei WSTECH klingt.

Das DIY Vario könnte man übrigens auch mit FrSky Support bauen. Dafür müsste man nur statt der 433Mhz Übertragung das FrSky Protokoll implementieren (das ist nicht besonders schwer). Dann könnte man entweder einfach an die Telemetriepins einen zweiten Arduino mit Lautsprecher dranhängen, der die Tonerzeugung steuert, oder eben die dort angewandte Methode zur Tonerzeugung in die Taanis einbauen, wenn das irgendwie geht.

Ich schau gerade in den Code der OpenTX. Anscheinend sind eigentlich schon alle notwendigen Sachen da:
Code:
#define AUDIO_VARIO(f, t)        audio.play(f, t, 0, PLAY_BACKGROUND)

void audioQueue::play(uint8_t tFreq, uint8_t tLen, uint8_t tPause, uint8_t tFlags){
...
}
Zumindest die Audioimplementierung ist da inkl. Frequenz und Länge die der Ton gespielt werden soll. Mal weiter schauen zur Audioerzeugung...


Das ist der Part den wir bearbeiten müssen um die Audioerzeugung zu verbessern:
Code:
#if defined(PCBSTD)[COLOR=#ff0000] (<-- Turnigy 9x)[/COLOR]

    int16_t varioCenterMax = (int16_t)g_model.frsky.varioCenterMax * 10 + 50;
    if (verticalSpeed >= varioCenterMax) {
      verticalSpeed = verticalSpeed - varioCenterMax;
      int16_t varioMax = (10+(int16_t)g_model.frsky.varioMax) * 100;
      if (verticalSpeed > varioMax) verticalSpeed = varioMax;
      verticalSpeed = (verticalSpeed * 10) / ((varioMax-varioCenterMax) / 100);


      if ((int16_t)(s_varioTmr-tmr10ms) < 0) {
        uint8_t SoundVarioBeepTime = (1600 - verticalSpeed) / 100;
        uint8_t SoundVarioBeepFreq = (verticalSpeed * 10 + 16000) >> 8;
        s_varioTmr = tmr10ms + (SoundVarioBeepTime*2);
        AUDIO_VARIO(SoundVarioBeepFreq, SoundVarioBeepTime);
      }
    }
#else [COLOR=#ff0000](<-- all others != 9x)[/COLOR]
    int16_t varioCenterMax = (int16_t)g_model.frsky.varioCenterMax * 10 + 50;
    if (verticalSpeed >= varioCenterMax) {
      verticalSpeed = verticalSpeed - varioCenterMax;
      int16_t varioMax = (10+(int16_t)g_model.frsky.varioMax) * 100;
      if (verticalSpeed > varioMax) verticalSpeed = varioMax;
      verticalSpeed = (verticalSpeed * 10) / ((varioMax-varioCenterMax) / 100);
    }
    else {
      int16_t varioCenterMin = (int16_t)g_model.frsky.varioCenterMin * 10 - 50;
      if (verticalSpeed <= varioCenterMin) {
        verticalSpeed = verticalSpeed - varioCenterMin;
        int16_t varioMin = (-10+(int16_t)g_model.frsky.varioMin) * 100;
        if (verticalSpeed < varioMin) verticalSpeed = varioMin;
        verticalSpeed = (verticalSpeed * 10) / ((varioCenterMin-varioMin) / 100);
      }
      else {
        return;
      }
    }


    if (verticalSpeed < 0 || (int16_t)(s_varioTmr-tmr10ms) < 0) {
#if defined(CPUARM) [COLOR=#ff0000](<-- ARM based boards)[/COLOR]
      uint16_t SoundVarioBeepTime;
      uint16_t SoundVarioBeepFreq;
      if (verticalSpeed > 0) {
        if (verticalSpeed > 1276) {
          SoundVarioBeepTime=5;
        } else {
          SoundVarioBeepTime = 320 - (verticalSpeed >> 2);
        }
        SoundVarioBeepFreq = 1000 + verticalSpeed;
      }
      else {
        SoundVarioBeepTime = 80;
        SoundVarioBeepFreq = (verticalSpeed * 3 + 8000) >> 3;
      }
      s_varioTmr = tmr10ms + (SoundVarioBeepTime/5);
#else [COLOR=#ff0000](<-- Non ARM based boards != 9x)[/COLOR]
      uint8_t SoundVarioBeepTime;
      uint8_t SoundVarioBeepFreq;
      if (verticalSpeed > 0) {
        SoundVarioBeepTime = (8000 - verticalSpeed * 5) / 100;
        SoundVarioBeepFreq = (verticalSpeed * 4 + 8000) >> 7;
      }
      else {
        SoundVarioBeepTime = 20;
        SoundVarioBeepFreq = (verticalSpeed * 3 + 8000) >> 7;
      }
      s_varioTmr = tmr10ms + (SoundVarioBeepTime/2);
#endif
      AUDIO_VARIO(SoundVarioBeepFreq, SoundVarioBeepTime);
    }
#endif
Paar Gedankenschnipsel zum Code damit ich das bis heute abend nicht wieder vergesse:

varioCenterMax = ab wann steigen piept (Intervallgröße 3m von [-2...1m/s] oder [-1...2m/s] in 0.1m Schritten)
varioCenterMin = ab wann sinken piept (Intervallgröße 3m von [-2...1m/s] oder [-1...2m/s] in 0.1m Schritten)
Etwas schwierig zu erklären deshalb Bild:

In diesem Fall gibt das Vario keine Geräusche aus von -0.1m/s sinken bis 0.1m/s steigen. Diese Werte können von -2m/s - 1m/s ODER von -1m/s - 2m/s eingestellt werden. Es würde aber auch z.B. -1.5m/s - 1.5m/s gehen.

verticalSpeed = aktuelle Sink-/Steigrate
varioMax = maximale Steigrate die ausgegeben werden soll [3...10m/s]
varioMin = maximale Sinkrate die ausgegeben werden soll [-3...10m/s]
SoundVarioBeepTime = Länge des aktuellen Tons
SoundVarioBeepFreq = Frequenz des aktuellen Tons
s_VarioTmr = Variable zum checken ob die 10ms schon rum sind
tmr10ms = 10ms Timer
 
Zuletzt bearbeitet:

helle

Erfahrener Benutzer
Hy Rangarid,

Norbert hat das aktuellste Frsky Test File für das Frsky Hiph Precision Vario mit verbesserter Auflösung, Speed besser 0,05m/s und wenig rauschen

Der kann es dir zum Test sicher senden.

Ansonsten direkt im Frsky-Forum, dann per mail anfragen dann bekommts du es dort

helle
 
Zuletzt bearbeitet:

Rangarid

Erfahrener Benutzer
Hallo helle,

hab ich alles schon gemacht (bis aufs Forum ;) )

Mal was zum Fortschritt bei OpenTX:

Man kann relativ einfach den Throttle Stick als Vario missbrauchen. Dadurch kann man von Hand das Steigen und Sinken verändern. Throttle mitte wäre also quasi 0m/s, Throttle Max wäre 10m/s und Throttle min -10m/s.

So lässt es sich auch ohne Vario ziehmlich einfach testen, ob die erzeugten Töne denn stimmen und man ist erstmal nicht auf einen guten Filter seitens des Varios angewiesen.
Werde ich heute Abend probieren und mal aufnehmen. So lässt sich leichter herausfinden, ob der Tongenerator passt oder nicht.
 
Zuletzt bearbeitet:

Rangarid

Erfahrener Benutzer
Hier mal die Variogeräusche von der 9X:
www.youtube.com/watch?v=Ddi3GPr9NBk

Die Taranis hört sich vermutlich etwas anders an, aber sollte vom Prinzip ähnlich sein. Der Vorteil an der Taranis ist, dass man die Frequenzen viel genauer handhaben kann, beim Sinken-Ton zumindest sollte es also von den Tönen her noch besser gehen.

Taranis hat eigentlich auch eine sehr simple Tonerzeugung:
SoundVarioBeepFreq = 1000 + verticalSpeed;

VerticalSpeed wird vorher noch irgendwie rumgerechnet und dann auf die Basisfrequenz draufgerechnet oder abgezogen. Da lässt sich also sehr einfach was ändern.

Bei der 9X kann man denk ich nicht mehr viel weiter rausholen als wie im Video zu sehen ist. Bei der Tranis sollte aber durch den Lautsprecher einiges möglich sein.
 

Norbert

Erfahrener Benutzer
Hallo Rangarid,

hört sich ja schon sehr vielversprechend an. Die Umsetzung ging ja innerhalb kürzester Zeit.

Wenn ich richtig verstehe, sollte das auch für Taranis problemlos möglich sein. Leider habe ich mit microProzessoren gar keine Erfahrung. Vielleicht sehe ich mir mal den SourceCode an.

Könntest du mir sagen, wo die Tonausgabe berechnet wird und die erwähnte Zeile ""SoundVarioBeepFreq = 1000 + verticalSpeed;"" sinngemäß implementiert werden muss.

Fände es auch sinnvoll verschiedene Glättungszeiten zu haben, um bei schwachen Thermikbedingungen eine noch bessere Auflösung zu bekommen. Wäre natürlich auf der Sensorseite sinnvoller, aber ob FrSky uns diesen Wunsch erfüllt. Luxus wäre eine vom Sender umschaltbare Filterlänge, die im Vario dann eingestellt wird. Ob das über SPort möglich ist, weiss ich nicht.

Habe auch keine Ahnung wie das ganze dann kompiliert wird usw. Muss mich da notfalls komplett einarbeiten. Kenne das ganze nur von Grossrechnern in Hochsprache.

mfG

Norbert
 

Rangarid

Erfahrener Benutzer
Ich verlinke dir einfach mal die Datei bei Github:
https://github.com/opentx/opentx/blob/master/src/maths.cpp

Dieser Teil erzeugt die Frequenz und die Tonlänge:
uint16_t SoundVarioBeepTime;
uint16_t SoundVarioBeepFreq;
if (verticalSpeed > 0) {
if (verticalSpeed > 1276) {
SoundVarioBeepTime=5;
} else {
SoundVarioBeepTime = 320 - (verticalSpeed >> 2);
}
SoundVarioBeepFreq = 1000 + verticalSpeed;
}
else {
SoundVarioBeepTime = 80;
SoundVarioBeepFreq = (verticalSpeed * 3 + 8000) >> 3;
}
s_varioTmr = tmr10ms + (SoundVarioBeepTime/5);
Aber bevor du da rumfummelst, der Mensch der an der opnXvario Entwicklung beteiligt ist, hilft gerade bei OpenTX mit die richtigen Frequenzen zu finden. Kann also sein, dass sich da eh in nächster Zeit mehr tut. Siehe verlinkung eine Seite vorher.
 
Zuletzt bearbeitet:

Tempo

Erfahrener Benutzer
Variometer Tongenerator optimieren

@Norbert
Alle die Wünsche lassen sich mit openxvario bzw. openxsensor erfüllen:
Umschalten des Varios in verschiedene Modes per Fernsteuerungsschalter.

@Rangarid
Deine Programmierarbeit können wir auf die Taranis mit dem Lautsprecher bzw. einem Ohrhörer übertragen.
Richtung Wochenende finde ich etwas Zeit dazu.

Für die Interessierten:
https://github.com/opentx/opentx/issues/670
 

Rangarid

Erfahrener Benutzer
Naja viel habe ich nicht gemacht. Die Taranis hat ja sowieso steigen und sinken drin. Bei der 9x war halt nur steigen drin...Der Rest ist original Code.

Das Erzeugen der Variotöne ist unabhängig vom Variosensor, da dort nur der verticalspeed von genommen wird und der ist bei den anderen Varios auch vorhanden.

Der verticalspeed vom Vario ist zwar entscheidend für die genauigkeit, beeinflusst aber nicht wie sich die Töne anhören. Deshalb ist es nachher egal ob man das openxvario oder das Frsky Vario nutzt. Wenn die Töne in der Taranis nicht gut gehen, dann gehen sie bei beiden nicht gut.

Da muss nichts von mir übertragen werden, sondern man muss lediglich die Tonfrequenz und die Tonlänge anpassen. Mehr geht zur zeit nicht. Ein filter über die Höhe laufen zu lassen in der Fernsteuerung ist auch nicht besonders genau, da dort einfach zu wenig Werte pro Zeiteinheit ankommen. Das Filtern muss im Vario gemacht werden.

Ich möchte auch nochmal drauf hinweisen: Wir machen hier nur Modellbau. Wenn ihr ein richtig gutes Vario wie im echten Flieger wollt, wird das mit den Mitteln die uns zur Verfügung stehen nicht gehen bzw wird zu Aufwendig..
 
Zuletzt bearbeitet:

Tempo

Erfahrener Benutzer
...
Ich möchte auch nochmal drauf hinweisen: Wir machen hier nur Modellbau. Wenn ihr ein richtig gutes Vario wie im echten Flieger wollt, wird das mit den Mitteln die uns zur Verfügung stehen nicht gehen bzw wird zu Aufwendig..
Die "grossen Flieger" kochen auch nur mit Wasser :D.
In unserem Falle haben wir mit dem digitalen Sensor MS5611 einen preiswerten und hinreichend auflösenden.
Die Kunst ist eben ein optimierter Algorithmus zum Differenzieren verrauschter, digital springender Signale und eine für den geübten Segelflieger ausgefeilte akkustische Variometersignalausgabe.

Fliege einmal mit mir im 20-m Modell mit und Du erlebst, was ich meine.
Das geht auch im Modellbau, wie z.B. www.wstech.de es macht. Er macht allerding etwas elegantes:
wstech benutzt einen analogen Sensor und differenziert das Höhensignal mit analogen Mitteln. Erst dann wird das Variometersignal extrem Rauscharm digitalisiert. Beim analogen Messen und Differenzieren gibt es eben keine digitalen Sprünge :eek:
 

Rangarid

Erfahrener Benutzer
Der unterschied beim WSTECH ist aber auch, dass die Töne direkt im Sensormodul erzeugt werden und nicht erst die Daten runtergeschickt werden und dann das Audio erzeugt wird. Beim normalen WSTECH zumindest mit Funkgerät ist das so.

Das hat unter anderm den Vorteil, dass du in viel kürzerer Zeit viel mehr Daten zum Vergleich hast, als was in der Taranis ankommt.

Wenn die Tonerzeugung direkt aus der Taranis kommen soll sind wir halt im Vergleich zu der Variante vom WSTECH und von KK mit seinem Arduino Vario stark benachteiligt. Beim DIY Vario von KK siehst du ja, dass es auch mit dem MS5611 geht, dort werden die Audiogeräusche aber auch bereits im Arduino im Flieger erzeugt und per 433 Mhz runtergeschickt und direkt 1:1 ausgegeben (wie bei einem Funkgerät eben).
 
Zuletzt bearbeitet:

Tempo

Erfahrener Benutzer
Tonprofil für Variometer

So sollen die Töne in der Taranis ausgegeben werden:

Grundfrequenz:
f(vspeed)=270Hz+(vspeed-v0)*100Hz/m/s
mit f für Tonfrequenz
mit vspeed für Variometersignal in m/s
mit v0 für Eigensinken des Segelflugzeuges in m/s, z.B. für meine Segler v0=-0,3m/s


Dann fehlt noch die Taktung, die das Ganze erst richtig gut macht. In meinem Falle:

(1) Für Bereich vspeed < -0,3m/s --> Dauerton mit abnehmender Frequenz laut f(vspeed)-Formel bis hinab zu ca. 130Hz und dann bei 130Hz stehen lassen. Tiefere Frequenzen für noch stärkeres Fallen machen keinen Sinn. Da heißt es so schnell wie möglich durchfliegen.

(2)Für Bereich -0,3 m/s < vspeed < 0 m/s gepulster Ton mit Taktfrequenz=f(vspeed) / const und mit Tastverhältnis 50:50, also

Tönzeit = 0,5 / Taktfrequenz = 0,5 * const/f(vspeed)
Pausenzeit = Tonzeit

(3)Für Bereich 0 m/s < vspeed <+ 5 m/s gepulster Ton mit Taktfrequenz=f(vspeed) / const und mit Tastverhältnis 25:75, also

Tönzeit = 0,25 / Taktfrequenz = 0,25 * const/f(vspeed)
Pausenzeit = 0,75 / Taktfrequenz = 0,75 * const/f(vspeed)

Für Größere Steigraten als +5m/s heißt es, so schnell wie möglich aus dem Steigen fliegen, sonst erkennt man das Modell-Segelflugzeug schnell nicht mehr am Himmel!

Als Parameter sollte vom Benutzer einstellbar sein:
v0 = Eigensinken des verwendeten Segelflugzeuges

==================================================================

Für den Thermikjäger bedeutet das:

(1) Geringes Sinken wird optimiert abgeflogen, d.h. einen Flugpfad suchen, der weniger Sinken aufweist.
Wenn es schon sehr stark sinkt, interessiert der genaue Wert nicht mehr, ein "Brummen" reicht dann und der erfahrene Segelflieger fliegt mit hoher Geschwindigkeit durch dieses Gebiet hindurch. Bei thermikreicher Wetterlage kommt dahinter immer ein Gebiet mit starkem Steigen. Kann manchmal etwas weiter entfernt sein :eek:
Bei Wetterlagen mit schwacher Thermik sind die Unterschiede von Steigen und Fallen im Allgemeinen weniger stark ausgeprägt.

(2) Das ist der "Nullschieber", der entscheidet, ob das Segelflugzeug "absäuft" oder verzögert in der Luft bleibt.
Das ermöglicht weiteres Absuchen nach Thermik.

(3) Hier zentriert der Thermikjäger bestmögliches Steigen.
 
Zuletzt bearbeitet:

Norbert

Erfahrener Benutzer
So sollen die Töne in der Taranis ausgegeben werden:

Grundfrequenz:
f(vspeed)=270Hz+(vspeed-v0)*100Hz/m/s
mit f für Tonfrequenz
mit vspeed für Variometersignal in m/s
mit v0 für Eigensinken des Segelflugzeuges in m/s, z.B. für meine Segler v0=-0,3m/s


Dann fehlt noch die Taktung, die das Ganze erst richtig gut macht. In meinem Falle:

(1) Für Bereich vspeed < -0,3m/s --> Dauerton mit abnehmender Frequenz laut f(vspeed)-Formel bis hinab zu ca. 30Hz und dann bei 30Hz stehen lassen. Tiefere Frequenzen für noch stärkeres Fallen machen keinen Sinn. Da heißt es so schnell wie möglich durchfliegen.

(2)Für Bereich -0,3 m/s < vspeed < 0 m/s gepulster Ton mit Taktfrequenz=f(vspeed) / 64 und mit Tastverhältnis 50:50, also

Tonzeit = 0,5 * Taktfrequenz = 0,5 * f(vspeed)/64
Pausenzeit = Tonzeit

(3)Für Bereich 0 m/s < vspeed <+ 5 m/s gepulster Ton mit Taktfrequenz=f(vspeed) / 64 und mit Tastverhältnis 25:75, also

Tonzeit = 0,25 * Taktfrequenz = 0,25 * f(vspeed)/64
Pausenzeit = 0,75 * Taktfrequenz = 0,75 * f(vspeed)/64

Für Größere Steigraten als +5m/s heißt es, so schnell wie möglich aus dem Steigen fliegen, sonst erkennt man das Modell-Segelflugzeug schnell nicht mehr am Himmel!

Als Parameter sollte vom Benutzer einstellbar sein:
v0 = Eigensinken des verwendeten Segelflugzeuges

==================================================================

Für den Thermikjäger bedeutet das:

(1) Geringes Sinken wird optimiert abgeflogen, d.h. einen Flugpfad suchen, der weniger Sinken aufweist.
Wenn es schon sehr stark sinkt, interessiert der genaue Wert nicht mehr, ein "Brummen" reicht dann und der erfahrene Segelflieger fliegt mit hoher Geschwindigkeit durch dieses Gebiet hindurch. Bei thermikreicher Wetterlage kommt dahinter immer ein Gebiet mit starkem Steigen. Kann manchmal etwas weiter entfernt sein :eek:
Bei Wetterlagen mit schwacher Thermik sind die Unterschiede von Steigen und Fallen im Allgemeinen weniger stark ausgeprägt.

(2) Das ist der "Nullschieber", der entscheidet, ob das Segelflugzeug "absäuft" oder verzögert in der Luft bleibt.
Das ermöglicht weiteres Absuchen nach Thermik.

(3) Hier zentriert der Thermikjäger bestmögliches Steigen.
Soweit grungsätzlich ok, aber 30 Hz als tiefste Frequenz? Wie soll das der Popellautsprecher in der Taranis denn wiedergeben? Mit Kopfhörer mag das ja noch angehen, obwohl das menschl Gehör zu tiefen Frequenzen schon recht unempfindlich wird. Mir erscheint das Tonfrequenzspektrum subjektiv zu tief, aber vielleicht täusche ich mich auch. Will nur vermeiden, dass man die Umsetzung mehrfach anpacken muss. Müsste man sich am Sender einfach mal anhören.

Norbert
 
Status
Nicht offen für weitere Antworten.
FPV1

Banggood

Oben Unten