2026 ADI机器控制设计竞赛 - 基于ADMT4000模块实现断电磁圈记录
该项目使用了ADMT4000模块,实现了磁旋转检测的设计,它的主要功能为:测试断电后,再上电,圈数及角度数据保持一致;断电磁圈数记录。。
标签
ADI
C
磁转数传感器
ADMT4000
CX反C
更新2026-05-11
37

一、任务介绍

多圈角度读取与断电记忆验证

  • 手动旋转磁体,通过串口实时输出 ADMT4000 传感器的旋转圈数与角度数据;
  • 测试设备断电重启后,数据是否保持一致
  • 验证断电间歇期间,传感器能否正常记录磁体累计旋转次数。


二、项目描述

image.png

本项目基于 CH32V103 主控芯片核心板,通过 SPI 总线与 ADMT4000 传感器通信,实时采集电机旋转圈数、角度及温度数据;同时通过串口与电脑终端交互,将上述数据实时打印输出,并完成断电数据保持功能验证。


三、简短的硬件介绍

1.ADI ADMT4000磁传感器模块

image.png

ADMT4000 是ADI(亚德诺)推出的真掉电记忆多圈磁角度传感器,无需电池 / 齿轮,断电仍能记录旋转圈数,上电直接输出绝对位置,专为工业无刷电机、执行器、旋转定位设计。

核心定位与亮点

  • 真上电多圈:断电不丢圈数,上电即读绝对位置,无需电池、无需额外计数
  • 46 圈测量范围:总角度 **>16560°,单圈精度±0.25°**。
  • 非接触磁传感:GMR 多圈计数 + AMR 角度检测 + GMR 象限判别,抗震动、油污、粉尘。
  • 高速采样100 kSPS更新率,适合高速电机闭环控制。
  • 宽温工业级:结温 **−40°C ~ +150°C**,24 引脚 TSSOP 封装。
  • 数字接口SPI(Mode 0),支持 1.7V~5.5V 逻辑电平,自带 CRC 与 ECC 校验。


2.CH32V103评估板

image.png

CH32V103R8 评估板是沁恒 WCH推出的32 位 RISC‑V 通用 MCU 开发板,搭载CH32V103R8T6主控,面向工业控制、电机驱动、传感器采集、USB 设备等场景,开箱即用、成本极低、生态完善。

核心定位

  • 主控:CH32V103R8T6(LQFP64M)
  • 内核:沁恒自研 RISC‑V3A(RV32IMAC),最高 80MHz
  • 用途:RISC‑V 入门学习、外设验证、USB / 电机 / ADC 项目原型开发
  • 特点:Type‑C 供电、GPIO 全引出


四、方案框图及设计思路

image.png

采用 CH32V103R8 + ADMT4000 实现多圈绝对角度实时采集系统

通过SPI读取ADMT4000寄存器相关数据,通过串口与电脑交互,实时显示当前数据。


五、软件流程图及关键代码说明

image.png

1.相关初始化

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//中断初始化
SystemCoreClockUpdate(); //时钟初始化
Delay_Init(); //延时初始化
USART_Printf_Init(115200); //串口初始化 115200
/* 初始化 ADMT4000 硬件接口 */
    ADMT4000_Init();

2.检测SPI数据是否通讯正常

/* 1. 验证 SPI 通信:读取唯一 ID (UNIQID3 应为 0x0002) */
uint16_t id3 = ADMT4000_ReadRegister(0x02, ADMT4000_PAGE2_UNIQID3);
printf("UNIQID3: 0x%04X (expected 0x0002)\r\n", id3);
if (id3 != 0x0002) {
    printf("SPI Communication FAILED! Check wiring (especially Pin4 pull-up).\r\n");
    while(1);   /* 通信失败,停止执行 */
}

3.清除上电告警

/* 2. 上电后故障寄存器为 0xFFFF,先读取确认,然后清除 */
printf("FAULT at power-up: 0x%04X\r\n", ADMT4000_ReadFault());
ADMT4000_ClearFault();
printf("FAULT after clear: 0x%04X\r\n", ADMT4000_ReadFault());

4.配置ADMT4000寄存器并启动转换

/* 3. 配置工作模式:连续转换 + 角度滤波器使能
     按数据手册流程:先中止当前转换,修改寄存器,再启动。 */
ADMT4000_AbortConversion(0x02);                  /* 切换到页 0x02 并中止 */
uint16_t gen = ADMT4000_ReadRegister(0x02, ADMT4000_PAGE2_GENERAL);
gen &= ~ADMT4000_GENERAL_CNVMDE;                  /* Bit0=0 -> 连续转换模式 */
gen |=  ADMT4000_GENERAL_ANGLFILT;                /* Bit12=1 -> 使能 IIR 滤波器 */
/* Bit9 必须为 1,Bit5:4 必须为 11(保留位),此处维持默认 */
ADMT4000_WriteRegister(0x02, ADMT4000_PAGE2_GENERAL, gen);
ADMT4000_StartConversion(0x02);                   /* 在页 0x02 启动转换 */
printf("Conversion started (continuous mode, filter enabled).\r\n");

5.获取各种测量值

/* 获取各种测量值 */
float angle      = ADMT4000_GetAngle();        /* 单圈角度 0~360° */
float abs_angle  = ADMT4000_GetAbsoluteAngle();/* 多圈总角度 */
int turns        = (int)(abs_angle / 360.0f);  /* 整圈数 */
float turn_angle = abs_angle - turns * 360.0f; /* 圈内角度 */
float temp       = ADMT4000_GetTemperature();  /* 芯片温度 */

6.串口打印相关数据

/* 打印输出(避免使用 %f 以减小代码体积) */
printf("Ang:%3d.%02ddeg  Turns:%2d  TAng:%3d.%02ddeg  Abs:%5d.%02ddeg  T:%3d.%02dC\r\n",
       (int)(angle * 100) / 100, (int)(angle * 100) % 100,   /* 角度整数/小数 */
        turns,
        (int)(turn_angle * 100) / 100, (int)(turn_angle * 100) % 100,
        (int)(abs_angle * 100) / 100, (int)(abs_angle * 100) % 100,
        (int)(temp * 100) / 100, (int)(temp * 100) % 100);

7.检测是否有故障

/* 检查故障状态 */
uint16_t fault = ADMT4000_ReadFault();
if (fault) {
    printf("FAULT: 0x%04X\r\n", fault);
    /* 尝试清除故障(如果故障条件消失,清除后不再出现) */
   ADMT4000_ClearFault();
}

六、实物演示及说明

ADMT4000 引脚

功能

连接至 CH32V103

18 (SCLK)

时钟

PA5 (SPI1_SCK)

17 (SDO)

数据输出

PA6 (SPI1_MISO)

16 (SDI)

数据输入

PA7 (SPI1_MOSI)

15 (CS)

片选

PA4 (GPIO 控制)

注意:SDO 是 ADMT4000 的输出,对应 MCU 的 MISO;SDI 是输入,对应 MOSI。


1.SPI通讯异常,出发初始化校验失败告警

image.png

只接通核心板电源,未接通ADMT4000,触发spi通讯错误告警。

image.png


2.SPI通讯正常,串口实时打印单圈角度、圈数、圈内角度、总角度、温度

image.png

接通ADMT4000,并复位,spi验证通过,开始实时打印数据


3.旋转电机,检测角度及圈数变化

旋转.gif

4.测试设备断电重启后,数据是否保持一致

断电.gif

image.png

确认断电数据保持功能成功

5.验证断电间歇期间,传感器能否正常记录磁体累计旋转次数。(手动旋转电机两圈)

保持.gif

手动断电,并旋转电机2圈

image.png

确认磁圈保持功能验证成功

七、对本次活动的心得体会

本次实验让我掌握了 ADMT4000 多圈磁传感器与 CH32V103 的应用,实现了角度读取与断电记忆验证。我加深了对 SPI 通信、嵌入式编程和绝对位置传感的理解,提升了软硬件调试能力,真切体会到掉电记忆传感器在工业定位中的实用价值。

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