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.

[参考译文] CCS/TDC7200:错误测量中断

Guru**** 2608905 points
Other Parts Discussed in Thread: TDC7200, TDC7200EVM

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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/664957/ccs-tdc7200-interrupt-for-a-false-measurement

器件型号:TDC7200

工具/软件:Code Composer Studio

你(们)好  

对于我的应用、从 TDC7200获取准确而快速的结果非常重要。

现在、我问我、如果我得到了错误的值/毛刺脉冲等、我是否可以通过中断(INTB)来处理这个错误的值以获得新的测量值、或者可以最小化这个毛刺脉冲(请参阅下图)  
并以任何其他方式修复错误?

粉色:在本例中为粉色的模拟输出、通过 DAC 显示毛刺脉冲和错误测量。

我在此论坛和数据表中阅读、轮询中断状态寄存器会产生更多测量问题、INTB 仅用于检查测量是否完成。

但实际上我不 使用 INTB。

当我实施 INTB 时、我可以获得什么优势、并且可以在要求 INTB 获得更精确的频率后进行测量?

我使用的是8MHz 参考时钟或 TDC 与 TDC7200EVM 中使用的振荡器相同

我的测量频率介于400KHz - 1MHz 之间

MSP5529具有一个 MCU 时钟24MHz 和 SPI 12MHz

感谢您的帮助!

问候 Ben

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

    您好 Ben、

    您能描述粉色信号吗? 它来自哪里、连接到什么? 它被标记为芯片选择1 (除非 CS1代表其他器件)、但您说它有干扰、如果主器件正在控制它、则不会发生这种情况。

    如果您不使用 INTB、那么如何知道测量何时完成、以便您可以读取计时寄存器? 您需要使用 INTB 告知微控制器测量周期何时结束、以便微控制器能够读取寄存器。  

    INTB 引脚唯一的其他功能是在时钟计数器溢出时发送中断。 有一个中断屏蔽寄存器可以禁用这些函数中的任何一个、但您确实需要启用 INTB 测量完成标志、以便您知道测量已完成、并在开始新的测量周期之前读取寄存器。

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    首先、我会告诉您我尝试测量的内容。
    在我的应用中、我只想测量频率 f=660khZ。
    这意味着起始信号和停止信号具有相同的输入频率、无延迟或其他任何东西。

    粉色信号显示了在每次测量结果之后使用数字模拟转换器测量误差的输出值。
    当粉色信号为高电平时、我的测量值不正确。
    测量错误:TOF= 119790480.000000
    正确的测量值:大约 TOF= 1512.099731

    然后、我尝试弄清错误的 ToF 来自哪里:

    我在配置寄存器中的设置如下所示:
    单停止;1测量周期;10个时钟周期;开始上升沿停止上升沿;测量模式2
    我发现只有我的时间1寄存器测量到大值。


    通常、我会得到 Time1-Time2=近似 值的差异 200
    示例:
    时间1:541
    时间2:320

    时间1:2018年
    时间2:1799

    但有时我会得到这样的值
    时间1:29086
    时间2:1745
    Time1-Time2=27341
    这个错误的值会导致粉色信号中出现峰值。

    在您上次答复后、我添加了用于测量准备就绪的 INTB 查询。

    最重要的价值是完美和正确的,但我需要一个快速和准确的衡量结果!!!
    现在、我要问我错误的时间值来自哪里、以及我如何解决它。

    因为 START 和 STOP 信号同时到达、这是否是粗略计数器的溢出??


    问候 Ben
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    int main (void)
    {
    
    
    WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器
    
    spi_init();
    
    for (;;)
    {
    SPI_WRITE_CONFIG (0x41、0x40); //使用命令单个停止/1测量周期/10个时钟周期配置1写入寄存器地址01h
    SPI_WRITE_CONFIG (0x40、0x03); //使用命令 Meas Mode2/StartMeas Config1写入寄存器地址00h
    
    //等待 INTB 引脚变为低电平
    T_inter=0;
    while (P2IN 和 BIT6)
    {
    T_inter++;
    if (t_inter >= 200000)
    中断;
    }
    
    DATA_einzeln[0]= SPI_READ_longbyte (0x10); //只读取一个带位移的寄存器
    DATA_einzeln[1]= SPI_READ_长 字节(0x11); //只读取一个带位移的寄存器
    DATA_einzeln[2]= SPI_READ_longbyte (0x12); //只读取一个带位移的寄存器
    DATA_einzeln[3]= SPI_READ_longbyte (0x1B); //只读取一个带位移的寄存器
    DATA_einzeln[4]= SPI_READ_longbyte (0x1C); //只读取一个带位移的寄存器
    
    //SPI_ReadAll_Reg (0x90); // autoinc 读取寄存器读取数组中的所有寄存器
    弗雷根茨·贝雷赫宁();
    SPI_DAC (HIGH_BYTE、LOW_BYTE);
    
    //SPI_WRITE_CONFIG (0x40、0x03);
    }
    
    
    } 

    以下是我的主序列:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    有人能帮我解决这个问题吗? 

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

    您好 Ben、

    时间尖峰是由于计数器溢出造成的。 在开始下一次测量之前、您可以通过读取 INT_STATUS 寄存器来确认这一点。 这就是为什么不建议在 START 和 STOP 输入端输入相同的信号、因为是否正确记录 STOP 并不可靠。

    解决此问题的最佳选择是对输入信号进行多路复用、以便仅首先进入起始状态、然后在记录起始状态后不早于12ns 的停止状态。 Trigg 引脚在这方面很有用、因为它只会在 START 信号到达后变为低电平。

    此致、