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.

[参考译文] AMC1306M25:AMC1303M2520和 AMC1303M2510的性能比较

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/719300/amc1306m25-peformance-comparison-with-amc1303m2520-and-amc1303m2510

器件型号:AMC1306M25
主题中讨论的其他器件:AMC1303M2520TMS320F28377S

 

客户使用 AMC1303M2520/AMC13032510和 AMC1306M25进行了性能测试。 他们发现 AMC1306在采样波形时出现噪音问题。 我们想知道发生了什么? 是否有任何有关周围电路的建议来改进它? 我们更喜欢使用 AMC1306

 

应用:PDU

DSP:TMS320F28377S

客户:TW

 

代码设置

 

Sinc 滤波器类型= sinc3
调制器数据速率= 20MHz (AMC13032520)
OSR = 256
调制器模式[MOD]= MODE1 (调制器时钟以一半的调制器数据速率运行。)
Sinc 滤波器的数据速率= 20MHz/256/2 = 39.1k 样本/秒

B)

Sinc 滤波器类型= sinc3
调制器数据速率= 10MHz (AMC13032510)
OSR = 256
调制器模式[MOD]= MODE1 (调制器时钟以一半的调制器数据速率运行。)
Sinc 滤波器的数据速率= 10MHz/256/2 = 19.5k 样本/秒

 

 

 

采样波形


 

 

系统:


 

电路:

 

 


 

 

 

 

 

 

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

    现在很好奇、但 AMC1306的 DSP 设置是什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请在此处查找 AMC1306设置。

    AMC1306设置:
    滤波器类型= sinc3
    调制器数据速率= 20MHz
    OSR = 256
    调制器模式[MOD]= MODE1 (调制器时钟以一半的调制器数据速率运行。)

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

    您好 Brian、

    在等式的 DSP 端、所有事情都相等、您需要考虑 AMC1306与 AMC1303的时钟以及每个时钟的数据保持时间。 AMC1303为 DSP 提供时钟和数据、并针对上升时钟具有7ns 的有效数据保持时间。 这应该满足 DSP 在上升时钟边沿上采样数据的5ns 建立/保持时间要求。

    AMC1306需要一个时钟源、因此根据具体的操作方式、您可能会遇到一些时序问题。 首先要注意的是、AMC1306在上升时钟边沿上只有3.5ns 的有效数据保持时间、这违反了 DSP 中的保持时间条件。 根据时钟是如何作为 SDFM 模块的时钟源的、您可能会遇到数据的进一步延迟问题、导致 DSP "发出"样本、然后提供您看到的噪声输出。 您可以尝试在 SD_CX 输入端使用 GPIO_INV 功能、以查看这是否有助于清除噪声。

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

    您好、Tom、

    我尝试在 SD_CX 输入端使用 GPIO_INV 功能。 我将采样波形取 以下值:

    代码: 
    #define ePWM_TIMER_TBPRD 65535
    void main (void){
    
    #ifdef AMC1306
    EALLOW;
    OutputXbarRegs.OUTPUT3MUX0TO15CFG.bit.MUX0 = 3;//在 Mux0
    上选择 ECAP1.Out OutputXbarRegs.OUTPUT3MUXENABX0 = 3;/GPIO=
    3-//= 3-/-针对 GPIO1.MUT0 = 1
    ;/-/= 1 -/-/-/-/-/-位/-/-
    
    
    ECap1Regs.ECCTL2.bit.CAP_APWM = 1; //启用 APWM 模式
    ECap1Regs.CAP1 = 39; //设置周期值
    ECap1Regs.CAP2 = 19; //设置比较值
    ECap1Regs.ECCLR.ALL = 0x0FF; //清除暂挂的__interrupts
    ECap1Regs.ECEINT.bit.CTR_EQ_CMP = 1;//启用比较等效整型
    
    ECap1Regs.ECCTL2.bit.TSCTRSTOP = 1;
    //---
    
    sdfm_setup();
    
    #endif
    
    //启用全局_中断 INTM
    EINT;
    //启用全局实时_中断 DBGM
    ERTM;
    
    for (;);
    }
    void InitEPwm (uint32 gPWM_number){
    uint16_t CMPC、CMPD;
    
    CMPC = 200;
    CMPD = 200;
    
    GPIO_SetupPinOptions (4、GPIO_OUTPUT、GPIO_异 步);
    GPIO_SetupPinMux (4、GPIO_MUX_CPU1、1);
    
    EALLOW;
    
    //
    //允许所有用户将所有启用的 ePWM 模块全局同步到
    //时基时钟(TBCLK)
    //
    CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=1;
    
    //
    //设置 TBCLK
    //
    (* ePWM[gPWM_Number]).TBPHS.bit.TBPHS = 0x0000;//相位为0
    (* ePWM[gPWM_NUMBER]).TBCTR = 0x0000; //清除计数器
    (* ePWM[gPWM_Number]).TBPRD = ePWM_TIMER_TBPRD;//设置计时器周期
    // 801 TBCLK。
    
    (* ePWM[gPWM_NUMBER]).CMPC = CMPC; //设置比较 C 值
    (* ePWM[gPWM_Number]).CMPD = CMPD; //设置比较 D 值
    
    (* ePWM[gPWM_Number]).cmpa.bit.cmpA = CMPC; //设置比较 C 值
    (* ePWM[gPWM_Number]).CMPB.bit.CMPB = CMPD; //设置比较 D 值
    
    //
    //设置计数器模式
    //
    (* ePWM[gPWM_Number]).TBCTL.bit.CTRMODE = TB_COUNT_UP;//向上计数
    (* ePWM[gPWM_Number]).TBCTL.bit.HSPCLKDIV = TB_DIV1;
    (* ePWM[gPWM_Number]).TBCTL.bit.CLKDIV = TB_DIV1;
    
    //
    //设置操作
    //
    (* ePWM[gPWM_Number]).AQCTLA.bit.CAU = 3; //在事件 A 上设置 PWM1A、向上
    //计数
    
    //
    //设置操作
    //
    (* ePWM[gPWM_Number]).AQCTLB.bit.CBU = 3; //在事件 A 上设置 PWM1A、向上
    //计数
    
    EDIS;
    }
    __interrupt void Sdfm1_ISR (void){
    
    static uint32 cnt = 0;
    static uint32 cnt1 = 0、cnt2 = 0、cnt3 = 0;
    tSDIFLG sdfmReadFlagRegister;
    sdfmReadFlagRegister.all = Sdfm_readFlagRegister (SDFM1);
    
    #ifdef AMC1306
    if (sdfmReadFlagRegister.bit.AF1){
    if (cnt1 < MAX_SAMPLE)
    Amp1[cnt1+]= SDFM1_READ_filter1_DATA_16BIT;
    否则
    为 cnt1 = 0;
    }
    if (sdfmReadFlagregister.bit.af2)= SDFm1+
    
    
    
    
    
    
    
    
    
    
    
    
    = 0
    
    
    ;cntMP2+= SDFMP2+= USD16t1 = 0;if (sMP2+= SDtMP1+= SDFIPL16t1 = ENTM1+= ENDCMP3+= END16t1 = SDFMP4 = END_INT.FMP4 = ENDCMP= END16FMP1;END_INF = ENFMP1 = END16RM2+= END_INF = END= END= END= SDFMP4 = END16FMP1 = END16FMP1;END= END= END16FMP1 = END= END= SDFMP1 = END
    
    #endif
    Sdfm_clearFlagRegister (SDFM1、sdfmReadFlagRegister.all);
    
    Interrupt_clearACKGroup (interrupt_ack_group5);
    }
    
    void sdfm_setup (void){
    
    INTERRUPT_clearACKGROUP (INTERRUPT_ACK_group5);
    INTERRUPT_REGTER (INT_SD1、Sdfm1_ISR);
    INTERRUPT_ENABLE (INT_SD1);
    INTERRUPT_REGTER (INT_SD2、SdFM2_ISR);
    INTERRUPT_ENABLE (INT_SD2);
    
    
    for (uint16_t pin=16;pin<=31;pin++){
    GPIO_SetupPinOptions (Pin、GPIO_input、GPIO_Async);
    GPIO_SetupPinMux (引脚、GPIO_MUX_CPU1、7);
    }
    GPIO_SetupPinOptions (17、GPIO_INPUT、GPIO_INvert);
    GPIO_SetupPinOptions (19、GPIO_INPUT、GPIO_INvert);
    GPIO_SetupPinOptions (21、GPIO_INPUT、GPIO_INvert);
    GPIO_SetupPinOptions (23、GPIO_INPUT、GPIO_INvert);
    GPIO_SetupPinOptions (25、GPIO_INPUT、GPIO_INvert);
    GPIO_SetupPinOptions (27、GPIO_INPUT、GPIO_INvert);
    GPIO_SetupPinOptions (29、GPIO_INPUT、GPIO_INvert);
    GPIO_SetupPinOptions (31、GPIO_INPUT、GPIO_INvert);
    
    Sdfm_configureInputCtrl (SDFM1、filter1、MODE_0);
    Sdfm_configureInputCtrl (SDFM1、Filter2、mode_0);
    Sdfm_configureInputCtrl (SDFM1、FILTER3、MODE_0);
    Sdfm_configureInputCtrl (SDFM1、FILTER4、MODE_0);
    // Sdfm_configureInputCtrl (SDFM2、filter1、mode_0);
    //Sdfm_configureInputCtrl (SDFM2、Filter2、 mode_0);
    //Sdfm_configureInputCtrl (SDFM2、FILTER3、MODE_0);
    //Sdfm_configureInputCtrl (SDFM2、 FILTER4、MODE_0);
    
    Sdfm_configureData_filter (SDFM1、filter1、filter_enable、SINC3、OSR_256、 DATA_16_BIT、SHIFT_9_Bits);
    Sdfm_configureData_filter (SDFM1、Filter2、filter_enable、SINC3、OSR_256、 DATA_16_BIT、SHIFT_9_Bits);
    Sdfm_configureData_filter (SDFM1、FILTER3、FILTER_ENABLE、SINC3、OSR_256、 DATA_16_BIT、SHIFT_9_Bits);
    Sdfm_configureData_filter (SDFM1、FILTER4、FILTER_ENABLE、SINC3、OSR_256、 DATA_16_BIT、SHIFT_9_Bits);
    // Sdfm_configureData_filter (SDFM2、filter1、filter_enable、 SINC3、OSR_256、DATA_16_BIT、SHIFT_9_Bits);
    // Sdfm_configureData_filter (SDFM2、 Filter2、FILTER_ENABLE、SINC3、OSR_256、DATA_16_BIT、 shift_9_bits);
    // Sdfm_configureData_filter (SDFM2、FILTER3、filter_enable、SINC3、 OSR_256、DATA_16_BIT、SHIFT_9_Bits);
    // Sdfm_configureData_filter (SDFM2、FILTER4、 FILTER_ENABLE、SINC3、OSR_256、DATA_16_BIT、SHIFT_9_Bits);
    
    Sdfm_enableMFE (SDFM1);
    // Sdfm_enableMFE (SDFM2);
    
    Sdfm_configureExternalRESET (SDFM1、FILTER_1_EXT_RESET_ENABLE、
    FILTER_2_EXT_RESET_ENABLE、
    FILTER_3_EXT_RESET_ENABLE、
    FILTER_4_EXT_RESET_ENABLE);
    
    // Sdfm_configureExternalRESET (SDFM2、FILTER_1_EXT_RESET_ENABLE、
    //FILTER_2_EXT_RESET_ENABLE、
    //FILTER_3_EXT_RESET_ENABLE、
    //FILTER_4_EXT_RESET_ENABLE);
    
    InitEPwm (11);
    // InitEPwm (12);
    
    DELAY_US (1000);
    Sdfm_configureInterrupt (SDFM1、filter1、IEH_DISABLE、IEL_DISABLE、MFIE_ENABLE、 AE_ENABLE);
    Sdfm_configureInterrupt (SDFM1、Filter2、IEH_DISABLE、IEL_DISABLE、MFIE_ENABLE、 AE_ENABLE);
    Sdfm_configureInterrupt (SDFM1、FILTER3、IEH_DISABLE、IEL_DISABLE、MFIE_ENABLE、 AE_ENABLE);
    Sdfm_configureInterrupt (SDFM1、FILTER4、IEH_DISABLE、IEL_DISABLE、MFIE_ENABLE、 AE_ENABLE);
    // Sdfm_configureInterrupt (SDFM2、filter1、IEH_DISABLE、IEL_DISABLE、 MFIE_ENABLE、AE_ENABLE);
    // Sdfm_configureInterrupt (SDFM2、Filter2、IEH_DISABLE、 IEL_DISABLE、MFIE_ENABLE、AE_ENABLE);
    // Sdfm_configureInterrupt (SDFM2、FILTER3、 IEH_DISABLE、IEL_DISABLE、MFIE_ENABLE、AE_ENABLE);
    // Sdfm_configureInterrupt (SDFM2、 FILTER4、IEH_DISABLE、IEL_DISABLE、MFIE_ENABLE、AE_ENABLE);
    
    while ((* ePWM[11]).TBCTR < 550);
    // while (* ePWM[12]).TBCTR < 550);
    
    DELAY_US (1000);
    Sdfm_enableMIE (SDFM1);
    // Sdfm_enableMIE (SDFM2);
    
    } 

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

    您好、

    欢迎来到我们的 e2e 论坛!  很遗憾看到 INV 函数不能为您解决问题。  您是否有用于共享 SDFM 的 CLK 和 DAT 输入的屏幕截图?

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

    您好、Tom、

    这是 CLK 和 DAT 的波形。

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

    看起来您在数据线路上有相当多的振铃、您可以尝试添加一个小型串联电阻器(~30-100欧姆)来查看这是否有用、小型并联电容器也可能有所帮助。 此外、我还看到 GPIO INVT 函数的 DSP 代码中有八个条目、您是反相时钟和数据还是仅反相时钟?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Tom、

    我尝试 在 数据线路上添加一个小型串联电阻器、但问题未得到解决。 图1. 显示  了 AMC1303M25的 CLK 和数据线的波形。  它在 clk 数据线上也有相当多的振铃。

    图1. AMC1303的 CLK 和数据线波形

    所以我没有尝试发现硬件问题。 然后、我找到采样波形陷阱的周期。

    EPwm11和 EPwm12 信号似乎是这样。

    图2. AMC1306的采样波形

    我禁用 PWM 模块 来同步滤波器。 问题似乎已经解决。 图3. 显示了禁用 ePWM 模块时 AMC1306的采样波形。

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

    这是我的设置 SDFM 代码。

    #include "appInclude.h"
    
    void sdfm_setup_2 (void);
    void main (void){
    
    Board_init ();
    #ifdef AMC1306
    EALLOW;
    OutputXbarRegs.OUTPUT3MUX0TO15CFG.bit.MUX0 = 3;//在 MUXEC1.Out 上选择 ECTREM1.OUTPSI.OUTPUT0
    =/OUTPMUX0;/OUTPMUX3MUX0
    =/OUTPMUX0 = 3;/ OUTPMUX0 = OUTPMUX0 = 1 -/OUTPMUX0 = OUTPMUX0 = 1;/ OUTPMUX0 = OUTPMUX0 = OUTPMUX0 = 1—
    
    
    —————————————/GPMUX3MUX3MUX0—————————/GPMUX3MUX3MUX3MUX0———
    ECap1Regs.ECCTL2.bit.CAP_APWM = 1; //启用 APWM 模式
    //ECap1Regs.CAP1 = 9; //设置周期值(20MHz)
    //ECap1Regs.CAP2 = 4; //设置比较值(20MHz)
    //ECap1Regs.CAP1 = 19; //设置周期值(10MHz)
    //ECap1Regs.CAP2 = 9; //设置比较值(10MHz)
    ECap1Regs.CAP1 = 39; //设置周期值(5MHz)
    ECap1Regs.CAP2 = 19; //设置比较值(5MHz)
    ECap1Regs.ECCLR.ALL = 0x0FF; //清除暂挂的__interrupts
    ECap1Regs.ECEINT.bit.CTR_EQ_CMP = 1;//启用比较等效整型
    
    ECap1Regs.ECCTL2.bit.TSCTRSTOP = 1;
    //---
    
    sdfm_setup_2 ();
    
    //启用全局_中断 INTM
    EINT;
    //启用全局实时_中断 DBGM
    ERTM;
    
    for (;);
    }
    void sdfm_setup_2 (void){
    
    INTERRUPT_clearACKGROUP (INTERRUPT_ACK_group5);
    INTERRUPT_REGTER (INT_SD1、Sdfm1_ISR);
    INTERRUPT_ENABLE (INT_SD1);
    INTERRUPT_REGTER (INT_SD2、SdFM2_ISR);
    INTERRUPT_ENABLE (INT_SD2);
    
    
    for (uint16_t pin=16;pin<=31;pin++){
    GPIO_SetupPinOptions (Pin、GPIO_input、GPIO_Async);
    GPIO_SetupPinMux (引脚、GPIO_MUX_CPU1、7);
    }
    GPIO_SetupPinOptions (17、GPIO_INPUT、GPIO_INvert);
    GPIO_SetupPinOptions (19、GPIO_INPUT、GPIO_INvert);
    GPIO_SetupPinOptions (21、GPIO_INPUT、GPIO_INvert);
    GPIO_SetupPinOptions (23、GPIO_INPUT、GPIO_INvert);
    GPIO_SetupPinOptions (25、GPIO_INPUT、GPIO_INvert);
    GPIO_SetupPinOptions (27、GPIO_INPUT、GPIO_INvert);
    GPIO_SetupPinOptions (29、GPIO_INPUT、GPIO_INvert);
    GPIO_SetupPinOptions (31、GPIO_INPUT、GPIO_INvert);
    
    Sdfm_configureInputCtrl (SDFM1、filter1、MODE_0);
    Sdfm_configureInputCtrl (SDFM1、Filter2、mode_0);
    Sdfm_configureInputCtrl (SDFM1、FILTER3、MODE_0);
    Sdfm_configureInputCtrl (SDFM1、FILTER4、MODE_0);
    Sdfm_configureInputCtrl (SDFM2、filter1、MODE_0);
    Sdfm_configureInputCtrl (SDFM2、Filter2、mode_0);
    Sdfm_configureInputCtrl (SDFM2、FILTER3、MODE_0);
    Sdfm_configureInputCtrl (SDFM2、FILTER4、MODE_0);
    
    Sdfm_configureData_filter (SDFM1、filter1、filter_enable、SINC3、OSR_256、 DATA_16_BIT、SHIFT_9_Bits);
    Sdfm_configureData_filter (SDFM1、Filter2、filter_enable、SINC3、OSR_256、 DATA_16_BIT、SHIFT_9_Bits);
    Sdfm_configureData_filter (SDFM1、FILTER3、FILTER_ENABLE、SINC3、OSR_256、 DATA_16_BIT、SHIFT_9_Bits);
    Sdfm_configureData_filter (SDFM1、FILTER4、FILTER_ENABLE、SINC3、OSR_256、 DATA_16_BIT、SHIFT_9_Bits);
    Sdfm_configureData_filter (SDFM2、filter1、filter_enable、SINC3、OSR_256、 DATA_16_BIT、SHIFT_9_Bits);
    Sdfm_configureData_filter (SDFM2、Filter2、filter_enable、SINC3、OSR_256、 DATA_16_BIT、SHIFT_9_Bits);
    Sdfm_configureData_filter (SDFM2、FILTER3、FILTER_ENABLE、SINC3、OSR_256、 DATA_16_BIT、SHIFT_9_Bits);
    Sdfm_configureData_filter (SDFM2、FILTER4、FILTER_ENABLE、SINC3、OSR_256、 DATA_16_BIT、SHIFT_9_Bits);
    
    Sdfm_enableMFE (SDFM1);
    Sdfm_enableMFE (SDFM2);
    
    Sdfm_configureExternalreset (SDFM1、FILTER_1_EXT_RESET_DISABLE、FILTER_2_EXT_RESET_DISABLE、FILTER_3_EXT_RESET_DISABLE、FILTER_4_EXT_RESET_DISABLE);
    Sdfm_configureExternalreset (SDFM2、FILTER_1_EXT_RESET_DISABLE、FILTER_2_EXT_RESET_DISABLE、FILTER_3_EXT_RESET_DISABLE、FILTER_4_EXT_RESET_DISABLE);
    
    // InitEPwm (11);
    // InitEPwm (12);
    
    DELAY_US (1000);
    Sdfm_configureInterrupt (SDFM1、filter1、IEH_DISABLE、IEL_DISABLE、MFIE_ENABLE、 AE_ENABLE);
    Sdfm_configureInterrupt (SDFM1、Filter2、IEH_DISABLE、IEL_DISABLE、MFIE_ENABLE、 AE_ENABLE);
    Sdfm_configureInterrupt (SDFM1、FILTER3、IEH_DISABLE、IEL_DISABLE、MFIE_ENABLE、 AE_ENABLE);
    Sdfm_configureInterrupt (SDFM1、FILTER4、IEH_DISABLE、IEL_DISABLE、MFIE_ENABLE、 AE_ENABLE);
    Sdfm_configureInterrupt (SDFM2、filter1、IEH_DISABLE、IEL_DISABLE、MFIE_ENABLE、 AE_ENABLE);
    Sdfm_configureInterrupt (SDFM2、Filter2、IEH_DISABLE、IEL_DISABLE、MFIE_ENABLE、 AE_ENABLE);
    Sdfm_configureInterrupt (SDFM2、FILTER3、IEH_DISABLE、IEL_DISABLE、MFIE_ENABLE、 AE_ENABLE);
    Sdfm_configureInterrupt (SDFM2、FILTER4、IEH_DISABLE、IEL_DISABLE、MFIE_ENABLE、 AE_ENABLE);
    
    // while ((* ePWM[11]).TBCTR < 550);
    // while (* ePWM[12]).TBCTR < 550);
    
    DELAY_US (1000);
    Sdfm_enableMIE (SDFM1);
    Sdfm_enableMIE (SDFM2);
    
    } 

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

    你好!

    这真的很酷!  我很高兴看到您让它正常工作。