A LITTLE HISTORY
A lot of the original setup to try and make Betaflight Whoops fly better in Angle Mode is owed to Scott Allyn from the MMW community as he was the first one I am of aware of to try to do this and got a lot of the basics figured out. But Betaflight Angle mode, slow PPM Betaflight FC’s and filtering just wasn’t that great back then, and it’s only really been since 3.2.2 and above that Betaflight has gotten A LOT better for Whoops.
OVERVIEW
This setup is optimized for the F4 based NewBeeDrone BeeBrain LITE and brings PMB to Betaflight 4.0.x. This first tune only turns on a few things known to make Whoops fly great in BF 4.0, so expect more updates as I continue to test the new features in Betaflight 4.0!
NOTE! - The screen grabs, and DIFF are set up for NBD Plaid Motors. If you are running Gold motors, please lower:
Angle Limit to 60
thr_corr_angle to 600
Increase thr_corr_value to 3
If you want to fly what I fly, please consider purchasing the Project Mockingbird version of the BeeBrain LITE! A simple flash of 4.0 and a paste of the the DIFF below and you’ll be ready to race!
WILL THIS WORK WITH [INSERT HERE]?
I have stopped trying all the different flavors of brushed Whoops boards once I found the BeeBrain LITE, I just don’t think there is a better brushed FC available. So, if you have another board, are running F3 instead of F4, I can only say I haven’t tried it. Feel free to experiment and share your findings here or on the PMB Facebook group.
WHAT’S SO SPECIAL ABOUT PROJECT MOCKINGBIRD?
THE BEST Angle Mode for racing you can find for a brushed Betaflight Whoop.
The ability to switch rates from Angle Mode for Racing and Acro Mode for Freestyle all with just a flip of the switch
Setup to run Betaflight 4.0 for Whoops!
Introducing “Integrated Yaw” for even more YAWTHORITY!!
“Juicy Horizon” mode for super easy Freestyle in the house and small spaces
Here’s the secret sauce to Angle Racing for Whoops:
- DIALED in Linear Rates for Angle Mode
- Props Out just like the Inductrix handles corners much better
- On-FC Throttle Mixing for cornering and high speed turning
- Use of the FPV_Angle_Mix and Integrated Yaw to turn with YAWTHORITY
- Throttle Boost to keep that power going
- Turning off Airmode for Angle
- TPA to control PID noise and increase consistent motor power
What’s New for Betaflight 4.0 and v4?
Complete re-tune for Betaflight 4.0.x
This is the first version so it has A LOT of the complex 4.0 settings turned off as they were a pain to tune for micro’s and didn’t enhance it in any way. I will continue to tweak it until it works, but yes, this does fly better than 3.5.7
PMB now uses Betaflight 4.0’s “Integrated Yaw” tuning.
This feature REALLY makes Angle mode better and feels much more connected than in 3.5.x.
If you want to tweak anything with PID’s please read up on Integrated Yaw as it is a completely different beast and VERY I-Term sensitive.
Shout-outs for v4:
Mike Keller & Joe Lucid - Betaflight Devs who answered a lot of questions I had about Betaflight 4.0
The NewBeeDrone Team - My sponsor and literally the best company when it comes to development of new and exciting Whoop products. They listen to me, let me test new gear and make suggestions to make THE BEST Whoop products on the market!
Step One-Flashing and Betaflight config
Here are the Hexes for flashing your BEEBRAIN LITE:
BeeBrain Lite DSM 4.0.1 - US Version
BeeBrain Lite DSM 4.0.1 - International Version
BeeBrain Lite FrSky 4.0.1 - US Version
BeeBrain Lite FrSky 4.0.1 - International Version
After flashing we are setting up FILTERS, PID’s, MODES and most importantly, RATES and ADJUSTMENTS.
NOTE: Please make sure you have “Enable Expert Mode” turned on, otherwise you won’t be able to see the Adjustments tab.
CONFIGURATION - SECTION 1
MIXER
Motor Direction REVERSED: I run “props out”, so I turn on reverse motor direction
Make sure your motors are set up right in your Whoop with the black and white wires (CCW Motor) in front left/back right and the red and blue (CW Motor) in front right/back left
ESC Motor Features
Brushed Protocol
Motor PWM speed… turned on
Motor PWM Freq at 25000
Turn off Motor Stop (need this for Idle Up in Angle)
Minimum_Throttle = 1050
You may need to play with this number. The goal is to have the motors spin a little when you arm in Angle Mode and don’t have Airmode turned on. This is referred to as “Idle Up”.
Set Gyro Update and PID Loop Frequency to 8k
Turn on Accelerometer
Turn on Barometer - this is to solve vtx issues
Arming set to 180
This makes it so you can arm at any angle
Turn on Dynamic_Fitler
Turn on OSD
Turn on Anti-Gravity
System configuration
Set 8k for Gyro Update
Set 8k for PID Loop Frequency
Turn Accelerometer on so you can do Angle Mode
Turn on Barometer - this is to solve vtx issues
Arming - Set to 180 so you can arm at any angle in Angle Mode
Camera - Set to a little more than half your camera angle on your Whoop (12 degrees for stock Goober canopy 20 degree angle).
EXPLAINED- For Mockingbird Angle Mode, you are going to use FPV_Angle_Mix to help in cornering. This number correlates with “FPV_Angle_Mix” in in the Modes tab. It mixes pitch and roll into yaw and makes cornering much better once you get used to it. This is where your “yawthority” comes into play. You will find that you will use yaw more than you are used to instead of pitch and roll. If you start using it your corners will be sharper and flatter so you can keep your speed up.
Telemetry - So you can see your connection strength
LED_Strip - This enables the cool programmable lights
PID Settings
PIDS: These PIDs have been tested with Gold Motors with Gemfan quad props, Plaid motors with HQ 1.2’s, Gemfan Quad, Bi and Tri, as well as Eachine quad. My personal choice is Bi-blade for Freestyle and Tri for Racing with Plaids. Quads get the Plaids a touch too hot. I don’t recommend using these PIDs on non-F4 boards.
PID Profile 3 (called profile 2 in the DIFF) is the tune I did. Profile 1 (profile 0 in the DIFF) and Profile 2 (profile 1 in the DIFF) are just used for testing and troubleshooting. Please make sure PID Profile 3 is selected before flying.
If you alter these PIDs, use caution raising I-Term as it is significantly boosted in 4.0, especially since we are using Integrated Yaw.
FILTERS: These filters are basically the “I had a quad running great in 3.5.7 and 4.0 isn’t helping” settings. Expect some changes here as I continue to test as 4.0.x improves.
GENERAL PID SETTINGS
Angle Strength: 110
Horizon Strength: 30
Transition: 80
Angle Limit: 60 (Gold), 65 (Plaid)
NOTE! The DIFF is setup for Plaid motors
Angle Strength and Limit EXPLAINED - These two things control your pitch and roll “feeling” (as well as limiting how far you can tilt). Instead of RC Rate controlling it, Ethan Bayer found out that it’s actually controlled by these two settings. There is a relationship between the two. The Limit controls how far you can tilt. 0 stick equals 0 degrees, and 100% stick equals 60 degrees. The Strength controls how much curve of resistance the quad tries to get back to 0 angle. If you like a “looser” feel with more stick travel, lower Angle Strength and/or increase Angle Limit. I don’t like a lot of stick movement so, these numbers feel right to me. Some might find an Angle Limit of 65 and Strength of 100-105 is more like the Inductrix with more stick travel but the ability to tilt much further.
Horizon Strength and Transition EXPLAINED - Horizon Strength is different than Angle strength as it uses your Horizon rates for Pitch, Roll, and Yaw, and works in conjunction with Transition on how much influence and how fast it goes from Angle-like flight to Acro Flight. We will also be using “Horizon Expert Mode” in CLI which works some magic so we can do inverted flight and power loops AND still have some self-correcting help.
A LITTLE MORE ABOUT ANGLE AND HORIZON DIRECTLY FROM BETAFLIGHT
The strength of the auto-leveling correction applied during Angle mode is controlled by the LEVEL "P" PID term which is labeled "Angle", "Strength" in the GUI (prior to version v1.13.0 the parameter level_angle was used). This can be used to tune the auto-leveling strength in Angle mode compared to Horizon mode. The default is 50.
The strength of the auto-leveling correction applied during Horizon mode is set by the LEVEL "I" PID term which is labeled "Horizon", "Strength" in the GUI (prior to version v1.13.0 the parameter level_horizon was used). The default is also 50.
The transition between self-leveling and acro behavior in Horizon mode is controlled by the LEVEL "D" term which is labeled "Horizon", "Transition" in the GUI (prior to version of v1.13.0 the parameter sensitivity_horizon parameter was used) . This sets the percentage of your stick travel that should have self-leveling applied to it, so smaller values cause more of the stick area to fly using only the gyros.
For example, at a setting of "100" for sensitivity horizon, 100% self-leveling strength will be applied at center stick, 50% self-leveling will be applied at 50% stick, and no self-leveling will be applied at 100% stick. If sensitivity is decreased to 75, 100% self-leveling will be applied at center stick, 50% will be applied at 63% stick, and no self-leveling will be applied at 75% stick and onwards.
MORE ABOUT HORIZON EXPERT MODE
This sets the percentage of your stick travel that should have self-leveling applied to it, so smaller values cause more of the stick area to fly using only the gyros. The default is 75%
For example, at a setting of “100” for sensitivity horizon, 100% self-leveling strength will be applied at center stick, 50% self-leveling will be applied at 50% stick, and no self-leveling will be applied at 100% stick. If sensitivity is decreased to 75, 100% self-leveling will be applied at center stick, 50% will be applied at 63% stick, and no self-leveling will be applied at 75% stick and onward. `
So if you’d use transition 25 you’d have:
100% of your horizon strength at center stick
50% of your horizon strength at 12.5% stick
No self leveling from upwards of 25% stick
horizon_tilt_effect: Controls the effect the current inclination (tilt) has on self-leveling in the Horizon flight mode. Larger values result in less self-leveling (more “acro”) as the tilt of the vehicle increases. The default value of 75 provides good performance when doing large loops and fast-forward flight. With a value of 0 the strength of the self-leveling would be solely dependent on the stick position.
horizon_tilt_expert_mode OFF|ON: Sets the performance mode for ‘horizon_tilt_effect’
OFF = leveling always active when sticks centered:
This is the “safer” mode because the self-leveling is always active when the sticks are centered. So, when the vehicle is upside down (180 degrees) and the sticks are then centered, the vehicle will immediately be self-leveled to upright and flat. (Note that after this kind of very-fast 180-degree self-leveling, the heading of the vehicle can be unpredictable.)
ON = leveling can be totally off when inverted:
In this mode, the inclination (tilt) of the vehicle can fully “override” the self-leveling. In this mode, when the ‘horizon_tilt_effect’ parameter is set to around 75, and the vehicle is upside down (180 degrees) and the sticks are then centered, the vehicle is not self-leveled. This can be desirable for performing more-acrobatic maneuvers and potentially for 3D-mode flying.
so you could float inverted then catch it back into angle mode and fly through those tight places!
D Min Gain = 20
One of the few D Min settings I applied
Absolute Control = ON
You need this to run Integrated Yaw
VBAT Compensation: ON
This changes PID values based on battery power.
I Term Relax: RP and Setpoint
Anti Gravity Gain: 5
Anti Gravity Mode: Smooth
RATES
We are going to set up 3 different RATE profiles. One for Acro, one for Angle and one for Horizon With this setup your rates will change when you switch from Acro to Angle. On my TX Up is Acro, Middle is Horizon, and Down is Angle. I recommend this setup so that it automatically turns on and off Airmode for the appropriate flight mode.
Profile 1: Acro is setup more like my bigger quads for Freestyle, and has Rate/Super mixed to my taste, keep yours like you like your Freestyle Whoop.
Profile 2: Horizon is a lot like Acro rates, and will adjust Horizon Strength and Transition
If you plan on racing in Horizon, most pilots have found they need to increase their typical Acro RC Rate 100 d/s. My settings displayed below are for how I like Horizon mode, if you want to do more “Freestyle” in Horizon, I would match your Acro Rates.
Profile 3: Angle will only have yaw rates as Pitch and Roll are derived from Angle Strength and Angle Limit
I prefer linear rates on yaw in Angle, but a good rule of thumb is to use your racing Acro yaw rate and increase it 100 deg/sec by increasing RC Rate and leaving Super as your Acro racing rates.
These are the same rates as earlier Mockingbird settings
A lot of people like to add 20-30% Expo, but I don’t run any expo. It’s up to you if you like it.
RATEPROFILE 1 (Acro)
ROLL/PITCH RC RATE: 1.00
YAW RC RATE: 2.10
ROLL SUPER RATE: 0.80
PITCH SUPER RATE: 0.80
YAW SUPER RATE: 0.25
RATEPROFILE 2 (Horizon)
ROLL/PITCH RC RATE: 1.00
YAW RC RATE: 2.10
ROLL SUPER RATE: 0.80
PITCH SUPER RATE: 0.80
YAW SUPER RATE: 0.25
RATEPROFILE 3 (Angle)
ROLL AND PITCH - BF 4 no longer allows you to put 0 in RC Rate, so these are all set as low as possible as Roll and Pitch are controlled by Angle Strength and Angle Limit..
RC Rate: 0.01
Super Rate: 0.00
YAW
RC Rate: 2.10
Super Rate: 0.00
NOTE:
Max Vel may not be exact depending on your “Deadband” settings...just get it close as possible
As mentioned above, these are my settings so if you want to race like I do, then use these, but I’ve had other well known racers say they used their yaw rates from Aco and just increased RC Rate until it’s about 100 d/s above what they usually run for Acro
Angle Strength: 110
Angle Limit: 65 (for Plaid), 60 (for Gold)
EXPLAINED - These two things control your pitch and roll “feeling” (as well as limiting how far you can tilt). Instead of RC Rate controlling it, Ethan Bayer found out that it’s actually controlled by these two settings. There is a relationship between the two. The Limit controls how far you can tilt. 0 stick equals 0 degrees, and 100% stick equals 60 degrees. The Strength controls how much curve of resistance the quad tries to get back to 0 angle. If you like a “looser” feel with more stick travel, lower Angle Strength and/or increase Angle Limit. I don’t like a lot of stick movement so, these numbers feel right to me. Some might find an Angle Limit of 65 and Strength of 100-105 is more like the Inductrix with more stick travel but the ability to tilt much further.
MODES
AUX 1: ARM
AUX 2: ACRO, ANGLE, HORIZON, FPV ANGLE MIX (on for Angle Mode), and AIRMODE (on for Acro and Horizon)
EXPLAINED- I recommend not using Airmode for Angle Mode. Turning it off seems to help with crashing and glancing blows and also seems to help with more power as well as cruising low across floors. That’s why it gets turned off when you select Angle Mode and why you have “Idle Up” (increased min_throttle on the config page).
As you can see below, I also personally run FPV Angle Mix in all my modes. If you don’t like how it feels in Acro, or Horizon, adjust as necessary.
I also have OSD Disable SW on Aux 4 (using my Spektrum DXe) and use it to turn off the OSD if I want to record freestyle without the distracting OSD bits.
ADJUSTMENTS
This is where we will set up a rate profile change upon the user switching from Acro to Angle to Horizon.
EXPLAINED:
So you can run Acro and have higher rates and super, but when you want to be an Angle Racer, when you flip your Aux 2 to Angle, the Adjustments tab will change to Rate Profile 3 and you’ll have the more linear Angle Racing rates. NOTE, I have my AUX 2 go UP=Acro, MID=Horizon, DWN=Angle so I can have Airmode on for Acro and Horizon, but not Angle. So my Adjustments and Profiles match. Change according to how you have your Mode switch set up.
Set AUX 2 to match your range for Angle in your Modes tab
Select “Rate Profile Selection” as your option in “then apply”
Using “Slot 2” to match the Rate profile of Angle
Via Channel AUX 2 - this matches your mode switch
Step Three: CLI Settings
There are some settings in Betaflight that can only be done in CLI. Any text with //around it// is just explanation. Just copy the commands shown below. There is also a DIFF ALL below if you have a stock Taranis QX7 that should just be plug and play other than binding.
//This is to reduce the "bounce" that you can get with airmode when you first arm. I only use airmode for Acro//
set airmode_start_throttle_percent = 15
These two setting replace "Throttle Mixing" in older versions of Mockingbird. This is much more accurate and in brushed I think it adds more power. The value is the "power" you want to your pitch and roll (how much throttle is added). Don't change this too much, but I think 3 is about right for Gold Motors and 1 or 0 is about right for Plaid. The Angle is set up at 650 (65 degrees) for Plaid Motors, so if you are running Gold Motors, I recommend using 600 (60 degrees) You'll find yourself not having to throttle through things as much, you'll just pitch, roll and yaw and the power will be there.//
set thr_corr_value = 1
set thr_corr_angle = 650
//Since we run higher PID numbers, this gives us more headroom//
set pidsum_limit = 1000
set pidsum_limit_yaw = 1000
//This improves responsiveness to fast throttle inputs.//
set throttle_boost = 8
//This is another brushed trick to get more power from the motors. It seems to help in brushless too//
set throttle_limit_type = CLIP
//Sets the performance mode for ‘horizon_tilt_effect’//
set horizon_tilt_expert_mode = ON
//Controls the effect the current inclination (tilt) has on self-leveling in the Horizon flight mode. Larger values result in less self-leveling (more “acro”) as the tilt of the vehicle increases. The default value of 75 provides good performance when doing large loops and fast-forward flight. With a value of 0 the strength of the self-leveling would be solely dependent on the stick position.//
set horizon_tilt_effect = 80
//Runaway Takeoff Prevention is a safety feature designed to detect and auto-disarm if an unsafe response is detected by the PID controller on the first takeoff after power-up. But on Whoops any little bump on takeoff can engage it. Instead of turning it down, Turning it off is pretty safe for Whoops.//
set runaway_takeoff_prevention = OFF
//PIDs deal best with linear control systems. If control response is linear the same pid tune works well across the entire control range. Now all we have to do to present the pids with a linear system again is to compensate for this non-linearity. This feature does this. Start with set thrust_linear=50 and watch your quad miraculously solve many of the issues we've struggled with for ages. You need to then reduce D, or add FF to take full advantage of the feature.//
set thrust_linear = 50
//Transient throttle limit, which improves noise behaviour at low and high throttle by preventing refected noise from doubling up and becoming distorted, but Joe Lucid recommends turning it off for Whoop sized craft.//
set transient_throttle_limit = 0
//Integrated Yaw fixes a fundamental issue with quad control: while the pitch and roll axis are controlled by the thrust differentials the props generate yaw is different. Yaw gyro changes happen primarily due to inertia when the rpm of the motors change. A constant acceleration of yaw requires a constant rate of increase/decrease in the rpm of the yaw motor pairs. It is fixed by integrating the output of the yaw pid before applying them to the mixer. This normalizes the way the pids work. You can now tune as any other axis. It requires use of absolute control since no I is needed with Integrated Yaw.//
set use_integrated_yaw = ON
DIFF
This should be very easy and get you up in the air as fast as possible.
Step 1: Put your motors in “Props Out”
Front Left and Back Right are BW wired CCW Motors
Front Right and Back Left are Red/Blue wired CW Motors
Step 2: Plug in FC to Betaflight
Step 3: Copy DIFF from here
Step 4: Paste DIFF in CLI
Step 5: Check RXRange, Bind, and Modes on your radio and Betaflight
NEWBEEDRONE BEEBRAIN LITE
DIFF for the BEEBRAIN LITE (RUNNING PLAID MOTORS) - see notes for changes if you are using GOLD motors
# version
# Betaflight / BEEBRAIN_LITE (BBL) 4.0.1 Apr 18 2019 / 18:06:32 (eb4a12ac8) MSP API: 1.41
# start the command batch
batch start
# reset configuration to default settings
defaults nosave
# name
name MKNGBRD 4
# resources
# timer
# dma
# mixer
# servo
# servo mix
# feature
feature -AIRMODE
# beeper
beeper -GYRO_CALIBRATED
beeper -RX_LOST
beeper -RX_LOST_LANDING
beeper -DISARMING
beeper -ARMING
beeper -ARMING_GPS_FIX
beeper -BAT_CRIT_LOW
beeper -BAT_LOW
beeper -GPS_STATUS
beeper -RX_SET
beeper -ACC_CALIBRATION
beeper -ACC_CALIBRATION_FAIL
beeper -READY_BEEP
beeper -DISARM_REPEAT
beeper -ARMED
beeper -SYSTEM_INIT
beeper -ON_USB
beeper -BLACKBOX_ERASE
beeper -CRASH_FLIP
beeper -CAM_CONNECTION_OPEN
beeper -CAM_CONNECTION_CLOSE
beeper -RC_SMOOTHING_INIT_FAIL
# beacon
# map
# serial
# led
led 0 5,7:W:C:1
led 1 6,7:E:CTOI:2
led 2 7,7::CTOI:10
# color
# mode_color
# aux
aux 1 1 1 1825 2100 0 0
aux 3 19 3 1775 1950 0 0
aux 4 28 1 900 1550 0 0
aux 5 30 1 900 2100 0 0
# adjrange
adjrange 0 1 1 1425 1575 12 1 0 0
# vtx
# rxfail
# display_name
# master
set gyro_lowpass_type = PT1
set dyn_notch_width_percent = 0
set dyn_notch_q = 70
set dyn_notch_min_hz = 130
set dyn_lpf_gyro_min_hz = 300
set min_check = 1004
set fpv_mix_degrees = 12
set min_throttle = 1050
set thr_corr_value = 1
set thr_corr_angle = 650
set vbat_warning_cell_voltage = 100
set yaw_motors_reversed = ON
set runaway_takeoff_prevention = OFF
set thrust_linear = 50
set transient_throttle_limit = 0
set osd_vbat_pos = 2402
set osd_rssi_pos = 322
set osd_tim_2_pos = 2103
set osd_flymode_pos = 2425
set osd_vtx_channel_pos = 298
set osd_craft_name_pos = 2411
set osd_warnings_pos = 2377
set vtx_band = 1
set vtx_channel = 7
set vtx_power = 0
set vcd_video_system = NTSC
# profile
profile 0
set dterm_lowpass2_hz = 0
set vbat_pid_gain = ON
set pidsum_limit = 1000
set pidsum_limit_yaw = 1000
set p_pitch = 50
set i_pitch = 40
set d_pitch = 35
set f_pitch = 140
set p_roll = 50
set i_roll = 40
set d_roll = 35
set f_roll = 140
set p_yaw = 50
set i_yaw = 40
set d_yaw = 35
set level_limit = 60
set d_min_roll = 16
set d_min_pitch = 18
set d_min_boost_gain = 30
set d_min_advance = 0
# profile
profile 1
set angle_level_strength = 100
set horizon_level_strength = 30
set horizon_transition = 80
set level_limit = 60
set horizon_tilt_effect = 80
set horizon_tilt_expert_mode = ON
set d_min_roll = 16
set d_min_pitch = 18
set d_min_boost_gain = 30
set d_min_advance = 0
# profile
profile 2
set dyn_lpf_dterm_min_hz = 200
set vbat_pid_gain = ON
set i_pitch = 80
set d_pitch = 50
set f_pitch = 100
set p_roll = 90
set i_roll = 80
set d_roll = 50
set f_roll = 100
set p_yaw = 100
set i_yaw = 0
set d_yaw = 55
set f_yaw = 75
set angle_level_strength = 110
set horizon_level_strength = 30
set horizon_transition = 80
set level_limit = 65
set horizon_tilt_effect = 80
set horizon_tilt_expert_mode = ON
set abs_control_gain = 20
set use_integrated_yaw = ON
set d_min_roll = 0
set d_min_pitch = 0
set d_min_boost_gain = 20
set d_min_advance = 0
# restore original profile selection
profile 2
# rateprofile
rateprofile 0
set yaw_rc_rate = 210
set roll_expo = 0
set pitch_expo = 0
set yaw_expo = 0
set yaw_srate = 25
set tpa_rate = 75
set tpa_breakpoint = 1750
set throttle_limit_type = CLIP
# rateprofile
rateprofile 1
set yaw_rc_rate = 210
set roll_expo = 0
set pitch_expo = 0
set yaw_expo = 0
set yaw_srate = 25
set tpa_rate = 75
set tpa_breakpoint = 1750
set throttle_limit_type = CLIP
# rateprofile
rateprofile 2
set roll_rc_rate = 1
set pitch_rc_rate = 1
set yaw_rc_rate = 210
set roll_expo = 0
set pitch_expo = 0
set yaw_expo = 0
set roll_srate = 0
set pitch_srate = 0
set yaw_srate = 0
set tpa_rate = 75
set tpa_breakpoint = 1750
set throttle_limit_type = CLIP
# rateprofile
rateprofile 3
# rateprofile
rateprofile 4
# rateprofile
rateprofile 5
# restore original rateprofile selection
rateprofile 2
# save configuration
save