2026 ADI机器控制设计竞赛 - 用ADMT4000模块实现旋转方向与转速检测
该项目使用了ADMT4000,实现了旋转方向与转速检测的设计,它的主要功能为:旋转方向与转速检测。
标签
ADI
传感器
ADMT4000
LGX
更新2026-05-11
6

一、项目摘要

基于ADI公司的ADMT4000模块,实现了检测旋转方向以及速度的小装置。

二、所选任务介绍

手动旋转磁铁,通过串口实时识别旋转方向(正转/反转)并计算转速。

任务要求

  1. 读取 ADMT4000 角度数据,判断当前旋转方向(正转/反转),串口实时显示
  2. 根据角度变化量和时间计算转速(转/秒或度/秒),串口实时显示
  3. 静止时显示转速为 0,旋转时实时更新
  4. 在 46 圈范围内验证方向和转速检测的正确性

二、硬件介绍

1.ADMT4000

ADMT4000 是一种磁转数传感器,即使在设备断电时也能够记录磁系统的旋转次数。通电时可以查询该套件,以报告系统的绝对位置。绝对位置通过串行外设接口 (SPI) 报告。ADMT4000 最多可计数 46 圈外部磁场,以顺时针 (CW) 方向递增绝对位置计数。

产品特性:

  • 真正通电多圈计数器
  • 46 圈磁传感器
  • >16k° 数字输出
  • ±0.25° 精度
  • 测量更新率 100 kSPS
  • 16 mT 至 31 mT 操作范围
  • 内部温度传感器
  • IC 电源,3.3 V
  • SPI 接口,1.8 V 至 5 V
  • 结温范围:-40°C 至 +150°C
  • 24 引脚 TSSOP
  • 工业应用

2.合宙Air780EHV核心板

Air780是基于移芯EC618平台下的LTE Cat.1无线模组,支持FDD-LTE与TDD-LTE 4G远距传输。

集成USB、UART、I2C等丰富接口,能够应对物联网行业多样应用。

三、方案框图与设计思路

本次选择的任务比较简单,直接通过780ehv实时读取角度值,然后程序中直接计算正反转以及速度即可

image.png

四、开发过程

  • 流程图

  • 合宙使用的lua语言,与python比较类似,以下是主程序代码
PROJECT = "admt4000_speed_test"
VERSION = "1.0.0"


local sys = require("sys")
local admt4000 = require("admt4000")


local SPI_ID = spi.SPI_0
local SPI_CS_PIN = 22


local SAMPLE_MS = 100       -- 采样周期
local DEAD_SPEED_DPS = 2    -- 小于这个认为静止(度/秒)


-- =========================
-- 角度解码
-- =========================
local function decode_angle(raw)
    local code = bit.band(bit.rshift(raw, 4), 0x0FFF)
    return code * 360 / 4096
end


-- =========================
-- 角度差(处理跨 360
-- =========================
local function calc_delta(curr, last)
    local delta = curr - last


    if delta > 180 then
        delta = delta - 360
    elseif delta < -180 then
        delta = delta + 360
    end


    return delta
end


-- =========================
-- 主任务
-- =========================
sys.taskInit(function()


    local sensor = admt4000.init({
        spi_id = SPI_ID,
        cs_pin = SPI_CS_PIN,
        speed = 4000000
    })


    if not sensor then
        log.error("main", "init failed")
        return
    end


    log.info("main", "start speed test")


    -- 启动转换
    sensor:writeRegisterNoVerify(0x01, 0x0000)
    sys.wait(100)


    local last_angle = nil
    local last_ts = nil


    while true do


        --ANGLE
        local raw = sensor:readRegister(0x05)


        if raw then


            local angle = decode_angle(raw)
            local now = mcu.ticks()


            local direction = "静止"
            local speed_dps = 0
            local speed_rps = 0


            if last_angle and last_ts then


                local dt = (now - last_ts) / 1000


                if dt > 0 then
                    local delta = calc_delta(angle, last_angle)


                    speed_dps = delta / dt
                    speed_rps = speed_dps / 360


                    if speed_dps > DEAD_SPEED_DPS then
                        direction = "正转"
                    elseif speed_dps < -DEAD_SPEED_DPS then
                        direction = "反转"
                    else
                        direction = "静止"
                        speed_dps = 0
                        speed_rps = 0
                    end
                end
            end


            log.info(
                "SPEED",
                "角度", string.format("%.2f", angle),
                "方向", direction,
                "角速度(dps)", string.format("%.2f", speed_dps),
                "转速(rps)", string.format("%.3f", speed_rps)
            )


            last_angle = angle
            last_ts = now


        else
            log.error("read", "angle failed")
        end


        sys.wait(SAMPLE_MS)
    end
end)


sys.run()
  • 实物图

996ace104f05f8bcc5f0576f866bc968.jpg

  • 当手持磁铁在模块上方旋转时日志可以打印出相关信息,不过由于是手持磁铁的原因,无法固定一个点位且晃动严重,因此数据会出现一些浮动

image.png

image.png

四、遇到的难点及解决方法

其一是该模块供电和通信是分开的,但是电脑上并没有多余的usb口来供电,于是乎通过观察原理图发现,排针有一个位置是NC位,所以直接将电源飞线到该排针上,这样就可以直接将用杜邦线供电了

image.png

其二便是通信成功后发现数据浮动的厉害,并且圈数一直显示不对,经过排查之后发现是手持磁铁导致磁场不稳定,模块测量出来的也就不稳定,特别是磁铁过于靠近芯片还会引起模块复位。解决方法其实也很简单,要么拿个电机后面贴上磁铁并固定在模块上,不过手上暂时没有相关的东西,于是采用方法二,将磁铁对着模块的最下方,不过这样的话磁性可能不够,所以多加了几个磁铁堆叠起来,最后成功稳定住了,(当然间距是稳定住了,但是剩下的只能靠手稳了)。

五、心得体会

本次活动的模块挺有意思的,以后可以拿来做更多更好玩的东西。

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