1. 写本文是为了记录调试该模块所遇到的问题以及解决办法,同时是为了方便日后回顾。

2. SPI通信和SSC通信

TLE5012B编码器的通信方式为SSC通信,兼容SPI通信,网上已经有很多兼容配置方案,在这里不一一赘述了,链接1,链接2。

但是在这里,我使用的方案与上述方案不一样,我使用的是SPI的双线单工同步传输。STM32的SPI配置代码如下:重点在Direction。

  hspi4.Instance = SPI4;hspi4.Init.Mode = SPI_MODE_MASTER;hspi4.Init.Direction = SPI_DIRECTION_1LINE;hspi4.Init.DataSize = SPI_DATASIZE_16BIT;hspi4.Init.CLKPolarity = SPI_POLARITY_LOW;hspi4.Init.CLKPhase = SPI_PHASE_2EDGE;hspi4.Init.NSS = SPI_NSS_SOFT;hspi4.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;hspi4.Init.FirstBit = SPI_FIRSTBIT_MSB;hspi4.Init.TIMode = SPI_TIMODE_DISABLE;hspi4.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;hspi4.Init.CRCPolynomial = 10;

无论哪种硬件配置,只要能通信成功即可。 通信成功的标志是收到的安全字为0xfxxx。安全字为什么是0xfxxx,是因为datasheet写明了。如下图所示

3. 从传输过来的数据解算对应的参数

3.1 角度解算

角度的解算比较简单,根据用户手册给出的公式即可解算出来。

所以解算的代码如下:

encoder_SPI_NS_L();
uint16_t ang_reg_v = READ_ANGLE_VALUE, data_v[2];
HAL_SPI_Transmit(&hspi4, (uint8_t *)(&ang_reg_v), 1, 0xff);
HAL_SPI_Receive(&hspi4, (uint8_t *)(&data_v), 2, 0xff);
encoder_SPI_NS_H();
data_v[1] = data_v[1] & 0x7fff;
float ang_v  = (float)data_v[1] * 360.0 / (0x7fff);

3.2 角速度解算

角速度解算需要找一些参数,如下图

可以看出来,角速度的解算需要确定当前使用的角度范围以及t_upd的时间。查datasheet可以找到,t_upd在Autocalibration小节有一个解释,如下图。可以发现是取决于FIR_MD。

查找FIR_MD,如下图,其在mode1寄存器中,复位值基于导数,查找基于导数,猜测和磁编码器型号有关,至此找到FIR_MD,也就得到了t_upd。

再找角度范围,发现在mode2寄存器中,如下图,复位0x80,范围360°,至此已经可以解算角速度。但是在解算调试过程中发现解算数值一直不对,经过排查,传回来的15位数据是有符号类型的,还需要进行符号判断。

所以解算代码如下:

uint16_t speed_reg_v = READ_SPEED_VALUE , data_v[2];
encoder_SPI_NS_L();
HAL_SPI_Transmit(&hspi4, (uint8_t *)(&speed_reg_v), 1, 0xff);
HAL_SPI_Receive(&hspi4, (uint8_t *)(&data_v), 2, 0xff);
encoder_SPI_NS_H();
data_v[1] = (data_v[1] & 0x7fff);
uint16_t sign = data_v[1] & 0x4000;
if(sign == 0x4000) {data_v[1] = data_v[1] | 0x8000;
}
int16_t speed = (int16_t)data_v[1];
speed = speed * 1000;
float tupd = 2.0 * 42.7 / 1000;
float speed_v  = (float)(speed * 2 * 3.14) / 0x7fff;   //rad/s
speed_v = speed_v  / tupd;
printf("speed:%.3f,   %x\n",speed_v, data_v[0]);

TLE5012B磁编码器解算角度和角速度相关推荐

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

    ODrive对无刷电机进行闭环控制,需要提前获取电机和编码器的参数. 电机极对数 电机需要配置的参数为 极对数.最大电流.校准电流.电机类型.其他参数如相电阻.电感等可由驱动器自动测量. 极对数 = ...

  2. TLE5012B磁编码器原理及优点,径向充磁磁铁的安装。AS5047、AS5048、AS5600、TLE5012、MA730

      磁编码器以其独特的优点,在近两年的产品应用上十分流行.它体积小巧.安装方便.分辨率高.较光电编码器成本更低.不受灰尘油渍影响.可非接触安装.便于与电机集成一体实现伺服控制.相较于光电编码器,磁编码 ...

  3. ODrive踩坑(四)AS5047P-SPI绝对值磁编码器,不需每次上电校准无刷电机,直接上电可用

    前几篇介绍了ODrive在Windows下的使用环境搭建,以及TLE5012B.AS5047P的ABI配置. ODrive教程资源导航 ODrive踩坑(一)windows下使用环境的搭建,odriv ...

  4. 【FOC控制】英飞凌TC264无刷驱动方案simplefoc移植(5)-磁编码器移植AS5600 软件IIC

    [FOC控制]英飞凌TC264无刷驱动方案simplefoc移植(5)-磁编码器移植 [FOC控制]英飞凌TC264无刷驱动方案simplefoc移植(5)-磁编码器移植 一.编码器选择 二.通讯方式 ...

  5. ODrive踩坑(三)AS5047P磁编码器的ABI接口

    前两篇已经介绍过ODrive在Windows下的使用环境搭建,以及TLE5012B - ABI编码器闭环运动的基本配置. ODrive教程资源导航 ODrive踩坑(一)windows下使用环境的搭建 ...

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

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

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

    新增补了一篇,详细介绍了GMR磁编码器原理.同类对比优劣.安装方式.设计注意事项,欢迎阅览:TLE5012B磁编码器原理及优点,径向充磁磁铁的安装 AMS产品: 主打产品是AS5047和AS5048. ...

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

    本文只简介 AMS的磁编码器.其他厂商磁编IC见另一篇:https://blog.csdn.net/Mark_md/article/details/100181701 新增补了一篇,详细介绍了GMR磁 ...

  9. RoboMaster视觉教程(6)目标位置解算(PnP求解目标与摄像头间的相对位置)

    RoboMaster视觉教程(6)目标位置解算(PnP求解目标与摄像头间的相对位置) 概览 算法原理 solvePnP的使用流程 实验:测量二维码相对于摄像头的位置 RoboMaster视觉程序中的位 ...

最新文章

  1. Java蓝牙电话_Android mediaPlayer和蓝牙汽车/耳机电话
  2. java的多线程实现方式_java 多线程实现方式
  3. .NET6之MiniAPI(十七):缓存
  4. Linux命令之 chsh -- 用来更换登录系统时使用的shell
  5. linux grub 下载,GRUB 2.04发布下载,附新功能介绍
  6. Linux 死机时抢救措施
  7. addroutes没添加进去_CAD中如何绘制函数曲线及添加数学公式
  8. [C++]求模与求余运算
  9. dns服务器功能作用,最详细的DNS概念及作用介绍
  10. 光纤跳线如何区分单模和多模
  11. 区块链底层平台有哪些 区块链底层平台搭建
  12. python计数函数:count()和value_count()
  13. 记录自己关于Linux的学习和RHCSA、RHCE认证相关
  14. 宠物服务App功能简介
  15. C4D全版本软件安装包(含最新2023)
  16. HTML iframe 标签
  17. 张艾迪(创始人):世界最高级文明信仰
  18. Python 开发一个间谍小程序!编程语言中的无间道!
  19. Redis篇详解1--原理
  20. Qt5.6.1移植海思Hi3521d(三)

热门文章

  1. 7-26 最大公约数和最小公倍数
  2. 戴尔台式机7080MT(I7处理器英特尔10700)安装centos
  3. Launcher3---Hotseat 应用图标
  4. JavaScript的函数调用
  5. 史上最完整的Markdown基础教程
  6. springboot实现日志追踪
  7. 采用Selenium爬虫如何通过cookie访问网站
  8. 电脑清除dns缓存命令
  9. mysql 查找相似数据_跳槽必备:MySQL高频面试题,都在这了!
  10. matlab进行有限元,matlab编程实现有限元方法