一、TLE5012介绍

TLE5012是采用巨磁阻原理的15位绝对磁编码器,支持SSC、PWM、IIF、HSM、SPC通信接口,其中SSC是兼容传统SPI的3线接口,通讯频率可达8M。安装方式如下:

二、SSC通信

1、硬件电路连接

SSC包含3根数据线:DATA、SCK、CSQ。如果单片机的MOSI接口配置为推挽输出,就采用下面的电路:

如果单片机的MOSI接口配置为开漏输出,就采用下面的电路:

2、SSC读写数据帧的组成

如上图,数据帧由3部分组成:COMMAND、Data、SAFETY-WORD。

1)、COMMAND

COMMAND是每帧数据的开头。TLE5012B寄存器中的位有3种操作标志:r、w、u。r代表该位可以读,w代表该位可以写,u代表该位带有update buffer功能。

当你要在同一个时间读多个寄存器的值,因为通讯过程也有时间,这就会导致读取到的多个寄存器实际上并不是同一个时间的。update buffer功能就应运而生。你只需要在开始读寄存器前发送一个Update-Signal(把CSQ拉低tCSupdate时间),TLE5012E就会把具有update buffer功能的寄存器的值更新到update buffer中,然后你把COMMAND中的UPD设置为1,就会去读相应寄存器的update buffer值。无论你等多久去读,update buffer中的值都是你发送Update-Signal时的值,直到你再次发送Update-Signal,update buffer中的值才会更新。

2)、Data

读数据或写数据操作的数据内容。

3)、SAFETY-WORD

当发生错误,SAFETY-WORD中对应的位会拉低,直到通过SSC接口读取了STAT(地址0)寄存器,读完后,SAFETY-WORD中对应的位会自动拉高。

3、读写示例

三、程序

程序中需要注意的是,因为MOSI和MISO共用一根线,因此当主机通过DATA线传完数据后,要把DATA线配置为输入模式,释放DATA线的控制权,让从机可以控制DATA线。否则,主机对于DATA线一直是推挽输出模式,从机是改变不了DATA线的电平的。

#define READ_STATUS 0x8001      //8000
#define READ_ANGLE_VALUE 0x8021 //8020
#define READ_SPEED_VALUE 0x8031 //8030
#define SPI_TX_OFF {GPIOA->CRL&=0x0FFFFFFF;GPIOA->CRL|=0x40000000;}//把PA7(MOSI)配置成开漏--输入模式
#define SPI_TX_ON  {GPIOA->CRL&=0x0FFFFFFF;GPIOA->CRL|=0xB0000000;}//把PA7(MOSI)配置成推挽--输出模式(50MHz)void SPI1_Init(void)
{SPI_InitTypeDef  SPI_InitStructure;GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd( RCC_APB2Periph_SPI1,ENABLE );GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //PA5--CLK--复用推挽GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;   //PA6--MISO--输入GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//PA7--MOSI--推挽输出GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;       //PA8--CS--推挽输出GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIO_CS_Pin_Type, &GPIO_InitStructure);SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;//SPI1--双线全双工!!SPI_InitStructure.SPI_Mode = SPI_Mode_Master;SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;SPI_InitStructure.SPI_CRCPolynomial = 7;SPI_Init(SPI1, &SPI_InitStructure);SPI_Cmd(SPI1, ENABLE);
}//SPIx 读写一个字节
//TxData:要写入的字节
//返回值:读取到的字节
u16 SPI1_ReadWriteByte(u16 TxData)
{u8 retry=0;while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET) { //检查指定的SPI标志位设置与否:发送缓存空标志位retry++;if(retry>200)return 0;}SPI_I2S_SendData(SPI1, TxData); //通过外设SPIx发送一个数据retry=0;while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET) { //检查指定的SPI标志位设置与否:接受缓存非空标志位retry++;if(retry>200)return 0;}return SPI_I2S_ReceiveData(SPI1); //返回通过SPIx最近接收的数据
}uint16_t ReadValue(uint16_t u16RegValue)
{uint16_t u16Data;SPI_CS_ENABLE;SPI1_ReadWriteByte(u16RegValue);SPI_TX_OFF;u16Data = ( SPI1_ReadWriteByte(0xffff) & 0x7FFF ) << 1;//0x12/0xff*100kSPI_CS_DISABLE;SPI_TX_ON;return(u16Data);
}//得到 0~359 度
uint16_t ReadAngle(void)
{return ( ReadValue(READ_ANGLE_VALUE) * 360 / 0x10000 );
}

TLE5012的使用和3线SPI通信(SSC)说明相关推荐

  1. TLE5012B ESP32驱动程序、硬件电路设计、4线SPI通信,驱动完美兼容4线SPI不用改MOSI开漏推挽输出

    一.TLE5012B 简介 TLE5012B 是一种款高分辨率旋转位置传感器,用于在整个 360 度范围内进行角度测量. 它通过使用单片集成 巨磁阻 (iGMR) 元件,来测量正弦和余弦角分量,这些原 ...

  2. AS5047P磁编码器ESP32驱动程序、硬件电路设计、SPI通信时序、逻辑波形分析、注意事项

    1.AS5047P硬件设计 1.1 简介.性能参数 AS5047P 是一种款高分辨率旋转位置传感器,用于在整个 360 度范围内进行高速(高达 28krpm)角度测量.这种新型位置传感器配备了革命性的 ...

  3. SPI接口通信协议详解:SPI时序、2线、3线、4线SPI及4种常用工作模式

    简介 SPI通信原理比I2C要简单,它主要是主从方式通信.这种模式通常只有一个主机和一个或者多个从机,标准的SPI是4根线,分别是SSEL(片选,也写作 SCS).SCLK(时钟,也写作SCK).MO ...

  4. stm32f405rgt6与as5048a的SPI通信问题

    与as5048a的SPI通信问题 本人最近在学习无刷直流电机的FOC,其中用了一个带有磁编码器as5048a作为角度反馈的电机,其中pwm接口输出是正常的,但是在SPI通信的时候出现了问题.研究了几天 ...

  5. ADI官方解释在SPI通信期间,数据的发送(串行移出到MOSI/SDO总线上)和接收(采样或读入总线(MISO/SDI)上的数据)

    串行外设接口(SPI)是微控制器和外围IC(如传感器.ADC.DAC.移位寄存器.SRAM等)之间使用最广泛的接口之一.本文先简要说明SPI接口,然后介绍ADI公司支持SPI的模拟开关与多路转换器,以 ...

  6. 通信协议整理之 SPI 通信

    通信协议整理之 SPI 通信 文章目录 通信协议整理之 SPI 通信 简介 工作原理 通信连接方式 补充 硬件 SPI 和模拟 SPI 简介 SPI是串行外设接口(Serial Peripheral ...

  7. 通俗理解STM32 SPI通信(主从双机SPI通信)

    STM32 SPI通信 高速全双工的通信总线 SPI 通讯使用 3 条总线及片选线,3 条总线分别为 SCK.MOSI.MISO,片选线为NSS(CS) NSS 信号线由高变低 ,是 SPI 通讯的起 ...

  8. STM32 OLED显示屏--SPI通信知识汇总

    备注:在OLED显示屏部分,单片机是通过SPI和OLED进行通信的. 文章目录 目录 文章目录 一.SPI时序通信 二.SPI通信的分类 1.硬件SPI 2.软件SPI 三.硬件SPI SPI特性 硬 ...

  9. ESP32-Arduino开发实例-与Arduino之间SPI通信

    NodeMCU-ESP32与Arduino之间SPI通信 SPI是串行外设接口(Serial Peripheral Interface)的缩写.是 Motorola 公司推出的一种同步串行接口技术,是 ...

最新文章

  1. STM32 电机教程 24 - ST MCLIB实战之无感变绝对式位置传感器
  2. java jfm入门_java图形编程
  3. ROS笔记(16) ArbotiX
  4. tensorflow-gpu:false /cuda程序执行出错: libcudart.so.10.0: cannot open shared object file
  5. js parsefloat 相加_JS高程小记-基本概念
  6. 关于管理的十个经典故事
  7. python 采集系统_python—收集系统信息
  8. 查看CDSN关注的博主
  9. 忘记Apple ID密码,如何移除iCloud激活锁
  10. WiFi的信道与关联
  11. BLUES吉他学习笔记001 bluesrv[1-5]
  12. wince 百度地图懒人包_百度导航车载wince版|百度地图winCE版 V10.9.2 安卓版 下载_当下软件园_软件下载...
  13. 多拨软件测试,虚拟机下多拨与OP下多拨测试
  14. 【相机】工业相机必看的六大参数
  15. 发布《区块链创新与知识产权发展白皮书》
  16. 欧几里得算法及扩展欧几里得
  17. HTML—超文本标记语言
  18. Linux粘滞位(粘着位)
  19. 小学计算机软件介绍ppt,小学信息技术优秀课件
  20. UGA由哪几部分组成和PGA上内存空间的分配与回收的方式

热门文章

  1. vrep小车避障算法_V-REP 小车建模
  2. mvvm模式和mvc的区别_mvvm 和 mvc 区别?
  3. python一个函数可以有参数也可以没有参数_python 传入任意多个参数(方法调用可传参或不传参)...
  4. 计算机网络双语名词,计算机网络中英文名词对照
  5. 小学生们在B站讲算法,网友:我只会阿巴阿巴
  6. 用上强化学习和博弈论,EA开发的测试AI成精了
  7. 最新全球权威AI基准测试榜单:浪潮和NVIDIA霸榜了
  8. 李开复:AI进入落地期,单凭科学家颠覆行业的机会几乎不存在,这个领域除外...
  9. 【安骑士】安装失败问题分析
  10. 安卓错误Emulator: error: x86 emulation currently......