编码器TLE5012B使用

前言

  TLE5012B 角度传感器基于 iGMR 技术,可检测平行于封装表面磁场 360°变 化。可应用于汽车和工业领域里转角位置检测如方向盘转角,电机位置等。
  TLE5012B 内部集成角度计算模块,可以将原始值(sine 和 cosine)进行数字处理后输出绝对角度。集成自动标定和温度补偿功能,在温度范围和寿命周期里可以达到 1°精度。汽车级认证,可工作在-40℃至 150℃范围。
  TLE5012B 具备极其精确的角度分辨率(15bit)以及快速的信号处理能力和较短的延时/更新率,极其适合精确测定高动态应用中的转子位置。同时TLE5012B 具有先进的诊断功能及安全特性,确保了产品高可靠性。


一、通信协议

  TLE5012B支持多种通讯协议,即SSC(Synchronous Serial Communication)协议, PWM( Pulse-Width-Modulation)协议,SPC(Short-PWM-Code ,兼容SENT协议)协议,HSM(Hall Switch Mode)模式以及IIF(Incremental Interface)协议。本文主要介绍SSC和IIF协议。
  TTLE5012B出厂时预标定了寄存器配置,用户可以在不作修改或者很少修改寄存器配置情况下使用。TLE5012B主要有四种版本,即:TLE5012B E1000 SSC+IIF;TLE5012B E3005 SSC+HSM;TLE5012B E5000 SSC+PWM;TLE5012B E9000 SSC+SPC。用户可以根据需要选择合适版本,限于篇幅,本文主要介绍SSC和IIF协议。

1.1 SSC 协议

  TLE5012B SSC 为三线制协议,允许双向通讯,兼容 SPI 协议。可以通过 SSC协议读取 TLE5012B 内部寄存器数据(如角速度、角度原始数值、温度等)以及配置寄存器(如解析度、自动标定,工作模式等)。SSC 允许高速数据传输,波特率为 8Mbit/s。一个总线上最多允许 4 个 TLE5012B 进行通讯。SSC 通讯距离较短,建议在 30cm 以内,所以适合板间通讯。
  TLE5012B SSC数据传输方式为半双工,因此当和四线制SPI接口通讯时, MCU SPI接口数据发送和数据接收脚需要同时连接到TLE5012B data脚上。当TLE5012B向MCU传输数据时,MCU的数据发送脚需要拉高。反之,当MCU向TLE5012B发送命令时,MCU的数据接收脚需要拉高。
  SSC传输信息包含命令,数据以及安全信息。信号传输时CSQ需要拉低,并提供SCK信号。可以通过SSC协议读取以及配置TLE5012B内部寄存器数据。如图3所示为MCU通过SSC读取TLE5012B内部寄存器角度信息。MCU向TLE5012B发送8021H,经过twr_delay延迟后,TLE5012B会返回角度信息及状态信息。
  MCU通过SSC配置TLE5012B内部寄存器MOD_2。MCU发送命令5081H,修改MOD_2寄存器内容为809H。 经过twr_delay延迟后,TLE5012B会返回状态信息。当安全信息传输完毕后,下一个数据传输前片选信号CSQ需要退出然后再拉低。

1.2 IIF协议

  IIF协议可用于模拟光电编码通讯,包含IFA,IFB以及IFC三条单向通讯信号。可以取代光电编码器,用于高速电机位置检测。IIF增量编码信号为输出占空比50%的矩形波,每一个波形代表最小角度解析度,可以通过SSC接口配置成9 bit(每一圈512个脉冲信号)到12 bit(每一圈4096个脉冲信号)解析度,MCU通过计算IIF 信号脉冲数可以知道电机位置信息。
  TLE5012B E1000有两种IIF工作模式,即A/B Mode以及Step/Direction Mode。
  当为 A/B Mode时,其中 IFA 和 IFB 输出脉冲代表角度信息,两个信号相位相差 90°。根据 A 相位是否超前 B 相位判定电机转动方向。IFC 代表零点位置
  TLE5012B E1000 默认 IIF 协议为 A/B Mode,可以通过 SSC 配置为Step/Direction Mode。当为 Step/Direction Mode,其中 IFA 输出增量信号代表角度信息,IFB 代表方向信息,而 IFC 代表零点位置。
  TLE5012B 内部 14 位计数器(IIF_CNT)可用于增量编码计数,能够记录一整圈从 0 到 16383 个脉冲, 可用于 MCU 和传感器之间数据同步。取决于内部寄存器设置(IIF 解析度 9bit~12bit),同步时 IIF_CNT 需减掉 2 至 5 个 LSB 数据。
  当 TLE5012B E1000 上电后,电机还没有开始转动,TLE5012B IIF 脚会输出一定脉冲数,此为 TLE5012B E1000 启动特性,MCU 通过计算脉冲数可获得TLE5012B 起始位置绝对角度信息。
即:起始位置绝对角度=脉冲数*180°/2H
  起始位置脉冲最大数目在 180°位置,此时有 2048 个脉冲。如果 IFA 相位在 IFB 相位之前,则该角度在 0°和 180°之间。如果 IFB 相位在 IFA 相位之前,则角度在 180°和 360°之间。起始位置脉冲结束后,TLE5012B 进入正常工作模式。

1.3 其他协议

  PWM通讯协议为单向通讯方式,解析度为12bit,有四种工作频率,即:0.2KHz,0.5KHz,1KHz以及2KHz,可通过SSC接口配置工作频率。占空比代表角度信息,其中占空比在0-6.25%以及93.75-100%区间用于诊断。占空比在6.25%-93.75%区间代表角度。PWM通讯距离可到5m。
  SPC 协议兼容 SENT 协议,连续的两个下降沿之间的时间长度代表着 4bit 数据。不同的是 SPC 允许双向通讯,且通讯时 MCU 需要给 TLE5012B 发送一个触发信号以唤醒其传输角度信息。除角度信息外,还可传输温度信息。可通过 SSC接口配置解析度为 12bit 或者 16bit。一个总线上最多允许 4 个 TLE5012B 进行通讯。SPC 通讯距离可到 5m。
  HSM模式可模拟三个霍尔开关,用于电机块换向。HSM包含三个单向通讯接口,默认极对数为5,可通过SSC接口配置极对数等参数。

二、SSC寄存器

2.1 SSC寄存器位型

在这里插入图片描述

2.2 配置寄存器校验和

  为监控传感器配置的完整性,TLE5012B 对 08H 至 0FH 地址范围内的配置寄存器进行循环冗余检查。8 位 CRC 存储在寄存器 CRC_PAR(地址 0FH)中。对这些寄存器中的一个或多个寄存器进行修改时,利用 TLE5012B 数据手册提供的生成器多项式计算寄存器 08H 至 0FH 的新校验和,然后将其写入 CRC_PAR 寄存器。否则会发生 CRC 失 败错误(状态位 S_FUSE = 1)。 将寄存器 AS_FUSE 设为 0 就可以禁用 CRC 检查。启用自动校准后,CRC 检查自 动禁用,因为自动校准会对数个配置寄存器进行周期性调节。

2.3 寄存器说明

2.3.1 状态寄存器

  1. 读出后复位为“0”
  2. 复位后比特位为“1”,直至状态寄存器被读取。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3.2 激活状态寄存器

在这里插入图片描述
在这里插入图片描述

2.3.3 角度值寄存器

在这里插入图片描述

2.3.4 角速度寄存器

在这里插入图片描述

2.3.5 角度转数寄存器

在这里插入图片描述

2.3.6 帧同步寄存器

在这里插入图片描述

2.3.7 接口模式1 寄存器

在这里插入图片描述
在这里插入图片描述

2.3.8 SIL 寄存器

在这里插入图片描述
在这里插入图片描述

2.3.9 接口模式2 寄存器

自动校准只对 ANG_RANGE = 080H 有效

在这里插入图片描述
在这里插入图片描述

2.3.10 接口模式3 寄存器

  1. 工厂校准,令 0° 方向与芯片边缘平行。
  2. 手动设置 0° 位置,将磁体旋转到想要的位置,然后读取 AVAL 寄存器,减少3 个 LSB 以获取一个 12 位角度值;然后从
    ANG_BASE 寄存器中减去这个值。

在这里插入图片描述
在这里插入图片描述

2.3.11 X偏移寄存器

在这里插入图片描述

2.3.12 Y偏移寄存器

在这里插入图片描述

2.3.13 同步性寄存器

在这里插入图片描述

2.3.14 IFAB寄存器(多功能)

在这里插入图片描述
在这里插入图片描述

2.3.15 接口模式 4 寄存器(多功能)

  1. 若启用自动校准,TCO_X_T 会被自动设定为 0。一旦禁用自复位:基于导数信校准值被加载到 TCO_X_T 中。
  2. 在 SPC 接口配置中,传感器只会在 IFA 引脚收到 SPC 触发脉冲后更新 AVAL 寄存器。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3.16 温度系数寄存器

若启用自动校准,TCO_Y_T 会被自动设定为 0。一旦禁用自动校准,激光引信校准值被加载到 TCO_Y_T 中。

在这里插入图片描述

2.3.17 X原始值寄存器

在这里插入图片描述

2.3.18 Y原始值寄存器

在这里插入图片描述

2.3.19 增量式计数寄存器

在这里插入图片描述

2.4 通信示例(SSC 命令)

2.4.1 读角度值

在这里插入图片描述

2.4.2 读角速度和角转数

在这里插入图片描述

2.4.3修改接口模式2 寄存器

在这里插入图片描述

2.5 引信值

关于配置寄存器基于导数的复位(存储在传感器的激光引信中)
在这里插入图片描述

三、代码示例

SPI读写函数

uint SPI_ReadWriteByte(uint temp_data)
{
	uint u16Data1 = 0,u16Data2 = 0;
	
	my_Timer.U16_Timer_Out_SPI = 10;//2;
	SPDAT = ((temp_data >> 8) & 0xFF);      //发送测试数据
	while ((!(SPSTAT & 0x80)) && my_Timer.U16_Timer_Out_SPI );               //查询完成标志
	SPSTAT = 0xc0;                          //清中断标志
	u16Data1 = SPDAT;
	
	SPDAT = (temp_data & 0xFF);             //发送测试数据
	while ((!(SPSTAT & 0x80)) && my_Timer.U16_Timer_Out_SPI );               //查询完成标志
	SPSTAT = 0xc0;                          //清中断标志
	u16Data2 = SPDAT;
	
	if(my_Timer.U16_Timer_Out_SPI == 0)		//SPI通讯超时
	{
		spi.err.Bit.timeOut = 1;
		u16Data1 = 0;
		u16Data2 = 0;
	}
	else
	{
		spi.err.Bit.timeOut = 0;
		spi.errCount = 0;
	}
	
	return ((u16Data1 << 8) + u16Data2);
	
}

读取TLE5012信息

uint ReadValue(uint u16RegValue)
{
	//static uint u16Data1,u16Data2,u16Data;
	uint u16Data = 0;
	uint crcValue = 0;
	
	do
	{
		SPCTL |= 0x40;
		NSS_SPI_CS_L;
		SPI_ReadWriteByte(u16RegValue);		//发送读命令
		SPI_MOSI_OFF;
		u16Data=SPI_ReadWriteByte(0xffff);	//读SPI返回数值
		SPI_MOSI_OFF;
		spi.crcVal = SPI_ReadWriteByte(0xffff) & 0xFF;		//读TLE5012返回安全字
		NSS_SPI_CS_H;
		SPI_MOSI_ON;
		SPCTL &= (~0x40);
		
		spi.crcData[0] = (uint8)(u16RegValue >> 8);
		spi.crcData[1] = (uint8)(u16RegValue & 0xFF);
		spi.crcData[2] = (uint8)(u16Data >> 8);
		spi.crcData[3] = (uint8)(u16Data & 0xFF);
		
		crcValue = SPI_CRC8((unsigned char *)spi.crcData , 4);
		
		if(spi.crcVal != crcValue)
		{
			spi.err.Bit.checkFail = 1;
			u16Data = 0x0000;
			spi.errCount++;
		}
		else
		{
			spi.err.Bit.checkFail = 0;
			spi.errCount = 0;
		}
		
		if(spi.errCount >= 3)
		{
			spi.err.Bit.comErr = 1;
			break;
		}
	}while(spi.err.Bit.checkFail !=  0);
	
	return (u16Data);
}

配置TLE5012寄存器

uint WriteValue(uint u16RegValue,uint u16DataValue)
{
	static uint u16Safe = 0;
	uint16 crcValue = 0;
	
	do
	{
		SPCTL |= 0x40;
		NSS_SPI_CS_L;
		SPI_ReadWriteByte(u16RegValue);		//发送命令字
		SPI_ReadWriteByte(u16DataValue);	//发送数据字
		SPI_MOSI_OFF;
		u16Safe=SPI_ReadWriteByte(0xffff);	//读TLE5012返回安全字
		NSS_SPI_CS_H;
		SPI_MOSI_ON;
		SPCTL &= (~0x40);
		
		spi.crcData[0] = (uint8)(u16RegValue >> 8);
		spi.crcData[1] = (uint8)(u16RegValue & 0xFF);
		spi.crcData[2] = (uint8)(u16DataValue >> 8);
		spi.crcData[3] = (uint8)(u16DataValue & 0xFF);
		
		crcValue = SPI_CRC8((unsigned char *)spi.crcData , 4);
		spi.crcVal = u16Safe & 0xFF;
		if(spi.crcVal != crcValue)
		{
			spi.err.Bit.checkFail = 1;
			//u16Data = 0x0000;
			spi.errCount++;
		}
		else
		{
			spi.err.Bit.checkFail = 0;
			spi.errCount = 0;
		}
		
		if(spi.errCount > 3)
		{
			spi.err.Bit.comErr = 1;
			break;
		}
	}while(spi.err.Bit.checkFail !=  0);
	
	
	return (u16Safe);
}

TLE5012的CRC校验

//CRC对照表
const unsigned char SPI_TableCRC[256] = 
{
	//The ¡°crc¡± of the position [1] (result from operation [crc ^*(message+Byteidx)])
	//is 0x00 -> 0x00 XOR 0x11D = 0x00 (1 byte).
	0x00,
	//The ¡°crc¡± of the position [2] is 0x1D -> 0x01 XOR 0x11D = 0x1D (1 byte).
	0x1D,
	//The ¡°crc¡± of the position [3] is 0x3A -> 0x02 XOR 0x11D = 0x3A (1 byte).
	0x3A,
	//For all the rest of the cases.
	0x27, 0x74, 0x69, 0x4E, 0x53, 0xE8, 0xF5, 0xD2, 0xCF, 0x9C, 0x81, 0xA6, 0xBB, 0xCD,
	0xD0, 0xF7, 0xEA, 0xB9, 0xA4, 0x83, 0x9E, 0x25, 0x38, 0x1F, 0x02, 0x51, 0x4C, 0x6B,
	0x76, 0x87, 0x9A, 0xBD, 0xA0, 0xF3, 0xEE, 0xC9, 0xD4, 0x6F, 0x72, 0x55, 0x48, 0x1B,
	0x06, 0x21, 0x3C, 0x4A, 0x57, 0x70, 0x6D, 0x3E, 0x23, 0x04, 0x19, 0xA2, 0xBF, 0x98,
	0x85, 0xD6, 0xCB, 0xEC, 0xF1, 0x13, 0x0E, 0x29, 0x34, 0x67, 0x7A, 0x5D, 0x40, 0xFB,
	0xE6, 0xC1, 0xDC, 0x8F, 0x92, 0xB5, 0xA8, 0xDE, 0xC3, 0xE4, 0xF9, 0xAA, 0xB7, 0x90,
	0x8D, 0x36, 0x2B, 0x0C, 0x11, 0x42, 0x5F, 0x78, 0x65, 0x94, 0x89, 0xAE, 0xB3, 0xE0,
	0xFD, 0xDA, 0xC7, 0x7C, 0x61, 0x46, 0x5B, 0x08, 0x15, 0x32, 0x2F, 0x59, 0x44, 0x63,
	0x7E, 0x2D, 0x30, 0x17, 0x0A, 0xB1, 0xAC, 0x8B, 0x96, 0xC5, 0xD8, 0xFF, 0xE2, 0x26,
	0x3B, 0x1C, 0x01, 0x52, 0x4F, 0x68, 0x75, 0xCE, 0xD3, 0xF4, 0xE9, 0xBA, 0xA7, 0x80,
	0x9D, 0xEB, 0xF6, 0xD1, 0xCC, 0x9F, 0x82, 0xA5, 0xB8, 0x03, 0x1E, 0x39, 0x24, 0x77,
	0x6A, 0x4D, 0x50, 0xA1, 0xBC, 0x9B, 0x86, 0xD5, 0xC8, 0xEF, 0xF2, 0x49, 0x54, 0x73,
	0x6E, 0x3D, 0x20, 0x07, 0x1A, 0x6C, 0x71, 0x56, 0x4B, 0x18, 0x05, 0x22, 0x3F, 0x84,
	0x99, 0xBE, 0xA3, 0xF0, 0xED, 0xCA, 0xD7, 0x35, 0x28, 0x0F, 0x12, 0x41, 0x5C, 0x7B,
	0x66, 0xDD, 0xC0, 0xE7, 0xFA, 0xA9, 0xB4, 0x93, 0x8E, 0xF8, 0xE5, 0xC2, 0xDF, 0x8C,
	0x91, 0xB6, 0xAB, 0x10, 0x0D, 0x2A, 0x37, 0x64, 0x79, 0x5E, 0x43, 0xB2, 0xAF, 0x88,
	0x95, 0xC6, 0xDB, 0xFC, 0xE1, 0x5A, 0x47, 0x60, 0x7D, 0x2E, 0x33, 0x14, 0x09, 0x7F,
	0x62, 0x45, 0x58, 0x0B, 0x16, 0x31, 0x2C, 0x97, 0x8A, 0xAD, 0xB0, 0xE3, 0xFe,
	//The ¡°crc¡± of the position [255] is 0xD9 -> 0xFE XOR 0x11D = 0xD9 (1 byte).
	0xD9,
	//The ¡°crc¡± of the position [256] is 0xC4 -> 0xFF XOR 0x11D = 0xC4 (1 byte).
	0xC4
};

//配置
unsigned char SPI_CRC8(unsigned char *message, unsigned char Bytelength )
{
	//¡°crc¡± defined as the 8-bits that will be generated through the message till the
	//final crc is generated. In the example above this are the blue lines out of the
	//XOR operation.
	unsigned char crc;
	//¡°Byteidx¡± is a counter to compare the bytes used for the CRC calculation and
	//¡°Bytelength¡±.
	unsigned char Byteidx;
	//Initially the CRC remainder has to be set with the original seed (0xFF for the TLE5012B).
	crc = 0xFF;
	//For all the bytes of the message.
	for(Byteidx=0; Byteidx<Bytelength; Byteidx++)
	{
		//¡°crc¡± is the value in the look-up table TableCRC[x] at the position ¡°x¡±.
		//The position ¡°x¡± is determined as the XOR operation between the previous ¡°crc¡± and
		//the next byte of the ¡°message¡±.
		//¡°^¡± is the XOR operator.
		crc = SPI_TableCRC[crc ^ *(message+Byteidx)];
	}
	//Return the inverted ¡°crc¡± remainder(¡°~¡± is the invertion operator). An alternative
	//to the ¡°~¡± operator would be a XOR operation between ¡°crc¡± and a 0xFF polynomial.
	return(~crc);
}
  • 18
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
TLE5012B磁性编码器是一种基于Hall效应原理的磁性传感器,可用于测量转动物体的角度和速度。它具有高精度、高分辨率和抗干扰能力强的特点,广泛应用于汽车电子、工业自动化等领域。 TLE5012B磁性编码器的典型电路包括磁场探测部分和信号处理部分。磁场探测部分由Hall效应传感器组成,用于检测磁场的强度和方向。该传感器通过检测磁场引起的电势差来测量磁场的信息,进而转换为数字信号输出。 信号处理部分由模拟前端和数字处理器组成。模拟前端负责对Hall传感器的输出信号进行放大、滤波和调整,以提高信号的质量和稳定性。数字处理器接收并处理模拟信号,将其转换为数字信号,并进行信号校正、滤波、放大和计算等操作,最终得到角度和速度的测量结果。 典型的TLE5012B磁性编码器电路还包括电源管理模块和通信接口模块。电源管理模块用于为整个电路提供稳定的电源,确保其正常运行。通信接口模块通过串行或并行接口与外部设备进行数据交换,以实现与其他系统的连接和通信。 总的来说,TLE5012B磁性编码器典型电路由磁场探测部分、信号处理部分、电源管理模块和通信接口模块组成。通过这些部分的协同工作,磁性编码器能够准确地测量转动物体的角度和速度,并将结果传递给外部设备,实现对转动物体的控制和监测。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别问,问就是全会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值