Files
Server-scripts/work/startTau_generic_Generated.m
T
2026-09-14 12:43:38 +02:00

461 lines
18 KiB
Matlab
Executable File

function startTau_generic_Generated.m(oFRDReg, options)
arguments
oFRDReg
options.sTimeOut (1,1) double = 10.0
end
% Generated from sequence: LBDB11_Start_Tau_generic_Copy
% Sequence ID: 1722837829
% ------ reset DUT and put into IDLE ------
% Unsupported command type: DisplayController_Command_SetResetNPinState
% Unsupported command type: DisplayController_Command_SetClkMirror
% valid for 10MHz input-clock
oFRDReg.CLK_PLL.CLK_PLL = 3857; % 0x0F11
% Wait for driver entering IDLE...
sTimeOut = options.sTimeOut;
sStart = tic;
while(oFRDReg.OP_STATUS.opmode ~= 1)
if toc(sStart) > sTimeOut
error('ifx:runtime_error', 'Timeout waiting for OP_STATUS.opmode to equal 1');
end
end
% ------ MSI config ------
oFRDReg.MSI.vcm_sel = 2;
oFRDReg.MSI.cmp_clk_provision = 1;
oFRDReg.MSI.ib_sel = 4;
oFRDReg.MSI.ib_source_sel = 1;
% ------ Slow/Fast MSI config ------
oFRDReg.CH1_MSI1.peak_det_source = 0;
oFRDReg.CH1_MSI1.peak_det_pol = 0;
oFRDReg.CH1_MSI1.tia_res_sel = 15;
oFRDReg.CH1_MSI1.tia_cap_sel = 15;
oFRDReg.CH1_MSI1.sah_tc = 2;
oFRDReg.CH1_MSI1.swap_polarity = 0;
oFRDReg.CH1_MSI2.sah_refdac_sel = 1;
oFRDReg.CH1_MSI2.sah_en = 0;
oFRDReg.CH1_MSI2.refdac_en = 1;
oFRDReg.CH1_MSI2.refdac_sel = 4;
oFRDReg.CH1_MSI2.ref_div_trim = 5;
oFRDReg.CH0_MSI1.peak_det_source = 0;
oFRDReg.CH0_MSI1.peak_det_pol = 0;
oFRDReg.CH0_MSI1.tia_res_sel = 15;
oFRDReg.CH0_MSI1.tia_cap_sel = 15;
oFRDReg.CH0_MSI1.sah_tc = 2;
oFRDReg.CH0_MSI1.swap_polarity = 0;
oFRDReg.CH0_MSI2.sah_refdac_sel = 1;
oFRDReg.CH0_MSI2.sah_en = 0;
oFRDReg.CH0_MSI2.refdac_en = 1;
oFRDReg.CH0_MSI2.refdac_sel = 0;
oFRDReg.CH0_MSI2.ref_div_trim = 0;
% ------ Slow/Fast subtiming config ------
oFRDReg.CH1_ST_MODULO.cnt_value = 7000;
oFRDReg.CH1_ST_POS.cnt_value = 0;
oFRDReg.CH1_ST_MOV.cnt_value = 3500;
oFRDReg.CH1_ST_DRIVE_ON.cnt_value = 3500;
oFRDReg.CH1_ST_DRIVE_OFF_MIN.cnt_value = 262;
oFRDReg.CH1_ST_DRIVE_OFF.cnt_value = 263;
oFRDReg.CH1_ST_DRIVE_OFF_MAX.cnt_value = 2188;
oFRDReg.CH0_ST_MODULO.cnt_value = 1700;
oFRDReg.CH0_ST_POS.cnt_value = 0;
oFRDReg.CH0_ST_MOV.cnt_value = 850;
oFRDReg.CH0_ST_DRIVE_ON.cnt_value = 850;
oFRDReg.CH0_ST_DRIVE_OFF_MIN.cnt_value = 54;
oFRDReg.CH0_ST_DRIVE_OFF.cnt_value = 55;
oFRDReg.CH0_ST_DRIVE_OFF_MAX.cnt_value = 805;
% ------ Slow/Fast ADC config ------
oFRDReg.CH1_ST_ADC_VTEMP.cnt_value = 1;
oFRDReg.CH1_ST_ADC_MIRRCURR.cnt_value = 88;
% currently disabled by setting to MODULO+1
oFRDReg.CH1_ST_ADC_HVD.cnt_value = 7001;
oFRDReg.CH1_ADC_SCHED1.angle_amplitude = 2;
oFRDReg.CH1_ADC_SCHED2.hv = 200;
oFRDReg.CH1_ADC_SCHED3.temperature = 100;
oFRDReg.CH0_ST_ADC_VTEMP.cnt_value = 1;
oFRDReg.CH0_ST_ADC_MIRRCURR.cnt_value = 45;
% currently disabled by setting to MODULO+1
oFRDReg.CH0_ST_ADC_HVD.cnt_value = 1701;
oFRDReg.CH0_ADC_SCHED1.angle_amplitude = 2;
oFRDReg.CH0_ADC_SCHED2.hv = 200;
oFRDReg.CH0_ADC_SCHED3.temperature = 100;
% ------ Slow/Fast Amp.-Sense + control config ------
% slow - amplitude detection
oFRDReg.CH1_AMPL_SENSE1.method = 0;
oFRDReg.CH1_AMPL_SENSE1.diff_comp_pol = 0;
oFRDReg.CH1_AMPL_SENSE1.asym_comp_en = 1;
oFRDReg.CH1_AMPL_SENSE1.alpha_filter = 5;
oFRDReg.CH1_AMPL_SENSE1.filter_en = 1;
oFRDReg.CH1_MSI2.sah_refdac_sel = 1;
oFRDReg.CH1_MSI2.sah_en = 0;
oFRDReg.CH1_MSI2.refdac_en = 1;
oFRDReg.CH1_MSI2.refdac_sel = 0;
oFRDReg.CH1_MSI2.ref_div_trim = 0;
oFRDReg.CH1_ST_AMPL_DET_START.cnt_value = 6193;
oFRDReg.CH1_ST_AMPL_DET_STOP.cnt_value = 6543;
oFRDReg.CH1_ST_AMPL_CTRL_SETPOINT.cnt_value = 6368;
oFRDReg.CH1_ST_CMP_DIFF_EN_START.cnt_value = 3500;
oFRDReg.CH1_ST_CMP_DIFF_EN_STOP.cnt_value = 175;
% slow - amplitude control
oFRDReg.CH1_AMPL_CTRL1.means_of_control = 0;
oFRDReg.CH1_AMPL_CTRL1.i_gain = 2;
oFRDReg.CH1_AMPL_CTRL2.p_gain = 20;
oFRDReg.CH1_AMPL_CTRL1.source_pid = 1;
oFRDReg.CH1_ST_CONTROL_ACTION.cnt_value = 262;
oFRDReg.CH1_ST_CONTROL_ACTION.en = 1;
oFRDReg.CH1_AMPL_CTRL1.phase_comp_en = 1;
oFRDReg.CH1_AMPL_CTRL1.phase_comp_op = 1;
% slow - enable amplitude sensing
oFRDReg.CH1_CFG.ampl_sense_en = 1;
% fast - peak sensing
% for anti phase drive the tracking period needs to be very narrow otherwise inhibiting happens
oFRDReg.CH0_ST_MIRRCURR_PEAK_START.cnt_value = 1029;
oFRDReg.CH0_ST_MIRRCURR_PEAK_STOP.cnt_value = 54;
oFRDReg.CH0_ST_MIRRCURR_PEAK_RESET.cnt_value = 828;
oFRDReg.CH0_ST_MIRRCURR_PEAK_URESET.cnt_value = 939;
% fast - amplitude detection
oFRDReg.CH0_AMPL_SENSE1.method = 0;
oFRDReg.CH0_AMPL_SENSE1.diff_comp_pol = 0;
oFRDReg.CH0_AMPL_SENSE1.asym_comp_en = 1;
oFRDReg.CH0_AMPL_SENSE1.alpha_filter = 7;
oFRDReg.CH0_AMPL_SENSE1.filter_en = 0;
oFRDReg.CH0_MSI2.sah_refdac_sel = 1;
oFRDReg.CH0_MSI2.sah_en = 0;
oFRDReg.CH0_MSI2.refdac_en = 1;
oFRDReg.CH0_MSI2.refdac_sel = 0;
oFRDReg.CH0_MSI2.ref_div_trim = 0;
oFRDReg.CH0_ST_AMPL_DET_START.cnt_value = 1188;
oFRDReg.CH0_ST_AMPL_DET_STOP.cnt_value = 1366;
oFRDReg.CH0_ST_AMPL_CTRL_SETPOINT.cnt_value = 1277;
oFRDReg.CH0_ST_CMP_DIFF_EN_START.cnt_value = 850;
oFRDReg.CH0_ST_CMP_DIFF_EN_STOP.cnt_value = 89;
oFRDReg.CH0_ST_AMPL_SH_START.cnt_value = 1342;
oFRDReg.CH0_ST_AMPL_SH_STOP.cnt_value = 1432;
% fast - amplitude control
oFRDReg.CH0_AMPL_CTRL1.means_of_control = 0;
oFRDReg.CH0_AMPL_CTRL1.i_gain = 100;
oFRDReg.CH0_AMPL_CTRL2.p_gain = 100;
oFRDReg.CH0_AMPL_CTRL1.source_pid = 1;
oFRDReg.CH0_ST_CONTROL_ACTION.cnt_value = 54;
oFRDReg.CH0_ST_CONTROL_ACTION.en = 1;
oFRDReg.CH0_AMPL_CTRL1.phase_comp_en = 1;
oFRDReg.CH0_AMPL_CTRL1.phase_comp_op = 1;
% fast - enable amplitude sensing
oFRDReg.CH0_CFG.ampl_sense_en = 1;
% ------ Slow/Fast Phase-control config ------
% slow
oFRDReg.CH1_ST_PHASEDET_START.cnt_value = 6825;
oFRDReg.CH1_ST_PHASEDET_STOP.cnt_value = 175;
oFRDReg.CH1_ST_ZCREF_RESET.cnt_value = 3500;
oFRDReg.CH1_ST_CMP_SUM_EN_START.cnt_value = 6781;
oFRDReg.CH1_ST_CMP_SUM_EN_STOP.cnt_value = 175;
oFRDReg.CH1_ST_CONTROL_ACTION.cnt_value = 176;
oFRDReg.CH1_ST_CONTROL_ACTION.en = 1;
oFRDReg.CH1_PHASE_CTRL1.i_gain = 255;
oFRDReg.CH1_PHASE_CTRL2.p_gain = 600;
oFRDReg.CH1_PHASE_CTRL1.asym_comp_en = 1;
oFRDReg.CH1_PHASE_CTRL1.means_of_control = 0;
oFRDReg.CH1_PHASE_CTRL3.delay = 3;
% fast
oFRDReg.CH0_ST_PHASEDET_START.cnt_value = 1655;
oFRDReg.CH0_ST_PHASEDET_STOP.cnt_value = 45;
oFRDReg.CH0_ST_ZCREF_RESET.cnt_value = 850;
oFRDReg.CH0_ST_CMP_SUM_EN_START.cnt_value = 1610;
oFRDReg.CH0_ST_CMP_SUM_EN_STOP.cnt_value = 45;
oFRDReg.CH0_ST_CONTROL_ACTION.cnt_value = 49;
oFRDReg.CH0_ST_CONTROL_ACTION.en = 1;
oFRDReg.CH0_PHASE_CTRL1.i_gain = 255;
oFRDReg.CH0_PHASE_CTRL2.p_gain = 600;
oFRDReg.CH0_PHASE_CTRL1.asym_comp_en = 1;
oFRDReg.CH0_PHASE_CTRL1.means_of_control = 0;
oFRDReg.CH0_PHASE_CTRL3.delay = 1;
% ------ Slow/Fast HV config ------
% approximately HV= 0,72 * lead -> 72V
oFRDReg.CH1_HVD1.lead = 100;
oFRDReg.CH1_HVD3.lag = 100;
oFRDReg.CH1_HVD2.disch_trim = 7;
oFRDReg.CH1_HVD1.en = 1;
oFRDReg.CH1_HVD1.peak_det_res_zcs = 10;
oFRDReg.CH1_HVD2.pol = 1;
oFRDReg.CH1_HVD2.en_vmax_hv_adc = 1;
oFRDReg.CH1_ST_HVD_PEAK_START.cnt_value = 0;
oFRDReg.CH1_ST_HVD_PEAK_STOP.cnt_value = 1750;
oFRDReg.CH1_ST_HVD_PEAK_RESET.cnt_value = 3500;
oFRDReg.CH1_ST_HVD_PEAK_URESET.cnt_value = 7000;
% approximately HV= 0,72 * lead -> 72V
oFRDReg.CH0_HVD1.lead = 100;
oFRDReg.CH0_HVD3.lag = 100;
oFRDReg.CH0_HVD2.disch_trim = 7;
oFRDReg.CH0_HVD1.en = 1;
oFRDReg.CH0_HVD1.peak_det_res_zcs = 10;
oFRDReg.CH0_HVD2.pol = 1;
oFRDReg.CH0_HVD2.en_vmax_hv_adc = 1;
oFRDReg.CH0_ST_HVD_PEAK_START.cnt_value = 0;
oFRDReg.CH0_ST_HVD_PEAK_STOP.cnt_value = 716;
oFRDReg.CH0_ST_HVD_PEAK_RESET.cnt_value = 850;
oFRDReg.CH0_ST_HVD_PEAK_URESET.cnt_value = 1611;
% ------ Fref Master-Slave config ------
% Ratio: a=718, b=179, a/b=4.0112, k=2, LJRate=39.2, Tau_generic on B11
oFRDReg.FREF_MOD1_INT.mod1_int_part = 13645;
oFRDReg.FREF_MOD1_FRACT1.mod1_fract_part_msb = 732;
oFRDReg.FREF_MOD1_FRACT2.mod1_fract_part_lsb = 125;
oFRDReg.CH1_CFG.pos_source = 1;
oFRDReg.FREF1.fref1 = 1;
oFRDReg.FREF1.mode_axis0 = 3;
oFRDReg.FREF1.mode_axis1 = 0;
oFRDReg.FREF1.period_axis = 1;
oFRDReg.FREF1.periodic_sd_output_en = 1;
oFRDReg.FREF1.synch_at_lj_fs_en = 1;
oFRDReg.FREF_SMART_START.threshold = 10;
oFRDReg.FREF_SMART_START.en = 0;
oFRDReg.CH1_FREQ_CTRL1.means_of_control = 1;
oFRDReg.CH1_FREQ_CTRL1.phase_comp_en = 0;
oFRDReg.FREF_WINDOW.window_width = 20;
oFRDReg.LJ_LOCK1.liss_f_s_duration = 15;
oFRDReg.FREF_DELAY_CH1.delay = 0;
oFRDReg.FREF1.delay_axis1_en = 0;
oFRDReg.FREF_LJ_PERIOD1.lj_period_lsb = 178;
oFRDReg.FREF1.en = 1;
% ------ Slow Freq.-control config ------
oFRDReg.CH1_FREQ_CTRL1.i_gain = 40;
oFRDReg.CH1_FREQ_CTRL2.p_gain = 30;
oFRDReg.CH1_FREQ_CTRL3.d_gain = 0;
oFRDReg.CH1_FREQ_CTRL1.source_pid = 1;
oFRDReg.CH1_FREQ_CTRL3.alpha_f = 5;
oFRDReg.CH1_FREQ_CTRL5.d_limit_f = 3000;
oFRDReg.CH1_FREQ_CTRL6.f_limit_top = 2;
oFRDReg.CH1_FREQ_CTRL7.f_limit_bottom = 0;
% ------ Inhibiting config ------
oFRDReg.HVD_INHIBIT1.inhibit_ctrl_en = 1;
oFRDReg.HVD_INHIBIT2.inhibit_time_switch_hv_off = 123;
oFRDReg.HVD_INHIBIT2.inhibit_time_switch_hv_on = 123;
oFRDReg.CH1_ST_INHIBIT1_HV_CH0_START.cnt_value = 6589;
oFRDReg.CH1_ST_INHIBIT1_HV_CH0_STOP.cnt_value = 175;
oFRDReg.CH1_ST_INHIBIT2_HV_CH0_START.cnt_value = 5957;
oFRDReg.CH1_ST_INHIBIT2_HV_CH0_STOP.cnt_value = 6543;
oFRDReg.CH0_ST_INHIBIT1_HV_CH1_START.cnt_value = 1546;
oFRDReg.CH0_ST_INHIBIT1_HV_CH1_STOP.cnt_value = 45;
oFRDReg.CH0_ST_INHIBIT2_HV_CH1_START.cnt_value = 1079;
oFRDReg.CH0_ST_INHIBIT2_HV_CH1_STOP.cnt_value = 1366;
% Go into operation mode
oFRDReg.OP_CFG.op_en = 1;
% ------ configure anti phase drive ------
% slow
oFRDReg.CH1_SU_SWEEP_START_FREQ1.msb = 64234;
oFRDReg.CH1_SU_SWEEP_START_FREQ2.lsb = 233;
oFRDReg.CH1_SU_SWEEP_STOP_FREQ1.msb = 55058;
oFRDReg.CH1_SU_SWEEP_STOP_FREQ2.lsb = 53;
oFRDReg.CH1_SU_SWEEP_FREQ_STEP1.msb = 2;
oFRDReg.CH1_SU_SWEEP_FREQ_STEP2.lsb = 0;
oFRDReg.CH1_SU.stop_condition_peak_en = 1;
oFRDReg.CH1_SU.stop_condition_zc_en = 0;
oFRDReg.CH1_ST_MIRRCURR_PEAK_START.cnt_value = 3822;
oFRDReg.CH1_ST_MIRRCURR_PEAK_STOP.cnt_value = 3005;
oFRDReg.CH1_ST_MIRRCURR_PEAK_RESET.cnt_value = 3613;
oFRDReg.CH1_ST_MIRRCURR_PEAK_URESET.cnt_value = 3811;
oFRDReg.CH1_ST_ADC_MIRRCURR.cnt_value = 3006;
oFRDReg.CH1_ADC_SCHED1.angle_amplitude = 1;
oFRDReg.CH1_SU_STOP_COND_PEAK.peak_adc_th = 2120;
oFRDReg.CH1_SU_SWEEP.nr_of_zcs_per_f_step = 15;
oFRDReg.CH1_SU.nr_of_good_zc_for_stop = 4;
oFRDReg.CH1_HVD1.drive_method = 1;
% fast
oFRDReg.CH0_SU_SWEEP_START_FREQ1.msb = 64656;
oFRDReg.CH0_SU_SWEEP_START_FREQ2.lsb = 260;
oFRDReg.CH0_SU_SWEEP_STOP_FREQ1.msb = 62426;
oFRDReg.CH0_SU_SWEEP_STOP_FREQ2.lsb = 498;
oFRDReg.CH0_SU_SWEEP_FREQ_STEP1.msb = 0;
oFRDReg.CH0_SU_SWEEP_FREQ_STEP2.lsb = 50;
oFRDReg.CH0_SU.stop_condition_peak_en = 1;
oFRDReg.CH0_SU.stop_condition_zc_en = 0;
oFRDReg.CH0_ST_MIRRCURR_PEAK_START.cnt_value = 1174;
oFRDReg.CH0_ST_MIRRCURR_PEAK_STOP.cnt_value = 352;
oFRDReg.CH0_ST_MIRRCURR_PEAK_RESET.cnt_value = 964;
oFRDReg.CH0_ST_MIRRCURR_PEAK_URESET.cnt_value = 1163;
oFRDReg.CH0_ST_ADC_MIRRCURR.cnt_value = 353;
oFRDReg.CH0_ADC_SCHED1.angle_amplitude = 1;
oFRDReg.CH0_SU_STOP_COND_PEAK.peak_adc_th = 2120;
oFRDReg.CH0_SU_SWEEP.nr_of_zcs_per_f_step = 15;
oFRDReg.CH0_SU.nr_of_good_zc_for_stop = 4;
oFRDReg.CH0_HVD1.drive_method = 1;
% ------ Start slow-axis via peak-detector and wait ------
oFRDReg.CH1_PHASE_CTRL1.bypass = 1;
oFRDReg.CH1_CFG.CH1_CFG = 1354; % 0x054A
oFRDReg.CH1_CFG.CH1_CFG = 1370; % 0x055A
% wait until slow has jumped...
% Wait for slow axis to finish sweep
sTimeOut = options.sTimeOut;
sStart = tic;
while(oFRDReg.CH1_SU.sweep_done ~= 1)
if toc(sStart) > sTimeOut
error('ifx:runtime_error', 'Timeout waiting for CH1_SU.sweep_done to equal 1');
end
end
% ------ Start fast-axis via peak-detector and wait ------
oFRDReg.CH0_PHASE_CTRL1.bypass = 1;
oFRDReg.CH0_CFG.CH0_CFG = 330; % 0x014A
oFRDReg.CH0_CFG.CH0_CFG = 346; % 0x015A
% wait until fast has jumped...
% Wait for fast axis to finish sweep
sTimeOut = options.sTimeOut;
sStart = tic;
while(oFRDReg.CH0_SU.sweep_done ~= 1)
if toc(sStart) > sTimeOut
error('ifx:runtime_error', 'Timeout waiting for CH0_SU.sweep_done to equal 1');
end
end
% ------ Both axes finished sweep at this point. Change peak-detector-timings
% Change peak-detector-timings of slow-axis.
% =slow_st_phasedet_start
oFRDReg.CH1_ST_MIRRCURR_PEAK_START.cnt_value = 6825;
% =slow_st_inhibit1_hv_fast_stop
oFRDReg.CH1_ST_MIRRCURR_PEAK_STOP.cnt_value = 175;
% =slow_st_inhibit1_hv_fast_stop + 1
oFRDReg.CH1_ST_ADC_MIRRCURR.cnt_value = 176;
% =slow_st_phasedet_start - peak-detector-unreset-time [us]
oFRDReg.CH1_ST_MIRRCURR_PEAK_URESET.cnt_value = 6814;
% =slow_st_mirrcurr_peak_urset - peak-detector-reset-time [us]
oFRDReg.CH1_ST_MIRRCURR_PEAK_RESET.cnt_value = 6616;
oFRDReg.CH1_MSI1.peak_det_source = 1;
% Change peak-detector-timings of fast-axis.
% =fast_st_drive_on + t_in_hv_off
oFRDReg.CH0_ST_MIRRCURR_PEAK_START.cnt_value = 974;
% =fast_st_drive_off_min + t_lead
oFRDReg.CH0_ST_MIRRCURR_PEAK_STOP.cnt_value = 152;
% =fast_st_mirrcurr_peak_stop_value + 1
oFRDReg.CH0_ST_ADC_MIRRCURR.cnt_value = 153;
% =fast_st_mirrcurr_peak_start_value - peak-detector-unreset-time [us]
oFRDReg.CH0_ST_MIRRCURR_PEAK_URESET.cnt_value = 963;
% =fast_st_mirrcurr_peak_ureset_value - peak-detector-reset-time [us]
oFRDReg.CH0_ST_MIRRCURR_PEAK_RESET.cnt_value = 764;
oFRDReg.CH0_MSI1.peak_det_source = 1;
% ------ Now switch to parametric-drive (if not done befeore), then set first fast-aixs to Amp-Ctrl-mode, then slow.
oFRDReg.CH0_ST_INHIBIT1_HV_CH1_START.en = 0;
oFRDReg.CH0_ST_INHIBIT2_HV_CH1_START.en = 0;
% switch to parametric drive
oFRDReg.CH0_HVD1.drive_method = 0;
oFRDReg.CH0_PHASE_CTRL1.bypass = 0;
oFRDReg.CH0_CFG.startup_en = 0;
% enable amplitude control of the fast axis
oFRDReg.CH0_CFG.ampl_ctrl_en = 1;
oFRDReg.CH0_CFG.sfr_drive_off_en = 0;
oFRDReg.CH1_ST_INHIBIT1_HV_CH0_START.en = 1;
oFRDReg.CH1_ST_INHIBIT2_HV_CH0_START.en = 1;
% switch to parametric drive
oFRDReg.CH1_HVD1.drive_method = 0;
oFRDReg.CH1_PHASE_CTRL1.bypass = 0;
oFRDReg.CH1_CFG.startup_en = 0;
% enable amplitude control of the slow axis
oFRDReg.CH1_CFG.ampl_ctrl_en = 1;
oFRDReg.CH1_CFG.sfr_drive_off_en = 0;
% Wait until fast-axis is started (phase-error below 25)!
sTimeOut = options.sTimeOut;
sStart = tic;
while(abs(oFRDReg.CH0_STATUS_PHASE_COMP_ERR.value) > 25)
if toc(sStart) > sTimeOut
error('ifx:runtime_error', 'Timeout waiting for CH0_STATUS_PHASE_COMP_ERR compensated phase error to be below 25');
end
end
oFRDReg.OPR_OK2.ch0_phase_ctrl_en = 0;
% -------- Reduce TIA gains to avoid signal overdrive
oFRDReg.CH1_MSI1.tia_cap_sel = 5;
oFRDReg.CH1_MSI1.tia_res_sel = 5;
oFRDReg.CH0_MSI1.tia_cap_sel = 5;
oFRDReg.CH0_MSI1.tia_res_sel = 5;
% fast (master) axis is started, from now on it possible to lock to it
oFRDReg.LJ_LOCK1.en = 1;
% ------ Enable frequ.-control ------
% from here FREF has to be set correctly!!
oFRDReg.CH1_CFG.freq_ctrl_en = 1;
% ------ Steer towards the final frequency via frequency control ------
% Wait to reach final frequency...
sTimeOut = options.sTimeOut;
sStart = tic;
while(oFRDReg.CH1_FREQ_CTRL1.f_limit_reached ~= 1)
if toc(sStart) > sTimeOut
error('ifx:runtime_error', 'Timeout waiting for CH1_FREQ_CTRL1.f_limit_reached to equal 1');
end
end
% ------ Restart fref with smart start ------
oFRDReg.FREF1.en = 0;
oFRDReg.FREF_SMART_START.en = 1;
oFRDReg.FREF1.en = 1;
% Wait for smart-start to start up...
sTimeOut = options.sTimeOut;
sStart = tic;
while(oFRDReg.FREF_SMART_START.started ~= 1)
if toc(sStart) > sTimeOut
error('ifx:runtime_error', 'Timeout waiting for FREF_SMART_START.started to equal 1');
end
end
% ------ Do phase&frequency control for lj synch, then wait for LJ-lock ------
oFRDReg.CH1_PHASE_CTRL1.i_gain = 118;
oFRDReg.CH1_PHASE_CTRL2.p_gain = 395;
oFRDReg.CH1_FREQ_CTRL1.i_gain = 3;
oFRDReg.CH1_FREQ_CTRL2.p_gain = 2;
oFRDReg.CH1_FREQ_CTRL3.d_gain = 8;
oFRDReg.CH1_FREQ_CTRL3.alpha_pf = 13;
oFRDReg.CH1_FREQ_CTRL4.d_limit_pf = 3000;
oFRDReg.CH1_FREQ_CTRL1.source_pid = 0;
% Wait for LJ-lock...
sTimeOut = options.sTimeOut;
sStart = tic;
while(oFRDReg.LJ_LOCK1.lock ~= 1)
if toc(sStart) > sTimeOut
error('ifx:runtime_error', 'Timeout waiting for LJ_LOCK1.lock to equal 1');
end
end
% ------ Set gains for low jitter ------
oFRDReg.CH1_FREQ_CTRL3.d_gain = 1;
oFRDReg.CH1_FREQ_CTRL3.alpha_pf = 5;
oFRDReg.CH0_PHASE_CTRL1.i_gain = 6;
oFRDReg.CH0_PHASE_CTRL2.p_gain = 60;
oFRDReg.CH0_AMPL_CTRL1.i_gain = 1;
oFRDReg.CH0_AMPL_CTRL2.p_gain = 20;
end