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**** 1693050 points
Other Parts Discussed in Thread: CONTROLSUITE, AMC1306E25, TMDSDOCK28379D, AMC1306EVM, C2000WARE, AMC1306M25
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/694143/ccs-tms320f28377d-i-need-help-with-sdfm

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

工具/软件:Code Composer Studio

我正在尝试掌握 TI F28377D 芯片的 SDFM、暂时运行单核应用(未使用内核2)。 我的当前设置基于 controlSUITE 提供的 sdfm_PWM_SYNC_cpu01示例、并进行了以下调整:

  1.    仅连接了 SD1_D1、SD1_D2、SD1_C1和 SD1_C2 (GPIO 16至19)。 滤波器2和  
  2. 数据采用曼彻斯特编码,因此 Sdfm_configureInputCtrl()接收 mode_2作为输入。
  3. 时钟、即使曼彻斯特编码不需要时钟、也由其中一个 eCAP 模块提供。

我已将电压源连接到设置、以模拟 SD 的某种输入、我在相应的 DSP 桥臂上看到了一些曼彻斯特编码数据。 但是、在运行此示例(或者、对于任何 sdfm 示例)时、我完成 Sdfm1_ISR 例程中第一个结果的读取、并进入以下陷阱:

_interrupt void Sdfm1_ISR (void)
{
uint32_t sdfmReadFlagRegister = 0;
静态 uint16_t loopCounter1 = 0;

//
//读取 SDFM 标志寄存器(SDIFLG)
//
sdfmReadFlagRegister = Sdfm_readFlagRegister (gPeripheralNumber);

if (loopCounter1 <= MAX_SAples)
{
//
//读取每个 SDFM 滤波器输出并将其存储在相应的滤波器中
//结果数组
//
filter1_Result[loopCounter1]= SDFM1_READ_filter1_DATA_16BIT;
Filter2_Result[loopCounter1]= SDFM1_READ_Filter2_DATA_16BIT;
Filter3_Result[loopCounter1]= SDFM1_READ_FILTER3_DATA_16BIT;
Filter4_Result [loopCounter1++]= SDFM1_READ_FILTER4_DATA_16BIT;

//
//清除 SDFM 标志寄存器
//
Sdfm_clearFlagRegister (gPeripheralNumber、sdfmReadFlagRegister);
sdfmReadFlagRegister = Sdfm_readFlagRegister (gPeripheralNumber); 

⇐此处 sdfmReadFlagRegister 为2147484416

if (sdfmReadFlagRegister!= 0x0)
{
ESTOP0; 

⇐当然、我在这里结束了

}

我尝试禁用 fiters 2、3和4、但没有成功。 从这里继续的方法是什么。

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

    当使用曼彻斯特模式(MODE = 2)时、SD-Cx 应保持未连接状态。 为什么您将 ECAP 模块连接到 SD-CX 时钟? 这可能会导致意外行为。

    当 sdfmReadFlagRegister = 0x80000300时、它在 filter1 / 2上显示调制器故障。 这可能是因为 SD-CX 在不应该时被输入时钟馈送。

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

    感谢你的答复。 我已物理断开时钟连接、但误差保持不变。 我想、不是由(仅)时钟负责。

    您的答复中还提出了其他问题:

    首先、controlSUITE 随附的示例将 PWM11配置为 Σ-Δ 模块1的同步信号。 技术参考手册(SPRUHM8G)中也会显示相同的 PWM11。 是否需要使用 PWM11? 我是否可以路由任何其他用于复位 SDFM 的信号(例如、ECap5)? 如果是,如何配置路由?

    其次、我使用曼彻斯特编码、我想将 SDFM 与我的选择的任意 PWM 同步(在我的例子中为 PWM1)。 在同一技术参考手册中、同步数据滤波器的方案显示为"和":

    -但在同一手册中,同步设置的说明中使用了“或”一词:

    这两个选项中的哪一个是正确的同步方式? 能否仅使用 MFE 位同步 SDFM?

    第三、是否有方法检查滤波器是否接收数据或时钟? 我尝试轮询 SDFM[gPeripheralNumber]->SDIFLG.bit.AF1位、但没有成功。

    此外、上面引用的相同方案包含一些 CLK_OUT 信号。 我是否可以将其路由到任何位置、如果是、如何进行路由?

    谢谢、

    Alexey。

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

    1) 1)您使用的是什么 SD 调制器? 许多 SD 调制器不支持曼彻斯特模式。 您是否确保您的 SD 调制器支持曼彻斯特模式? 如果 SDFM (SD-Dx)未接收到曼彻斯特编码位流、它将报告调制器故障(mfx)

    2) 2)必须使用 PWM11来同步 SDFM1。 不能使用 PWM1。
    PWM11.CMPC 同步 SDFM1.filter1和 SDFM1.Filter2
    PWM12.CMPD 同步 SDFM1.FILTER3和 SDFM1.FILTER4

    注意:您不需要通过外部连接将 PWM11连接到电路板上的 SDFM 来实现同步、因为 PWM11具有到 SDFM1的内部连接

    3) 3) MFE 位可用于通过软件进行同步。 您可以使用其中一种方法来执行同步。 但是、我们的许多客户更喜欢 PWM 方法、因为它允许他们准确地对与其控制环路相关的事件进行计时。

    此致、
    曼诺伊
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    产品中使用的 SD 调制器是 TI AMC1306E25、它确实支持曼彻斯特模式。 根据连接到 DSP GPIO 16和18的示波器、这些 GPIO 被配置为带有 MUX 7的异步输入(SD 数据输入)、与 sdfm_PWM_SYNC_cpu01所建议的完全一样、我看到曼彻斯特编码数据到达它们。 我在我的设置中仅使用滤波器1。

    重新配置设置并重新运行测试后、我稍后将回复此主题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的。 AMC1306E25支持符合 IEEE 802.3标准的曼彻斯特编码。 SDFM 需要 G.E Thomas 曼彻斯特编码信号。

    AMC1306E25曼彻斯特编码位流看起来会为"1"提供低到高的切换脉冲、为"0"提供高到低的切换脉冲、而 F28377x / F2807x 似乎支持为"1"提供高到低的切换脉冲、为"0"提供低到高的切换脉冲。 在曼彻斯特模式下、通过将 GPIO 输入反相至 SD-Dx 可以轻松解决此问题。

    请告知我们是否一切正常。

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

    嗯、问题仍然存在。

    我已将 PWM11配置为 SDFM 的同步源。 曼彻斯特数据只到达 GPIO 16和18、例如 SD1_D1和 SD1_D2。 由于在曼彻斯特模式下工作的 SDFM 不需要时钟、因此我已将 GPIO 17和19配置为输入(MUX 0)、而不是 SD 时钟(MUX 7)。 所有4个筛选器均已配置和启用、但数据仅到达其中的2个。

    从上面的解释中可以看出、SDIFLG 寄存器中相应的 MF 位会上升。 但是、MF3和 MF4位保持为0、并且永远不会命中条件断点。 您是否会建议如何调试此问题?

    我仍然想问的另一个问题是我上面提到的 CLK_OUT 信号(请参阅文章中的最后一个问题以及手册的屏幕截图)。  我是否可以将其路由到任何位置、如果是、如何进行路由?

    我在原型中使用控制卡 TMDSDOCK28379D。

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

    解决调制器故障(MFx)问题后、让我们担心 PWM11同步问题。

    其他问题:-

    1) 1)您是否使用 PWM 为 AMC1306x 计时?

    2) 2)仿真挂起(到达断点时)时、PWM 的行为是什么?

    3) 3)您是否在 filter1和 filter2上获得有效的已过滤数据?

    4) 4) GPIO17和19是否仍然接收到有效时钟? (或)被拉至高电平(或)低电平。

    CLK_OUT 不可供用户使用、它是一个内部信号。 我们将从图中删除该 CLK_OUT 信号、以避免这种混淆。

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

    Manoj、

    1) 1)我已将 ECAP 5配置为 PWM、并将其用作 AMC1306x 的时钟发生器(10MHz)。 SD 滤波器接收来自 AMC1306x 的曼彻斯特编码信号。 SD 滤波器时钟输入未连接到任何外部时钟。 滤波器仅接收数据、但不接收时钟。

    例如、该曼彻斯特编码的数据流是从 GPIO 16捕获的:

    2) 2) PWM 信号(电机相位、20KHz)保持高电平或低电平、具体取决于何时达到断点。 我正在使用硬件断点。

    3) 3)否、即使数据已路由到 Filter1、也没有数据。 过滤器2已配置、但未接收任何数据。 这两个寄存器的 MFS 位都为0。 AF 位也是0。

    4) 4) GPIO 17和19配置为 GPIO (MUX 0)、而不是 SD 时钟(MUX 7)。 他们没有接收任何时钟、我没有对其进行路由。 我通过以下方式对其进行配置:

    EALLOW;
    对于(PIN=16;PIN<20;PIN++)//实际 SD1_C2为19
    {
    GPIO_SetupPinOptions (Pin、GPIO_input、GPIO_Async);
    IF ((引脚==17)||(引脚==19))
    GPIO_SetupPinMux (引脚、GPIO_MUX_CPU1、0);// GPIO
    其他
    GPIO_SetupPinMux (引脚、GPIO_MUX_CPU1、7);// SDFM
    }
    EDIS; 

    是否可以获得 TeamViewer 或 WebEx 支持会话?

    谢谢、

    Alexey。

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

    我认为我们仍然应该能够通过帖子解决这个问题。

    我相信、当您到达仿真器断点时、来自 ECAP 的 AMC1306x 的时钟将停止。 这很可能是问题的根本原因。 当调制器的时钟停止时、调制器和 SDFM 都将无法工作。

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

    Manoj、

    我不认为原因是硬件断点。

    我尝试测试*SDFM[gPeripherialNumber]->SDIFLG.BITS 是否为1。 使用 AF1、af2和所有 MF*位进行测试。 代码示例如下:

    void main (void){
    
    。 。 。 。//此处显示所有设置
    
    对于(;;;){//主程序循环
    
    IF (SDFM[gPeripheralNumber]->SDIFLG.bit.AF1!= 0)
    {
    Sigma_Delta_Read ();
    }
    }
    。 。 。
    .}
    
    //数据读取函数
    void sigma_delta_read (void){
    
    unsigned long sdfmReadFlagRegister = 0;
    静态无符号 int loopCounter1 = 0;
    
    //寄存器 SDIFLG 读数
    SDFMReadFlagRegister = Sdfm_readFlagRegister (1);
    filter1_Result[loopCounter1]= SDFM1_READ_filter1_DATA_16BIT;
    Filter2_Result[loopCounter1]= SDFM1_READ_Filter2_DATA_16BIT;
    Filter3_Result[loopCounter1]= SDFM1_READ_FILTER3_DATA_16BIT;
    Filter4_Result[loopCounter1]= SDFM1_READ_FILTER4_DATA_16BIT;
    
    loopCounter1 = loopCounter1 + 1;
    if (loopCounter1 = MAX_SAples) loopCounter1 = 0;
    
    //清除 SDIFLG 寄存器
    Sdfm_clearFlagRegister (1、sdfmReadFlagRegister);
    
    //寄存器 SDIFLG 读数
    sdfmReadFlagRegister = Sdfm_readFlagRegister (1);
    } 

    放置在 sigma_delta_read()内部的断点从未命中。 它的存在不影响程序的运行、我可以看到数据和 PWM 仍在运行、但 AF1位(在上面的示例中)保持为0、这意味着 SDFM 上不存在新数据。  

    对于 af2也是如此、最令我困扰的是 MF 位、即使是配置但物理上不接收数据的 MF3和 MF4也是如此。 该模块不检测任何错误、但也不检测任何数据、即使数据流是如此、GPIO 16和18也使用 GPIO_SetupPinOptions (Pin、GPIO_input、GPIO_异 步| GPIO_invert)进行配置; (添加了 GPIO_Invert 标志以解决数据流的反极性问题)以及由 ECAP 运行生成的 PWM 和时钟。  如果我在随机点暂停程序、SDIFLG 为0x00000000。 如果我使用 sigma_delta_read ()而不是中断来调试程序,则该函数永远不会运行;如果我使用中断,它永远不会被触发。

    谢谢、

    Alexey。

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

    您似乎面临基本的硬件(或)软件设置问题。

    您的代码是否适用于 mode0? 此外、您如何配置 SDFM?

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

    Manoj、

    大多数设置都是从 sdfm_PWM_SYNC 示例复制的。 中断只是复制粘贴、因此不会显示在这里。


    EALLOW;//这是写入 EALLOW 受保护寄存 器 PieVectTable.SD1_INT =&Sdfm1_ISR;// SDFM 1 PieVectTable.SD2_INT =&SdfFM2_ISR;// SDFM 2 EDIS;//这是禁用写入 EALLOTTable.SD2_INT 的必需的;// 启用/ INT_CPU; // // //在 PIE 中启用 SDFM INTn:组5 __interrupt 9-10 // PieCtrlRegs.PIEIER5.bit.INTx9 = 1;//启用 SDFM1中断 PieCtrlRegs.PIEIER5.bit.INTx10 = 1;//启用 SDFM2中断 启用 Sdfm_Control Mode;// 仅用于配置控制模块输入/配置控制引脚 曼彻斯特编码 // Sdfm_configureInputCtrl (gPeripheralNumber、filter1、mode_2);//模式0是 clk =>数据速率 Sdfm_configureInputCtrl (gPeripheralNumber、Filter2、mode_2);//模式1为 clk =1/2数据速率 Sdfm_configureInputCtrl (gPeripheralNumber、FILTER3、MODE_2);//模式2为曼彻斯特 Sdfm_configureInputCtrl (gPeripheralNumber、FILTER4、MODE_2);//模式3是 clk == 2 *数据速率 // //比较器模块 // HLT = 0x7FFF;//过值阈值设置 LLT = 0x0000;//低于值阈值设置 // //配置比较器模块的比较器滤波器类型和比较器的 OSR //值、更高的阈值、更低的阈值 // Sdfm_configureComparator (gPeripheralNumber、filter1、SINC3、OSR_32、 HLT、LLT); Sdfm_configureComparator (gPeripheralNumber、Filter2、SINC3、OSR_32、 HLT、LLT); Sdfm_configureComparator (gPeripheralNumber、FILTER3、SINC3、OSR_32、 HLT、LLT); Sdfm_configureComparator (gPeripheralNumber、FILTER4、SINC3、OSR_32、 HLT、LLT); // //启用主过滤器位:除非该位被置位,否则所有过滤器模块都没有 //可以启用。 当主滤波器时、所有滤波器模块都同步 在启用各个滤波器模块后、//位被启用。 所有滤波器 //模块在之前启用主过滤器位时异步 //启用单个过滤器模块。 // Sdfm_enableMFE (gPeripheralNumber); // //数据过滤器模块 // //配置数据过滤器模块过滤器类型、OSR 值和 //启用/禁用数据过滤器 // Sdfm_configureData_filter (gPeripheralNumber、filter1、filter_enable、SINC3、 OSR_256、DATA_16_BIT、SHIFT_9_Bits); Sdfm_configureData_filter (gPeripheralNumber、Filter2、filter_enable、SINC3、 OSR_256、DATA_16_BIT、SHIFT_9_Bits); Sdfm_configureData_filter (gPeripheralNumber、FILTER3、FILTER_ENABLE、SINC3、 OSR_256、DATA_16_BIT、SHIFT_9_Bits); Sdfm_configureData_filter (gPeripheralNumber、FILTER4、FILTER_ENABLE、SINC3、 OSR_256、DATA_16_BIT、SHIFT_9_Bits); // // PWM11.CMPC、PWM11.CMPD、PWM12.CMPC 和 PWM12.CMPD 信号不能同步 //过滤器。 此示例中未使用此选项。 // Sdfm_configureExternalreset (gPeripheralNumber、 FILTER_1_EXT_RESET_ENABLE、 FILTER_2_EXT_RESET_ENABLE、 FILTER_3_EXT_RESET_ENABLE、 FILTER_4_EXT_RESET_ENABLE); // //初始化 ePWM // InitEPwm (gPWM_number); // //启用中断 // //可以使用此函数启用/禁用以下 SDFM 中断。 //启用/禁用比较器高阈值 //启用/禁用比较器低阈值 //启用/禁用调制器时钟故障 //启用/禁用过滤器确认 // Sdfm_configureInterrupt (gPeripheralNumber、filter1、IEH_DISABLE、 IEL_DISABLE、MFIE_ENABLE、AE_ENABLE); Sdfm_configureInterrupt (gPeripheralNumber、Filter2、IEH_DISABLE、 IEL_DISABLE、MFIE_ENABLE、AE_ENABLE); Sdfm_configureInterrupt (gPeripheralNumber、FILTER3、IEH_DISABLE、 IEL_DISABLE、MFIE_DISABLE、AE_DISABLE); Sdfm_configureInterrupt (gPeripheralNumber、FILTER4、IEH_DISABLE、 IEL_DISABLE、MFIE_DISABLE、AE_DISABLE); <=这里,我尝试了多种配置方法,包括启用或禁用 AE 和 MFIE。 while ((* ePWM[gPWM_NUMBER]).TBCTR < 550); // //启用主中断,以便可以触发任何过滤器中断 //通过 SDFM 中断到 CPU // Sdfm_enableMIE (gPeripheralNumber); // 启用全局中断和更高优先级的实时调试事件: // EINT;//启用全局中断 INTM ERTM;//启用全局实时中断 DBGM // //在 CAP1上设置 APWM 模式,设置周期和比较寄存器<=这是 SD 器件的时钟 // ECap1Regs.ECCTL2.bit.CAP_APWM = 1; //启用 APWM 模式 ECap1Regs.CAP1 = ECAP_TIMER_PRD; //设置周期值 ECap1Regs.CAP2 = ECAP_TIMER_CMP; //设置比较值 ECap1Regs.ECCLR.ALL = 0x0FF; //清除暂挂的__interrupts ECap1Regs.ECEINT.BIT.CTR_EQ_CMP = 1;//启用比较等效整型 // //启动计数器 // ECap1Regs.ECCTL2.bit.TSCTRSTOP = 1; HAL.tick = 0; HAL.max_tick = 2480; Sdfm1Regs.SDIFLGCLR.ALL |= 0x00000F00; 。 。 。 。 。 。 // // InitEPwm -初始化指定的 ePWM 设置 // void InitEPwm (uint16_t gPWM_number) { uint16_t CMPC、CMPD; CMPC = 1250; CMPD = 1250; #ifdef CPU1 GPIO_SetupPinOptions (20、GPIO_OUTPUT、GPIO_异 步);//它是 GPIO 0、已更改为20 GPIO_SetupPinMux (20、GPIO_MUX_CPU1、5);//它是 GPIO 0、已更改为20 #endif 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;//将定时器周期设置为2500 (* 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 上设置 PWM11A、向上 //计数 // //设置操作 // (* ePWM[gPWM_Number]).AQCTLB.bit.CBU = 3; //在事件 A 上设置 PWM11A、向上 //计数 EDIS; }

    我没有尝试模式0、因为它需要更改硬件、我只能在星期日执行。

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

    这很奇怪。 假设我们在 GPIO16和18中接收到一个位流。 SDFM 滤波器未单独启用(或)主滤波器未启用。

    请在存储器窗口中向我发送存储器窗口 SDFM1寄存器的快照(或)下载从0x5E00 - 0x5E80开始的内容? 此外、请分享 Sdfm_configurePins 函数的内容?

    此外、您能否尝试禁用 PWM SDSYNC 功能、然后重试。

    Sdfm_configureExternalreset (gPeripheralNumber、filter_1_EXT_RESET_disable、
    FILTER_2_EXT_RESET_DISABLE、
    FILTER_3_EXT_RESET_DISABLE、
    FILTER_4_EXT_RESET_DISABLE);

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

    Manoj、

    当我禁用 PWM SDSYNC 时、SDIFLG 寄存器变为0x80003300。 通道1和2的数据位和故障位都被置位。

    这是禁用 PWM SDSync 时 SD 寄存器的存储器窗口内容:

    Sdfm1Regs、Sdfm1Regs_SDIFLG
    33008000
    Sdfm1Regs_SDIFLGCLR
    00000000 0000
    Sdfm1Regs_SDCTL
    20000000
    Sdfm1Regs_SDMFILEN
    0800330000000000 0000000000000000 0000 0000 0000000000000000 0000
    Sdfm1Regs_SDCTLPARM1
    F002
    Sdfm1Regs_SDDFPARM1
    0FFF
    Sdfm1Regs_SDIPARM1
    4800
    Sdfm1Regs_SDCMPH1
    7FFF
    Sdfm1Regs_SDCMP1Regs_SDCMP0000
    0000 0000
    
    
    0000 0000 0000 0001 0001
    000000000000 0000
    Sdfm1Regs_SDCTLPARM2
    F002
    Sdfm1Regs_SDDFPARM2
    0FFF
    Sdfm1Regs_SDIPARM2
    4800
    Sdfm1Regs_SDCMPH2
    7FFF
    Sdfm1Regs_SDCMPL2
    
    Sdfm1Regs_SDCMP2 0000
    0000 0000 0000 0002 Sdfm1Regs_SDCMP2 0000 0000 0000 0002 0002 0002 0002 0002 0002 0002 0002 0002 0002 0002 0002 0002 0002 0002 0002 0002 0002
    
    000000000000 000000000000 0000
    0000 Sdfm1Regs_SDCTLPARM3
    0002
    Sdfm1Regs_SDDFPARM3
    0DFF
    Sdfm1Regs_SDIPARM3
    4800
    Sdfm1Regs_SDCMP7FFF
    
    Sdfm1Regs_SDCMPL3
    
    寄存器0000_SDQ31000000 Sdfm1Regs_SDSS_SDQ31000000
    0000 0003
    寄存器0000_SDCdfm1SDQ3SS_SDQ31000003 0000000 0000 0000 0003 0003寄存器
    000000000000 000000000000 0000
    0000 Sdfm1Regs_SDCTLPARM4
    0002
    Sdfm1Regs_SDDFPARM4
    0DFF
    Sdfm1Regs_SDIPARM4
    4800
    Sdfm1Regs_SDCMPH4
    7FFF
    Sdfm1Regs_SDCML4
    
    
    寄存器0000_SDQ4 0000_SDQ4N
    0000000 0000000 0000 0004 SDCfm1Regs_SDQ4_SDQ4N 0004 0000000 0004 0004 000F 0000000 0004 000F 0000000 000F 000F 0000000 000F
    000F 000F 000F
    000000000000 000000000000 0000000000000000 000000000000 0000000000000000 000000000000 0000
    000000000000 000000000000 0000000000000000 000000000000 0000000000000000 000000000000 0000000000000000 000000000000 0000
    000000000000 000000000000 0000000000000000 000000000000 0000000000000000 000000000000 0000000000000000 0000
    Sdfm2Regs、Sdfm2Regs_SDIFLG
    00000000
    Sdfm2Regs_SDIFLGCLR
    00000000 0000
    Sdfm2Regs_SDCTL
    00000000
    Sdfm2Regs_SDMFILEN
    00000000000000000000 0000000000000000 000000000000 0000
    0000 Sdfm2Regs_SDCTLPARM1
    0000
    Sdfm2Regs_SDDFPARM1
    0000
    Sdfm2Regs_SDIPARM1
    0000
    Sdfm2Regs_SDCMPH1
    7FFF
    Sdfm2Regs_SDCMPQ1
    
    0000 Sdfm2Regs_SDCMP0000
    
    0000 0000 0000 0000 0000 0000 0000
    000000000000 000000000000 0000
    0000 Sdfm2Regs_SDCTLPARM2
    0000
    Sdfm2Regs_SDDFPARM2
    0000
    Sdfm2Regs_SDIPARM2
    0000
    Sdfm2Regs_SDCMPH2
    7FFF
    Sdfm2Regs_SDCMPL2
    
    Sdfm2Regs_SD2Regs_SDP0000 0000
    
    0000 0000 0000 0000 0000 Sdfm2Regs_SDM2 0000 0000 0000 0000 0000
    000000000000 000000000000 0000
    0000 Sdfm2Regs_SDCTLPARM3
    0000
    Sdfm2Regs_SDDFPARM3
    0000
    Sdfm2Regs_SDIPARM3
    0000
    Sdfm2Regs_SDCMP7FFF
    
    Sdfm2Regs_SDCMPL3 Sdfm2Regs_SDM3
    
    
    
    0000 0000 0000 0000 Sdfm2Regs_SDM3 0000 0000 0000 0000 0000
    000000000000 000000000000 0000
    0000 Sdfm2Regs_SDCTLPARM2
    0000
    Sdfm2Regs_SDDFPARM2
    0000
    Sdfm2Regs_SDIPARM2
    0000
    Sdfm2Regs_SDCMPH2
    7FFF
    Sdfm2Regs_SDCMPL2
    
    Sdfm2Regs_SD2Regs_SDP0000 0000
    
    0000 0000 0000 0000 0000 Sdfm2Regs_SDM2 0000 0000 0000 0000 0000
    000000000000 000000000000 0000
    0000 Sdfm2Regs_SDCTLPARM3
    0000
    Sdfm2Regs_SDDFPARM3
    0000
    Sdfm2Regs_SDIPARM3
    0000
    Sdfm2Regs_SDCMP7FFF
    
    Sdfm2Regs_SDCMPL3 Sdfm2Regs_SDM3
    
    
    
    0000 0000 0000 0000 Sdfm2Regs_SDM3 0000 0000 0000 0000 0000
    000000000000 000000000000 0000
    0000 Sdfm2Regs_SDCTLPARM2
    0000
    Sdfm2Regs_SDDFPARM2
    0000
    Sdfm2Regs_SDIPARM2
    0000
    Sdfm2Regs_SDCMPH2
    7FFF
    Sdfm2Regs_SDCMPL2
    
    Sdfm2Regs_SD2Regs_SDP0000 0000
    
    0000 0000 0000 0000 0000 Sdfm2Regs_SDM2 0000 0000 0000 0000 0000
    000000000000 000000000000 0000
    0000 Sdfm2Regs_SDCTLPARM3
    0000
    Sdfm2Regs_SDDFPARM3
    0000
    Sdfm2Regs_SDIPARM3
    0000
    Sdfm2Regs_SDCMP7FFF
    
    Sdfm2Regs_SDCMPL3 Sdfm2Regs_SDM3
    
    
    
    0000 0000 0000 0000 Sdfm2Regs_SDM3 0000 0000 0000 0000 0000
    000000000000 000000000000 0000
    0000 Sdfm2Regs_SDCTLPARM4
    0000
    Sdfm2Regs_SDDFPARM4
    0000
    Sdfm2Regs_SDIPARM4
    0000
    Sdfm2Regs_SDCMPH4
    7FFF
    Sdfm2Regs_SDCML4
    
    
    
    0000 A4 Sdfm2Regs_SDCMP0000 0000 0000 0000 0000 0000
    000000000000 000000000000 0000 

    这是引脚配置功能:

    // Sdfm_configurePins -配置 SDFM GPIO
    //
    void Sdfm_configurePins (void)
    {
    
    
    
    uint16_t pin;
    EALLOW;
    对于(PIN=16;PIN<20;PIN++)//实际 SD1_C2为19
    {
    GPIO_SetupPinOptions (Pin、GPIO_input、GPIO_异 步| GPIO_invert);
    IF ((引脚==17)||(引脚==19))
    GPIO_SetupPinMux (引脚、GPIO_MUX_CPU1、0);// GPIO
    其他
    GPIO_SetupPinMux (引脚、GPIO_MUX_CPU1、7);// SDFM
    }
    EDIS;
    
    //配置 EPWM11A 和 B
    EALLOW;
    GpioCtrlRegs.GPAPUD.bit.GPIO20 = 1;//禁用 GPIO20上的上拉电阻(EPWM11A)
    GpioCtrlRegs.GPAMUX2.bit.GPIO20 = 5;//将 GPIO20配置为 EPWM11A
    GpioCtrlRegs.GPAPUD.bit.GPIO21 = 1;//禁用 GPIO21上的上拉电阻(EPWM11B)
    GpioCtrlRegs.GPAMUX2.bit.GPIO21 = 5;//将 GPIO21配置为 EPWM11B
    EDIS;
    
    
    }
    

    谢谢、

    Alexey。

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

    最好查看 filter1和 Filter2的数据确认位设置。

    如前所述、使用可能会看到 Mfx 位被置位、因为在仿真停止时、为 SD 调制器提供时钟的 PWM/ECAP 已停止计时。

    请检查 ECCTL1.FREE_SOFT 设置? 确保该位(ECCTL1.FREE_SOFT)设置为2 (或) 3。

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

    Manoj、

    从曼彻斯特编码器迁移到另一个板(TI AMC1306EVM)后、我已在轮询模式下成功接收到滤波器中的 SD 数据。 但仍有几个问题需要回答:

    1) 1)为了执行轮询、我必须寄存中断并将中断过程保持为空、否则我轮询的位永远不会被置位。

    这是我的 main()函数的一部分:

    for (;;)
    {
    if (SDFM[gPeripheralNumber]->SDIFLG.bit.AF1!= 0)
    {
    sigma_delt_read ();
    SDFM[gPeripheralNumber]->SDIFLGL.bit.AF1 = 0;
    }
    
    }} 

    这是实际的数据读取函数:

    //数据读取函数
    void sigma_delta_read (void){
    
    unsigned long sdfmReadFlagRegister = 0;
    static unsigned int loopCounter1 = 0;
    UINT16位状态= 0;
    
    //寄存器 SDIFLG 读取
    sdfmReadFlagRegister = Sdfm_readFlagRegister (1);
    
    filter1_result[loopDataCounter1+]]= SDFit_gpit.gpit_readm1
    
    ;gpit_gpio1;gpit_g1;gpit_g1 ===注意此处的切换
    
    if (loopCounter1 == MAX_SAMSples)
    {
    loopCounter1 = 0;
    }
    
    //清除 SDIFLG 寄存器
    Sdfm_clearFlagRegister (1、sdfmReadFlagRegister);
    
    } 

    我看到 Filter1_Result 中的变化、它们会根据输入电压的变化而变化。 但是、我不知道如何解释它们。 当输入电压为-0.079mV 时、Filter1_Result 的读数约为8045;当输入为0.089mV 时、读数约为56470;当我完全拔下输入(0mV)时、读数为65030。 如何解读结果?

    2) 2)这是我现在在示波器上看到的图片:

    绿色表示时钟(10MHz)、黄色表示数据、蓝色表示 PWM 周期(50uec / 20kHz)、蓝色表示 GPIO 62的切换、该切换应在每次读取数据时发生。 频率(53uec、~18kHz)不足;我们在每个 PWM 周期中至少需要两个读数、最好是更多。 我知道这是轮询、当我转向中断时频率将上升、但上升幅度不会太高、因为我复制的上面的"for "循环是 DSP 现在运行的唯一循环。 为比率加润滑脂的建议是什么? 调整 OSR?

    谢谢、

    Alexey。

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

    Alexey、

    1) 1)如果要轮询 AFX 位、可以禁用 SDFM ePIE 中断。 这样、您就不需要担心 ISR

    2) 2)滤波器输出中表示的数字值是对应于差分模拟输入的数字值。 对应于负差分输入的数字滤波器输出将是对应正差分输入的二进制补码。

    3) 3)滤波器输出的数据速率取决于 OSR 设置和 SD 调制器采样率。 如果您希望在 PWM 周期内获得更多滤波数据、则必须增加 SD 调制器采样频率和/或减少 OSR 以提高数据吞吐量。

    此致、
    曼诺伊

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

    Manoj、

    我仍然无法实现 SDFM 同步。 我尝试了几个选项来获得它、但都未成功:

    1) Sdfm_configureExternalreset ()配置为 filter_1_EXT_RESET_disable。 然后、我尝试通过以下方式使用 MFE 位:

    // SD
    __interrupt void PWM11_Comparator_C_UP_DOWN_ISR 的同步例程(void)
    {
    static unsigned char sync = 0;
    if (!SYNC)
    {
    Sdfm_enableMFE (gPeripheralNumber);
    GpioDataRegs.GPBTOGGLE.BIO62 = 1; //验证 GPIO 切换-只需在示波器上查看即可
    }
    否则
    {
    Sdfm_disableMFE (gPeripheralNumber);
    GpioDataRegs.GPBTOGGLE.bit.GPIO62=1; //验证 GPIO 切换-只需在范围
    内查看它}
    
    //清除此中断
    EPwm11Regs.ETCLR.bit.INT 标志= 1;
    //确认此中断以接收来自组3的更多中断
    PieCtrlRegs.PIEACX.ALL = PIEACK_Group3;
    } 

    根据技术参考手册第13.1.1节、可以将 SDFM 模块滤波器与主滤波器使能位同步。 但是、我看不到同步、因为我在 SDFM 读取时切换另一个 GPIO、并且它与该中断完全不同步:

    //
    // Sdfm1_ISR - SDFM 1 ISR
    //
    _interrupt void Sdfm1_ISR (void)
    {
    uint32_t sdfmReadFlagRegister = 0;
    
    GpioDataRegs.GPFTOGGLE.bit.GPIO161 = 1;
    
    Sigma_Delta_Read ();
    
    sdfmReadFlagRegister = Sdfm_readFlagRegister (gPeripheralNumber);
    Sdfm_clearFlagRegister (gPeripheralNumber、sdfmReadFlagRegister);
    
    //
    //确认此__interrupt 以接收更多来自组5的__interrupts
    //
    PieCtrlRegs.PIEACX.ALL = PIEACK_group5;
    }
    

    (函数 sigma_delta_read ()出现在先前的帖子中,自那时以来没有变化)。

    下面是我得到的结果:

    这里、黄色是原始 SD 数据、绿色是我用于同步的 PWM、红色是在 PWM 中断中随 MFE 位一起切换的 GPIO62、蓝色是在 SD 中断中切换的 GPIO161。 蓝色不是静态的、它会移动、因此它不会同步:

    2) 2)我还尝试使用 PWM11 C 比较器进行同步、结果相同。

    3) 3)如果我在 Sdfm_configureExternalreset()中启用外部复位、则根本没有读数、蓝色线处于接地电平。 看起来永远不会发生复位。

    我已经尝试过与其他 PWM 切换 MFE 位的相同解决方案、而不仅仅是11。 例如、使用 PWM 1。 我几乎以相同的方式配置了中断、还切换了 GPIO 以进行验证。 但结果完全相同、没有同步。 示波器上的图片与上面的图片完全相同。

    请您就此主题向我提供建议吗? 我们希望 SD 滤波器与 PWM 同步(令人担忧的是、可以使用 MFE 实现)、并使用 PWM 同步数据读数。

    手册明确指定 PWM11C 为 SDFM 1通道1的同步源、而示例代码"PWM11.CMPC、PWM11.CMPD、PWM12.CMPC 和 PWM12.CMPD 信号无法同步滤波器"之间的矛盾令人困惑。

    谢谢、

    Alexey。

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

    禁用 MFE 位将禁用所有 SDFM 滤波器通道。 根据您的问题、我假设您尝试在 PWM 中断上同步滤波器通道。 如果您尝试在每个 PWM 周期同步 SDFM 滤波器通道、我不建议使用 MFE 位、而是对 SDFM1使用 PWM11.C/D 信号、对 SDFM2使用 PWM12.C/D 信号。

    我们有 C2000Ware 示例、其中显示了如何使用使用 PWM11.CMPC 和 CMPD 示例的同步 SDFM 滤波器通道。 您是否已经尝试运行它

    路径: \device_support\f2837xd\examples\cpu1\sdfm_pwm_sync_cpu\

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

    Manoj、

    我尝试至少以某种方式同步通道。  当 PWM11.CMPC (绿线)或 SDFM1.MFE (红线)为0时、我希望暂停"数据就绪"中断流(上面示波器屏幕图像上的蓝线)。 上面的示波器屏幕图像显示了相反的情况。

    我完全了解禁用 MFE 将会使受影响的 SDFM 的所有4个通道都关闭、但现在它仍然不同步、因此我希望至少通过 MFE 位使这些功能正常工作。 但是、即使通过操作 MFE 位、也无法实现同步、我无法理解为什么、这段话总结了我上一篇文章的第1节)。

    当然、通过 PWM11.CMPC 同步会更好、但在我上一篇文章的第2部分中、我已经写道它不起作用。 即使 PWM11.CMPA (这是上面示波器屏幕图像上绿线的来源)和 PWM11.CMPC 以完全相同的方式进行配置、我也看不到任何同步。 我是否必须进行任何其他配置? 以某种方式将 PWM11.CMPC 路由到 SDFM? AFAIK、不需要任何额外的配置、但是可能我错过了什么?

    我知道 sdfm_PWM_SYNC_CPU 示例。 实际上、我使用的大多数代码都是从该示例中获取的、我曾多次提到它、包括本主题的第一个问题。 它运行、但不读取数据、也不同步。

    谢谢、

    Alexey。

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

    PWM11.CMPC/CMPD 信号在内部连接至 SDFM 数据滤波器、无需任何外部硬件连接。

    您是否在未进行任何修改的情况下尝试运行 sdfm_PWM_SYNC_CPU 示例? 如果没有、我建议您这样做。

    我不知道您是如何检查滤波器通道是否同步的。 假设 filter1 / filter2 / FILTER3 / FILTER4在 SDFM1中的配置方式相同(即相同的滤波器类型、相同的 OSR)。

    过滤器类型:Sinc3.
    OSR:256

    通过设置 PWM11.CMPC = PWM11.CMPD、我可以同步所有4个滤波器、并且基本上重新启动所有4个滤波器。 当 PWM11.CMPC 和 CMPD 信号被接收时、SDFM 通过将内部 OSR 计数器复位到来实现这一点。 这将确保所有四个滤波器在同一时刻提供新的滤波器数据。

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

    我可以关闭此主题吗? 此问题是否已解决? 如果是、请标记可帮助您解决此问题的主题帖。

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

    Manoj、

    实际上、我的 SDFM 滤波器大部分都在工作。 最后一个问题是有关结果转换的两个问题。

     AMC1306EVM I 使用可提供0s 和1s 的输出密度、根据其数据表、对应于-250mV 的限值为7168、对应于+250mV 的限值为58368。 DSP 的 SDFM 比较器模块要求 HLT 和 LLT 的两个数字介于0和32768之间。 我想我必须将为 AMC1306EVM 提供的数字除以2、接收 LLT 为3809 (0x0E1)、HLT 为29184 (0x7200)、对吧?

    现在、数据滤波器以节拍为单位提供输出、我需要将其转换为毫伏。 在0mV 输入上、我接收到65534-65535的恒定输出、接近于实际零。 但是、在精确测量的90mV 输入(根据示波器、几乎无噪声)上、我接收到1385和1500之间的输出、这些输出首先对于大多数恒定信号而言过于模糊、 其次、是超出预期值的值、我认为该值应该大约为11000 (因为90mV 恰好高于正限值的三分之一、即250mV)。  

    我的当前代码基于 sdfm_PWM_SYNC 示例。 MODE 为0、GPIO 引脚16-20配置为 GPIO_SetupPinOptions (Pin、GPIO_input、GPIO_Async)和 GPIO_SetupPinMux (Pin、GPIO_MUX_CPU1、 7);

    数据过滤器配置为:

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

    使用以下宏来执行数据读取: filter1_Result[loopCounter1]= SDFM1_READ_filter1_DATA_16BIT;

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

    此主题已有23个对话。已解决多个 SDFM 问题。 将来、请针对不同的问题打开另一个主题。 它有助于 TI 进行内部管理、并帮助社区中的其他人轻松找到答案。 请您继续并标记有助于回答您问题的回复。

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

    适用于 AMC1306M25
    Vclping 电压=+/-320mv
    VIN 是施加的差分输入电压

    比较器滤波器理论输出= ONES_DEGENity x Max_Comparatorfilter_Value (FilterType、OSR)
    数据滤波器理论输出=(ONES_DEGENS-0.5) x{2x Max_digitalfilter_value (FilterType、OSR)–1)

    例如:

    滤波器类型= Sinc3
    DOSR = 256
    COSR = 32
    Vclping = 320mv

    Max_Comparatorfilter_value (Sinc3、32)= 32767
    MAX_DataFilter_Value (Sinc3、256)= 16777215

    当 VIN1 = 250mV 时
    ONES_DEALE=(250mV + 320mv)/(2 x 320mv)= 0.8906250

    比较器滤波器理论输出= 0.8906250 x 32767 = 29183.10938 = 29183 (最接近的整数)
    数据滤波器理论输出(32位)=(0.8906250–0.5) x ((2x16777215)–1)= 13107198.83 = 13107199 (最接近的整数)

    当 VIN2 = 90mv 时
    ONES_DEALE=(90mv + 320mv)/(2 x 320mv)= 0.640625

    比较器滤波器理论输出= 0.640625 x 32767 = 20991.35938 = 20991 (最接近的整数)
    数据滤波器理论输出(32位)=(0.640625–0.5) x ((2x16777215)–1)= 4718591.578 = 4718592 (最接近的整数)

    此外、当您使用 PWM 同步 SDFM 时、对于 Sinc3滤波器、SDSYNC 事件后的前2个样本将不正确(因为滤波器尚未达到稳定状态)、但后续样本将正确。 这是 Sinc3滤波器的预期行为。

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

    Manoj、

    这意味着、反转公式、Vin = Vcling *(2 * Density_for_1s - 1)= Vcling *(2 * Output_for_DF /(2 * MAX_IAL_DF_OUTPUT - 1)+ 0.5)- 1)= Vcling *(Output_for_DF /(MAX_IAL_DF_OUTPUT - 1))、对吗?

    但是、当输入为90mV 时、我仍然会收到大约1.21mV 的电压。 将 DF 重新配置为 Sinc1 (Sdfm_configureData_filter (gPeripheralNumber、filter1、filter_enable、SINC1、OSR_256、 DATA_16_BIT、SHIFT_0_Bits);)输出为1.2486mV。

    谢谢、
    Alexey。

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

    不、您的公式错误。 您可能遇到了问题、因为我没有显式提供一个密度公式。

    ONES_DEWENity =(Vin + Vcl削)/(2 * Vcl削)

    Vin = Vclping *{(2* Output_OF_DF)/((2* Max_digitalfilter_value (FilterType、OSR))- 1)} -------- >公式1

    在您的示例中:-

    滤波器类型= Sinc1
    DOSR = 256
    Vclping = 320mv
    Max_digitalfilter_value (Sinc1、256)= 256


    Vin = 90mv
    ONES_DEALE=(90mv + 320mv)/(2 x 320mv)= 0.640625


    数据滤波器理论输出=(ONES_DEGENS-0.5) x{2x Max_digitalfilter_value (FilterType、OSR)–1)
    =(0.640625 - 0.5) x{(2*256)- 1}
    = 71.859375
    = 72 (大约)

    使用公式1、

    Vin = 320mv *{(2 x 71.859375)/((2 x 256)- 1)}
    = 90mv

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

    Manoj、

    这里会发生有趣的事情。 HW 不正确、或者我从您上次的回答错误中复制了公式。

    在 SINC1和精确90mV 输入的情况下、我从公式中得到的值约为80mV。 使用 SINC3 (和适当的公式)、我得到大约82mV。 当我提供0mV 作为输入时、两个算法的输出约为1.2mV。

    我可以理解、使用 SINC3时、差异可能是前两个数据集可能不正确。 但从一开始 SINC0应该是正确的。 在这两种情况下、OSR = 256、我想应该最大限度地减少 SINC3中可能错误读数的影响。

    是否有方法检查硬件? 除了提供+320mV 或-320mV 电压并验证我在128个时钟内接收到一个稳定的1或稳定的0、偶尔会出现反向?

    谢谢、

    Alexey。

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

    您是否说您的政治数字输出计算与我的不匹配? (或)您发现实际和理论计算不匹配?

    我几乎感受到您试图描述 AMC1306的特征。 您到底要做什么?

    此外、该线程也变得非常大。 我建议您打开一个新主题、以了解新问题。

    此致、
    曼诺伊