纳芯微MT6521+NS800RT5039电机圈数角度读取与速度和定位控制
该项目使用了MT6521磁力传感器(搭配SPI通信)+ NSSinePad-NS800RT5039评估板,实现了电机角度读取、圈数记录与精准控制 的设计。的设计,它的主要功能为:该项目通过MT6521磁力传感器与SPI通信,搭配NS800评估板及L298驱动,实现电机实时角度读取、圈数记录、归零对齐及指定角度/圈数运转功能。。
标签
嵌入式系统
WeDesign活动
纳芯微电子
MT6521磁力传感器
NS800评估板
步进电机测控
:郭富城的
更新2025-12-05
重庆电力高等专科学校
114
KiCad文件
全屏


一、项目介绍

本项目聚焦电机角度控制的精准性与稳定性核心需求,构建了一套以纳芯微MT6521磁力传感器为感知核心、NS800评估板(NSSinePad-NS800RT5039)为控制中枢、L298为驱动单元的闭环控制系统,整合按键洞洞板输入模块与可视化显示屏,实现电机顺时针/逆时针转向控制、指定角度/圈数运转、实时角度/圈数反馈及归零对齐等全功能覆盖。项目针对初代方案痛点进行定向优化:初期采用ADC模拟信号采集角度数据时,因模拟信号抗干扰弱、易受噪声叠加及传输失真影响,导致角度数据紊乱、精度不足,故迭代升级为SPI数字通信协议,直接读取传感器内部高分辨率数字角度值,从根源解决数据不稳定问题,提升传输可靠性与控制精度;同时针对电机脉冲计数角度与传感器读取角度存在固定偏差的问题,创新采用“上电校准+软件补偿”方案,通过记录零位基准值计算固定偏移量,实现两者角度基准精准对齐,规避机械安装误差带来的影响。硬件方面,优化设计第二代定制板,解决初代板安装固定不便的问题,搭配5V/12V双电源供电,保障系统各模块稳定协同运行。系统通过“输入指令→核心处理→驱动执行→数据反馈”的闭环架构,实现从参数设定到运行状态可视化的完整链路,可精准响应角度(如10°、20°步进)、圈数、速度及转向控制需求,显示屏实时呈现顺时针/逆时针转向、当前角度、累计圈数及设定速度,适用于对定位精度有要求的自动化设备、智能控制模块等场景,兼具技术创新性与实际应用价值。

二、项目设计思路(含设计框图)

2.1 功能需求

1. 电机控制:支持顺时针/逆时针转向切换,可设定指定角度(如10°、20°步进)、圈数及速度调节;

2. 数据采集:通过MT6521传感器+SPI通信,实时采集电机角度、圈数数据,保障数据稳定精准;

3. 误差校准:支持上电校准功能,通过软件补偿修正机械安装导致的角度偏差;

4. 可视化交互:显示屏实时显示转向、当前角度、累计圈数及设定速度;

5. 基础控制:具备归零对齐功能,支持按键手动设定参数与功能触发。

2.2 设计框图

50fd4a4fc3ec2d86f3b7291b0da639b5.jpg

1. 电源模块:提供双电压供电,其中5V为传感器、评估板、屏幕等低压设备供电,12V为步进电机提供动力,保障各硬件模块的稳定运行。

2. 输入单元:通过按键洞洞板实现人机交互,支持电机的启停、归零对齐及参数(角度、圈数、速度)的手动设定,是系统的指令输入入口。

3. NSSinePad-NS800RT5039评估板:作为系统的控制中枢,负责接收输入指令、处理MT6521传感器采集的角度数据、输出驱动脉冲信号,并协调各模块协同工作,是实现闭环控制的核心。

4. MT6521磁力传感器板:实时采集步进电机的旋转角度、圈数数据,通过SPI协议将数据传输至评估板,同时接收电机机械旋转的状态反馈,为系统提供精准的位置感知信息。

5. L298电机驱动板:接收评估板输出的脉冲信号,将其放大为强电驱动信号,驱动步进电机按设定参数运转,实现控制信号的功率放大与执行转化。

6. 屏幕:通过SPI协议接收评估板传输的角度、圈数、速度数据,实时可视化呈现电机运行状态,是系统的交互展示终端。

7. 12指神探:通过SPI协议采集MT6521传感器的波形数据,用于对角度信号进行分析,辅助优化数据采集的稳定性与精度。

8. 步进电机:作为执行机构,响应L298驱动板的指令完成旋转动作,同时将机械旋转状态反馈至MT6521传感器,形成闭环控制链路。

2.3 硬件介绍

实物照片为直观呈现项目硬件落地成果与系统搭建细节,以下附上项目核心硬件实物照片。照片涵盖从核心控制单元、感知模块到执行机构的全链路硬件,清晰展示了MT6521磁力传感器板、NS800评估板、L298驱动板、双电源模块、按键输入单元及显示终端的实物形态、连接方式与安装布局。通过实物呈现,可更直观地了解项目硬件的选型适配、模块化设计及闭环控制架构的物理实现,辅助理解硬件系统的工作原理与项目落地细节。

62046be9e1c01b2d9685cb56e568dc5c.jpg

cf7697b673b112f2fb87f4bcc4b30774.jpg

383331b5adc992d8a9a975f2876ab90a.jpg

3409223dfb1231e5640200231d56d83f.jpg

1. MT6521磁力传感器板

核心为高精度MT6521磁力传感器,支持SPI数字通信。

实时采集电机旋转角度、圈数数据,具备抗干扰能力强、数据稳定的特性。

硬件适配性优化,便于安装固定。

2. NSSinePad-NS800RT5039评估板

作为系统控制中枢,负责指令解析、数据处理、驱动信号输出。

支持SPI通信与脉冲信号输出,具备强大的运算与控制能力。

3. L298电机驱动板

接收评估板输出的弱电脉冲信号,将其放大为强电驱动信号。

驱动步进电机按设定参数运转,实现控制信号的功率放大与执行转化。

4. 双电源模块

提供5V与12V双电压输出,5V为传感器、评估板、屏幕等低压设备供电。

12V为步进电机提供动力,保障各硬件模块电压匹配、稳定运行。

5. 输入单元(按键洞洞板)

支持电机启停、归零对齐及角度、圈数、速度等参数的手动设定。

是系统的指令输入入口,实现人机交互。

6. 显示单元(屏幕)

实时可视化呈现电机转向、角度、圈数及速度等运行参数。

通过SPI协议接收评估板传输的数据,是系统的交互展示终端。

7. 12指神探

通过SPI协议采集MT6521传感器的波形数据。

用于对角度信号进行分析,辅助优化数据采集的稳定性与精度。

8. 步进电机

作为执行机构,响应驱动板指令完成旋转动作。

将机械旋转状态反馈至MT6521传感器,形成闭环控制链路。

2.4 电路板设计

本项目电路板采用 KiCAD 8.0 完成设计绘制,关键元器件封装来源于立创EDA。PCB 布局充分借鉴了 2024 年寒假练项目中带屏 12 指神探传感器扩展板的设计方案,确保引脚与 12 指神探完全兼容。两端的引脚焊盘可同时焊接,当插入左侧插座时,元器件正面朝上;插入右侧插座时,元器件正面朝下,有效提升了硬件适配的灵活性。

设计理念延续了模块化思路,MT6521磁力传感器既支持单独使用,也可通过焊接排针排母接口进行扩展。同时,板载传感器可掰离主板独立使用,极大地提高了硬件资源的利用率。

下图为 KiCAD 8.0 中的 3D渲染效果图。

2.5 关键代码展示与说明

2.5.1部分是屏幕显示初始化

就是显示屏幕上的固定画面,不然角度(文字)

void interface_Init(void)          //屏幕显示文字
{

//show_ms(0,280,0xff00,0x0000); //显示模式两字
show_sd(100,400,0xff00,0x0000); //速度:
sprintf(shuzhu,"1");
LCD_ShowString(148,400,16,(uint8_t *)shuzhu,1);

show_dqjd(0,300,0xff00,0x0000); //当前角度:
show_ljq(200,300,0xff00,0x0000); //累计圈:


show_fangx(0,350,0xff00,0x0000); //方向:
show_sun(48,350,0xff00,0x0000); //顺

show_qs(100,350,0xff00,0x0000); //圈数:
sprintf(shuzhu,"0");
LCD_ShowString(148,350,16,(uint8_t *)shuzhu,1);

show_jd(200,350,0xff00,0x0000); //角度:
sprintf(shuzhu,"0");
LCD_ShowString(248,350,16,(uint8_t *)shuzhu,1);

show_jt(8,370,0xff00,0xf000); //(图标:箭头)
// show_jt(108,370,0xff00,0xf000); //(图标:箭头)
// show_jt(208,370,0xff00,0xf000); //(图标:箭头)
}

2.5.2这个是读取角度程序

就是读取芯片中计算出来的角度


uint16_t transfer_bos(void)
{
static int16_t start=-1; //校准0
uint32_t rx_data;
rx_data=SPI3W_transfer();
uint16_t angle_data = rx_data & 0x7FFF; // 提取低15位角度
uint8_t rfa_flag = (rx_data >> 15) & 1; // 提取RFA标志
float angle = (float)angle_data / 32768.0f * 360.0f;
uint16_t nums=0;
if(rfa_flag)
{
nums=(uint16_t)angle;
}
else
{
nums=(uint16_t)angle+360;
}
nums/=2;
if(start==-1)
{
start=nums;
return 0;
}
else
{
if(nums>=start)nums-=start;
else nums=360-start+nums;
}
return nums;
}

2.5.3基于多屏幕模式的电机转向/圈数/角度/速度按键控制代码及电机人机交互控制(按键操作+屏幕显示)核心逻辑代码

uint8_t screen_pattern=0;            //屏幕模式切换
void key_bos(void)
{
if(key)
{
if(key==1)
{
screen_pattern=(screen_pattern+1)%4;
if(screen_pattern==0)
{
LCD_Fill(110,420,126,436,0XFF00);
show_jt(8+(screen_pattern*100),370,0xff00,0xf000);//(图标:箭头)
}
else if(screen_pattern==3)
{
LCD_Fill(208,370,324,386,0xff00);
show_jt(110,420,0xff00,0xf000);
}
else
{
LCD_Fill(8+((screen_pattern-1)*100),370,24+((screen_pattern-1)*100),386,0xff00);
show_jt(8+(screen_pattern*100),370,0xff00,0xf000);//(图标:箭头)
}
}
else if(key==2)
{
if(screen_pattern==0) //改变旋转方向
{
direction=(direction+1)%2;
LCD_Fill(48,350,74,366,0xff00);
if(direction) //逆
{
show_sun(48,350,0xff00,0x0000);
}
else
{
show_ni(48,350,0xff00,0x0000);
}
}
else if(screen_pattern==1)
{
LCD_Fill(148,350,184,366,0xff00);
circle++;
sprintf(shuzhu,"%d",circle);
LCD_ShowString(148,350,16,(uint8_t *)shuzhu,1);
}
else if(screen_pattern==2)
{
pulse++;
if(pulse==200)pulse=0;
LCD_Fill(248,350,296,366,0xff00);
sprintf(shuzhu,"%d",pulse);
LCD_ShowString(248,350,16,(uint8_t *)shuzhu,1);
}
else if(screen_pattern==3)
{
LCD_Fill(148,400,180,416,0xff00);
speed=speed%10+1;
sprintf(shuzhu,"%d",speed);
LCD_ShowString(148,400,16,(uint8_t *)shuzhu,1);
}
}
else if(key==3)
{
if(screen_pattern==0) //改变旋转方向
{
direction=(direction+1)%2;
LCD_Fill(48,350,74,366,0xff00);
if(direction) //逆
{
show_sun(48,350,0xff00,0x0000);
}
else
{
show_ni(48,350,0xff00,0x0000);
}
}
else if(screen_pattern==1)
{
LCD_Fill(148,350,184,366,0xff00);
if(circle)circle--;
sprintf(shuzhu,"%d",circle);
LCD_ShowString(148,350,16,(uint8_t *)shuzhu,1);
}
else if(screen_pattern==2)
{
if(pulse==0)pulse=199;
else if(pulse)pulse--;
LCD_Fill(248,350,296,366,0xff00);
sprintf(shuzhu,"%d",pulse);
LCD_ShowString(248,350,16,(uint8_t *)shuzhu,1);
}
else if(screen_pattern==3)
{
LCD_Fill(148,400,180,416,0xff00);
if(speed!=1)speed--;
sprintf(shuzhu,"%d",speed);
LCD_ShowString(148,400,16,(uint8_t *)shuzhu,1);
}
}
else if(key==4)
{
// pulse_bos=pulse;
direction_bos=direction;
// circle_bos=circle;
pulse_bos=pulse;
circle_bos=circle;
TIM_SetAutoReloadValue(TIM2,speed*30-1);
zhen_bos=1;
//direction_bos=(direction_bos+1)%2;

}
else if(key==5)
{
restoration=1;
pulse_bos=0;
circle_bos=0;
// pulse=0;
// circle=0;
}
key=0;
}

}

三、搜集素材的思路

为保障项目高效推进与技术落地,我通过以下多维度策略系统搜集核心素材,确保素材的准确性、完整性与实用性:

1. 活动专属资源:依托项目参与活动的介绍页面,提取全部核心器件(如MT6521磁力传感器、NS800评估板)的数据手册、功能参数及应用说明,快速获取项目适配的基础技术资料。

2. 官方权威渠道:定向访问纳芯微、L298驱动板制造商等核心元器件官方网站,下载完整版数据手册、应用笔记及开发指南,同时查阅NS800评估板的配套技术文档,掌握器件的标准用法、接口定义及性能极限,保障素材的可靠性。

3. 技术社区与开源平台:在专业工程论坛(如电子发烧友、CSDN)搜索其他开发者分享的MT6521、SPI通信、电机闭环控制相关实战经验、问题排查案例;在开源社区(如GitHub)查找同类电机控制项目的源码、设计方案,借鉴硬件布局、代码逻辑等实操细节。

4. 周边器件关联文档:除核心器件外,同步搜集双电源模块、LCD屏幕、按键模块等周边配件的技术手册,明确各模块的电压需求、通信协议及引脚定义,全面理解系统硬件的适配关系与工作环境。

5. 供应商定向沟通:与传感器、评估板、驱动板等关键元器件的供应商建立直接联系,获取定制化产品规格书、应用案例及技术支持,针对PCB设计、器件兼容等项目专属需求咨询专业建议,确保素材贴合实际应用场景。

四、成果展示

4.1 用户界面

为直观呈现系统的人机交互逻辑与数据可视化效果,以下将展示项目的用户界面设计及核心数据展示方案。界面以功能分区为核心,通过屏幕实时呈现电机顺时针/逆时针转向、当前角度、累计圈数及设定速度等关键参数,配合按键模块实现参数调节、模式切换、启动复位等操作,形成“操作-反馈”的直观交互体验。数据展示聚焦精准性与可读性,通过清晰的数值呈现与图标标识,让用户快速掌握系统运行状态,充分体现项目“便捷操作+精准反馈”的设计理念。

a374a1d38bf50ad37e02f2cd2ad0b3f9.png

ae8b7c564961226752f2758e849aeaa8.png

五、总结

遇到的问题

1. 初代ADC模拟信号采集角度数据时,因抗干扰能力弱、噪声叠加及传输失真,导致角度数据紊乱、精度不足,无法满足控制要求;

2. 电机脉冲计数计算的角度与MT6521传感器读取的绝对角度存在固定偏差,源于传感器与电机转轴的机械安装偏移;

3. 初代自制PCB板存在安装固定不便的问题,影响硬件装配效率与系统稳定性;

4. 步进电机运行时存在脉冲不均匀现象,导致旋转过程中出现丢步,累计一圈后角度偏差达2°,未校准前精度不足;

5. 按键操作与屏幕模式切换的联动逻辑需反复调试,初期存在参数更新延迟、显示错位等人机交互适配问题。

心得体会

本次基于MT6521磁力传感器的电机闭环控制系统项目实践,是一次从理论到落地、从问题排查到方案优化的完整技术历练,不仅深化了我对电气自动化专业知识的理解,更积累了宝贵的工程实践经验。在技术攻坚层面,项目初期遭遇的ADC数据紊乱、角度偏差等问题,让我深刻体会到“理论设计”与“实际落地”的差距。通过对比分析,将模拟信号采集升级为SPI数字通信,从根源解决了抗干扰问题;针对机械安装误差导致的角度偏差,设计“上电校准+软件补偿”方案,让我学会了用“硬件优化软件适配”的组合思路破解难题。这一过程中,我不仅熟练掌握了MT6521传感器、NS800评估板、L298驱动板的核心用法,更深化了对闭环控制、数字通信协议等专业知识的实操认知。在项目管理与协作方面,模块化设计思路的应用让我受益匪浅。从PCB板的迭代优化(解决安装不便问题),到传感器的独立拆分使用设计,再到用户界面的功能分区规划,每一步都离不开对“实用性”与“扩展性”的权衡。同时,通过查阅官方手册、技术社区求助、与供应商沟通等多种方式搜集素材,我学会了高效整合资源、借力解决问题,也认识到工程实践中“精准获取信息”的重要性。此外,项目实践也让我正视了细节对整体效果的影响。步进电机的丢步校准、按键与屏幕显示的联动调试、PCB布局中的抗干扰设计,这些看似微小的细节,却直接决定了系统的稳定性与精准度。反复的调试与优化过程,磨练了我的耐心与严谨性,也让我明白“工程设计没有最优解,只有更贴合需求的适配方案”。此次项目不仅提升了我的硬件选型、电路设计、代码调试等实操能力,更培养了我“问题导向”的思维方式与“闭环优化”的工作方法。未来,我将把此次实践积累的经验运用到更多专业项目中,持续深耕电气自动化领域,不断提升自身的工程实践能力与创新思维。

附件下载
ProPrj_MT6512pro_2025-11-23ll.kicad_sch
ProPrj_MT6512pro_2025-11-23ll.kicad_pcb
任务1.zip
团队介绍
如风:团队核心程序员,负责项目代码开发与调试,主导SPI通信、电机控制逻辑及数据处理功能实现;: 郭富城的 硬件设计主力,专注电路板绘制与硬件选型,牵头解决初代板安装固定问题,完成第二代MT6521传感器板设计; 小王同学:硬件与宣传多面手,参与电路板画图,同时负责项目演示视频剪辑,助力成果展示。我们三人分工明确、高效协作,从硬件迭代到软件落地,共同推进项目完成!
团队成员
补药压力窝啊
如风
:郭富城的
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号