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.

[参考译文] AMC131M01:通过 SPI 控制时出现直流/直流输出问题

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1471106/amc131m01-issue-with-dcdc-output-when-controlled-via-spi

器件型号:AMC131M01
主题中讨论的其他器件:AMC131M03

工具与软件:

我正在使用 STM 微控制器来使用 SPI 来控制 AMC131M01DFMR。 我启用了直流/直流位、将 CIN 频率和分频器设置为默认值。 上电后、CIN 会提供连续时钟。 之后、发送 WRITE REGISTER (写入寄存器)和 READ REGISTER (读取寄存器)命令进行配置、仅启用直流/直流位、同时将所有其他命令保留为默认值。 但直流/直流输出端没有得到任何电压。 出现此问题的可能原因是什么?

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

    尊敬的 Omkar:

    应用是什么?

    您能否提供有关您的系统的以下信息:

    1. 您使用的 CLKIN 频率是多少
    2. 您能否分享一下原理图
    3. 您是否具有数字通信捕获

    谢谢。

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

    CLKIN 的频率为4MHz。 下面附上原理图供您参考。   

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

    尊敬的 Omkar:

    在启用 DCDC_EN 之前、必须根据 CLKIN 频率设置 DCDC_Freq 寄存器。  除非频率设置正确、否则直流/直流稳压器不会正常开启。

    谢谢。

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

     AMC131M03_WriteRead (0x04、0x31、AMCDataTx、AMCData);

    if (counter < 1)

    AMC131M03_WriteRead (0x03、0x31、AMCDataTx、AMCData);
    AMCDataTx[0]= 0x01;
    AMCDataTx[1]= 0x0D;
    AMCDataTx[2]= 0x00;
    AMC131M03_WriteRead (0x01、0x03、AMCDataTx、AMCData);
    HAL_DELAY (1);
    AMCDataTx[0]= 0x0A;
    AMCDataTx[1]= 0x00;
    AMCDataTx[2]= 0x00;
    AMC131M03_WriteRead (0x01、0x31、AMCDataTx、AMCData);
    HAL_DELAY (1);
    AMCDataTx[0]= 0x0A;
    AMCDataTx[1]= 0x01;
    AMCDataTx[2]= 0x00;
    AMC131M03_WriteRead (0x01、0x31、AMCDataTx、AMCData);
    HAL_DELAY (1);
    计数器++;
    if (counter == 1)
    HAL_GPIO_WritePin (GPIOB、GPIO_PIN_8、GPIO_PIN_SET);
    HAL_DELAY (1);

    }
    设计

    uint8_t AMC131M03_WriteRead (uint8_t command、uint8_t reg、uint8_t * txData、uint8_t * rxData){
    uint8_t txFrame[9]={0};// 10个16位块= 5个24位的字
    uint8_t rxFrame[9]={0};//接收响应的大小相同

    //准备命令字
    uint16_t cmdWord = 0;

    if (command =1){//写入命令
    cmdWord =(0x6000)|((reg & 0x3F)<<7);
    } else if (命令== 0){//读取命令
    cmdWord =(0xA000)|((reg & 0x3F)<<7);
    } else if (命令=3){//读取命令
    cmdWord = 0x0000;
    }
    else if (command == 4){//读取命令
    cmdWord = 0x11;
    其他{
    返回1;//无效命令
    }

    //填充传输帧
    txFrame[0]=(cmdWord >> 8)& 0xFF;//命令高字节
    txFrame[1]= cmdWord 和0xFF;//命令低字节

    if (命令== 1)

    for (int i =0;i < 3;i++)

    txFrame[i + 3]= txData[i];
    }
    }
    //构造输入帧(DIN 采用16位块)
    // txFrame[0]= 0xB8;//((command << 8)| reg);//命令(8位)+寄存器(8位)
    // txFrame[1]= 0x80;//添加或 CRC (如果禁用了 CRC)
    // txFrame[2]= 0x0000;//对于第二个字为零(高16位)
    // txFrame[3]= 0x0000;//对于第二个字为零(低8位被填充)
    // txFrame[4]= 0x0000;//对于第三个字(高16位)为零
    // txFrame[5]= 0x0000;//对于第三个字为零(低8位被填充)
    // txFrame[6]= 0x0000;//对于第四个字(高16位)为零
    // txFrame[7]= 0x0000;//对于第四个字为零(填充低8位)
    // txFrame[8]= 0x0000;//对于第5个字(高16位)为零
    // txFrame[9]= 0x0000;//对于第五个字为零(低8位带填充)

    //事务1:发送命令帧、忽略响应
    AMC131M01_CS_LOW ();
    HAL_SPI_TRANSMIT (&hspi3、(uint8_t *) txFrame、9、HAL_MAX_DELAY);
    AMC131M01_CS_HIGH ();

    //等待响应准备就绪(取决于器件的延迟、根据需要调整)
    // HAL_DELAY (1);//以1ms 延迟为例;按器件时序调整

    //事务2:发送虚拟帧并接收响应
    uint16_t dummyFrame[9]={0};//虚拟帧以随时钟输出响应
    AMC131M01_CS_LOW ();
    HAL_SPI_TransmitReceive (&hspi3、(uint8_t *) txFrame、(uint8_t *) rxFrame、9、HAL_MAX_DELAY);
    AMC131M01_CS_HIGH ();

    //将响应帧重构为每个24位的5个字
    对于(int i = 0;i < 5;i++){
    rxData[i]= rxFrame[i];
    }

    返回0;//成功
    }

    我将设置用于设置频率的命令。 发送这些命令。  

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

    尊敬的 Omkar:

    表8-31中的 DCDC_Freq 选择实际上不正确。  这是之前在更新数据表时遗漏的修订版所致。  有关 DCDC 频率设置、请参阅表8-3 (我在上面回复的那个)。  希望这样可以解决问题。

    谢谢。

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

    感谢您的答复。
    更改频率后、问题也未解决。 我认为沟通之间存在一些问题、因为我 观察到的反应不符合预期。 我将解释上面发布的带有 SPI 设置和数字响应的代码、我得到了这些代码、因此可以轻松地跟踪问题。 我只包含24位的响应、因为这是我的字大小、响应是稳定的、因此 SPI 初始化看起来是正确的。我认为问题在于发送的帧。

    SPI 以781.25KHz 作为 MSB 优先的频率运行。 时钟的设置是极性低和相位第2沿。  
    命令序列如下所示:

    上电后:

    1.读取状态寄存器。

    命令= 0x00000000000000 RESPONSE = 0x048000

    2. 时钟寄存器所有 PWR =低功耗所有其他默认值  

    命令= 0x618000010D00000000响应= 0x410600

    3. DCDC_CTRL 寄存器 DCDC_FREQ = 1.95 MHz 至2.12 MHz

    命令= 0x788000080000000000 RESPONSE = 0x59FC00

    4.  DCDC_CTRL 寄存器 DCDC_EN =启用

    命令=  0x788000080100000000 RESPONSE = 0x59FC00

    5. 读取状态寄存器。

    命令= 0x00000000000000 RESPONSE = 0x004000

    我不知道原因、在这些命令之后、无论我发送什么命令、响应都保持为 0x004000

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

    尊敬的 Omkar:

    写入的响应看起来不匹配。  您能否示波器探测 SPI 信号以验证发送的数据?

    谢谢。