This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] OPT3101-SDK:在代理模式下进行寄存器配置

Guru**** 1151810 points
Other Parts Discussed in Thread: OPT3101-SDK, OPT3101
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/1192432/opt3101-sdk-register-configuration-in-dealiasing-mode

器件型号:OPT3101-SDK
主题中讨论的其他器件: OPT3101

尊敬的先生:

自上一个问题咨询以来(OPT3101-SDK:有关 OPT3101的设计问题... -传感器论坛-传感器- TI E2E 支持论坛)已关闭超时、这是另外一项咨询。

以下是我们尚未解决的主要问题。

[问题1]

"1447.OPT3101-Dealias.pdf (从 [FAQ] OPT3101下载:去混叠操作-传感器论坛-传感器- TI E2E 支持论坛)"  描述可能是错误的、在4.1部分中、对串扰进行了如下描述:"寄存器:ALPHA0_deal_SCAL;说明:用于去混叠频率的内部串扰"。 不应是"在低电流下对去混叠频率进行调节的照明串扰?因为其中存在"在高电流下对去混叠频率进行调节的照明串扰调节"。

谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    您能解释一下在最后几句话中您的意思吗? alpha/beta 0寄存器存储用于内部串扰校正的系数、而 alpha/beta 1寄存器用于照明串扰校正。

    谢谢!

    Brent Elliott

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Brent:

    感谢您的回复!

    对于去混叠频率的照明串扰调节、有两种情况:一种是高电流、另一种是低电流。 因此、我应使用哪种数据状态来计算 alpha1_Deal_SCAL 和 BETA1_Deal_SCALE?我推测使用高电流的照明串扰来计算 alpha1_Deal_SCAL 和 BETA1_Deal_SCALE、使用低电流的照明串扰来计算 ALPHA0_Deal_SCAL 和 BETA0_Deal_SCAL。

    在 OPT3101-SDK 中、内部串扰似乎只用于查看、在内部串扰校准后没有任何节省。

    此致!

    驱动该电机

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    进入去混叠模式时、H 和 L 电流之间的缩放比例不会发生变化、因此 H 和 L 的 α 和 β 应保持一致、这就是电流设置不具有特异性的原因。

    执行内部串扰校准后、可以在 OPT3101::crosstalkC 对象的实例中找到由校准确定的值。

    谢谢!

    Brent Elliott

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Brent:

    感谢您帮助我消除上述疑虑!

    目前、我们遇到的另一个麻烦问题是偏置错误。

    我们发现、寄存器 "DEALIAS_BIN"的值很容易在10MHz (15m)和8.57MHz (17.5m)的整数倍处错误计算。 例如、在大约15m、17.5m、30m、35m、45m 处,μ m 52.5m 等。 此外、我们会发现模块噪声越高、越容易摆脱延迟问题。 似乎算法无法准确地以波长的整数倍计算"DEALIAS_BIN"。

    我们确认已根据论坛中的配置设置 OPT3101寄存器("(+)[FAQ] OPT3101:Dealias 操作-传感器论坛-传感器- TI E2E 支持论坛")。

    校准和工作日志:

    -------------------------------
    Starting Main Program Execution
    -------------------------------
    INFO::Resetting Host
    INFO::Validating I2C Transaction
    INFO::I2C Transaction Successful
    INFO::Validating OPT3101 Design ID
    INFO::Design ID 0xc01000100411 Verified
    INFO::Resetting Host
    INFO::Performing Internal Cross talk Measurement...
    INFO::Internal Cross talk Measurement Completed
    
          I,      Q,S, ScaledI, ScaledQ,tMain,tIlum,tMain(C),  tIlum(C),Magnitd
    -003397,+003238,0,-0003397,+0003238, 0000, 0000,     +00, -128.0000, 15.2
    
    INFO::Loading Illumination cross talk Set
    INFO:Reading Illum Cross talk from Flash location 0x0000
    
          I,      Q,S, ScaledI, ScaledQ,tMain,tIlum,tMain(C),  tIlum(C),Magnitd
    -024150,-032703,0,-0024150,-0032703, 2432, 0000,     +48, -128.0000,131.7
    
    INFO:Reading Illum Cross talk from Flash location 0x0010
    
          I,      Q,S, ScaledI, ScaledQ,tMain,tIlum,tMain(C),  tIlum(C),Magnitd
    -021127,-029561,1,-0042254,-0059122, 2440, 0000,     +49, -128.0000,234.8
    
    INFO::Loading Illumination crosstalk Temperature Coefficient Set
    INFO::Loading Illumination cross talk Set
    INFO:Reading Illum Cross talk from Flash location 0x0000
    
          I,      Q,S, ScaledI, ScaledQ,tMain,tIlum,tMain(C),  tIlum(C),Magnitd
    -024150,-032703,0,-0024150,-0032703, 2432, 0000,     +48, -128.0000,131.7
    
    INFO:Reading Illum Cross talk from Flash location 0x0010
    
          I,      Q,S, ScaledI, ScaledQ,tMain,tIlum,tMain(C),  tIlum(C),Magnitd
    -021127,-029561,1,-0042254,-0059122, 2440, 0000,     +49, -128.0000,234.8
    
    INFO::Loading Phase Offset Set
    INFO:Reading Phase Offset from TX0 HDR 0 to Flash location 0x0060
    
    PhOfft,rfDCod,ilmScl,ilmDac, fqCnt
    010266,000874,     2,    27, 16384,
    Phase,Amplt,SigOl,AmbOl,Amb,tMain,tIlum,tMain(C),  tIlum(C)
    11140,06279,    0,    0,068, 2440, 0000,     +49, -128.0000
    
    INFO:Reading Phase Offset from TX0 HDR 1 to Flash location 0x0084
    
    PhOfft,rfDCod,ilmScl,ilmDac, fqCnt
    009422,002186,     0,    25, 16384,
    Phase,Amplt,SigOl,AmbOl,Amb,tMain,tIlum,tMain(C),  tIlum(C)
    11608,10912,    0,    0,068, 2448, 0000,     +50, -128.0000
    
    INFO::Loading Phase Temperature coefficient Set
    INFO::Loading Phase Ambient Coefficient Set
    INFO::Loading Dealias Illumination cross talk Set
    INFO:Reading Dealias Illum Cross talk from Flash location 0x0138
    
          I,      Q,S, ScaledI, ScaledQ,tMain,tIlum,tMain(C),  tIlum(C),Magnitd
    -000467,-019852,0,-0000467,-0019852, 2376, 0000,     +41, -128.0000, 64.2
    
          I,      Q,S, ScaledI, ScaledQ,tMain,tIlum,tMain(C),  tIlum(C),Magnitd
    -002396,-016605,1,-0004792,-0033210, 2384, 0000,     +42, -128.0000,108.2
    
          I,      Q,S, ScaledI, ScaledQ,tMain,tIlum,tMain(C),  tIlum(C),Magnitd
    -024150,-032703,0,-0024150,-0032703, 2432, 0000,     +48, -128.0000,131.7
    
          I,      Q,S, ScaledI, ScaledQ,tMain,tIlum,tMain(C),  tIlum(C),Magnitd
    -021127,-029561,1,-0042254,-0059122, 2440, 0000,     +49, -128.0000,234.8
    
    INFO::Loading Dealias Phase Offset Set
    INFO:Reading Dealias Phase Offset from TX0 HDR 0 to Flash location 0x0198
    
    PhOfft,rfDCod,ilmScl,ilmDac, fqCnt
    009292,000874,     2,    27, 16384,
    Phase,Amplt,SigOl,AmbOl,Amb,tMain,tIlum,tMain(C),  tIlum(C)
    10166,06722,    0,    0,068, 2400, 0000,     +44, -128.0000
    
    INFO:Reading Dealias Phase Offset from TX0 HDR 1 to Flash location 0x01bc
    
    PhOfft,rfDCod,ilmScl,ilmDac, fqCnt
    008397,002186,     0,    25, 16384,
    Phase,Amplt,SigOl,AmbOl,Amb,tMain,tIlum,tMain(C),  tIlum(C)
    10583,10665,    0,    0,068, 2408, 0000,     +45, -128.0000
    
    // cover photodiode
    |Distmm,deaBin,phasOv,phaOv2,freqCt, Phase,Amplud,SigS,AmbS,Freq,HDR|--|Amb,Cntr,Tmain,Tillum   |  Count/Total  |
    
    // 17m
    |018994,000001,000000,000000,000000,005634,000077,   0,   0,   1,  1|--|068,0x02,  +53,-128.0000|0002180/0010000|
    |002120,000000,000000,000000,000000,007945,000075,   0,   0,   1,  1|--|068,0x10,  +53,-128.0000|0002181/0010000|
        // Dealias_bin=0, should be 1.
    |001960,000000,000000,000000,000000,007347,000083,   0,   0,   1,  1|--|068,0x1e,  +53,-128.0000|0002182/0010000|
        // Dealias_bin=0, should be 1.
    |019008,000001,000000,000000,000000,005687,000088,   0,   0,   1,  1|--|068,0x0c,  +53,-128.0000|0002183/0010000|
    |019145,000001,000000,000000,000000,006200,000091,   0,   0,   1,  1|--|068,0x1a,  +53,-128.0000|0002184/0010000|
    |019093,000001,000000,000000,000000,006005,000088,   0,   0,   1,  1|--|068,0x08,  +53,-128.0000|0002185/0010000|
    |001910,000000,000000,000000,000000,007160,000093,   0,   0,   1,  1|--|068,0x16,  +53,-128.0000|0002186/0010000|
    |001895,000000,000000,000000,000000,007104,000078,   0,   0,   1,  1|--|068,0x04,  +53,-128.0000|0002187/0010000|
    |002745,000000,000000,000000,000000,012005,000073,   0,   0,   0,  1|--|068,0x13,  +53,-128.0000|0002188/0010000|
        // Dealias_bin=0, should be 1.
    |002895,000000,000000,000000,000000,012661,000079,   0,   0,   0,  1|--|068,0x01,  +53,-128.0000|0002189/0010000|
        // Dealias_bin=0, should be 1.
    |002924,000000,000000,000000,000000,012784,000085,   0,   0,   0,  1|--|068,0x0f,  +53,-128.0000|0002190/0010000|
        // Dealias_bin=0, should be 1.
    
    // 15m, dealias problem.
    |017710,000001,000000,000000,000000,011897,000077,   0,   0,   0,  1|--|068,0x1d,  +53,-128.0000|0002191/0010000|
    |017552,000001,000000,000000,000000,000233,000075,   0,   0,   1,  1|--|068,0x15,  +51,-128.0000|0000384/0010000|
    |034825,000001,000000,000000,000000,064950,000071,   0,   0,   1,  1|--|068,0x03,  +51,-128.0000|0000385/0010000|
       // Dealias_bin=1, should be 0.
    |017588,000001,000000,000000,000000,000367,000070,   0,   0,   1,  1|--|068,0x11,  +51,-128.0000|0000386/0010000|
    |034645,000001,000000,000000,000000,064278,000069,   0,   0,   1,  1|--|068,0x07,  +51,-128.0000|0000387/0010000|
        // Dealias_bin=1, should be 0.
    |017647,000001,000000,000000,000000,000588,000073,   0,   0,   1,  1|--|068,0x0d,  +51,-128.0000|0000388/0010000|
    |016958,000001,000000,000000,000000,008606,000087,   0,   0,   0,  1|--|068,0x1c,  +51,-128.0000|0000389/0010000|
    |016907,000001,000000,000000,000000,008387,000094,   0,   0,   0,  1|--|068,0x0a,  +51,-128.0000|0000390/0010000|
    |016666,000001,000000,000000,000000,007330,000082,   0,   0,   0,  1|--|068,0x18,  +51,-128.0000|0000391/0010000|
    |016536,000001,000000,000000,000000,006763,000079,   0,   0,   0,  1|--|068,0x06,  +51,-128.0000|0000392/0010000|
    |001452,000000,000000,000000,000000,006351,000082,   0,   0,   0,  1|--|068,0x14,  +51,-128.0000|0000393/0010000|
        // Dealias_bin=0, should be 1.

    此致!

    驱动该电机

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    只是为了确认一下、您是否在不使用去混叠模式的情况下测量的精度很好? 此外、由于这些精确的整数值、BIN 值是否只是不正确的? 那么、如果距离是14.5m、那么区间是0、或者15.5m、那么区间是1? 此外、您能否详细说明一下、当您说噪声增加可以消除平衡问题时意味着什么?  

    谢谢!

    Brent Elliott

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Brent:

    我确信在没有去混叠模式的情况下测量精度很高。

    dealias bin 值不仅因为这些精确的整数值而不正确、而且在这些整数值附近、越接近这些整数、误差概率就越高。

    在10MHz (波长15m)下测量14.5m 时、bin 应为0、这表示距离在第一个波长内、但有时 bin 等于1或其他非零值。

    同样、在10MHz (波长15m)下测量29m 时、bin 应为1、这表示距离在第二个波长内、但有时 bin 等于2或其他非1值。

    可以反过来推导整数波长附近的其他误差。 17.5m/35m/52.5m 整数波长附近的8.57Mhz 误差也是如此。

    有时我稍微调整了发射电流、但是没有重新校准它、导致使用的校准值和实际校准值不匹配、阴影的幅度变得更大、但测量的数据仍然有效。 同时、二进制错误的概率也会增加。

    此致!

    驱动该电机

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    我想我明白了。 我唯一不能肯定的是、您说高噪音改善了这个垃圾箱问题。 在最后一个回复中、您说增加电流会增大 BIN 误差。 这些问题看起来彼此矛盾、您能解释一下吗?  

    我也在研究为什么这一问题发生在一开始,我会尽快回到你的这一问题。

    谢谢!

    Brent Elliott

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Brent:

    我们发现,如果不进行重校准,阴影幅度将与特定范围内的发射电流成正比。

    例如、在上次校准传感器后、现在我们将稍微增大电流、阴影幅度将增加。  这也表明背景噪声变大了。 则 BIN 错误的可能性将更大。

    但是、即使按照正常流程进行校准、BIN 错误也会影响正常使用。

    此致!

    驱动该电机

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    我已因此问题被添加到电子邮件链、并将查看这些数据。 我将在下周早些时候回复您。

    谢谢!

    Brent Elliott

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Brent:

     在这一问题上是否有任何新的进展?

    客户担心问题。

    谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Reed:

    现在就让我们看看这个。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Reed:

    查看您在调试报告中发送的经销商设置后、在验证10MHz 和8.5MHz 分别运行之后、设置经销商模式似乎会出现问题。

    请尝试将 override_clkgen_reg 设置为1、然后将 dealias_en 设置为1、再将 dealias_freq 设置为1。 我从上一篇文章中看到、您曾尝试将 OVERRIDE_clkgen_reg 设置为1、但不知道您按哪种顺序尝试。 看看这是否有效,然后让我知道。 同样在上一篇文章中、您是否能够尝试将  GERT_DEALIAS_DATA 设置 为1来查看结果是否准确? 我在调试报告中看到它、但不确定它是否运行良好。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Brent、

    我们来修改和测试一下。  

    非常感谢!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Reed:

    没问题。 保持更新。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Brent 和 Reed:

    我按照您的建议进行了测试:设置 override_clkgen_reg 为1、然后设置 dealias_en 为1、再设置 dealias_freq 为1、然后将_dealias_data 设置为0。 但计算得出的距离值是错误的、 它与实际距离没有相关性。 当实际距离为50cm 时、寄存器"DEALIAS_BIN"的值为1、  当实际距离为7m 时、寄存器"DEALIAS_BIN"的值为6。  另一种现象是、尽管寄存器"DealiasFreq"的值正常变化(在0和1之间交替)、示波器捕获的波形始终为12MHz、不会在12MHz 和10MHz 之间切换。  无论将 GET_DEALIAS_DATA 设置为0或1、"DEALIAS_BIN"值和示波器捕获的数据都是相同的问题。

     

    我对这些寄存器设置:有几个问题

    1.对于 OVERRIDE_clkgen_reg、 该寄存器似乎用于强制发射极 生成指定频率脉冲。 因此、将其设置为1后、频率不能在12MHz 和10MHz 之间切换。 当我将 OVERRIDE_clkgen_reg 设置为0时、 示波器上的脉冲通常可以在12MHz 和10MHz 之间切换 、测得的值在大部分时间是正常的、但延迟问题除外。

    2.对于 dealias_freq、根据 TI 官方支持网站上的其他问题、建议使用另一个频率去混叠、使用8.57MHz 而不是12MHz、因为12MHz 的噪声会更高。 因此、最好将 dealias_freq 设置为0。

    3、 这两个主要的调试文档也有一些问题.  文档 "1447.OPT3101-Dealias.pdf"中的"3输出"计算公式(4)与文档"OPT3101基于 ToF 的远距离接近和距离传感器 AFE"中的"7.3.8输出数据"计算公式(8)不同。  当然、该问题与上一个寄存器值的错误没有直接关系。 请参考您的配置、无论使用哪种公式、结果都是错误的。

    我的步骤如下:

    1.在 HDR 模式下以10MHz 校准并将校准值保存在闪存区域1。

    2. 在 HDR 模式下以8.57MHz 进行校准并将校准值保存在闪存区域2.

    void OPT3101::device::initializeAutoHDR_8P57Hz(void){
    	// List of registers to initialize OPT3101 device after power-up
    
    	this->reg.force_en_slave = 1; // //Since I2C Master bus is floating this register needs to be set to enable device to respond
    
    	this->reg.tg_ovl_window_start = 7000; // //Overload flab observation window
    	this->reg.en_temp_conv = 1; // //Enables the internal
    
    	this->reg.clip_mode_fc = 1; // //Enables Clip mode for Frequency correction
    	this->reg.clip_mode_temp = 0; // //Disables Clip mode for Temp coff phase correction
    	this->reg.clip_mode_offset = 0; // //Disables Clip mode for phase offset correction
    	this->reg.iq_read_data_sel = 3; // //Enables 16 bit frame counter
    	this->reg.iamb_max_sel = 14; // 12=100uA, 14=200uA //Sets maximum ambient support
    	this->reg.gpio1_obuf_en=1; // //Enabled output buffer on GPIO1 pin
    	this->reg.gpo1_mux_sel=2; 	    // //select dig_gpo_0 on gpio1
    	this->reg.dig_gpo_sel0 = 9; 	// //Select Data Ready on dig_gpo_0
        
    	this->reg.num_sub_frames = 8; // //Sub frames count
    	this->reg.num_avg_sub_frames = 8; // //Average frames count
    	this->reg.xtalk_filt_time_const = 4; // //Crosstalk filter time constant
    	this->reg.tg_seq_int_start 	= 9850; // //Sequence Start
    	this->reg.tg_seq_int_end 		= 9858; // //Sequence End
    	this->reg.tg_seq_int_mask_start 	= 8; // //Same as AvgFrame Count
    	this->reg.tg_seq_int_mask_end 	= 8; // //Same as AvgFrame Count
        
        this->reg.illum_dac_h_tx0 = 24;
    	this->reg.illum_scale_h_tx0 = 0;
    
    	this->reg.illum_dac_l_tx0 = 17;
    	this->reg.illum_scale_l_tx0 = 1;
    
        // auto hdr
        this->reg.hdr_thr_high = 10000;
    	this->reg.hdr_thr_low = 800;
    	this->reg.en_adaptive_hdr = 1;
        
    	this->reg.tx_seq_reg   = 2184; // //Setting TX Switching order
    	this->reg.en_tx_switch = 0 ; // //Enable TX Switching order
    
        // 8.57MHz calibration
        this->reg.override_clkgen_reg = 1;
        this->reg.dealias_en = 1;
        this->reg.en_multi_freq_phase = 1;
        this->reg.dealias_freq = 0;                         // 
        this->reg.ncr_config = 0;                           // 0: 10 × (6 / 7) MHz | 1: 10 × (6 / 5) MHz。
        this->reg.sub_vd_clk_cnt = 11665;                   // uint16_t(9999*7/6.0);
        this->reg.tg_illumen_start = 0;                     // uint16_t(0*7/6.0);
        this->reg.tg_illumen_end = 9916;                    // uint16_t(8500*7/6.0);
        this->reg.tg_capture_start = 10850;                 // uint16_t(9300*7/6.0);
        this->reg.tg_capture_end = 11433;                   // uint16_t(9800*7/6.0);
        this->reg.tg_calc_start = 9916;                     // uint16_t(8500*7/6.0);
        this->reg.tg_calc_end = 11665;                      // uint16_t(9999*7/6.0);
        this->reg.capture_clk_cnt = 10033;                  // uint16_t(8600*7/6.0);
        //
        this->reg.en_sequencer = 0;
        this->reg.en_processor_values = 0;
        this->reg.give_dealias_data = 0;
        this->reg.en_dealias_meas = 0;
    
    	this->reg.tg_en = 1;
    
    	this->configurationFlags_xtalkFilterTau =  4; // //This is not a register but a settings flag for the SDK
    	this->configurationFlags_monoshotMode =  false; // //This is not a register but a settings flag for the SDK
    	this->configurationFlags_xtalkSettlingOneTauInMilliSeconds      =  256; // //This is not a register but a settings flag for the SDK
    	this->configurationFlags_xtalkSettlingOneTauInDataReadyCounts   =  16; // //This is not a register but a settings flag for the SDK
    	this->configurationFlags_frameTimeInMilliSeconds                =  16; // //This is not a register but a settings flag for the SDK
    	this->configurationFlags_avgFrameCountExponentOfTwo             =  6; // //This is not a register but a settings flag for the SDK
    }

    3. 根据10MHz 的内部串扰计算 alpha0_dealias_scale、beta0_dealias_scale、并将校准值保存到闪存区域3中。

    4.  根据 10MHz 下的 illumCrosstalk 计算 alpha1_dealias_scale、beta1_dealias_scale、 并将校准值保存到闪存区域4中。

    5.获取 Phase2_OFFSET_hdr0_tx0和 Phase2_OFFSET_hdr1_tx0 , 并将校准值保存在闪存区域5。

    6. 初始化 dealias 模式的寄存器。

    void OPT3101::device::initializeDealiasTest(void){
        // List of registers to initialize OPT3101 device after power-up
    
    	this->reg.force_en_slave = 1; // //Since I2C Master bus is floating this register needs to be set to enable device to respond
    
    	this->reg.tg_ovl_window_start = 7000;
    	this->reg.en_temp_conv = 1; // //Enables the internal
    
    	this->reg.clip_mode_fc = 1; // //Enables Clip mode for Frequency correction
    	this->reg.clip_mode_temp = 0; // //Disables Clip mode for Temp coff phase correction
    	this->reg.clip_mode_offset = 0; // //Disables Clip mode for phase offset correction
    	this->reg.iq_read_data_sel = 3; // //Enables 16 bit frame counter
    	this->reg.iamb_max_sel = 14; // 12=100uA, 14=200uA //Sets maximum ambient support
    	this->reg.gpio1_obuf_en = 1; // //Enabled output buffer on GPIO1 pin
    	this->reg.gpo1_mux_sel = 2; 	    // //select dig_gpo_0 on gpio1
    	this->reg.dig_gpo_sel0 = 9; 	// //Select Data Ready on dig_gpo_0
    
    	this->reg.num_sub_frames = 8; // //Sub frames count
    	this->reg.num_avg_sub_frames = 8; // //Average frames count
    	this->reg.xtalk_filt_time_const = 4; // //Crosstalk filter time constant
    	this->reg.tg_seq_int_start 	= 9850; // 以子帧中的 TG 时钟数量 (tCLK) 定义的序列发生器中断 TG 信号的起始位置。
    	this->reg.tg_seq_int_end 		= 9858; // //Sequence End
    	this->reg.tg_seq_int_mask_start 	= 8; // 以帧中的子帧数量定义的序列发生器中断 TG 信号掩码的起始位置。与num_avg_sub_frames一致。
    	this->reg.tg_seq_int_mask_end 	= 8; // //Same as AvgFrame Count
        
    
        this->reg.hdr_thr_high = 10000;
    	this->reg.hdr_thr_low = 800;
        //
    	this->reg.illum_dac_h_tx0 = 24;
    	this->reg.illum_scale_h_tx0 = 0;
        //
    	this->reg.illum_dac_l_tx0 = 17;
    	this->reg.illum_scale_l_tx0 = 1;
        //
        this->reg.en_adaptive_hdr = 1;
    
        this->reg.tx_seq_reg   = 2184; // //Setting TX Switching order
    	this->reg.en_tx_switch = 0; // //Enable TX Switching order
        
        // correction setting
        this->reg.en_temp_corr = 1;
        this->reg.en_phase_corr = 1;
        this->reg.en_temp_xtalk_corr = 1;
    
        // dealias setting
        this->reg.override_clkgen_reg = 1;
        this->reg.dealias_en = 1;
        this->reg.dealias_freq = 0;
        this->reg.en_multi_freq_phase = 1;
        this->reg.en_dealias_meas = 0;
        this->reg.ncr_config = 0;                   // 0: 10 × (6 / 7) MHz | 1: 10 × (6 / 5) MHz。
        this->reg.sub_vd_clk_cnt = 11665;           // uint16_t(9999*7/6.0);
        this->reg.tg_illumen_start = 0;             // uint16_t(0*7/6.0);
        this->reg.tg_illumen_end = 9916;            // uint16_t(8500*7/6.0);
        this->reg.tg_capture_start = 10850;         // uint16_t(9300*7/6.0);
        this->reg.tg_capture_end = 11433;           // uint16_t(9800*7/6.0);
        this->reg.tg_calc_start = 9916;             // uint16_t(8500*7/6.0);
        this->reg.tg_calc_end = 11665;              // uint16_t(9999*7/6.0);
        this->reg.capture_clk_cnt = 10033;          // uint16_t(8600*7/6.0);
    
        // sequencer setting
        this->reg.command0 = 0x100;                 // Set to fo = 10MHz
        this->reg.command1 = 0x102;                 // Set to fo to de-alias frequency
        this->reg.command2 = 0x400;                 // Go to Command0
        //this->reg.give_dealias_data = 1;
        this->reg.give_dealias_data = 0;
        this->reg.en_sequencer = 1;
        this->reg.en_processor_values = 1;
    
    	this->reg.tg_en = 1;
    
    	this->configurationFlags_xtalkFilterTau =  4; // //This is not a register but a settings flag for the SDK
    	this->configurationFlags_monoshotMode =  false; // //This is not a register but a settings flag for the SDK
    	this->configurationFlags_xtalkSettlingOneTauInMilliSeconds      =  256; // //This is not a register but a settings flag for the SDK
    	this->configurationFlags_xtalkSettlingOneTauInDataReadyCounts   =  16; // //This is not a register but a settings flag for the SDK
    	this->configurationFlags_frameTimeInMilliSeconds                =  16; // //This is not a register but a settings flag for the SDK
    	this->configurationFlags_avgFrameCountExponentOfTwo             =  6; // //This is not a register but a settings flag for the SDK
    }

    7. 闪存区域1到5的负载校准参数。

    8. 在主循环中,以50Hz 的频率读取寄存器的值,并计算测量距离。

    // if give_dealias_data = 0
    if (this->data[c1].dealiasFreq == 1) { // 1=8.57MHz
        dist_mm = ((this->data[c1].dealiasBin + this->data[c1].phaseovlf2) * 65536 + this->data[c1].phase) * 0.26688856f; // in mm, PHASE_OUT * (299792458/(2*8570000)/65536*1000) = PHASE_OUT * 0.26688856f
    } else if (this->data[c1].dealiasFreq == 0) { // 0=10MHz
        dist_mm = ((this->data[c1].dealiasBin + this->data[c1].phaseovl) * 65536 + this->data[c1].phase) * 0.22872349f; // in mm, PHASE_OUT * (299792458/(2*10000000)/65536*1000) = PHASE_OUT * 0.22872349f
    }
    
    // if give_dealias_data = 1
    dist_mm = this->data[c1].phase * 2.439717f; // in mm, PHASE_OUT * 299792458 * 64 * 1000 / 65536 / 2 / 10000000 / 6 = PHASE_OUT * 2.439717f

    此致!

    驱动该电机

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    请给我一点时间重新查看一下。 我将在本周结束之前作出答复。

    谢谢!

    Brent Elliott

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Brent:  

     有任何更新?

    谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Reed、您好!

    我将继续跟进该电子邮件主题。

    Rahland