麦歌恩MT6816磁编码器调试
因为所作产品需要使用到磁编码器,所以对国内的一些磁编码器进行了调研,并进行了总结,对比总结表格如下:

上面的除了第一款是市面上使用较多的国外编码器外,剩下的都是在国内流片的磁编,这几款国产磁编进行了相关的测试,此篇文章进行了麦歌恩MT6816的程序分享,使用四线spi进行通信,基本逻辑是拉低片选,先输入0x83,写入03寄存器的地址和指令,读取03寄存器的数据,拉高片选,得到第一个数据,再次拉低片选,写入0x04寄存器的地址和指令,读取04寄存器的数据,拉高片选,重复得到05的,然后按照表格上的顺序进行运算,将03数据左移8位,加上04的数据,得到的新数据左移2位得到角度数值,除以16384,乘以角度360°得到角度值。时序和程序如下所示:



我所使用的为STM32F405,SPI的基础设置代码里不贴了。
` uint8_t TxData1=0x83;
uint8_t TxData2=0x84;
uint8_t TxData3=0x00;
uint8_t TxData4=0x00;
void MT6816_ReadAngle(uint8_t MSx_CSQ)
{
uint8_t u8Data11 = 0x00;
uint8_t u8Data12 = 0x00;
SPIx_CS1_ON;
// HAL_SPI_Transmit(&hspi1,&TxData1,1,10);
// HAL_SPI_Receive(&hspi1,&u8Data11,1,10);
// SPIx_CS1_OFF;
// SPIx_CS1_ON;
// HAL_SPI_Transmit(&hspi1,&TxData2,1,10);
// HAL_SPI_Receive(&hspi1,&u8Data12,1,10);
// SPIx_CS1_OFF;
MyAngle1 = (((float)((u8Data11*256+u8Data12)/4)/16384)*360);
}
在spi.h文件中进行片选信号的定义
#define SPIx_CS1_ON HAL_GPIO_WritePin(GPIOC, GPIO_PIN_5 ,GPIO_PIN_RESET) //ƬѡÒý½Å(PA4)---×¢ÒâĬÈÏÓ¦¸ÃÀ¸ß
#define SPIx_CS1_OFF HAL_GPIO_WritePin(GPIOC, GPIO_PIN_5 ,GPIO_PIN_SET)

1556






