Flight Controller Relais / Transistor Ausgang

#1
Hi,

Kennt sich jemand mit den Flight Controllern bzw Betaflight/Cleanflight aus? Gibt es eine Möglichkeit einzelne Ausgänge am FC als Relais/Transistorausgang zu nutzen, um zB FPV und LEDs zu schalten?

Lg
 

walter99

Erfahrener Benutzer
#2
ob es das gibt kann ich dir nicht sagen, ich habe via tiny das gelöst, meine leds werden über einen kanal ausgewertet und mittels attiny 85 ausgewertet und geschaltet.
mfg
 

s.nase

Erfahrener Benutzer
#3
Du kannst einfach eine kleines brushedESC an den Servoausgang klemmen, und statt dem Motor bald die LEDs damit betreiben.

Wenn die Strombelastbarkeit ausreicht, geht das auch mit ner Servoelektronikleiterplatte.

Ich würde aber auch noch ne Diode dazu in Reihe schalten, da Motor- oder Servo- ESC halt auch mal in verpolter Richtung arbeiten könnten.
 

s.nase

Erfahrener Benutzer
#5
Meistens hat man ja auch noch einen Regler vor den LEDs, damit motorlastunabhängig die LEDs gleich hell bleiben. Diese Konstantstromregler könnt sauer werden, wenn man sie verpolt bestromt.

BrushedMotorESCs kann man ka idR auch so programmieren, das sie nur vorwärts laufen. Dann kann man sich die Diode natürlich auch sparen.
 

Kolbi5000

Neuer Benutzer
#6
Das ist aber keine gute Idee, da PWM ausgegeben wird, und auch bei niedrigster Stellung Pulse durchkommen die den Teansistor kurz schalten?! Ich brauche eine reine ein/aus Schaltung für die Pins.
Kann das natürlich auch via Arduino regeln, siehe "Display am Quad" im Bereich Projekte. Das ist aber umständlich, schwer und stromfressend, wieso so kompliziert wenn der FC das machen kann?

lg
 

donvido

Erfahrener Benutzer
#7
Du könntest mittels CHANNEL_FORWARDING deine AUX_CHANNEL direkt als Servo Output ausgeben. Dann hängst du halt statt eines Servors deine LED-Schaltung an den Pin.
 
#10
Meines Wissens gibts im Beta/Cleanflight keine Option dazu, Pixhawk/APM kann das.
Bleibt dir nur das selbst im Code zu ändern oder externe Hardware zu nutzen.

Direkt das Servo PWM nutzen geht schlecht, ist ja nie auf 0, es ändert nur die Pulsbreite zwischen 1-2ms und der Puls kommt nur alle 20ms -> 5-10% duty cycle.
Wie oben schon gesagt, Arduino, fertiger Schaltbaustein oder Servoelektronik/Bürstenregler, geht alles.

Wenn man mehrere Kanäle abgreifen will ist es aber evtl einfacher direkt das Empfängersignal anzuzapfen und per Arduino darüber zu schalten.
 

Kolbi5000

Neuer Benutzer
#11
Wie gesagt, einen extra arduino mitschleppen ist wie ein kleines Auto in ein großes Auto einzubauen.

Wo sind die Code-Spezialisten, hat keiner Lust FPV etc über die Funke zu schalten?

lg
 
#12
Was am FPV soll man da schalten über die Funke? an/aus und Kanal will/muss ich in der Luft nicht ändern.

Schau dir mal den Beeper Code an, der ist ja quasi ein Schaltausgang den du per Funke Aktivieren kannst. Nur das der eben auch bei gewissen Warnungen noch Aktiv wird.
 

profdrdenis

Erfahrener Benutzer
#13
Vielleicht habe ich jetzt nicht aufgepasst.. aber ich schalte in (fast) allen Modellen einen Beeper über den Flug Kontroller.

Ort der Handlung: CC3D und/auch Revolution Software: Librepilot per PWM
 

profdrdenis

Erfahrener Benutzer
#15
Ja, nur beept der eben meist auch wenn du ihn nicht aktiv schaltest, beim armen/failsave/booten
armen = Nein

booten = ja, macht für mich Sinn, fällt unter vorab Flug Check :D

failsave = könnt jetzt sagen habe ich nie ..

Wobei es irgendwo mal eine Lösung gab, das der nur piept wenn aktiv geschaltet. Ich selbst habe es nie hinbekommen. Aber auch nicht lange probiert.
 

Kolbi5000

Neuer Benutzer
#16
Kann man über Cli bearbeiten dass er beim armen zb nicht mehr piept. Im endeffekt will ich mehrere solche Ausgänge. Für mich wärs fein fpv und sonstige Systeme im flug bzw bei crash oder zum energiesparen über die Funke zu schalten, ist doch sehr praktisch.

lg
 

s.nase

Erfahrener Benutzer
#17
Wenn das brushedESC voll durchsteuert, kommt hinter dem ESC ne leicht pulsierende Gleichspannung raus. Also auch nicht viel anders als bei einem normalen 1khz Schaltregler.

Wenn du das ESC als Dimmer betreiben willst, machst du halt noch ein Elko zwischen ESC und Verbraucher. Der Elko glättet im Teillastbereich die ESC Ausgangsspannung ausreichend.
 

schnellmaleben

Erfahrener Benutzer
#18
Es gab doch mal ein Projekt (beim Fricker auf der Seite evtl. noch verlinkt?) - Nutzung eines kleinen Atmel-ESCs (6A, 10A..) zum LED-Stripe schalten. Im Prinzip hast Du da einen PWM-dekodierenden "Arduino" (Atmega8L) und die Leistungsstufe (3 FET-Kanäle) drauf - man braucht halt einen ISP-Programmer aber das passende Programm kann so was entweder schon fertig oder ist einfach anzupassen. Wenn Du mehr als einen Schaltkanal brauchst und eh höhere Ströme (hier ist auch denkbar die HighSide gegen eine andere Spannung als Akku-Plus zu legen...).
Je nach dem was Du nun konkret schalten willst: einige StepDowns haben auch einen Shutdown-Pin - den könnte man ohne großartige Codeänderung auf die Buzzer-IO-Leitung - oder wo der Code auch sicher einfach anzupassen wäre, die drei LED-IOs, legen.
 
Zuletzt bearbeitet:
#20
Schaltausgang über den Buzzer Port:

Hab die Betaflight Naze FW mal durchforstet und im Ordner src/main/io die Datei Beeper.c gefunden. Dort habe ich die Beeper Ein/Aus Zeiten so verändert, dass der Buzzer-Ausgang über den Aux-Switch (hoffentlich) dauerhaft einschaltet.

#ifdef BEEPER
/* Beeper Sound Sequences: (Square wave generation)
* Sequence must end with 0xFF or 0xFE. 0xFE repeats the sequence from
* start when 0xFF stops the sound when it's completed.
*
* "Sound" Sequences are made so that 1st, 3rd, 5th.. are the delays how
* long the beeper is on and 2nd, 4th, 6th.. are the delays how long beeper
* is off. Delays are in milliseconds/10 (i.e., 5 => 50ms).
*/
// short fast beep -> wird für AUX-Switch benutzt, sollte jetzt nicht mehr ausschalten (0 Pause)
static const uint8_t beep_shortBeep[] = {
100, 0, BEEPER_COMMAND_STOP
};
// arming beep
static const uint8_t beep_armingBeep[] = {
0, 0, BEEPER_COMMAND_STOP
};
// armed beep (first pause, then short beep)
static const uint8_t beep_armedBeep[] = {
0, 0 BEEPER_COMMAND_STOP
};
// disarming beeps
static const uint8_t beep_disarmBeep[] = {
0, 0, BEEPER_COMMAND_STOP
};
// beeps while stick held in disarm position (after pause)
static const uint8_t beep_disarmRepeatBeep[] = {
0, 0, BEEPER_COMMAND_STOP
};
// Long beep and pause after that
static const uint8_t beep_lowBatteryBeep[] = {
0, 0, BEEPER_COMMAND_STOP
};
// critical battery beep
static const uint8_t beep_critBatteryBeep[] = {
0, 0, BEEPER_COMMAND_STOP
};

// transmitter-signal-lost tone
static const uint8_t beep_txLostBeep[] = {
0, 0, BEEPER_COMMAND_STOP
};
// SOS morse code:
static const uint8_t beep_sos[] = {
0, 0, BEEPER_COMMAND_STOP
};
// Arming when GPS is fixed
static const uint8_t beep_armedGpsFix[] = {
0, 0, BEEPER_COMMAND_STOP
};
// Ready beeps. When gps has fix and copter is ready to fly.
static const uint8_t beep_readyBeep[] = {
0, 0, BEEPER_COMMAND_STOP
};
// 2 fast short beeps
static const uint8_t beep_2shortBeeps[] = {
0, 0, BEEPER_COMMAND_STOP
};
// 2 longer beeps
static const uint8_t beep_2longerBeeps[] = {
0, 0, BEEPER_COMMAND_STOP
};
// 3 beeps
static const uint8_t beep_gyroCalibrated[] = {
0, 0, BEEPER_COMMAND_STOP
};

// array used for variable # of beeps (reporting GPS sat count, etc)
static uint8_t beep_multiBeeps[MAX_MULTI_BEEPS + 2];


Hat zufällig jemand Eclipse installiert und könnte mir eine Hex kompilieren?

Lg
 
Zuletzt bearbeitet:
FPV1

Banggood

Oben Unten