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.

[参考译文] TMS320F28379D:建议使用 Cmpss 或 ECAP 噪声滤波器

Guru**** 2581345 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1035017/tms320f28379d-cmpss-or-ecap-noise-filter-suggestion

器件型号:TMS320F28379D
主题中讨论的其他器件:C2000WARE

大家好、我在系统中遇到了使用 ADC 测量的高噪声交流信号、以及通过比较器和 ECAP 模块计算的周期。 无噪声信号的计算很好(到小数位数的2)、但噪声信号的计算很差。 我知道噪声触发比较器和 ECAP 只是测量这种上升沿、但是否有任何用于降低比较器噪声的解决方案、例如采用迟滞的降噪或软件施密特触发解决方案? 是否有人对最合适的方法有任何经验?  

示例1:如果我在 ADC 输入端有高谐波交流信号(例如、30-40谐波10%)、我得到计算周期错误(例如50Hz 交流信号时为0.25ms、应为20ms)
示例2:50Hz ECAP 时的纯交流信号测量非常好、如50.002Hz

我已将 cmpss 滤波器放大:

        Cmpss6Regs.CTRIPHFILCLKCTL.bit.CLKPRESCALE = 90;
        Cmpss6Regs.CTRIPHFILCTL.bit.SAMPWIN = 0x1F;
        Cmpss6Regs.CTRIPHFILCTL.bit.THRESH = 0x1F;
        Cmpss6Regs.CTRIPHFILCTL.bit.FILINIT = 1;        



使用具有比较器6的 ADC-C 输入2的 IM 从输入 x 条7进入 eCAP1。 周期在 eCAP1中断中计算。
使用手动重新布防进行 ECAP 设置。
    ECap1Regs.ECCTL2.bit.TSCTRSTOP = 0; // Stop the TSCTR counter
    ECap1Regs.ECEINT.all = 0;           // Disable eCAP1 interrupts
    ECap1Regs.ECCLR.all = 0x00FF;       // Clear eCAP1 interrupt flags

    ECap1Regs.CTRPHS = 0;

    ECap1Regs.ECCTL2.bit.CAP_APWM = 0;  // ECAP module operates in capture mode
    ECap1Regs.ECCTL2.bit.SYNCI_EN = 0;  // disable counter (TSCTR) to be loaded from CTRPHS
    ECap1Regs.ECCTL2.bit.SWSYNC = 1;
    ECap1Regs.ECCTL2.bit.STOP_WRAP = 2; // for continuous mode wrap value 2; wrap after Capture Event 3
    ECap1Regs.ECCTL2.bit.SYNCO_SEL = 0; // Select sync-in event to be the sync-out signal (pass through)
    ECap1Regs.ECCTL2.bit.CONT_ONESHT = 1;   // Operate in One-Shot mode
    //ECap1Regs.ECCTL2.bit.CONT_ONESHT = 0;   // Operate in Continuos mode


    ECap1Regs.ECCTL1.bit.PRESCALE = 0;  // Divide by 1 (i.e,. no prescale, by-pass the event prescaler)
    ECap1Regs.ECCTL1.bit.CAPLDEN = 1;   // Enable CAP1-4 register loads at capture event time.

    ECap1Regs.ECCTL1.bit.CAP1POL = 0;   // Capture Event 1 triggered on a rising edge (RE)
    ECap1Regs.ECCTL1.bit.CAP2POL = 0;   // Capture Event 2 triggered on a rising edge (RE)
    ECap1Regs.ECCTL1.bit.CAP3POL = 0;   // Capture Event 3 triggered on a rising edge (RE)
    ECap1Regs.ECCTL1.bit.CAP4POL = 0;   // Capture Event 4 triggered on a rising edge (RE)

    ECap1Regs.ECCTL1.bit.CTRRST1 = 0;   // Reset counter after Capture Event 1 time-stamp has been captured
    ECap1Regs.ECCTL1.bit.CTRRST2 = 0;   // Do not reset counter on Capture Event 2
    ECap1Regs.ECCTL1.bit.CTRRST3 = 0;   // Do not reset counter on Capture Event 3
    ECap1Regs.ECCTL1.bit.CTRRST4 = 0;   // Do not reset counter on Capture Event 4

    //ECap1Regs.ECEINT.bit.CEVT3 = 1;     // CEVT3 Interrupt enable
    //ECap1Regs.ECEINT.bit.CTROVF = 1;    // CTROVF Interrupt enable

    ECap1Regs.ECCTL2.bit.SYNCI_EN = 0;  // disable counter (TSCTR) to be loaded from CTRPHS


谢谢。
-Marek。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="459007" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1035017/tms320f28379d-cmpss-or-ecap-noise-filter-suggestion ]是否有任何用于降低比较器噪声的解决方案,例如采用迟滞的降噪或软件施密特触发器解决方案?[/quot]

    是的、CMPSS 嵌入了对通过 COMPHYSCTL 寄存器选择的迟滞的支持:

    您是否能够共享一些示波器捕获的输入信号与比较器异步输出路径、以获得清晰和嘈杂的输入信号、从而使我们能够更好地理解问题?

    Tommy

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

    大家好、这张图片是输出比较器 GPIO9的示波器测量值、我将其馈送到导入到 Excel 中的 ECAP (顶部图片是50Hz 纯正弦波、底部是50Hz 时的40x 2%谐波)。 X -时间、以秒为单位、Y -电压。



    如果您愿意、可从示波器 获取 csv 数据:e2e.ti.com/.../50hz_5F00_puresine.CSVe2e.ti.com/.../50hz_5F00_harmonics.CSV 

    6倍过采样后的输入缓冲器(来自 ADC 且比较器经过的原始数据必须具有更高的噪声):
    50Hz 纯正弦波

    50Hz 40x 2%谐波

    Cmpss6Regs.DACHVALS.bit.DACVAL = 2048;


    您可以看到几乎没有噪音、这可能是由于长电缆被房间内的其他设备"干扰"造成的。 但该噪声不会损害纯正弦波、比较器工作正常。

    此信息是否足够您使用、或者我是否应该提供一些其他数据?

    编辑:过采样前的 ADC (ADCINC2)原始信号波(40谐波50Hz) csv: e2e.ti.com/.../ADCINC2_5F00_40harm_5F00_50Hz.CSV

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

    Marek、

    我打算看到比较器中的原始输入信号、以了解噪声的幅度。 根据 ADC 样本、我的假设是干扰远高于数十个比较器 DAC LSB 的范围、并且根据 SYSCLK 标准可持续很长时间。

    我怀疑内置的迟滞和滤波选项将能够完全缓解这种巨大的破坏性脉冲。 您最多可以将比较器的锁存路径与 ePWM 清除结合使用、以便仅捕获每个 ePWM 观察窗口的单次跳闸、但我认为、即使这样、如果干扰不一致、也会导致不稳定的结果。

    您可能需要使用外部滤波(如低通 RC)来衰减噪声、或使用片上信号处理来分析数字域中的信号。 C2000Ware 中的 FFT 库可能有用:~\C2000Ware_XXXX\libraries\DSP\

    Tommy

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

    您好!

    您是指 FIR 滤波器吗? 所以我需要对输入信号进行后处理,但是我如何管理这个已过滤信号的运行 cmpss,因为它现在是从 ADC 的原始输入直接获取的? 谢谢。

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

    Marek、

    由于输入信号上存在大量噪声、因此无法为边沿延迟测量找到可靠的触发电压。

    如果您的目标是推断输入频率、FFT 库将允许您使用 ADC 转换对输入信号执行频谱分析、以检测复合频率。

    Tommy

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

    嘿、实际上我使用 FFT 计算、我的采样频率为102354Hz、FFT 为2048个样本。 我可以通过以下公式计算频率:频率= MaxMagnitudeIndex * FS/N、但分辨率较低。

    示例:频率= 1 *(102354/2048)= 50Hz
    示例2:频率= 2*(102354/2048)= 100Hz

    我的信号也是60Hz、我无法使用这个公式来计算它。 有什么更好的想法吗?

    谢谢。

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

    Marek、

    对于60Hz 输入信号的 FFT、该采样率似乎非常高。 您是否能够降低采样率?

    Tommy