ADI机器控制设计竞赛 - 基于ADMT4000角度传感器的多圈-单圈位置控制系统
该项目使用了ADMT4000,实现了多圈-单圈位置控制系统的设计,它的主要功能为:高精度转动控制。
标签
ADI
角度传感器
ADMT4000
无言的朝圣
更新2026-05-11
5

一、项目介绍

1.1 项目背景

随着工业自动化和精密控制技术的不断发展,角度传感器在机器人关节控制、天线指向系统、医疗设备以及精密仪器等领域扮演着越来越重要的角色。传统的单圈角度传感器只能提供0°~360°的测量范围,无法满足需要高精度旋转的应用场景。本项目正是基于这一需求,设计了一套基于ADMT4000角度传感器的多圈-单圈位置控制系统。

ADMT4000是一款高精度多圈绝对式角度传感器,其独特之处在于即使在断电情况下也能持续记录旋转圈数,这使得它在需要断电记忆功能的场景中具有不可替代的优势。该传感器搭配40:1的减速机构使用,能够实现0.01°的高精度单圈角度分辨率,同时最多可记录46圈的位置信息,完全满足大多数精密定位应用的需求。

1.2 项目目标

本项目的核心目标是设计并实现一套完整的多圈位置控制系统,具体包括以下几个方面:

1、实现对ADMT4000传感器的驱动和角度数据读取,能够实时获取当前的总角度和单圈角度信息。

2、控制系统需要支持步进电机的双向转动控制,通过PWM信号实现速度调节,并且具备精确的位置定位能力。

3、设计边缘安全保护机制,当单圈角度接近0°或360°的边界时,系统能够自动停止电机转动,防止机械结构超过极限位置造成损坏。

4、实现直观的用户界面,通过LCD屏幕实时显示当前位置、方向、速度等关键信息,并提供多按键人机交互功能。

1.3 主要功能

经过详细的方案设计和多次调试优化,本系统最终实现了以下主要功能:

多圈角度测量功能:系统能够实时读取ADMT4000传感器的原始数据(总圈数和单圈角度),并通过计算转换为用户可读的位置信息。传感器本身的测量精度为1°,但通过与步进电机数据的融合处理,系统能够提供单圈0.01°的显示精度。

断电记忆功能:ADMT4000传感器内置非易失性存储器,能够在断电后保存当前的位置数据。系统上电后可以读取这些数据,恢复断电前的位置状态,无需进行回零操作。

步进电机控制功能:系统通过三路控制信号实现对步进电机的完整控制。STEP引脚输出PWM信号用于产生步进脉冲,DIR引脚控制转动方向,EN引脚使能或禁止电机运行。用户可以通过按键或命令调整电机转速和转向。

边缘安全保护功能:系统在单圈角度达到0°或360°附近时设置了安全阈值。当检测到角度即将越界时,系统会自动停止电机并锁定该方向的运动,只有向相反方向运动离开安全区域后才能解除锁定。这一功能有效防止了误操作导致的机械损坏。

人机交互界面:系统使用ST7789 LCD屏幕显示丰富的运行信息,包括ADMT传感器原始数据、计算后的位置信息、电机运行状态等。五个独立按键分别用于控制电机正转、反转、停止以及系统复位等操作。

二、硬件介绍

主控开发板

image.png

带屏版的12指神探,配备了一块240*240分辨率的LCD彩屏以及两个可程控按键和一个拨轮,丰富了人机交互功能,方便信息观察、界面切换等使用方式。此外还配备了白色外壳,精心设计的包装不仅使板卡日常使用时更加美观也便于板卡的站立以及使用安全。还配备配备了丰富的对外接口。

ADMT4000角度传感器

image.png

ADMT4000是一款专为精密角度测量设计的磁性编码器芯片。其核心测量原理是利用磁性感应技术检测磁场角度的变化,具有非接触式测量、精度高、稳定性好等优点。在测量范围方面,ADMT4000支持多圈角度测量,最多可记录46圈的角度数据。在分辨率方面,传感器原始输出为1°分辨率的角度值,通过内部算法处理后可以输出更高精度的数据。在接口方面,传感器采用SPI同步串行接口通信,支持高达2MHz的时钟频率,通信协议简单可靠。ADMT4000的复位电路设计是其独特之处。复位引脚RST配合COIL_PS和SHDN信号可以触发传感器内部的复位于零操作。当需要进行位置标定时,控制电路会先给线圈通电充能,然后通过特定的时序控制RST信号,使传感器将当前位置记录为零点。这种机械式复位方式确保了零点的准确性和可重复性。

复位时序的具体步骤如下:首先将RST拉低,然后使能线圈电源(SHDN高、COIL_PS高),等待约3秒让线圈充分充能。接着依次关闭线圈电源和使能信号,将RST拉高。等待20ms后再将RST拉低产生一个复位脉冲,最后将RST拉高完成复位过程。这一复杂的时序设计确保了传感器能够准确记录复位于零点的位置。值得注意的是,COIL_PS引脚与步进电机的DIR控制引脚共用GPIO22。在正常使用过程中,GPIO22作为步进电机的方向控制引脚使用;只有在执行传感器复位操作时,才会临时将该引脚切换为COIL_PS功能。这种引脚复用设计有效节省了宝贵的GPIO资源。

步进电机与减速机构

image.png

本系统使用的步进电机为标准的两相四线步进电机,步距角为1.8°,即每转需要200步完整步进。步进电机的特点是可以精确控制转动角度而不需要位置反馈,这使其成为开环位置控制的理想选择。减速机构采用40:1的行星齿轮减速器,这意味着当步进电机转动40圈时,减速器的输出轴才转动1圈。这一减速比的设计具有重要意义:一方面提高了输出扭矩,降低了步进电机的负载;另一方面,由于输出轴的分辨率提高了40倍,系统能够实现更精细的角度控制。

三、方案设计

3.1 系统总体架构

本系统的总体架构可以划分为以下几个主要模块:传感器数据采集模块负责读取ADMT4000的角度数据;位置计算模块负责将原始数据转换为用户可理解的位置信息;电机控制模块负责产生步进电机驱动信号;显示输出模块负责将系统状态显示给用户;按键输入模块负责接收用户的操作命令;边缘保护模块负责监测位置边界并在必要时强制停止电机。

3.2 方案框图

image.png

3.3 设计思路

角度计算策略

ADMT4000传感器的数据格式需要经过适当的换算才能得到正确的角度值。传感器返回的ABSANGLE是一个12位数值,其中高8位表示圈数信息(TurnCnt = ABSANGLE >> 8),低4位参与角度计算。需要注意的是,TurnCnt的每个单位代表传感器转过1/4圈,因此实际圈数需要除以4。

位置计算的核心公式如下:

基准总角度 = 基准Turn × 360 + 基准Angle

当前总角度 = 当前Turn × 360 + 当前Angle

角度差 = 当前总角度 - 基准总角度

输出轴圈数 = 角度差 / 40 (因为40:1减速比)

单圈角度 = (角度差 / 40 + 180) mod 360

公式中的180表示复位后默认将当前位置设置为180°(半圈位置),这是一个便于用户观察和操作的初始设置。

内部偏移量处理

在处理角度跨越0°边界的情况时,系统采用内部偏移量的方式来避免负数问题。具体做法是在所有角度计算结果上加上10000(相当于100°)作为内部偏移量,使角度的表示范围从[-100°, 260°]变为[0°, 360°]。在显示时再减去这个偏移量,即可得到用户期望的0°~360°范围。

这种处理方式的优势在于:无论角度如何跨越边界,内部计算始终使用连续递增或递减的数值,不会出现突变;同时边缘检测逻辑也大大简化,只需要比较数值是否在有效范围内即可。

边缘安全保护机制

边缘保护是本系统的重要安全特性。系统设置了两个边缘阈值:低位阈值为10100(相当于内部表示的1°)和高位阈值为45900(相当于内部表示的359°)。当内部角度值低于低位阈值时,表示当前位置接近0°;当内部角度值高于高位阈值时,表示当前位置接近360°。

边缘锁定机制确保电机不会突破安全边界。一旦检测到电机运动到边缘区域,系统会设置相应的锁定标志(high_locked或low_locked),并立即停止电机。锁定标志的作用是阻止同一方向的再次启动,只有向相反方向运动并离开安全区域后,锁定才会被清除。这种设计确保了机械结构的安全,同时不会影响正常的双向运动控制。

引脚复用设计

本系统的一个巧妙设计是GPIO22引脚的复用。该引脚在正常情况下作为步进电机的DIR控制引脚使用,但在执行ADMT4000传感器复位操作时,需要临时切换为COIL_PS功能。软件实现上,在复位函数开始时会先保存DIR引脚的当前状态,然后重新配置该引脚为输出模式并执行复位时序,完成后再恢复为DIR功能。这种设计的优势是显著节省了GPIO资源。如果为COIL_PS单独分配一个引脚,则会占用一个宝贵的IO资源,而采用复用方式则可以在不影响功能的前提下最小化IO占用。主要是引脚不够用了。

四、软件设计

4.1 软件架构

本系统的软件架构采用模块化设计,主要包括以下几个功能模块:

初始化模块负责系统启动时的各项初始化工作,包括SPI接口配置、GPIO引脚配置、PWM输出配置、ADMT4000初始化、显示屏初始化以及变量初始化等。

传感器驱动模块封装了与ADMT4000通信的所有功能,包括SPI数据传输、寄存器读取、复位时序执行等。

位置计算模块负责将传感器原始数据转换为有意义的位置信息,包括基准值更新、角度计算、边缘检测等。

电机控制模块提供步进电机控制的各项功能,包括使能控制、方向设置、速度调节等。

显示管理模块负责屏幕内容的更新显示,包括静态元素的绘制和动态数据的刷新。

按键处理模块检测用户的按键操作并执行相应的响应动作,包括按键消抖处理和状态机管理。

4.2 主程序流程

image.png

4.3 关键代码解析

位置计算函数


# 读取传感器原始数据
raw_turncnt = admt.read_abs_angle()
raw_angle = admt.read_angle()

# 计算总角度(度)
current_total = raw_turncnt * 360 + raw_angle
base_total = base_turncnt * 360 + base_angle

# 计算单圈角度(内部使用10000偏移量)
# 精度:0.01° = 1 centi-degree
angle_diff = current_total - base_total
internal_angle_x100 = int(angle_diff * 100 / 40 + 18000 + 10000)

# 计算输出轴圈数
circle_diff = int((current_total - base_total) / 40)
current_circle = circle_diff

# 边缘检测
at_low_edge = (internal_angle_x100 < 10100) # < 1°
at_high_edge = (internal_angle_x100 > 45900) # > 359°

# 钳制显示值到0-36000范围(0-360.00°)
display_angle_x100 = internal_angle_x100 - 10000
if display_angle_x100 > 36000:
display_angle_x100 = 36000
elif display_angle_x100 < 0:
display_angle_x100 = 0

current_angle_x100 = internal_angle_x100
return display_angle_x100

该函数是整个系统的核心,它完成了从传感器原始数据到用户可读位置信息的全部转换过程。函数首先读取传感器的圈数和角度原始值,然后通过计算得到当前的总角度。接下来根据基准值计算角度差,并考虑40:1减速比进行换算。内部使用10000偏移量来避免负数问题,最后将结果钳制到0-360°范围内返回。

主循环中的边缘保护


# 到达边缘则强制停止电机
if at_high_edge or at_low_edge:
stepper_enable(False)

# UP按钮处理
if up_btn.value() == 0:
if not high_locked: # 高位未锁定时允许CW
if low_locked:
low_locked = False
stepper_set_direction(0)
stepper_enable(True)
stepper_set_speed(50)

while up_btn.value() == 0:
display_angle = calculate_position()
if at_high_edge: # 到达高位边缘
high_locked = True
stepper_enable(False)
break
update_display()
time.sleep_ms(50)

边缘保护逻辑的关键点在于:在每次主循环迭代时都检查边缘状态,如果到达边缘则立即停止电机;在按钮处理中,只有在对应方向未锁定时才允许启动电机;当运动过程中检测到到达边缘时,设置锁定标志并停止电机,同时退出按钮等待循环。

五、调试效果

整体的连接效果:

image.png

传动结构连接:

image.png

界面效果:

image.png

主要包括的多圈角度信息,单圈角度信息,步进电机控制信息。

六、难题与解决方法

边缘跨越的数值处理

当单圈角度跨越0°或360°边界时,如果简单地使用模运算处理,会导致显示值在边界处出现跳变(如从359.99°跳到0.00°或反之)。这种跳变不仅影响用户观察,还可能导致边缘检测逻辑失效。

本系统采用内部偏移量(+10000)的方式来解决这一问题。内部角度值始终保持在1000046000的范围内,对应外部显示的0360°。当角度增加超过46000时,内部值会循环回到10000;反之亦然。这种循环在内部是平滑的,不会出现负数或跳变,而显示时的转换则确保用户看到的是正确的0~360°范围。

七、心得体会

通过本次项目开发,我深刻体会到了嵌入式系统开发的复杂性。与纯软件项目不同,嵌入式系统开发需要同时考虑硬件和软件两个方面,任何一方的失误都可能导致整个系统无法正常工作。

本项目的技术方案具有良好的通用性和可扩展性。基于ADMT4000的多圈角度测量方案可以广泛应用于需要多圈位置检测的场合,如机器人关节、云台角度控制、天线指向系统等。步进电机加减速控制的技术可以进一步发展为完整的运动控制系统,加入梯形或S形加减速曲线可以实现更平稳的启停运动。结合位置反馈可以发展为闭环控制系统,进一步提高定位精度。

附件下载
ADMT4000.zip
团队介绍
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号