Hang, TVo, Stefan,
Worrying abut high frequency saturation in the CARM servo (https://alog.ligo-wa.caltech.edu/aLOG/index.php?callRep=45768), we updated the IMC_power_adjust_func() in ISC_library.py to start scaling down the input sliders instead of the output sliders.
Specifically, if IMC-REFL_SERVO_FASTGAIN drops below a certain threshold (FG_THRESH), instead of adjusting IMC-REFL_SERVO_FASTGAIN and LSC-MCL_GAIN, we switch to adjusting IMC-REFL_SERVO_IN1GAIN and LSC-REFL_SUM_A_IN2GAIN.
Since we start off with IMC-REFL_SERVO_FASTGAIN = 0 dB at 2W, FG_THRESH=-20 corresponds to 20W, and would leave everything the same up to 20W.
For now we left FG_THRESH at -10dB (6.3W) to give us an extre factor of 3 saturation headroom.
Below is the source code (in ISC_library.py), which is checked into SVN.
We tested the script for functionality and went to 28W for 15min (92Mpc), but then still lost lock. More work to be done.
#################################################
# check input power
#################################################
def IMC_power_adjust_func():
# at 2.0 Watts input power the nominal gain on IMC Fast Gain should be 0 dB
calc_gain = 20.0*math.log10(2.0/ezca['IMC-PWR_IN_OUTMON'])
calc_gain = min(calc_gain, 31)
# it only changes the power if there is a difference of 1 dB.
# This is intended to prevent repeated 1 dB gain changes
# if we are on the edge between two gain settings with the input power.
FG_THRESH=-10 # was -20
IMC_NOM = 28
CMB_NOM = 8
PWR_MIN = 4.0
if ezca['IMC-PWR_IN_OUTMON'] < PWR_MIN:
# use old logic - ignore the input sliders
# this is to avoid interfering with the common mode engage sequence
diff_gain = calc_gain - ezca['IMC-REFL_SERVO_FASTGAIN']
if abs(diff_gain) >= 1:
R_diff_gain=round(diff_gain)
log('power_adjust is changing IMC Common Mode Board IN1 gain by a bit...' )
ezca['IMC-REFL_SERVO_FASTGAIN'] += R_diff_gain
time.sleep(0.2)
if abs(ezca['LSC-MCL_GAIN']) > 1e-9:
ezca['LSC-MCL_GAIN'] *= 10**(R_diff_gain/20.0)
elif abs(ezca['IMC-MCL_GAIN']) > 1e-9:
ezca['IMC-MCL_GAIN'] *= 10**(R_diff_gain/20.0)
else:
# use new logic - incorporate input sliders, start lowering input sliders once IMC-REFL_SERVO_FASTGAIN falls below FG_THRESH
diff_gain_old = calc_gain - ezca['IMC-REFL_SERVO_FASTGAIN']
diff_gain = calc_gain - ezca['IMC-REFL_SERVO_FASTGAIN'] + CMB_NOM - ezca['LSC-REFL_SUM_A_IN2GAIN']
if abs(diff_gain) >= 1:
R_diff_gain_old=round(diff_gain_old)
if ezca['IMC-REFL_SERVO_FASTGAIN'] + R_diff_gain_old >= FG_THRESH:
log('power_adjust is changing IMC Common Mode Board IN1 gain by a bit...' )
ezca['IMC-REFL_SERVO_FASTGAIN'] += R_diff_gain_old
if abs(ezca['LSC-MCL_GAIN']) > 1e-9:
ezca['LSC-MCL_GAIN'] *= 10**(R_diff_gain_old/20.0)
elif abs(ezca['IMC-MCL_GAIN']) > 1e-9:
ezca['IMC-MCL_GAIN'] *= 10**(R_diff_gain_old/20.0)
# and set back the input gains where they need to be
ezca['IMC-REFL_SERVO_IN1GAIN'] = IMC_NOM
ezca['LSC-REFL_SUM_A_IN2GAIN'] = CMB_NOM
else:
# set the output gains where they need to be
R_diff_gain = FG_THRESH - ezca['IMC-REFL_SERVO_FASTGAIN']
if abs(ezca['LSC-MCL_GAIN']) > 1e-9:
ezca['LSC-MCL_GAIN'] *= 10**(R_diff_gain/20.0)
elif abs(ezca['IMC-MCL_GAIN']) > 1e-9:
ezca['IMC-MCL_GAIN'] *= 10**(R_diff_gain/20.0)
ezca['IMC-REFL_SERVO_FASTGAIN'] =FG_THRESH
# set the output gains
diff_gain_new = calc_gain - (FG_THRESH) +CMB_NOM - ezca['LSC-REFL_SUM_A_IN2GAIN']
R_diff_gain_new = round(diff_gain_new)
ezca['IMC-REFL_SERVO_IN1GAIN'] += R_diff_gain_new
ezca['LSC-REFL_SUM_A_IN2GAIN'] += R_diff_gain_new
Craig, Sheila
We have reverted this change, because in the past we had locklosses caused during power up by glitches on the input sliders. We fixed those locklosses when we changed to instead adjusting the output slider during the power up. See 44422
We can lower the input gain by changing the gain used in ANALOG_CARM