forked from M-Labs/artiq
1
0
Fork 0

adapt servo functions. Todo: docu

This commit is contained in:
SingularitySurfer 2022-06-17 11:47:45 +00:00
parent 1bddadc6e2
commit ae3f1c1c71
1 changed files with 13 additions and 22 deletions

View File

@ -1058,41 +1058,32 @@ class PhaserChannel:
self.trf_write(data) self.trf_write(data)
@kernel @kernel
def set_servo_enable(self, en=1): def set_servo(self, bypass=1, hold=0, profile=0):
"""Set the servo enable to True or False. """Set the servo configuration.
:param en: 1 to enable servo, 0 to disable
"""
addr = PHASER_ADDR_SERVO_CFG1 if self.index == 1 else PHASER_ADDR_SERVO_CFG0
content = self.phaser.read8(addr)
delay(.1*ms)
content = (content | 1) & en
self.phaser.write8(addr, content)
@kernel
def set_servo_profile(self, profile):
"""Set the servo profile.
:param bypass: 1 to enable bypass (default), 0 to engage servo
:param hold: 1 to hold the servo IIR filter output constant, 0 for normal operation
:param profile: profile index to select for channel (0 to 3) :param profile: profile index to select for channel (0 to 3)
""" """
if profile not in range(4): if (profile < 0) | (profile > 3):
raise ValueError("invalid profile index") raise ValueError("invalid profile index")
addr = PHASER_ADDR_SERVO_CFG1 if self.index == 1 else PHASER_ADDR_SERVO_CFG0 addr = PHASER_ADDR_SERVO_CFG1 if self.index == 1 else PHASER_ADDR_SERVO_CFG0
content = self.phaser.read8(addr) if bypass == 0:
delay(.1*ms) data = 1
# shift one left and leave en bit if hold == 1:
content = (profile << 1) | (content & 1) data = data | (1 << 1)
self.phaser.write8(addr, content) data = data | (profile << 2)
self.phaser.write8(addr, data)
@kernel @kernel
def load_servo_profile(self, profile, ab, offset): def set_iir_mu(self, profile, ab, offset):
"""Load a servo profile consiting of the three filter coefficients and an output offset. """Load a servo profile consiting of the three filter coefficients and an output offset.
:param profile: profile to load (0 to 3) :param profile: profile to load (0 to 3)
:param ab: 3 entry coefficient vector (16 bit) :param ab: 3 entry coefficient vector (16 bit)
:param offset: output offset (16 bit) :param offset: output offset (16 bit)
""" """
if profile not in range(4): if (profile < 0) | (profile > 3):
raise ValueError("invalid profile index") raise ValueError("invalid profile index")
if len(ab) != 3: if len(ab) != 3:
raise ValueError("invalid number of coefficients") raise ValueError("invalid number of coefficients")