forked from M-Labs/artiq
coredevice/suservo: Fix {get,set}_y_mu() scaling
Previously, Channel.set_y(1) would set the output to -1 instead.
This commit is contained in:
parent
f6edceb23d
commit
34f48f57cc
|
@ -6,6 +6,7 @@ from artiq.coredevice import urukul, sampler
|
||||||
|
|
||||||
|
|
||||||
COEFF_WIDTH = 18
|
COEFF_WIDTH = 18
|
||||||
|
Y_FULL_SCALE_MU = (1 << (COEFF_WIDTH - 1)) - 1
|
||||||
COEFF_DEPTH = 10 + 1
|
COEFF_DEPTH = 10 + 1
|
||||||
WE = 1 << COEFF_DEPTH + 1
|
WE = 1 << COEFF_DEPTH + 1
|
||||||
STATE_SEL = 1 << COEFF_DEPTH
|
STATE_SEL = 1 << COEFF_DEPTH
|
||||||
|
@ -18,7 +19,7 @@ COEFF_SHIFT = 11
|
||||||
@portable
|
@portable
|
||||||
def y_mu_to_full_scale(y):
|
def y_mu_to_full_scale(y):
|
||||||
"""Convert servo Y data from machine units to units of full scale."""
|
"""Convert servo Y data from machine units to units of full scale."""
|
||||||
return y*(1./(1 << COEFF_WIDTH - 1))
|
return y / Y_FULL_SCALE_MU
|
||||||
|
|
||||||
|
|
||||||
@portable
|
@portable
|
||||||
|
@ -508,4 +509,6 @@ class Channel:
|
||||||
:param profile: Profile number (0-31)
|
:param profile: Profile number (0-31)
|
||||||
:param y: IIR state in units of full scale
|
:param y: IIR state in units of full scale
|
||||||
"""
|
"""
|
||||||
self.set_y_mu(profile, int(round((1 << COEFF_WIDTH - 1)*y)))
|
y_mu = int(round(y * Y_FULL_SCALE_MU))
|
||||||
|
self.set_y_mu(profile, y_mu)
|
||||||
|
return y_mu
|
||||||
|
|
Loading…
Reference in New Issue