HAL STM32 SSI/SPI方式读取MT6701磁编码器获取角度例程
- 📍相关篇《HAL STM32 I2C方式读取MT6701磁编码器获取角度例程》
- 📌当前最新MT6701数据手册:
https://www.magntek.com.cn/upload/MT6701_Rev.1.8.pdf - 📜SSI协议读角度,时序和数据关系


SSI方式完全可以使用3个IO配置为输入输出模式(两个配置为输出,一个配置为输入),通过SSI协议,读取电平状态,实现对数据解析。
- 📝SSI核心代码实现:(参考《STM32 HAL库 驱动 MT6701 磁编码器》)
#define Loss_of_Track 4
#define Button_Detected 3
#define Field_Weak 2
#define Field_Strong 1
#define Normal 0
/*
* SSI 方式读取信息
* mode == 0 返回角度信息,0~360 浮点数
* mode == 1 返回磁场信息
*/
double ReadDataSSI(uint8_t mode)
{
uint8_t RawData[25] = {
0};
uint16_t angle = 0;
double fangle = 0;
HAL_GPIO_WritePin(SSI_CSN_GPIO_Port,SSI_CSN_Pin,GPIO_PIN_RESET); //起始信号
Delay_us(2);
HAL_GPIO_WritePin(SSI_CLK_GPIO_Port,SSI_CLK_Pin,GPIO_PIN_RESET); //跳过第一个时钟沿
Delay_us(2);
HAL_GPIO_WritePin(SSI_CLK_GPIO_Port,SSI_CLK_Pin,GPIO_PIN_SET);
Delay_us(2);
for(uint8_t i = 0; i < 25; i++) //读取数据
{
HAL_GPIO_WritePin(SSI_CLK_GPIO_Port,SSI_CLK_Pin,GPIO_PIN_RESET);
RawData[i] = HAL_GPIO_ReadPin(SSI_DI_GPIO_Port,SSI_DI_Pin);
HAL_GPIO_WritePin(SSI_CLK_GPIO_Port,SSI_CLK_Pin,GPIO_PIN_SET);
Delay_us(2);
}
HAL_GPIO_WritePin(SSI_CSN_GPIO_Port,SSI_CSN_Pin,GPIO_PIN_SET); //结束信号
for(uint8_t i = 0; i < 14; i++)
angle += RawData[i] * (2 << (13 - i));
fangle = (double)
最低0.47元/天 解锁文章
4870

被折叠的 条评论
为什么被折叠?



