想错过我的推送,记得右上角-查看公众号-设为星标,摘下星星送给我
大家好!我们是来自大连理工大学的易棵树、常书奇、蒋衡琛。
今年我们参与并完成了辽宁省电赛的F题,侥幸获得辽宁省的TI杯。很荣幸收到TI及达尔闻的邀请,与大家分享我们电赛的经历与想法。
使其悬浮,需砺其器
2024年的电赛虽开始于7月29日,但我们早在三个月之前开始准备。在确定选题方向为控制类后,我们着手于往年的控制类题目,从中逐步学习TI MSPM0 MCU板卡的使用方法。由于我们都有单片机基础,学习起来得心应手,在短时间内便掌握使用MSPM0 MCU板卡来完成相关的功能。我们先后复刻了23年电赛的送药小车、22年国赛二维云台,并在一定程度上完成了相关功能,为接下来的电赛打下一定基础,提前根据材料清单准备了充足的元器件材料进行备赛。
它山之石,可以攻玉
能获得今年的赛区TI杯,有很大部分是我们站在了巨人的肩膀上继续仰望。能有这样的成绩不仅依靠我们充足的知识储备,而且也借鉴了网上优秀开源项目,帮我们分担了很大一部分工作量,使我们能在短时间内完成F题的所有要求,并且还能在此基础上实现扩展。
道阻且弥,唯有前行
确定完赛题后,我们根据开源内容,迅速完成分工:两人分别负责软件的实现以及硬件的搭建,另一人前往当地器件厂购买相关原材料。
本系统主要由MSPM0 MCU组成的总控制模块,TOF050F激光测距、霍尔编码器传感模块,自制线圈生磁模块,OLED显示模块,TB6612驱动的八个线圈的磁场生成模块以及INA240A2电流检测模块组成,其系统框图如图所示。
👉 硬件方面,我们先使用传统洞洞板、杜邦线与MSPM0 MCU开发板进行连接,将磁悬浮的功能进行拆分简化并在洞洞板上逐步实现。在此基础上,主控改成MSPM0 MCU,去掉部分电流采样电路,对电路进行了部分修改,参考原视频和网上大部分开源的磁悬浮方案,提供浮力的一般都是永磁体,在此基础上,遵循题目限制禁止永磁体,改用了四个匝数较多的大线圈来提供稳定高度的磁力,四个大线圈用同一个引脚的PWM信号控制。调参时因为外围四个线圈过热,所以为了延长调试时间,我们还用了永磁体等效来辅助调节中间四个小线圈。
在线圈布置时,我们准备了两套方案:
方案一:将八捆等匝数等体积线圈依次摆放,围成圆形。通过控制不同方向的线圈电流达到悬浮盘始终在中心稳定、保持一定高度的效果。
方案二:将四捆匝数多、高度小的线圈摆成正方形四角,用于调整高度;另四捆匝数少、高度大的线圈置于间隙,用于调整悬浮盘x、y方向位置。
由于方案一在控制位置时,八个线圈需要同时控制悬浮盘的高度与平面位置,这意味着每个线圈都需要使用PWM单独控制,整体控制复杂且引脚需求超出现实。方案二将悬浮盘的高度与位置控制拆开分析,并巧妙设置线圈位置,使得控制更加精准。同时仅在x、y方向上利用PID实现闭环控制,而高度控制线圈可看成整体统一控制,不仅简化控制内容,也能减少引脚使用,从而能添加更多外设。故此次选用方案二。
布置线圈两种方案示例
👉 软件方面,因为有开源代码的缘故,工作重心从代码实现转变为代码理解以及移植。在此基础上,我们对代码内容进行修改,简化了高度控制以及基本功能等。同时,为了方便后续高度调节与模式更换,我们巧妙利用旋钮与OLED外设,通过旋钮来选择不同模式或者调节硬币悬浮高度,同时使用OLED实时反应当前状态。模式下列展示用于控制线圈的control_loop()函数程序流程图。
持以恒心,报以硕果
虽然前面软硬件的准备一点都不容易,但后面对于代码参数的调试也同样不简单,真正使磁悬浮工作时处处出问题,例如:
我们在洞洞板调试时发现,测量高度的激光测距TOF装置不太灵敏,这使得代码进行闭环控制时无法达到预期效果,甚至时长突然升高或下降,这使得我们只能放弃闭环,用尺子大致调试,找到每个高度对应的参数。
对于OLED外设,总会出现运行一段时间后卡死问题,我们尝试更换硬件、降低刷新频率等方法,苦苦尝试后最终在SPI连接的基础上解决了卡死问题。此番遭遇之后,已经过去24h。
而对于实现硬币的悬浮功能,更是让我们心力俱疲。视频里那般轻松的实现磁悬浮,却在我们手中迟迟不见希望。最开始时无论怎么去调节参数,悬浮盘不肯停留超过1s,一放就掉。之后,观察发现无论怎么调节参数,控制高度的线圈一直保持最高功率运行,于是我们把工作重心从软件变为硬件,使用了不同粗细、不同匝数的线圈。最后也终于使得悬浮盘悬浮了起来。
仅仅完成悬浮盘的悬浮是不够的,接下来的问题便是零漂。悬浮盘在空中的位置并不位于线圈组中心,带来的问题便是稍一受到扰动,悬浮盘便会狠狠砸到线圈上面。我们一遍遍调节参数,在代码层面减轻零漂的影响。待悬浮盘基本保持在中心位置后,我们观察到此时控制高度的线圈接近但未到达最高功率,控制位置的线圈则距离最高功率较远。当一枚硬币放于悬浮盘上,控制高度的线圈功率瞬间达到极限,而悬浮盘也顷刻砸下,此时线圈电流为3A,总功率来到了30W。
经过分析,我们猜想相比于继续改动线圈,不如加大流过线圈的电流。我们将两根电源线并在一块(电源箱单路限流3.2A),再次启动后将硬币放置于悬浮盘上,可见硬币稳稳浮在空中,在我们的屏息注视下熬过了10s。在这期间我们改用PCB板完成实物,器件的组装以及各种小问题的出现不断消磨我们的精力,此时距离电赛结束只有30h。
前两问的实现给了我们很大的鼓励,之后的工作便是不断的调整参数以及代码,同时我们将三路电源线进行并联,接到控制高度的线圈线上,从而实现三枚硬币的悬浮。此时所有高度线圈电流总计在7A左右,总功率达到90W左右。
对于硬币的高度控制,因为未能采用闭环控制,我们通过测量大致找出不同高度对应的控制参数,通过旋转旋钮来进行调节。而对于倾斜情况的控制,我们对网络上开源内容加以利用,通过MPU6050实现转向环的PID调控,基本能在40度内保持稳定。
照以古镜,精益求精
整个比赛下来,踩了不少坑,也意味着收获了许多经验与技巧。我很乐意分享赛后我们的一些反思。希望能为想打电赛的同学们提供帮助。
1)正如考试不仅是答卷的那段时间,电赛也不仅是四天三夜。最好赛前能确定自己的选题类型,并能依据往年的电赛内容进行练习及准备,才能在比赛期间游刃有余。尽管存在换题的可能,但前期基础知识的积累和应用却是在各个题目间通用的。
2)一定要备足比赛可能用到的元器件以及开发板。到了比赛期间发现有所遗漏,不仅耽搁进程,还可能会遇到无良商家坐地开价。元器件的焊接也要尽量仔细,尽量每隔一段时间用万用表检查一下,尽可能减少不必要麻烦。
3)良好心态的保持无疑是最重要的,同时也要以一种实现而不是理解学习的态度完成作品。可能你的作品在哪一个功能上有些瑕疵,或者某些功能不尽人意,如果这些问题对下一步的影响不大,那么千万不要去纠结!毕竟在有限的时间内,拼的更多的是完成程度,先确保实现题目要求的基础上再去处理细节问题。
4)永远记得你不是一个人在战斗!电赛时间每分每秒都很宝贵,一定要做好组内分工,尽可能的提高作品的完成效率。遇到某些疑惑的问题一定要及时和队友进行沟通,从而降低自己钻牛角尖的可能,为后面节省出宝贵的时间。