昆泰芯KTH7812磁编码器SPI通信

1.简介

本篇文章介绍了昆泰芯KTH7812磁编码器的SPI通信,并给出对应实例代码。

KTH7812能够通过SPI读取绝对角度(最高 16 位分辨率绝对角度输出),读写寄存器,且其SPI通信速率快,最高能达到10MHz。

2.KTH7812的SPI通信

KTH7812使用四线SPI进行通信,其通信模式为 mode3(CPOL = 1 和 CPHA = 1)。需要注意的是KTH7812在进行SPI通信时会在下一帧返回当前帧的结果。

KTH7812的SPI支持读取角度、读取配置寄存器和写入配置寄存器等功能,相关指令如下 

SPI读寄存器

在读寄存器指令的下一帧是返回的寄存器值,占据数据帧的高八位。

SPI写寄存器

在写寄存器指令的下一帧是新写入寄存器的值,占据数据帧的高八位。

SPI读取绝对角度

在读取角度指令的下一帧是返回的角度值,占据数据帧的全部16bit。

3.实例

以读取角度为例,基本逻辑是CS拉低,MOSI发送指令0x0000,MISO返回16位角度数据。

如需转换为0~360°角度输出可通过以下公式进行计算:

接下来是相应的代码实现,使用的是STM32F303,利用STM32CubeMX自动生成配置代码

SPI配置为:

void MX_SPI1_Init(void)
{

  /* USER CODE BEGIN SPI1_Init 0 */

  /* USER CODE END SPI1_Init 0 */

  /* USER CODE BEGIN SPI1_Init 1 */

  /* USER CODE END SPI1_Init 1 */
  hspi1.Instance = SPI1;
  hspi1.Init.Mode = SPI_MODE_MASTER;
  hspi1.Init.Direction = SPI_DIRECTION_2LINES;
  hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
  hspi1.Init.CLKPolarity = SPI_POLARITY_HIGH;              //CPOL = 1
  hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;                   //CPHA = 1
  hspi1.Init.NSS = SPI_NSS_SOFT;                           //CS软件拉高拉低
  hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8;
  hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
  hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  hspi1.Init.CRCPolynomial = 7;
  hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
  hspi1.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
  if (HAL_SPI_Init(&hspi1) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN SPI1_Init 2 */

  /* USER CODE END SPI1_Init 2 */

}

使用SPI读取角度:

uint16_t Angle = 0;

void KTH78_SPI_TransmitReceive(uint8_t *pTxData, uint8_t *pRxData, uint16_t Size)
{
  HAL_GPIO_WritePin(SPI1_NSS_GPIO_Port,SPI1_NSS_Pin,GPIO_PIN_RESET);
  HAL_SPI_TransmitReceive(&hspi1, pTxData, pRxData, 2, 0xFFFF);
  HAL_GPIO_WritePin(SPI1_NSS_GPIO_Port,SPI1_NSS_Pin,GPIO_PIN_SET);
}

void KTH78_SPI_ReadAngle(void)
{
  uint8_t spitx[2] = {0x00, 0x00};                 //SPI指令
  uint8_t spirx[2];
  KTH78_SPI_TransmitReceive(spitx, spirx, 2);
  KTH78_SPI_TransmitReceive(spitx, spirx, 2);
  Angle = ((uint16_t)spirx[0] << 8) | spirx[1];    //返回结果处理
}

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kth数据集是一个广泛用于行为识别领域的视频数据集,包含人类不同类型的运动行为。kth数据集对比实验是指在使用kth数据集进行行为识别算法评估时,对比不同算法或不同参数设置的实验。 kth数据集中包含多个被试者在六个不同的运动场景下的行为视频。在对比实验中,研究人员可以将数据集划分为训练集和测试集,然后使用不同的行为识别算法进行训练和测试。 在对比实验中,通常会使用准确率作为评估指标来衡量算法的性能。准确率表示模型正确预测的样本数与总样本数之比。通过对比不同算法的准确率,可以评估不同算法的性能优劣。 另外,对比实验还可能涉及到不同参数设置的比较。例如,在同一个算法中可以尝试不同的特征提取方法、分类器或模型结构等参数设置。通过对比不同参数设置的实验结果,可以找到最佳的参数配置,从而提升算法的性能。 需要注意的是,在进行对比实验时,应该遵循一定的科学原则和实验设计,例如使用相同的评估指标、相同的训练集和测试集划分、交叉验证等。只有在保证实验设计的一致性的前提下,对比实验的结果才具有可比性和可靠性。 总之,kth数据集对比实验是一种评估不同行为识别算法性能的方法,通过对比准确率和参数设置的不同,可以找到最佳的算法和参数配置,提升行为识别的准确率和性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值