一、TLE5012B 简介


TLE5012B 是一种款高分辨率旋转位置传感器,用于在整个 360 度范围内进行角度测量。

它通过使用单片集成 巨磁阻 (iGMR) 元件,来测量正弦和余弦角分量,这些原始信号(正弦和余弦)在内部进行数字处理,以计算磁场(磁铁)的角度方向。

数据通信是通过与 SPI 兼容的 双向同步串行通信 (SSC) 完成的。传感器配置存储在寄存器中,可通过 SSC 接口访问。此外,TLE5012B 还提供其他四个接口:脉宽调制 (PWM) 、短 PWM (SPC) 、霍尔开关模式 (HSM) 和增量接口 (IIF)。这些接口可以与 SSC 并行或单独使用。


二、硬件参数


  • 15 位绝对角度位置传感器。
  • 在整个使用寿命和温度范围内,启用自动校准,最大1.0° 角度误差。
  • 高达 8 Mbit/s 的双向 SSC 接口。(实测跑到18MHz也能正常通信)
  • 接口:SSC、PWM、增量接口 (IIF)、霍尔开关模式 (HSM)、短 PWM 代码(SPC,基于 SAE J2716 中定义的 SENT 协议)
  • ESD > 4 kV (HBM)
  • 最常用的型号为 TLE5012B E1000,接口为 ABISSC。其他型号的区别只是输出接口不一样,但都支持SSC通信。
  • 基于 巨磁阻 原理,有别于AS5047使用的霍尔。

三、硬件设计、参考电路、SPI兼容思路


TLE5012B 支持的供电范围为 3.3~5.5V

个人建议使用使用 3.3V供电,通信引脚串电阻还可以用来兼容5V的MCU电平。

SPI兼容思路:

TLE5012B 接口使用 SSC,兼容 SPI,其实相当于一个半双工的SPI
看过他人的电路。一般是直接将 MCUMOSIMISO 并联一起,直接接 TLE5012的 DATA 引脚。
通过更改驱动,控制MOSI的输出类型为开漏或推挽。发送命令时设置MOSI为推挽输出,接收数据时设置MOSI为开漏,以实现正常通信。

存在问题:

上面的方法听着巧妙,但并不算完美。因为有的MCU或者模组,其不一定提供寄存器手册,其开发方式可能是由原厂团队维护的SDK,通过库的方式来调用接口,从而进行二次开发。而SDK的库中会不会预留设置GPIO输出类型的接口,要看开发团队的心情。如果没有,就基本宣布拜拜。

并且直接并联的方式,也容易在调试过程中,因代码不稳定造成GPIO损毁。

再者不方便移植,换个主机设备,很可能因为要改SPI驱动底层,而用不了。

让SSC完美兼容4线SPI的参考电路:

我摸索出个方式是,像下图那样串联电阻。通信方式与标准4线SPI完全一致,波形也基本一致,用不着额外更改SPI驱动,可以直接用原有的SPI驱动去读TLE5012B的数据。串两个电阻就能让TLE5012B有更多的设备兼容性,何乐而不为呢。

只不过MOSI发数据时,也能在MISO上看到波形。但因为SSC是个半双工的SPI,不需要同时发送和接收,对TLE5012B的读数据不会造成影响。
(使用下面的电路,配置SPI时要将MOSI的空闲电平配置为0,配置为1可能会对返回数据有影响。)
(实际波形 见 下面的逻辑分析仪读角度测试波形)

完全兼容4线SPI通信的参考电路:


四、SPI通信时序、读寄存器流程


TLE5012B 的 SPI 使用 模式1(CPOL=0,CPHA=1)来交换数据。

数据传输从 CSn 的下降沿开始,TLE5012B 在 SCL 的下降沿采样 MOSI 数据。 SPI 命令在帧结束(CSn 的上升沿)时执行。

读寄存器流程

磁极旋转角度 的流程在另一篇用户手册中。

读磁极旋转角度:SPI 先发送 0x8021,等待 t_{wr_delay} (最小130ns)后,读 4个字节。

读到的 4个字节中,前2个字节是磁极的角度,后2个自己是安全验证位,用来承载传感器错误信息和数据帧的校验。
(上述过程只读2个字节也可以,只不过因为缺少了安全字,可能会因SPI线路传输导致数据有误)

读磁极角速度 也是一样的:SPI 发送 0x8031,等待 t_{wr_delay} 后,读 6个字节。


五、驱动、逻辑分析仪波形、数据波动测试


硬件平台、驱动源码

测试的 MCU 使用 ESP32,以 4MHz-SPI 的速率通信。

(实测信号线串联220R电阻,SPI以18MHz的速率也能正常通信,远高于手册推荐的8MHz。)

源码:easyio-lib-for-esp32 中的 Demo - 30_SPI_TLE5012B

4线SPI 读磁极转子角度。(0x8021)

仅读了2个字节的寄存器值,没有读后面的安全字,可能会因SPI线路传输导致数据有误。

仅读了2个字节的寄存器值,没有读后面的安全字,可能会因SPI线路传输导致数据有误。

由上面两图可以看到,MOSIMISO串联电阻的电路,可以完美用标准4线SPI 驱动。

虽然在 MOSI发数据时,影响到了 MISO 的波形。但因为SSC是个半双工的SPI,不需要同时发送和接收,所以对TLE5012B的读数据不会造成影响。

(使用上面的电路,需配置SPI MOSI的空闲电平 为 0,配置为1可能会对返回的数据有影响。)

数据波动测试

磁极转子静止时的数据输出。波动不大,很稳定,波动基本在 ±2内。

输出的角度为旋转角度的绝对值,15Bit,0 ~ 32768,对应着 0~360°。用于运动控制的场合,不用像ABI每次上电都要归零点,使用很方便。


相关推荐链接


AS5047P磁编码器应用设计大全解:硬件电路设计、SPI通信时序、逻辑波形分析、注意事项

TLE5012B磁编码器原理,巨磁阻(GMR)磁编码器原理及优点,径向充磁磁铁的安装

各厂商磁编码器对比,AS5047、AS5048、AS5600、TLE5012、MA730

AMS磁编码器:AS5048与AS5047区别,伺服电机闭环系统位置反馈

ODrive踩坑(四)ODrive配置AS5047P-SPI绝对值磁编码器

ODrive踩坑(二)电机和编码器参数配置、校准、位置闭环模式转动电机(TLE5012B - ABI)


↓ 欢迎点赞收藏。

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

  1. linux内核spi总线驱动分析,Linux下的SPI总线驱动(三)

    版权所有,转载请说明转自 原创作者:南京邮电大学  通信与信息系统专业 研二 魏清 五.SPI测试代码 对于SPI总线驱动,我们可以分为SPI控制设备驱动和SPI接口设备驱动.而作为驱动开发人员主要是 ...

  2. 【GD32F427开发板试用】硬件SPI通信驱动CH376芯片,用单片机实现U盘数据下载

    本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动,更多开发板试用活动请关注极术社区网站.作者:周文杰 SPI通信作为单片机多种基础数据传输模式中的一种,驱动外部芯片CH376实现数据 ...

  3. STM32使用SPI通信驱动2.4G无线射频模块发送数据

    目录 SPI介绍 SPI接口原理 SPI工作原理 SPI特征 引脚配置 结构体 库函数 SPI配置过程 SPI.h SPI.c NRF24L01无线射频模块 NRF24L01厂家驱动代码移植 NRF2 ...

  4. LINUX SPI设备驱动模型分析之二 SPI总线模块分析

    上一篇文章我们简要介绍了SPI驱动模块,本章我们详细说明一下spi总线.设备.驱动模块的注册.注销以及这几个模块之间的关联. SPI总线的注册 spi模块也是基于LINUX设备-总线-驱动模型进行开发 ...

  5. 基于MT7688 原厂SDK 使用SPI控制器驱动TFT屏幕ILI9225驱动器(spi接口)

    以下是我的一个利用SPI控制器操作屏的一个操作实例 包含一个bpeer_tft.c 和一个bpeer_tft.h 这是我基于flash驱动剥离出来的spi控制器驱动 好的话,顶起来~~~~~~~~~~ ...

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

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

  7. 【ZYNQ实战】利用AXI Quad SPI快速打通Linux至PL端SPI从设备

    关注.星标嵌入式客栈,精彩及时送达 [导读] 前面写过篇介绍ZYNQ基本情况的文章,今天来肝一篇实战文章介绍AXI quad SPI 使用方法,如果你正使用ZYNQ的这个IP,希望对你有所帮助. 初识 ...

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

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

  9. 基于FPGA的 SPI通信 设计(1)

    引言 低速通信目前搞过 UART串口通信.IIC通信.其实 SPI 也算是中低速(有时也可以用作高速通信)串行通信的范畴,但是一直还没真正实现过,所以此系列就 SPI的协议以及FPGA设计作几篇博客记 ...

最新文章

  1. POJ2387 Til the Cows Come Home -DIJKSTRA 练习
  2. [BZOJ]1503: [NOI2004]郁闷的出纳员
  3. MATLAB粒子模拟代码注释
  4. Java19-day10【标准输入输出流、字节字符打印流、对象序列化-反序列化流、serialVersionUIDtransient、Properties】
  5. .NET Core ORM 类库Petapoco中对分页Page添加Order By对查询的影响
  6. Java增强枚举的用例
  7. 【CodeForces - 144C】Anagram Search(尺取,滑窗问题,处理字符串计数)
  8. 面向对象之多态,魔法函数
  9. 关于dependency的scope
  10. OpenStack的组件
  11. keil中编译时出现*** ERROR L107: ADDRESS SPACE OVERFLOW
  12. Golang | flag pflag介绍
  13. threejs-自定义着色器材质
  14. \t\t健康生活:20个健康小细节隐藏大危害!
  15. 如何调教ChatGPT成为你的策略助手
  16. 数学建模 多属性决策模型
  17. 第77届奥斯卡金像奖完全获奖名单 [附完全提名名单]
  18. 小程序miniprogram自动化上传,不需要依赖微信开发者工具
  19. C语言项目源码,C语言源码大全
  20. C语言没有string类型

热门文章

  1. xargs 将标准输入转换成命令行参数
  2. stm32端口复用和重映射
  3. Android App性能优化十技巧
  4. 解决 PL/SQL Oracle错误:ORA-01033
  5. Unity2D 入门教程
  6. 软件设计师19-系统开发和运行02
  7. Jquery实现验证码功能 完美效果 jsp php 页面均可调用
  8. nasa和linux的关系,跟美国NASA毅力号登陆火星的Linux是一个无图形的纯命令行系统...
  9. 学会这个大屏神器,低代码开发高端可视化大屏不在话下
  10. 数仓、数据平台和中台还分不清楚?大佬的10年经验之谈,看完懂了