(Sheila Hugh Jim Nic)
Last night we had been having some locklosses due to the VCOs which keep the green locked to the arms running out of range. Today we decided to implement a servo which slowly feeds the VCO control signals to the HEPI postition at the end station.
This was done using a simple epics based servo. (It’s similar to ezcaservo but is designed for the guardian infrastructure.)
We take the VCO control signal from (for example in the X arm) H1:ALS-X_REFL_CTRL_OUT16
and write the integrated control to H1:HPI-ETMY_ISCINF_LONG_OFFSET
.
Both ALS_{X,Y}ARM guardians have a new state named LOCKED_W_HEPI_SLOW
and the code looks like this:
class LOCKED_W_HEPI_SLOW(GuardState):
@fault_checker_gen(arm)
def main(self):
offset_ramp_time = 2;
servo_gain = 10;
offset_prefix = 'HPI-ETM'+arm+'_ISCINF_LONG'
ezca.write(offset_prefix+'_TRAMP',offset_ramp_time)
# arms have opposite gain
if arm=='X':
servo_gain = -1*servo_gain
self.hepi_servo = cdu.Servo(ezca,offset_prefix+'_OFFSET',readback='ALS-'+arm+'_REFL_CTRL_OUTPUT',gain=servo_gain)
@fault_checker_gen(arm)
def run(self):
self.hepi_servo.step();
return True
Attached is a screenshot of the servo in action. The first part of the time series has the gain with the wrong (positive feedback) sign for the Y arm servo, then it’s flipped half way through and goes back to the set point. The X arm servo is turned on with normal gain throughout.