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/TMS320F28377D:使用 SDFM 单元进行电流测量

Guru**** 2595805 points
Other Parts Discussed in Thread: AMC1305L25

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/766870/ccs-tms320f28377d-current-measurement-using-sdfm-unit

器件型号:TMS320F28377D
主题中讨论的其他器件:AMC1305L25C2000WARE

工具/软件:Code Composer Studio

你(们)好

-有人能帮我确定传感器板的精度吗?

在该电路板中、AMC1305L25 IC 与分流电阻器(0.0015 Ω)配合使用。 我想知道、如果我使用 ENOB = Y 位的 Sinc3和 OSR=X、那么这个传感器可以检测到的电流变化的最低值是多少。

-是否可以通过使用更高值的分流电阻器来提高精度?  

-为了提高精度,如果我确定我的电流太小以至于 AMC 的输入电压将保持在其线性范围内,我是否可以使用比表12-5 TRM 中建议的位移更低的位移? 例如、对于 OSR=63、是否可以使用3个移位位而不是4位移位? 这是否是提高传感器检测到的电流变化最小值的有效方法?

此致

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

    F28377D 中提供的 SDFM 仅是数字滤波器。 通过选择滤波器类型和 OSR 设置、您可以有效控制 SD 调制器在特定频率下工作时的信号的有效分辨率(ENOB)、而不是其精度。 精度取决于 SD 调制器。 您需要检查 AMC1305L25的直流精度和交流精度规格(PG:10 www.ti.com/.../amc1305l25.pdf)

    当您选择 Sinc3、OSR = 63时、您不需要移动4位。 它仅为3。 这就是 TRM 中提到的内容。

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

    Manoj、您好、感谢您的回复

    -我对数字滤波器不太熟悉。 您能否简单地解释一下"分辨率"和"可由 DSP 检测和读取的电流变化的最低值"之间的区别是什么?

    此外、当我在调试窗口和"Expression"选项卡中读取滤波器结果时、我会观察电流。 对于直流电流、DSP 读取的值始终有一点变化。 例如:1.223、1.230、1.225、1.228、... 当电流是由直流电源生成的直流电流时、这些振荡的原因是什么?

    关于"Sinc3、OSR = 63"、是的、这是我在键入时出错的、我指 OSR=64、需要4位移位。 对于 OSR=64、是否可以使用3个移位位而不是4位移位?

    此致

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

    以下链接提供了有关分辨率/直流精度/交流精度等的良好说明

    www.embedded.com/.../Understanding-analogue-to-digital-converter-specifications

    您看到的变化看起来并不异常。 如果您希望看到非常小的变化、您可能会考虑增大 OSR、从而提供更好的分辨率、从而减小这些变化。

    是的、如果您确定是否可以保持 SD 调制器处于线性范围内、则可以在使用 Sinc3、OSR =64时使用3而不是4的移位。

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

    感谢 Manoj 提供的有用信息

    我从 TIDU499A 中注意到、使用 Sinc3和 OSR=256、clk=20MHz 时、SDFM 每12.8us 生成一次数据:

    "使用 Sinc3抽取滤波器架构时、输出信号更新速率取决于调制器时钟频率和抽取率。 将20MHz 调制器与256的抽取比 μs 结合使用、电流信号将每12.8 μ s 更新一次。'

    现在假设 SDFM 在 t=12.8us、25.6us、....时生成数据

    -这两次之间的滤波器输出是多少? 我的意思是、如果我的代码读取 SDFM 的数据、例如在 t= 15us 时、它是什么? 它是在 t=12.8us 时生成的数据还是其他不适当的数据?

    -如果我想读取 t=0的电流或另一个精确的时间,这是可能的吗? 换言之、在 t=12.8us 时生成的数据属于哪个时间?  在我所需的应用中、读取特定时间的电流很重要(例如、t=5s)。 有可能吗?

    此致

     

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

    Messi、

    "这两次之间的滤波器输出是多少? 我的意思是、如果我的代码读取 SDFM 的数据、例如在 t= 15us 时、它是什么? 它是在 t=12.8us 时生成的数据还是其他不适当的数据?"

                   如果您在15 us 处读取数据、则将读取 t = 12.8us 处生成的数据。

    "如果我想读取 t=0的电流、或者另一个精确的时间、这是可能的吗? 换言之、在 t=12.8us 时生成的数据属于哪个时间?  在我所需的应用中、读取特定时间的电流很重要(例如、t=5s)。 有可能吗?"

                  您可以使用 SDSYNC 功能来同步(或) SDFM 滤波器的读取时间。 您需要配置 PWM 以提供相对于 PWM 周期的 SDSYNC 脉冲、并实现 SDFM 滤波器读取的同步和计时。

    检查下面的示例代码以执行 SDFM 的 PWM 同步。

    \device_support\f2837xd\examples\cpu1\sdfm_pwm_sync_cpu01\

    此致。

    曼诺伊

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

    Manoj、您好、感谢您的回复

    我已经看到"sdfm_PWM_SYNC_CPU"示例。 但是、SDSYNC 在读取特定时间的当前数据时是否有用? 如果在同步信号处重新测试 SDFM、例如 t=1、则 SDFM 的数据应在滤波器+ 2~3 clk 延迟后读取、该数据属于多长时间? 它是 t=1时的电流值吗? 或者 t=1+(滤波器的延迟)/2或其他什么?

    此致

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、您应该能够为 SDFM 数据滤波器相对于 PWM 周期的读取计时。 当 PWM 向 SDFM 滤波器通道提供 SDSYNC 事件时、考虑 T = 0。 在 SDSYNC 事件上、您需要等待至少正弦滤波器延迟+ 5个 SD-CX 周期、以便读取正确的滤波器数据。

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

    感谢您的回复

    因此、为了在逆变器中发生开关后在 t=3us 处读取电流、我应该执行以下操作(正确吗)?

      SyncSockRegs.SYNCSELECT.BIT.EPWM10SYNCIN = 0;  //EPwm1SyncOut

      EPwm10Regs.TBCTL.bit.SYNCOSEL=TB_SYNC_IN;

      EPwm11Regs.TBCTL.bit.PHSEN = TB_ENABLE;

      EPwm11Regs.TBPHS.bit.TBPHS = 2;

      EPwm11Regs.TBCTL.bit.PHSDIR = TB_UP;

    这将使 pwm11与我的开关 PWM (PWM 1、2和3)同步

    然后、我必须为 t=5us 设置一个 SDSYNC 事件以按如下方式复位 SDFM:

      EPwm11Regs.CMPD =TS_PWM_TICKs*0.003; //这会在 t=3us 时产生 SDSYNC 事件

    然后、对于以下 SDFM 设置、我必须设置另一个事件以读取滤波器、方法是在 t=11us 时使用"EPwm11Regs.CMPA.bit.CMPA"设置中断 (滤波器延迟+某些 SD 时钟)

    SD clk=20Mhz,OSR=67,SINC3 =>延迟=10.05us

    根据您的回复、如果我确定我的电流处于调制器的线性范围内、我可以使用3位移位来提高分辨率、而不是4位。

    -上述程序是否正确?

    -它给我的电流是否为 t=3us? 因为我认为使用 Δ-Σ 测量电流不会提供精确时间的电流、而是给出一段时间内收集的电流数据的平均值。 (?!)

    此致

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

    如果您的 DOSR = 67、则实际 OSR 设置为68。 Sinc3滤波器的延迟、DOSR = 67为10.2us。 然后、您需要添加5个 SD-CX 时钟周期、因此添加250ns、这意味着您只能在 SDSYNC 事件之后的10.2us + 250ns = 10.45us 后读取滤波器结果。

    现在、如果您的 CMPD 事件为3us、您必须等待另一个10.45us、然后才能触发 CMPA 事件以读取 SDFM 滤波器结果。

    SDSYNC 事件后10.45us 后观察到的数字值是 SD 调制位流的平均值、因为它需要3倍 DOSR 采样才能提供滤波后的电流数据。

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

    这是一个坏消息、我无法使用 SDFM 测量精确实例的电流。 那么、平均计算过程是否是加权平均值? 例如、如果我想测量 t=1的电流、哪个实例是触发 SDSYNC 事件和重新启动 SDFM 的最佳选择? 是否为 t=1-(过滤器延迟)/2? 或者 t=1? 在平均计算过程中、哪一个可以为1的数据提供更大的增益?

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

    是的、按其架构分类的正弦滤波器是加权平均滤波器。 即使是常规 ADC 也有采集时间、因此即使使用 ADC、也无法精确测量1s。

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

    "ADC 采集时间"的例程值是多少? 如果我使用具有极高带宽的"高动态磁阻电流传感器"、能否使用最长1~2 μ s 的 ADC 读取电流?

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

    F2837x ADC 在12位模式下的最小总采集和转换延迟约为285ns、因此绝对可以在1us 的周期内进行采样。

    您可能需要增加该时间的 S+H 部分(最小75ns)、具体取决于驱动 ADC 的阻抗和带宽。 驱动缓冲器的更高阻抗和/或更低带宽可能需要增加 S+H 时间。

    您还应注意、ADC SNR 和 THD 是针对100kHz 的 ADC 输入指定的。 如果输入移动得更快、ADC S+H 时钟(器件的实际 SYSCLK)中的孔径抖动将开始显著降低 ADC 的噪声性能。 如果您绕过 PLL 并提供极低抖动时钟、您可能能够使用更高的 BW 输入。