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.

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

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

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

器件型号:AMC131M03

工具与软件:

我正在使用 STM32微控制器通过 SPI 控制 AMC131M03。 我无法按预期获得直流/直流输出。  
CLK 频率为4MHz。  
我要发送的命令如下:

drady = HAL_GPIO_ReadPin (GPIOE、GPIO_PIN_1);
if (drady ==0)

if (counter < 1)

应执行的操作

drady = HAL_GPIO_ReadPin (GPIOE、GPIO_PIN_1);
if (drady ==0)
AMC131M03_WriteRead (0x03、0x31、AMCDataTx、AMCData);//读取状态寄存器
} while (drady =0);
HAL_DELAY (10);
应执行的操作

drady = HAL_GPIO_ReadPin (GPIOE、GPIO_PIN_1);
if(drady!=0)
AMC131M03_WriteRead (0x05、0x31、AMCDataTx、AMCData);//解锁要写入的寄存器
} while (drady =0);
HAL_DELAY (1000);
AMCDataTx[0]= 0x07;
AMCDataTx[1]= 0x01;
AMCDataTx[2]= 0x00;
应执行的操作

drady = HAL_GPIO_ReadPin (GPIOE、GPIO_PIN_1);
if(drady!=0)
AMC131M03_WriteRead (0x01、0x03、AMCDataTx、AMCData);//写入寄存器3启用所有通道 调制器过采样率128、 低功耗模式
} while (drady =0);
HAL_DELAY (1000);
AMCDataTx[0]= 0x08;
AMCDataTx[1]= 0x00;
AMCDataTx[2]= 0x00;
应执行的操作

drady = HAL_GPIO_ReadPin (GPIOE、GPIO_PIN_1);
if(drady!=0)
AMC131M03_WriteRead (0x01、0x31、AMCDataTx、AMCData);//写入寄存器31将直流/直流频率 1.95 MHz 设置为2.12 MHz  
} while (drady =0);
HAL_DELAY (1000);
AMCDataTx[0]= 0x08;
AMCDataTx[1]= 0x01;
AMCDataTx[2]= 0x00;
应执行的操作

drady = HAL_GPIO_ReadPin (GPIOE、GPIO_PIN_1);
if(drady!=0)
AMC131M03_WriteRead (0x01、0x31、AMCDataTx、AMCData); //写入寄存器31启用直流/直流

} while (drady =0);
HAL_DELAY (1000);


HAL_GPIO_WritePin (GPIOB、GPIO_PIN_8、GPIO_PIN_RESET);
HAL_DELAY (1000);
计数器++;
if (counter == 1)
HAL_GPIO_WritePin (GPIOB、GPIO_PIN_8、GPIO_PIN_SET);//打开 时钟  
HAL_DELAY (1000);

}
设计
if (drady ==0)

AMC131M03_WriteRead (0x03、0x31、AMCDataTx、AMCData);//读取状态寄存器  
HAL_DELAY (20);
}

}

uint8_t AMC131M03_WriteRead (uint8_t command、uint8_t reg、uint8_t * txData、uint8_t * rxData){
uint8_t txFrame[15]={0};// 10个16位块= 5个24位的字
uint8_t rxFrame[15]={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;
否则、如果(命令=5){
cmdWord = 0x655;
否则、如果(命令=6){
cmdWord = 0x555;
}
否则{
返回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:发送命令帧、忽略响应
AMC131M03_CS_LOW ();
HAL_SPI_TRANSMIT (&hspi3、(uint8_t *) txFrame、15、HAL_MAX_DELAY);
AMC131M03_CS_HIGH ();
// HAL_DELAY (1);
应执行的操作

drady = HAL_GPIO_ReadPin (GPIOE、GPIO_PIN_1);
if (drady ==1)
AMC131M03_CS_LOW ();
HAL_SPI_TransmitReceive (&hspi3、(uint8_t *) txFrame、(uint8_t *) rxFrame、15、HAL_MAX_DELAY);
AMC131M03_CS_HIGH ();
} while (drady =0);

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

返回0;//成功
}

我正在附加应用程序的图像。

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

    尊敬的 Omkar:

    您可以设置范围并发送 SPI 初始化帧(DIN、DOUT、SCLK、CS)吗?

    谢谢。