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 输出转换为 mVolts

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/709988/ccs-tms320f28377d-converting-sdfm-output-into-mvolts

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

工具/软件:Code Composer Studio

我正在尝试使用为曼彻斯特编码配置的 AMC1306EVM Σ-Δ 模块来配置 Delfino F2837xS CPU。 我已成功接收到来自 SDFM 的16位数据,数据是一致的。 我当前的问题是我接收到的值。

当提供250mV 电压时,我从 SDFM 中只读出大约4400,这比预期的要少得多,因为它是16位有符号值,值高达32768, 由于我提供的值接近评估板支持的最大值、因此我希望输出也接近可用的最大值。 (曼彻斯特编码不是导致这里出现问题的编码;我使用 Mode_0获得了相同的结果)。 负值也是如此;我提供-250mV 电压并接收到接近-4400的负数。 结果一致;如果 I SUPPLY 电压介于-250mV 和+250mV 之间、则按比例接收-4400和+4400之间的输出。 如果输入电压超出[-250;+250]范围、则输出会以更高的不精确度成比例增长、直到我离开评估板的[-320;+320] mVolts 范围。

我已经锻造了一个简单比例、并成功地将我读入的值解释为 mVolts、它提供的读数接近实际供电电压。 但是,我从 DSP 的 SDFM 接收到的范围[-4400;+4400]过于粗略,无法进行精确的电流测量,并且 DSP 的 SDFM 输出差异很小,在解释后会导致±5mV 的误差。 换言之,对于100mV 的输入,我收到的值在高斯响铃时介于95mV 和105mV 之间。 该噪声不是输入的结果;即使输入短路且给出了严格的0、也会发生该噪声。 导线短路并检查是否存在外部干扰。 无论如何、±5mV 的差值将远高于噪声比。

对于 正输入、公式 I 锻造为 mVolts = 320.0 *(SDFM_OUTPUT - 50.0)/ 5250 (对于底片、则略有不同)。 正如我说过的、它运行相对较好、节省了±5mV 误差。

另一方面,当使用从 TI 收到的公式而不是按比例计算的公式时,以 mVolts 为单位的输出甚至不会接近实际输入。 其输出电压远远低于预期。 (正如 Σ-Δ 滤波器的输出远低于预期)。

我收到的公式为 :VIN = 320.0 *{(2 x SDFM_OUTPUT)/((256 * 256 (对于 SINC1))- 1)}

您是否会告知您可以对解释做些什么?

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

    Alexey、

    请提供以下信息

    1) 1)使用的滤波器类型是什么?

    2) 2)什么是 DOSR 设置?

    3) 3)您是否使用 PWM 同步选项来同步滤波器?

    4) 4)这是定制板(还是)您是否使用控制卡+ AMC EVM 设置?

    假设您使用的滤波器类型= Sinc3且 DOSR = 256 (根据您之前的帖子)、则在施加+250mV 时、4400的数字滤波器输出(十进制)显然不正确。 您是否检查了硬件设置? 在担心数字滤波器输出解释之前、我们首先需要克服这一障碍。

    此致、

    曼诺伊

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

    Manoj、

    1和2)配置如下:

    Sdfm_configureInputCtrl (gPeripheralNumber、filter1、mode_2);

    HLT = 0x7FFF;//过值阈值设置
    LLT = 0x0000;//低于值阈值设置

    Sdfm_configureComparator (gPeripheralNumber、filter1、SINC3、OSR_32、 HLT、 LLT);

    Sdfm_configureData_filter (gPeripheralNumber、filter1、filter_enable、SINC3、 OSR_256、 DATA_16_BIT、SHIFT_9_Bits);

    3) 3) PWM11 CMPC 用于同步滤波器。 同步工作正常、我检查了它。

    4) 4)我们使用控制卡和 AMC。 我稍后将使用原理图和图片更新该主题。

    谢谢、

    Alexey。

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

    感谢您发送配置。

    使用 Sinc3的滤波器设置、DOSR = 256、(16位模式)和

    SD 调制器差分输入=+250mV、您可以期望数字滤波器输出值大约为0x63FF

    每当 PWM11.CMPC 事件复位滤波器模块时、您应该在更正滤波器输出之前获得2个不正确的样本(对于 sinc3)。 我想知道您是否等待足够长的时间来读取正确的滤波器结果输出。 收到 PWM11.CMPC 事件后、您需要等待 Sinc3滤波器+ 5个 SDCLK 周期的延迟、然后才能读取滤波器结果。

    在您进行控制卡+ EVM 设置时、我建议您运行以下不使用 PWM 同步选项的示例。 如果即使在本示例中也得到错误的结果、则很可能是硬件设置问题。 如果是这样、则应该是与时序相关的问题、可以从软件方面轻松纠正。

    \device_support\f2837xd\examples\cpu1\sdfm_filters_sync_cpu\cpu01

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

    图片和原理图:

     

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

    您如何确保 AMC1306EVM J1的端子之间的电压差=+250mV? 您是否使用万用表探测 J1进行了确认?

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

    另一个需要检查的问题是确保是否正确为 AMC1306 EVM 加电?

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

    您还能验证 EVM 的 AMC1306器件型号吗、我们尚未发布曼彻斯特版本的评估模块。 如果是库存 EVM、则电路板上有 CMOS 输出版本。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Alexey、

    另一个检查点是确保 SD-CX 和 AMC1306 CLKIN 以相同的频率工作。 如果两者的频率不同、则可能会漏掉样本、从而导致数字滤波器输出错误。 我相信 PWM 输出同时为 SD-CX 和 AMC1306 CLKIN 计时。 但是、您的图形表示不会显示这种情况。

    此致、
    曼诺伊

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

    Manoj、

    1) 1)您说得对、我们已使用组件_with _ Manchester 编码替换了评估板上的 Σ-Δ 调制器。

    这是我们正在使用的 Σ-Δ 调制器(AMC1306E25)的数据表图片。 字母"E"将其定义为能够进行曼彻斯特编码:

    时钟源(10MHz)为 ECAP、未连接到 SD-C

    我们已使用此组件替换了评估板库存版本中的 Σ-Δ 调制器。 但是、与 MODE_0一起使用的组件库存版本也存在同样的问题。 (实际上、将组件从 MODE_0更改为 MODE_2会产生完全相同的结果)。 当我们使用库存组件时、我们已通过物理连接(从配置为 ECAP 输出的 GPIO05到配置为 SD-时钟输入的 GPIO17)为 SD-C 输入提供时钟。

    调制器可以恢复到库存版本、SD 输出仍将在4500左右的范围内;这是我们转向曼彻斯特的地方。

    2) 2)我们使用控制板的3.3V 电压为评估板供电。 我没有在上面的原理图中显示电力线、这是我的故障。

    3) 3)我们在 SDFM 复位和读取之间等待27.8 μ s、读取是根据"数据就绪"中断执行的。

    黄色通道配置为表示 SDFM 复位。

    PWM11被配置为上-下 PWM、 ePWM_TIMER_TBPRD = 2500。 黄色探针 为 PWM11通道 A、配置为 (* ePWM[gPWM_NUMBER]).cmpA.bit.cmPA = ePWM_TIMER_TBPRD - 1 (-1是使信号在示波器上更早)。 用于复位 SDFM 的 CMPC 被配置为 (* ePWM[gPWM_NUMBER])。CMPC = ePWM_TIMER_TBPRD;-因此、由于它们使用相同的计数器、"SDFM Reset"事件恰好在微小的黄色峰值的中间发生。

    蓝色通道是一个在 Sigma-Delta 读取函数处切换的 GPIO、它从"数据就绪"中断调用:

    _interrupt void Sdfm1_ISR (void)

    uint32_t sdfmReadFlagRegister = 0;

    Sigma_Delta_Read ();

    ……}

    void sigma_delta_read (void){

    静态无符号 int loopCounter1 = 0;
    int32_t read_data;

    GpioDataRegs.GPFTOGGLE.bit.GPIO161 = 1;      ===这是蓝色通道的切换。

    它们之间的差异为27.8 usecs、这应该足够了。

    4) 4)硬件电源如下:

    这是由 DSP 评估板供电的数字部件。

    这是由内部 EVB 电源供电的模拟部件。

    这是一个模拟输入示例、以外部直流电源(电池组)为例。 从 SDFM 读取的相应原始数据为:

    获取的

    void sigma_delta_read (void){
    
    static unsigned int loopCounter1 = 0;
    int32_t read_data;
    
    
    GpioDataRegs.GPFTOGGL.bit.GPIO161 = 1;
    read_data = SDFM1_read_filter1_data_16BIT;
    
    filter3_result[loopCounter1]= read_data; 

    5) 5)我认为、如果您复制我们的设置(使用 EVM 的库存版本-包括 SD-C 时钟)并使用相同的软件来检查结果的相关性、将会很方便。

    谢谢、

    Alexey。

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

    Manoj、

    仅供参考、SDFM 滤波器配置为32位

    Sdfm_configureData_filter (gPeripheralNumber、filter1、filter_enable、SINC3、
    OSR_256、DATA_32_BIT、SHIFT_0_BITS);
    
    void sigma_delt_read (void){
    
    static unsigned int loopCounter1 = 0;
    Int32_t Read_data;
    
    GpioDataRegs.gpTOGGLE.bit.GPIO161 = 1;
    read_data = SDFM1_read_filter1_data_result_3_ 32位
    ;loopFilterdata = 32位;_reset_read_read_data_read_result_read_read_read_read_read_int
    

    —输入为180mV (如上图所示使用万用表进行验证),我在 Filter3_Result 中收到以下数据[]:

    谢谢、

    Alexey。

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

    您等待的时间不够长、无法获得正确的滤波器结果。 请查看以下说明。

    PWM 重置为 SDFM 后、您必须至少等待(SinCfilter+5 SD-CX 周期的延迟)= 77.3us 才能针对您选择的滤波器类型、OSR 和 SD-CX 频率读取正确的滤波器结果。 计算如下:-

    滤波器类型= Sinc3
    DOSR = 256
    SD-CX = 10MHz

    SINC 滤波器的延迟= SINC 滤波器的阶数*(DOSR/SD-CX)
    = 3 *(256/ 10MHz)
    = 76.8us

    5 SD-CX 周期=(5/10MHz)
    = 500ns

    PWM 复位= 76.8us + 500ns = 77.3us 后、等待读取正确滤波器结果的时间

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

    Manoj、

    好的、我移到了 SINC1、并将 OSR 减小到了32。

    Sdfm_configureData_filter (gPeripheralNumber、filter1、filter_enable、SINC1、
    OSR_32、DATA_16_BIT、SHIFT_0_Bits); 

    我不应收到任何不正确的样片。 但是、我在复位后手动跳过3个样本、方法是引入一个全局变量、该变量在 PWM 中断(SDFM 复位)处设置为值3、并降低其在 SDFM 中断处理程序中的值或调用 sigma_delta_read ()

    int skip_samples = 3;
    
    __interrupt void Sdfm1_ISR (void)
    {
    uint32_t sdfmReadFlagRegister = 0;
    
    如果(skip_samples=0)
    {
    Sigma_Delta_Read ();
    }
    其他
    {
    skip_samples-;
    }
    。 。 。
    .}
    
    _interrupt void PWM11_Comparator_C_UP_DOWN_ISR (void)
    {
    SKIP_SAples = 3;
    。 。 。
    .} 

    这就是示波器现在的样子:

    输入值为180mV:

    但是、我从 SDFM 获取的读数非常低且噪声很大(请注意、值从16.0到20.0):

    您是否会就调试的下一步提出建议?

    谢谢、

    Alexey。

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

    我不知道为什么你在之前的帖子中忽略了我的建议。 如果 Sinc3 OSR = 256且 SD-CX freq = 10MHz、如果您在 PWM 复位后等待77.3us、您的问题将得到解决。 您需要更改 PWM 配置才能实现这一目的。

    关于 Sinc1滤波器的问题、OSR = 32、我想告诉大家、Sinc3滤波器的滤波器分辨率远高于 Sinc1。 请查看 PG:26图55 www.ti.com/.../amc1306e05.pdf。 由于滤波器分辨率如此之低、因此预计会出现您所观察到的噪声。

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

    Manoj、

    我们不能承受77 us 的延迟。 我们严格要求总时间为50 μ s、包括至少2次电压测量。 50us 后、电压发生变化、我们必须重置 SD 滤波器、以丢弃在前一个周期中读取的旧数据。 因此、我们只能在高达50us 的范围内运行。 在这段时间内、我们必须测量电压两次、这样 SD 的稳定时间就更短了。 我们甚至考虑将工作周期从50us 减少到25us 或更少、在这种情况下、我认为 Σ-Δ 不会是理想的电压测量解决方案。

    我知道 Sinc1是有噪声的、但即使在嘈杂的环境中、我读取的值也不是太低? 输入为180mV、输出为16-20、中值为18、这难道不是该输入的输出过低?

    谢谢、

    Alexey。

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

    我了解您的系统要求是不同的。 但是、要解决此论坛帖子中的第一个问题、您能否在读取 SDFM 数字滤波器输出之前等待77.3us? 当您施加+250mV 电压时、SDFM 滤波器输出应约为25600 (对于16位配置)、-25600 (对于-250mV)。 这将确认您的硬件和软件设置都正常。

    对于 SINF1、OSR = 32、差分输入= 180mv、理论预期数据为17.7 (约18)。 因此、您读取的值不会太低。

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

    也许我在之前的一个主题中错过了这个问题、但您要测量的电压的性质是什么? 您能否将 AMC1306时钟速率提高至20MHz? 使用原256 OSR 和 SYNC3滤波器、您应以~78kSPS 的速率获得有效数据、或每12.8 uS 获得新数据。 我想尝试并理解为什么有必要将 SD 滤波器持续复位为"显示旧数据"。 使用 AMC1311等隔离式放大器、然后将模拟输出电压馈入 C2000控制器的 SAR ADC、是否会更好?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Manoj、

    您是对的、在复位和输入为+250mV 的读数之间等待81.6 μ s、SD 滤波器的输出为25577-25581。

    谢谢、

    Alexey。

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

    Alexey、

    很高兴知道这个。 这可以确认您的硬件设置正确、观察到的数字滤波器输出与理论预期输出有良好的相关性。

    现在、就应用要求而言、正如 Tom 建议的、您需要将 SD-CX 频率提高到20MHz、这有两个方面:1)与10MHz 相比、它可以为相同的滤波器类型/ OSR 设置提供更好的 ENOB 性能。 2)减少了 Sinc 滤波器的数据速率和延迟。

    如果您计划使用 PWM 同步功能每50us 重置一次 SDFM 滤波器通道、并且希望在使用 Sinc3滤波器且 OSR = 240时读取正确的2个滤波器数据

    SDCLK = 20MHz

    OSR   = 240

    Sinc1 / Sinc2 / SincFast / Sinc3滤波器的数据速率=(240/ 20MHz)= 12.0us

    Sinc1滤波器的延迟=  (240/20MHz)= 12.0us

    Sinc2滤波器的延迟= 2*(240/20MHz)= 24.0us、其中2是正弦滤波器的阶数

    Sinc3滤波器的延迟= 3*(240/20MHz)= 36.0us、其中3是正弦滤波器的阶数

    Sincfast 滤波器的延迟= 3*(240/20MHz)= 36.0us、其中3是正弦滤波器的阶数

    在50us 窗口内、当使用 Sinc3和 OSR = 240时、您应该能够读取2个正确的滤波器数据。 我添加了250ns 以计入5个 SD-CX 周期。

    此致、

    曼诺伊

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

    Manoj、

    我们设法将 SD 时钟增加到~18MHz、从而减少了更多等待时间。 遗憾的是、在当前设置中、我们无法将 SD 时钟增加到20MHz、因为我们将在 PWM 模式下使用 eCAP 来生成时钟、它在18MHz 后生成的下一个值大约为22MHz、这超出了硬件支持的限制。 不过、我们正在考虑为此目的使用外部振荡器。

    感谢您的支持!

    Alexey。

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

    Alexey、

    很高兴知道您的问题已解决。

    我要关闭此主题。 如果您有新问题、请打开新主题。

    此致、

    曼诺伊