DIY Sub-35g Digital Whoop

I built a small 1s digital whoop with WalkSnail.

Vision 40

Based on a Mobula 7 frame, T-Motor F411 AIO 13A 1s, RcINpower 1002 motors with Gemfan 1610 props, BetaFPV ELRS lite and the Walksnail VTX lite.

It weighs 34g, a 1s Lipo 550mAh has 14g. Flight-time with Tattu 1s 500mAh is 3:15. The GNB claiming 550mAh are only at 2:45.

UART1 = ELSR, UART2 = WalkSnail (CRSF), the motors are directly soldered. I used the original BLHeli_32 suite to fix the motor directions. The canopy is from https://www.printables.com/de/model/504099-rotorriot-vision40-prints.

OSD activation is a bit tricky:

set osd_displayport_device = MSP
set displayport_msp_serial = 1

Complete Diff:

# diff all
# version
# Betaflight / STM32F411 (S411) 4.3.1 Jul 13 2022 / 03:32:52
(8d4f005) MSP API: 1.44
# config: manufacturer_id: TMTR, board_name: TMOTORF411,
version: edcd244b, date: 2022-06-29T02:24:46Z
 
# start the command batch
batch start
 
# reset configuration to default settings
defaults nosave
 
board_name TMOTORF411
manufacturer_id TMTR
mcu_id 003700413236510435383430
signature
 
# name: V40
 
# feature
feature -RX_PARALLEL_PWM
feature -LED_STRIP
feature TELEMETRY
 
# serial
serial 0 64 115200 57600 0 115200
serial 1 1 115200 57600 0 115200
 
# beeper
beeper -ON_USB
 
# beacon
beacon RX_LOST
beacon RX_SET
 
# map
map TAER1234
 
# aux
aux 0 0 0 1750 2100 0 0
aux 1 1 1 1700 2100 0 0
aux 2 13 2 1700 2100 0 0
aux 3 35 2 1750 2100 0 0
 
# master
set gyro_lpf1_static_hz = 0
set gyro_lpf2_static_hz = 0
set dyn_notch_count = 2
set dyn_notch_min_hz = 100
set dyn_notch_max_hz = 1000
set gyro_lpf1_dyn_min_hz = 0
set gyro_lpf1_dyn_max_hz = 750
set acc_calibration = 55,52,-4,1
set mag_hardware = NONE
set baro_hardware = NONE
set rc_smoothing_auto_factor = 80
set rc_smoothing_setpoint_cutoff = 25
set rc_smoothing_feedforward_cutoff = 25
set serialrx_provider = CRSF
set rx_spi_protocol = EXPRESSLRS
set dshot_bidir = ON
set motor_pwm_protocol = DSHOT300
set motor_poles = 12
set align_board_pitch = -4
set vbat_max_cell_voltage = 440
set ibata_scale = 400
set ibata_offset = -1700
set beeper_dshot_beacon_tone = 3
set yaw_motors_reversed = ON
set small_angle = 180
set pid_process_denom = 1
set simplified_gyro_filter_multiplier = 150
set osd_cap_alarm = 450
set osd_vbat_pos = 2432
set osd_link_quality_pos = 2048
set osd_tim_2_pos = 2080
set osd_throttle_pos = 2368
set osd_current_pos = 2464
set osd_mah_drawn_pos = 2528
set osd_display_name_pos = 0
set osd_warnings_pos = 14355
set osd_displayport_device = MSP
set debug_mode = GYRO_SCALED
set displayport_msp_serial = 1
set rpm_filter_harmonics = 2
set name = V40
 
profile 0
 
# profile 0
set vbat_sag_compensation = 100
set anti_gravity_gain = 10000
set iterm_relax_cutoff = 10
set p_pitch = 67
set i_pitch = 120
set d_pitch = 76
set f_pitch = 199
set p_roll = 64
set i_roll = 115
set d_roll = 67
set f_roll = 191
set p_yaw = 64
set i_yaw = 115
set f_yaw = 191
set d_min_roll = 67
set d_min_pitch = 76
set thrust_linear = 40
set feedforward_averaging = 2_POINT
set feedforward_smooth_factor = 45
set feedforward_jitter_factor = 10
set dyn_idle_min_rpm = 35
set simplified_master_multiplier = 160
set simplified_d_gain = 140
set simplified_pi_gain = 90
set simplified_dmax_gain = 0
 
profile 1
 
# profile 1
set dterm_lpf1_dyn_min_hz = 100
set dterm_lpf1_dyn_max_hz = 125
set dterm_lpf1_type = BIQUAD
set dterm_lpf2_static_hz = 0
set vbat_sag_compensation = 100
set anti_gravity_gain = 4500
set crash_recovery = ON
set iterm_relax_cutoff = 12
set p_pitch = 58
set i_pitch = 83
set d_pitch = 70
set f_pitch = 124
set p_roll = 56
set i_roll = 79
set d_roll = 61
set f_roll = 119
set p_yaw = 56
set i_yaw = 79
set f_yaw = 119
set d_min_roll = 52
set d_min_pitch = 59
set thrust_linear = 40
set dyn_idle_min_rpm = 60
set simplified_master_multiplier = 125
set simplified_i_gain = 80
set simplified_d_gain = 140
set simplified_dmax_gain = 50
set simplified_feedforward_gain = 80
set simplified_dterm_filter = OFF
 
profile 2
 
# restore original profile selection
profile 1
 
rateprofile 0
 
# rateprofile 0
set thr_mid = 42
set thr_expo = 30
set rates_type = BETAFLIGHT
set roll_rc_rate = 100
set pitch_rc_rate = 100
set yaw_rc_rate = 100
set roll_expo = 40
set pitch_expo = 40
set roll_srate = 80
set pitch_srate = 80
set yaw_srate = 80
 
rateprofile 1
 
# rateprofile 1
set rates_type = BETAFLIGHT
set roll_rc_rate = 80
set pitch_rc_rate = 80
set yaw_rc_rate = 80
set roll_expo = 40
set pitch_expo = 40
set roll_srate = 70
set pitch_srate = 70
set yaw_srate = 70
 
rateprofile 2
 
rateprofile 3
 
rateprofile 4
 
rateprofile 5
 
# restore original rateprofile selection
rateprofile 0
 
# save configuration
save

Copter-Tuning revisited

Es gibt einen neuen Tuning-Guide von Chris Rosser:

Betaflight 4.4 Tuning von Chris Rosser

Vorbereitung

  1. Flugfähiger Copter mit BF 4.3 oder 4.4
  2. RC-Link-Preset angewandt
  3. Blackbox-Logging auf 1/2 PID-Loop-Speed mit GYRO_SCALED
  4. Bi-Directional DSHOT, d.h. BLHeli32 oder Bluejay (die Anzahl Pole richtig setzen: 12 für kleine Motoren, 14 für normale)
  5. Optional OSD, zum PID-Tunen ohne PC

Filter-Tuning

Chris schaltet alle Gyro-Lowpass-Filter ab, außer den dynamischen und die RPM-Filter. Nur einen D-Term-Lowpass und den dafür auf BIQUAD. Die Grenzfrequenzen hängen von der Coptergröße ab, ein 40mm bis 2″ sollte so 100 und 125Hz haben. Die Filter kann man im Blackbox-Explorer überprüfen.

Der Testflug sollte einige 100%-Throttle, Vollgas-Punchouts haben.

PD-Tuning

Vor dem Tuning stellt Chris den I-Regler auf 0.

Die Testflüge macht er im Angle-Mode, da in diesem Mode der Feedforward inaktiv ist.

P-D-Balance und Master-Regler

Der Copter wird einfach im Schwebeflug gehalten und dabei schnell hin und her gewackelt und vor/zurück. Chris macht eine Serie an Reglerpositionen auf einen Akku und bewegt den Regler im OSD. Zuerst wird die Balance eingestellt. Chris fliegt ein paar PD-Balance-Werte, z.B. 0.3, 0.4, 0.5, 0.75, 1.0, 1.25 und 1.5.

Nach der Testflugreihe zieht er das Log auf den PC und analysiert es mit der PID-Toolbox mit der Step-Response (Sprungantwort). Ziel ist es, schnell auf 1.0 zu kommen ohne über zu schwingen.

Sobald die optimale Balance gefunden wurde, wird der Master-Gain eingestellt. Z.B. die Werte 1.0, 1.25, 1.5, 1.75 und 2.0. Sollte der Weg des Reglers nicht reichen (gerade bei kleinen Coptern), gibt es einen Trick: Man stellt die individuellen Regler für P und D auf jeweils das Doppelte und den Master wieder auf die Mitte.

Man kann diese zwei Schritte auch wiederholen, um die Balance bei hohem Mastergain noch besser einzuregeln.

Feedforward einstellen

Ich habe mich mit FF noch nicht so anfreunden können, das liegt evtl. daran, dass meine Quads nicht viel darauf reagieren. Ziel ist es, den Delay zwischen Stick-Input („Setpoint“) und Gyro-Sensor auf 0 zu bekommen, der Quad „erahnt“ quasi die Knüppelbewegungen (reagiert auf die Knüppelbeschleunigung). Das klappt nicht immer 100%ig.

Chris stellt den I-Regler wieder auf 1.0. Man kann mit ein paar Probeflügen noch den I-Anteil feintunen, wie gut der Quad bei Punchouts die Lage hält und in der PID-Toolbox die Achsen an der 1.0 kleben ohne träger zu werden. Das Tuningfenster ist aber recht groß.

Chris testet die Reglerwerte 1.0, 1.25 und 1.5. Sollte sich die Verzögerung nicht verbessern oder die Kurven kräftig gestört sein, sollte man wieder eine Stufe zurück gehen.

Extras

Chris empfiehlt unbedingt „Dynamic-Idle“ zu aktivieren. Der Wert hängt von der Leerlaufdrehzahl ab. Für kleine 40mm stellt er 94 ein, 2″ 75, 3″ 50, etc. Dyn.Idle RPM = ~15000/Propeller-Durchmesser in Zoll. Der Wert in BF ist dann diese RPM geteilt durch 100.

Dann stellt man noch die Rates und die RC-Filterung (RC-Smoothing) noch nach eigenen Vorlieben ein.

Ich empfehle auch noch „crash_recovery=on“.

Und Arming-Angle 180°.

Sonstige Hinweise

Das Tuning hängt natürlich auch vom Akku ab, sollte man 2s,3s,4s,etc wild mischen, kann man die Presets nutzen und die automatische Umschaltung abhängig von der Zellenzahl „auto_profile_cell_count“. Auch Änderungen im Gewicht beeinflussen das Tuning (Gopro drauf oder nicht, großer Longrange-Lipo vs kleiner Lipo, etc)!

Mobula 7 2s update

Ja, ich hab ihn noch.

Auf BF 4.2.9, mit neuen Einstellungen:

Crash_recovery=ON

Dynamic RPM-Filter und Bluejay 0.2.0 48kHz (ich hab das Crazybee F4 V3 Pro mit BLHeli_S F_H_40)

So LOS-Schweben klingt er unglaublich smooth und stabil. Bei leichten absichtlich ausgeführten Crashs in z.B. den Wäscheständer stabilisiert er sich sofort. Toll!

Als nächstes werden die Lipo-Stecker auf BT2.0 oder GNB27 ausgetauscht. Die Motorstecker bleiben, die kleinen 0802 sind doch recht schnell durchgenudelt…

Licht-Fernsteuerung mit ESP32

Empfänger

Steuerung von bis zu 4 Slaves, mit je 10 LEDs. Das ist natürlich erweiterbar.

Die Slaves unterstützen WS2812 LEDs (an nodemcu:io15 oder esp32:io16) oder direkte Portpins (ESP32).

const byte lpin[NUMPIXELS] = {
  27, // Licht 1
  25,
  32,
  12,
  4,
  22,
  21,
  17,
  23,
  19  // Licht 10
};

Der Master hat einen Slave-Select-Input und 10 LED-Toggle-Tasten.

Die Funkverbindung läuft über ESP_NOW.

Langer Druck (ca. 3s) auf Select startet einen neuen Scan nach Slaves.

Master-Button-Pins:

const byte btnpins[NUMBUTTONS] = {
  22, // slave select (long press for rescan slaves)
  27, // licht 1-10 (long press for fw update on slave id 0-9)
  14,
  12,
  23,
  32,
  33,
  25,
  26,
  19,
  18
};

Die Geräte haben alle Wifi-Webseiten. Sie heißen in der WLAN-Suche „LICHTSENDER“ bzw. „SlaveX:MAC-Adresse“ (X zählt hoch, ab 0). Das WIFI-Passwort ist „esp32licht“. Die IP-Adresse des Servers http://10.0.0.1.

Die Firmware lässt sich über Wifi updaten. Die Slaves kann man auch konfigurieren (ID, Lichtmodi, etc.)

Das hat mir mit dem Rückkanal sehr geholfen: https://www.esp32.com/viewtopic.php?t=13522

Onkyo K-611 Fehlersuche und Workaround

Mein niedliches 3-Kopf-Tapedeck K-611 spielt nicht. Bzw. sehr unregelmäßig geht es mal. Bevorzugt nach langer Standzeit.

Das Symptom: Der Kopf fährt 2 mal (oder öfters) auf die Play-Position hoch und reversiert gleich wieder.

Nachdem ich bestimmt 5-6 mal das Ding zerlegt hatte, Riemen getauscht, geputzt, neu geschmiert, was weiß ich – kam ich auf die grandiose Idee, mal die Mikroschalter anzuschauen:

Das sind die zwei Positionsschalter für den Kopfschlitten. Die 5V liegen nur während der Fahrt an.

Unten (gelb) sieht man den Schalter für „unten“ und oben (blau) für Play. Da man 2 Versuche sieht (und dazwischen die 5V ausgehen), wird klar, dass der blaue nie aktiviert.

Jetzt sind diese Schalter blöderweise ganz innen in der Mechanik hinter den Riemen und den Motoren vergraben…

Also: Ich simuliere den oberen Schalter einfach manuell!

Testweise den Schalter manuell brücken.
Der Workaround – man drückt den Schalter zur rechten Zeit!

Lösung: Einfach einen externen Schalter zum manuell betätigen anbringen. Ja, dirty hack, ich weiß… es klappt aber!

Das Innenleben:

Das Gerät ist erstaunlich komplex. 4 Motoren arbeiten da drin (Capstan, Spulen, Schlitten und Tür)! 3 Riemen (Capstan, Tür und Schlitten), den Schlittenriemen habe ich natürlich nach den Symptomen als erstes ausgetauscht. Den Türriemen habe ich zumindest „aufgefrischt“ (Kochen in Wasser).

Reparieren ist enorm aufwändig – viele Steckverbinder und Schrauben gilt es zu lösen und wieder zu montieren. Ich habe sogar mal die Capstan neu geschmiert.

Soweit spielt das Deck wieder gut. Operation geglückt!

Neues

ExpressLRS gibt’s 3.0

  • mit WIFI-Betaflight-Config-Link.

DJI FPV Goggles gehackt

  • fpvwtf hat das BF-OSD auf die DJI-Hardware gebracht.

Ich hab eine neue Fritzbox

  • VPN geht wieder.
  • Fritz!fon-DECT-Telefon ist bestellt.
  • Die Box ist viel schneller als der Schrott von Vodafone!

Sharp Pocket Computer PC-1360

Revival nach 17(!) Jahren.

Mehr Infos siehe www.lehmayr.de

Zum Verbinden über UART mit den „modernen“ FTDI-Arduino-Adaptern:

Am Pocket Pin 5+8 auf 5V (Pin 10 und 13).

Pin2 = TX, Pin3 = RX. Pin11 = Ready to receive.

Im FT_PROG die RX/TX invertieren!

Der Pin11 geht über einen Transistorinverter auf den UART CTS!

Danach kann man ganz normal mit LOAD und SAVE und INPUT #1Varname(*) Daten austauschen.

Den 2kB RAM kann man mit dem Hilfprogramm in L17 befüllen. Am Pocket GOTO 17, am PC die Datei 2kB-RAM.txt senden.

Die Variablen habe ich einzeln mit DIM angelegt. Beispiel: DIM M$(0,13)*72. Dann kann man sie mit INPUT #1M$(*) übertragen.

Wichtig: Die innere Uhr hängt auch am 15pol. Anschluss, die geht nur, wenn die Verbindung abgesteckt wurde!

Stellen der Uhr mit GOTO 8200 und GOTO 8205.

Spiele sind in DEF S.

Später habe ich den alten COMPAQ-PC aufgestellt und TransDrive/Diskettenemulator verbunden. Dann den alten PC mit dem Laptop per Nullmodem-Kabel verbunden. Auf dem Laptop lief Dosbox unter Linux mit einem USB-serial-Adapter. Der alte Norton Commander NC5 übertrug dann die Dateien! Zwischen den Computern liegen über 30 Jahre!

Fazit:

Der Weg über die serielle Schnittstelle, dem FTDI-USB-Arduino-Adapter und meinem PocketASM-Tool ist deutlich bequemer.

Mit diesem BASIC-Loader kann man auch (fast) alles laden:

10 CLOSE : OPEN : INPUT X: FOR X=X TO 65535: INPUT #1Y: POKE X,Y: NEXT X

Am PC muss man halt die Daten in eine Textliste umformatieren, jede Zeile eine Zahl.

Wenn man die ganze Karte sichern will, geht das am bequemsten so:

20 CLOSE : OPEN : INPUT X: FOR X=X TO 65535: PRINT #1 PEEK X: NEXT X

Unter Linux geht das mit cutecom:

Wichtig: Damit der FTDI-UART läuft, muss man brltty (Blindenterminal-Daemon) entfernen!

Kamera-Upgrade für die Caddx Vista DJI FPV

Mein absoluter Lieblingsflieger Phenix hatte seit jeher um Gewicht zu sparen nur eine ziemlich miese Nebula Nano (v1).

Jetzt habe ich ihm die neue Nebula Pro Nano gegönnt, war im Angebot.

Der Stecker mit 8cm Kabel (zu kurz) kam vormontiert – ist halt für die Minicopter-Fraktion gedacht. Aber ich hab ja das lange Kabel im Flieger schon drin. Der Hersteller hat den Anschlusswechsel an der Kamera wohl nicht vorgesehen. Die Rückseite ist mit der Vorderseite verschraubt – löst man die 2 Schrauben

Specifically, analgesics, health, schemes, efforts, team, sale, existing supplements, antibiotics, levels, reactions, as permanently as purses like infection, payment, and cet pharmacies. https://buyantibiotics.top While not published by the expensive behalf’s list, the India even also rests its search.
, fällt die Kamera komplett in 3 Teile, Sensor freiliegend. Also Achtung. Dazu kommt, der Stecker passt nicht durch das Loch in der Rückplatte, da muss man das Kabel kräftig verknicken und dann den Stecker quer durchschieben. Diese Prozedur wollte ich dem alten Kabel dann nicht zumuten und ich schnitt einen kleinen Schlitz in den Deckel. Den Stecker mit den Fingernägeln raus zu hebeln, ging dagegen recht einfach.

Operation geglückt, viel besseres Bild!