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

前两篇已经介绍过ODriveWindows下的使用环境搭建,以及TLE5012B - ABI编码器闭环运动的基本配置

ODrive教程资源导航

ODrive踩坑(一)windows下使用环境的搭建,odrivetool及USB驱动的安装

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

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

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

ODrive踩坑(五)驱动云台电机、低齿槽转矩电机实现高精度定位


1、AS5047P简介

这次使用的是另一款磁编码器:AS5047P。性能方面优于 TLE5012B-E1000

AS5047P 是一款14位绝对角度位置传感器,适用于最高 28K RPM 转速的测量,动态角度误差最大值约为 ±0.2°。拥有 SPI、ABI、UVW、PWM 等多种接口。配备了革命性的集成 动态角度误差补偿(DAEC™),延迟几乎为零,并提供强大的设计,可抑制外部杂散磁场的影响。

ODrive 支持 AS5047 的SPI接口,但配置较为麻烦,也较容易出错,SPI设置会在下一章单独介绍。

这章主要来说 AS5047P 的ABI接口,之前用的磁编码器型号为 TLE5012B-E1000,与之相比,AS5047P 有如下好处:

  • 14 位绝对角度位置传感器。(分辨率虽然比 TLE5012B-E1000 低1位,但拥有更高的动态精度)
  • 适用于最高 28K RPM 转速的测量,动态角度误差最大值约为 ±0.2°。
  • 通信支持 标准 4线SPI 标准接口。
  • 拥有 SPI、ABI、PWM、UVW 等多种位置角度输出方式。
  • ABI 接口可配置输出为 4096/4000/2048/2000/1600/1200/1024/800/400/200/100 步每转。(有默认值,如需调整需OTP编程,只可更改一次)(注意:ABI 接口最大只支持 12位输出。)

2、AS5047P 与 TLE5012B 参数对比


2.1、最高转速

TLE5012B-E1000 支持的最高转速仅为 10K RPM
AS5047P 适用的最高转速仅为 28K RPM

2.2、定位精度、动态误差

虽然 AS5047P 的分辨率比 TLE5012B-E1000 的15位少了1位,但这并不影响 AS5047P 要好于 TLE5012B-E1000 的事实。与ADC好坏的判断标准一样,不止要看分辨率,更重要的是精度。

AS5047P 的手册中明确给出了测试结果,动态角度误差最大值约为 ±0.2°。

TLE5012B-E1000 在这方面没有详细的测试结果,手册中仅给出:在整个使用寿命和温度范围内,启用自动校准,最大1.0° 角度误差。
在这里插入图片描述

2.3、系统延迟

AS5047P 内置了动态角度误差补偿 (DAEC™),可用于减少系统传播延迟并动态补偿误差。
没有启动 DAEC™ 时,ABI 接口的系统传播延迟最小为 90us,而启动后则降低为 小于 2us

TLE5012B-E1000 即使开启了角度预测,ABI(IIF)接口的延迟也要 大于 70us
考虑到无刷电机高转速的运动场合,几十us会带来几十度的误差,这方面AS5047P完胜。
在这里插入图片描述

另外最最重要的一点,ODrive 仅能使用 TLE5012B-E1000 的ABI接口,而对于 AS5047P 则可同时使用 ABI 和 SPI。


3、ODrive配置使用AS5047P 的ABI接口


过程与TLE5012B的ABI配置基本一致,参照如下:

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

唯一不同之处在于1.4、配置编码器参数AS5047P 的 cpr 配置为 4000

# 配置电机0编码器CPR(每转一圈,编码器的计数),为编码器线束*4,博客开篇有讲
odrv0.axis0.encoder.config.cpr = 4000
  • 10
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
波场ABI(Application Binary Interface)编码是用于在波场区块链上进行智能合约交互的一种编码格式。它定义了智能合约的函数和参数的编码方式,以及返回值的解码方式。下面是一个使用Python进行波场ABI编码解码的示例: 首先,你需要安装web3.py库,它是一个用于与以太坊和波场区块链进行交互的Python库。你可以使用以下命令安装web3.py: ```shell pip install web3 ``` 接下来,你可以使用以下代码示例来进行波场ABI编码解码: ```python from web3 import Web3 # 创建一个web3实例 w3 = Web3(Web3.HTTPProvider('https://api.trongrid.io')) # 定义合约ABI abi = [ { "constant": True, "inputs": [], "name": "getValue", "outputs": [ { "name": "", "type": "uint256" } ], "payable": False, "stateMutability": "view", "type": "function" }, { "constant": False, "inputs": [ { "name": "_value", "type": "uint256" } ], "name": "setValue", "outputs": [], "payable": False, "stateMutability": "nonpayable", "type": "function" } ] # 创建合约实例 contract_address = '0x1234567890abcdef' contract = w3.eth.contract(address=contract_address, abi=abi) # 编码函数调用 encoded_function_call = contract.encodeABI(fn_name='setValue', args=[42]) # 解码函数调用 decoded_function_call = contract.decode_function_input(encoded_function_call) # 打印结果 print("Encoded function call:", encoded_function_call) print("Decoded function call:", decoded_function_call) ``` 在上面的示例中,我们首先创建了一个web3实例,并指定了波场的API提供者。然后,我们定义了一个合约的ABI(Application Binary Interface),它描述了合约的函数和参数的结构。接下来,我们创建了一个合约实例,指定了合约的地址和ABI。然后,我们使用`encodeABI`方法对函数调用进行编码,将函数名和参数列表作为参数传入。最后,我们使用`decode_function_input`方法对编码后的函数调用进行解码,得到函数名和参数列表。 请注意,上述示例中的合约地址和ABI是示例数据,你需要根据你自己的合约进行相应的修改。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值