461 lines
18 KiB
Matlab
Executable File
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 |