【2026 机器人模块大赛】创意名称:基于MA730传感器制作一个无电位器摇杆控制器 作品提交

作品名称:基于 MPS MA730 磁阻编码器的非接触式摇杆控制系统

作者:xuxiaojie72(MPS 论坛用户名)
【配图:整机实物照片:树莓派 5、MA730 传感器模组、自制摇杆机械结构、SG90 舵机】
功能介绍:采用 MA730 非接触磁性角度传感器搭建磁阻摇杆,摇杆旋转产生磁场变化,树莓派 5 通过 SPI 实时读取绝对角度,根据摇杆角度映射控制 SG90 舵机跟随转动,实现摇杆 - 舵机联动演示。方案验证 MA730 14 位高精度角度采集、磁场检测功能。
物料清单
主控:树莓派 5

核心传感器:MPS MA730(14bit 磁编码器)

执行器:SG90 微型模拟舵机

机械结构:摇杆支架、径向磁化钕铁硼磁铁

杜邦线、 供电电源等
2. 系统框图

设计思路
本项目验证 MA730 SPI 通信性能、非接触角度检测能力。摇杆机械结构带动磁铁旋转,MA730 采集磁场角度,通过 SPI 将原始角度数据上传树莓派 5;Python 程序完成数据解析、角度换算、边界限制,输出 PWM 信号驱动 SG90 舵机跟随摇杆动作,直观展示传感器实时采集效果。
系统软硬件介绍
硬件:MA730(SPI 模式 1 通信)、树莓派 5 硬件 SPI、SG90 舵机(GPIO 输出 50Hz PWM);
软件:Raspberry Pi OS,Python + spidev(SPI 驱动)+ gpiozero(舵机控制),附带简易 GUI 实时显示角度。
3. 各部分功能说明
(1)MA730 传感单元
工作模式:SPI Mode1(CPOL=0,CPHA=1);
功能:非接触检测磁铁旋转角度,输出 14 位绝对角度原始数据;内置磁场检测,可判断磁铁是否安装到位;

硬件要点:TEST 引脚必须接地;VDD 3.3V,传感器与树莓派共地。
(2)树莓派 5 主控单元
开启硬件 SPI 接口,使用 spidev 库与 MA730 通信;


接收 SPI 原始数据,解析有效角度,完成 360°→0~180° 舵机角度映射;
输出 PWM 波形驱动 SG90 舵机,实时刷新界面数据。
(3)SG90 舵机执行单元
接收树莓派 GPIO 输出的 50Hz PWM 信号;
根据摇杆角度同步跟随旋转,直观反馈 MA730 采集结果;
软件增加角度限幅,防止舵机超出机械行程。
(4)摇杆机械单元
摇杆转轴搭载径向磁化磁铁;

无物理接触,完全发挥 MA730 非接触式、长寿命优势。
接线图

实际连接图

4.软件开发说明
整体软件运行环境:Raspberry Pi 5,Raspberry Pi OS 64 位,使用 Python3;依赖库:spidev(SPI 硬件通信)、gpiozero(舵机 PWM 驱动)、tkinter(本地 GUI 实时显示)。
软件整体流程:硬件 SPI 初始化 → 循环读取 MA730 的 SPI 原始数据 → 解析 14bit 角度 + 状态位 → 角度坐标映射转换 → 输出 PWM 控制 SG90 舵机 → GUI 刷新数据显示
一、环境准备

  1. 树莓派系统配置
    bash
    #打开系统配置工具,开启硬件SPI
    sudo raspi-config
    界面操作:Interface Options → SPI → Yes,开启硬件 SPI,重启树莓派。
  2. 安装依赖包
bash
sudo apt update
sudo apt install python3-pip python3-gpiozero python3-tk
pip3 install spidev

spidev:操作树莓派硬件 SPI 总线,和 MA730 通信;MA730 必须使用 SPI Mode1(CPOL=0,CPHA=1),这是硬件芯片固定时序,不能修改。
gpiozero:封装 PWM 输出,驱动 SG90 模拟舵机,自动处理 PWM 硬件底层。
tkinter:内置 GUI,本地窗口实时打印原始寄存器值、角度、状态位,方便调试,不需要额外上位机。
注意:树莓派 5 SPI0 硬件引脚
SCLK:GPIO11;MISO:GPIO9;MOSI:GPIO10;硬件 CS 可以软件自定义(代码使用 GPIO25 作为片选)。
二、软件模块拆解
模块 1:SPI 初始化

spi = spidev.SpiDev()
spi.open(0,0)
spi.mode = 1          # MA730强制Mode1,时序错误会读全0或者乱码
spi.max_speed_hz = 500000 # MA730推荐SPI时钟,最大不超过1MHz

坑点:如果设置 mode=0,读出的数据全部无效,这是 MA730 最常见调试问题。
模块 2:MA730 数据读取函数 read_ma730()
MA730 SPI 输出是16bit 帧:
表格
Bit15 Bit14~Bit1 Bit0
状态位 (MD) 14bit 角度数据 无效位
发送 0x00 空命令,读取 2 字节共 16bit 返回数据
Bit15:MD 磁场检测状态位;1=磁场过强/过弱,磁铁位置异常;0=磁场正常
Bit14‑Bit1:14 位角度原始值,范围 0~16383
换算公式:角度(°) = raw_14bit × 360 / 16384,输出 0‑360° 绝对角度,不需要归零。

def read_ma730():
    raw = spi.xfer2([0x00,0x00])
    raw_data = (raw[0] << 8) | raw[1]
    status_bit = (raw_data >> 15) & 0x01       # 磁场状态
    angle_raw = (raw_data >> 1) & 0x3FFF       #取出14bit角度
    angle_deg = angle_raw * 360.0 / 16384.0
    return angle_raw, angle_deg, status_bit

模块 3:角度映射函数 map_angle_to_sensor()
MA730 输出:0‑360° 完整圆周;
SG90 舵机机械行程:物理一般 0‑180°;gpiozero 库舵机输入值域 ‑1.0 ~ +1.0。
映射逻辑:把传感器 0‑180° 映射舵机‑1~1;超过 180° 做限幅保护,防止舵机撞机械限位烧毁。

def map_angle_to_sensor(deg):
    servo_angle = deg / 2
    val = (servo_angle / 90) - 1
    return max(-1, min(1, val)) #强制钳位,保护舵机

业务逻辑:转动摇杆,磁铁旋转,MA730 得到角度,换算后直接赋值给servo.value,舵机跟随。
模块 4:Tkinter GUI 调试界面
50ms 刷新一次(20Hz 采样),兼顾响应速度,降低 CPU 占用;
窗口实时打印:原始 14bit 数值、实际角度、磁场状态 bit;
当磁铁拿开,status_bit=1,界面可以直观看到磁场异常,验证 MA730 磁场诊断功能。

def update_task():
    raw, deg, sta = read_ma730()
    info_label.config(text=f"原始值:{raw} | 角度:{deg:.2f}° | 磁场状态:{sta}")
    servo.value = map_angle_to_sensor(deg)
    root.after(50, update_task) #50ms循环回调

模块 5:安全退出处理
捕获键盘中断 Ctrl+C:
servo.detach():关闭舵机 PWM 输出,舵机停止抖动;
spi.close():关闭 SPI 总线释放硬件资源,避免下次运行报错。

except KeyboardInterrupt:
    print("程序退出")
    servo.detach()
    spi.close()

三、软件运行逻辑流程图

程序启动
↓
初始化SPI(Mode1,500KHz)+初始化SG90舵机+启动GUI窗口
↓
循环定时器(50ms)
├─SPI读取MA730 16bit数据帧
├─解析14bit角度、磁场状态位
├─原始值换算为0‑360°角度
├─角度映射到舵机‑1~+1区间,做限幅保护
├─输出PWM控制SG90舵机转动
└─刷新GUI窗口显示数据
↓
按下Ctrl+C退出
├─关闭舵机PWM
└─释放SPI硬件资源
软件关键注意事项 & 常见故障
SPI 模式必须为 1,mode=0 读取全部乱码,是 MA730 最高发问题。
MA730、树莓派 5、SG90 舵机必须共 GND,否则角度跳变,数值抖动。
SG90 舵机建议外接 5V 电源,不要树莓派 GPIO 直接供电,舵机大电流会拉低 3.3V,造成 MA730 读数跳变。
采样周期 50ms;如果调小到 10ms,CPU 占用升高,不建议。
status_bit=1,代表磁铁距离不对、磁场强度异常,软件可以扩展:增加弹窗 / 打印告警。
5. 作品功能演示视频

  1. 项目总结
    本项目基于 MPS MA730 磁性角度传感器搭建非接触式磁阻摇杆原型,使用树莓派 5 作为主控完成 SPI 数据采集与舵机闭环联动演示。开发过程验证了 MA730 在 SPI Mode1 下通信稳定性、14 位角度采集精度;相比传统电位器摇杆,MA730 非接触测量不存在机械磨损,适合长期连续工作场景。
    调试过程重点解决 SPI 时序匹配、角度映射校准、共地干扰等问题。
    后续可拓展:双轴摇杆(两路 MA730)、机器人云台双舵机控制、增加磁场故障检测报警功能。
    帖子链接汇总
    1、【2026 机器人模块大赛】创意名称:基于MA730传感器制作一个无电位器摇杆控制器 物料和焊接forum.monolithicpower.cn/t/topic/7530
    2、【2026 机器人模块大赛】摇杆 MA730调试https://forum.monolithicpower.cn/t/topic/7645
    3、【2026 机器人模块大赛】摇杆测试forum.monolithicpower.cn/t/topic/7679

主程序:
ma730_end.zip (2.0 KB)

校零程序:
ma730_jiaoling.zip (1.4 KB)

楼主这个创意玩出了新花样,不知道灵敏度怎么样,精准度怎么样

用MA730是否也会有类似电位计的虚位问题?