slaclab / pysmurf

Other
2 stars 9 forks source link

Add control of the C04 Cryocard HEMT2 gate and drain #707

Closed agustiner closed 2 years ago

agustiner commented 2 years ago

Issue

ESCRYODET-852

Description

This adds control of the C04 Cryocard's HEMT2 gate and drain. This should not change the operations of users on the C02 cryocard. No changes are made to the other three amplifiers, or TES biases.

The following optional configurations are added.

The following functions are added.

The get_hemt2_drain_voltage and set_hemt2_drain voltage is calculated with the following fit.

Untitled

Test log

[ 2022-02-18 01:37:34 ]  Done with setup.

In [5]: S.hemt2_gate_dac_num
Out[5]: 27

In [6]: S.hemt2_drain_dac_num
Out[6]: 29

In [7]: S.hemt2_gate_bit_to_V
Out[7]: 3.869e-06

In [8]: S.hemt2_drain_conversion_m
Out[8]: -0.259491

In [9]: S.hemt2_drain_conversion_b
Out[9]: 1.74185

In [10]: S.hemt2_Id_offset
Out[10]: 0

In [11]: S.hemt2_amp_Vd_series_resistor
Out[11]: 50.0

In [12]: S.hemt2_opamp_gain
Out[12]: 3.874

In [13]: S.C.read_ps_en()
Out[13]: 4

In [14]: S.set_hemt2_ps_en(False)

In [15]: # 0V on HEMT2 Drain

In [16]: S.get_hemt2_ps_en()
Out[16]: False

In [17]: S.set_hemt2_ps_en(True)

In [18]: S.get_hemt2_ps_en()
Out[18]: True

In [19]: # 1.7445V on HEMT2 Drain

In [20]: S.get_hemt2_gate_enable()
Out[20]: False

In [21]: S.set_hemt2_gate_enable(True)

In [22]: S.get_hemt2_gate_voltage()
Out[22]: 0.0

In [23]: # 0V HEMT2 Gate

In [26]: S.get_rtm_slow_dac_volt(S.hemt2_gate_dac_num)
Out[26]: 9.999980926513672

In [27]: S.set_hemt2_ps_en(True)

In [28]: S.get_hemt2_ps_en()
Out[28]: True

In [37]: S.set_hemt2_gate_voltage(2.03)

In [41]: # Measuring 2.0243 V on HEMT2 G

In [42]: S.set_hemt2_gate_voltage(1)

In [43]: # 0.9974 V on HEMT2 G

In [44]: S.set_hemt2_gate_voltage(0)

In [45]: # 0 V on HEMT2 G

In [46]: S.set_hemt2_gate_voltage(2.03)
[ 2022-02-18 01:58:21 ]  Bias too high. Must be <= than 2^19-1.  Setting to max value

In [47]: S.set_hemt2_drain_enable(True)

In [51]: S.set_hemt2_drain_voltage(1.7)

In [52]: # 1.6920 on HEMT2 Drain

In [53]: S.set_hemt2_drain_voltage(1.2)

In [54]: # 1.1938 V on HEMT2 Drain

In [55]: S.set_hemt2_drain_voltage(0.5)

In [56]: # 0.4963 V on HEMT2 Drain

In [58]: S.set_hemt2_drain_voltage(0)

In [59]: # 0.0066 on HEMT2 Drain

In [62]: S.set_hemt2_gate_voltage(1.5)

In [63]: S.get_hemt2_gate_voltage()
Out[63]: 1.499999693

In [64]: # Measuring 1.49 V on HEMT2 Gate

In [67]: S.get_hemt2_drain_milliamps()
Out[67]: 0.23292301239029423

In [68]: S.set_hemt2_drain_voltage(1.7)

In [69]: S.get_hemt2_drain_milliamps()
Out[69]: 0.3859867062467733

In [70]: S.set_hemt2_drain_voltage(0)

In [71]: S.get_hemt2_drain_milliamps()
Out[71]: 0.24623289881259677

In [65]: # Result: Controlling the HEMT2 gate and drain works, and get_ values agree with multimeter.

See Also

697 #699

agustiner commented 2 years ago

Moving to bigger pull request