AS5048 SPI模式控制问题

    AS5048作为一款绝对位置磁编码器,以14位的精度,小体积低功耗,被广泛用于直流无刷电机的控制中。

    AS5048数据类型分为控制命令,读数据包和写数据包三种,写数据包其实和控制命令格式类似。每种数据类型均为16位有效数据,低14位为数据,最高位为读写奇偶校验,bit14在控制命令中为读写标志,读数据包中为错误标志。

    芯片上电即可读数据,读取角度的命令值为0x3fff,加上读写标志和校验,刚好为0xffff,因此该芯片可以工作在只读模式下。将MOSI置高即可。我们一般使用4线模式,依据芯片手册,每次读取的数据为上一次的数据:

                                                   

    对于角度值,连续读取即可。代码如下,开发环境STM32CubeIDE:

static void MX_SPI2_Init(void)
{

  /* USER CODE BEGIN SPI2_Init 0 */

  /* USER CODE END SPI2_Init 0 */

  /* USER CODE BEGIN SPI2_Init 1 */

  /* USER CODE END SPI2_Init 1 */
  /* SPI2 parameter configuration*/
  hspi2.Instance = SPI2;
  hspi2.Init.Mode = SPI_MODE_MASTER;
  hspi2.Init.Direction = SPI_DIRECTION_2LINES;
  hspi2.Init.DataSize = SPI_DATASIZE_16BIT;
  hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
  hspi2.Init.CLKPhase = SPI_PHASE_2EDGE;
  hspi2.Init.NSS = SPI_NSS_SOFT;
  hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
  hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
  hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_ENABLE;
  hspi2.Init.CRCPolynomial = 10;
  if (HAL_SPI_Init(&hspi2) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN SPI2_Init 2 */

  /* USER CODE END SPI2_Init 2 */

}
unsigned short SPI_AS5048A_ReadData(void)
{
	unsigned short RxData, TxData;

	TxData = CMD_ANGLE;

	Set_NSS(0);
	if(HAL_SPI_TransmitReceive(&hspi2, (unsigned char *)&TxData, (unsigned char *)&RxData, 1, 1) != HAL_OK)
	{

	}
	Set_NSS(1);

	if(RxData & 0x4000)
	{
		unsigned short ss = CMD_CLAER;
		Set_NSS(0);
		if(HAL_SPI_TransmitReceive(&hspi2, (unsigned char *)&ss, (unsigned char *)&RxData, 1, 1) != HAL_OK)
		{

		}
		Set_NSS(1);

		ss = CMD_ANGLE;

		Set_NSS(0);
		if(HAL_SPI_TransmitReceive(&hspi2, (unsigned char *)&ss, (unsigned char *)&RxData, 1, 1) != HAL_OK)
		{

		}
		Set_NSS(1);

		RxData = 0;
	}
	else
	{
		RxData = RxData & 0x3fff;	//屏蔽高两位【更新】
	}
	return RxData;
}

    当收到的数据出现错误时,清除了错误标志位,貌似也可以不管他。

    注意线路上造成的干扰问题,有错误出现意味着线路上有干扰,优先排除干扰,芯片本身由于与磁铁距离近,不易受到电机的影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值