TLE5012B ESP32驱动程序、硬件电路设计、4线SPI通信,驱动完美兼容4线SPI不用改MOSI开漏推挽输出
一、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
,接口为ABI
和SSC
。其他型号的区别只是输出接口不一样,但都支持SSC
通信。 - 基于
巨磁阻
原理,有别于AS5047使用的霍尔。
三、硬件设计、参考电路、SPI兼容思路
TLE5012B 支持的供电范围为 3.3~5.5V
。
个人建议使用使用 3.3V供电,通信引脚串电阻还可以用来兼容5V的MCU电平。
SPI兼容思路:
TLE5012B 接口使用 SSC
,兼容 SPI
,其实相当于一个半双工的SPI
。
看过他人的电路。一般是直接将 MCU
的 MOSI
和 MISO
并联一起,直接接 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线路传输导致数据有误。
由上面两图可以看到,MOSI
、MISO
串联电阻的电路,可以完美用标准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开漏推挽输出相关推荐
- linux内核spi总线驱动分析,Linux下的SPI总线驱动(三)
版权所有,转载请说明转自 原创作者:南京邮电大学 通信与信息系统专业 研二 魏清 五.SPI测试代码 对于SPI总线驱动,我们可以分为SPI控制设备驱动和SPI接口设备驱动.而作为驱动开发人员主要是 ...
- 【GD32F427开发板试用】硬件SPI通信驱动CH376芯片,用单片机实现U盘数据下载
本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动,更多开发板试用活动请关注极术社区网站.作者:周文杰 SPI通信作为单片机多种基础数据传输模式中的一种,驱动外部芯片CH376实现数据 ...
- STM32使用SPI通信驱动2.4G无线射频模块发送数据
目录 SPI介绍 SPI接口原理 SPI工作原理 SPI特征 引脚配置 结构体 库函数 SPI配置过程 SPI.h SPI.c NRF24L01无线射频模块 NRF24L01厂家驱动代码移植 NRF2 ...
- LINUX SPI设备驱动模型分析之二 SPI总线模块分析
上一篇文章我们简要介绍了SPI驱动模块,本章我们详细说明一下spi总线.设备.驱动模块的注册.注销以及这几个模块之间的关联. SPI总线的注册 spi模块也是基于LINUX设备-总线-驱动模型进行开发 ...
- 基于MT7688 原厂SDK 使用SPI控制器驱动TFT屏幕ILI9225驱动器(spi接口)
以下是我的一个利用SPI控制器操作屏的一个操作实例 包含一个bpeer_tft.c 和一个bpeer_tft.h 这是我基于flash驱动剥离出来的spi控制器驱动 好的话,顶起来~~~~~~~~~~ ...
- AS5047P磁编码器ESP32驱动程序、硬件电路设计、SPI通信时序、逻辑波形分析、注意事项
1.AS5047P硬件设计 1.1 简介.性能参数 AS5047P 是一种款高分辨率旋转位置传感器,用于在整个 360 度范围内进行高速(高达 28krpm)角度测量.这种新型位置传感器配备了革命性的 ...
- 【ZYNQ实战】利用AXI Quad SPI快速打通Linux至PL端SPI从设备
关注.星标嵌入式客栈,精彩及时送达 [导读] 前面写过篇介绍ZYNQ基本情况的文章,今天来肝一篇实战文章介绍AXI quad SPI 使用方法,如果你正使用ZYNQ的这个IP,希望对你有所帮助. 初识 ...
- 通信协议整理之 SPI 通信
通信协议整理之 SPI 通信 文章目录 通信协议整理之 SPI 通信 简介 工作原理 通信连接方式 补充 硬件 SPI 和模拟 SPI 简介 SPI是串行外设接口(Serial Peripheral ...
- 基于FPGA的 SPI通信 设计(1)
引言 低速通信目前搞过 UART串口通信.IIC通信.其实 SPI 也算是中低速(有时也可以用作高速通信)串行通信的范畴,但是一直还没真正实现过,所以此系列就 SPI的协议以及FPGA设计作几篇博客记 ...
最新文章
- POJ2387 Til the Cows Come Home -DIJKSTRA 练习
- [BZOJ]1503: [NOI2004]郁闷的出纳员
- MATLAB粒子模拟代码注释
- Java19-day10【标准输入输出流、字节字符打印流、对象序列化-反序列化流、serialVersionUIDtransient、Properties】
- .NET Core ORM 类库Petapoco中对分页Page添加Order By对查询的影响
- Java增强枚举的用例
- 【CodeForces - 144C】Anagram Search(尺取,滑窗问题,处理字符串计数)
- 面向对象之多态,魔法函数
- 关于dependency的scope
- OpenStack的组件
- keil中编译时出现*** ERROR L107: ADDRESS SPACE OVERFLOW
- Golang | flag pflag介绍
- threejs-自定义着色器材质
- \t\t健康生活:20个健康小细节隐藏大危害!
- 如何调教ChatGPT成为你的策略助手
- 数学建模 多属性决策模型
- 第77届奥斯卡金像奖完全获奖名单 [附完全提名名单]
- 小程序miniprogram自动化上传,不需要依赖微信开发者工具
- C语言项目源码,C语言源码大全
- C语言没有string类型