2019年TI杯国赛控制题H题电磁炮,这年大一,参加电赛,备赛时间不算长,知识储备也不足,但还是收获颇丰,以至于回想起来整个大二忙活的时间,还没电赛备赛那段时间学到的多。
(不涉及具体的代码或知识点,仅分享经验)
大一寒假的时候正儿八经买了块51单片机开发板学习(之前一直在用proteus仿真),学完以后感觉已经能做好多事情了,大概在下学期过了一半,电赛开始报名,开始决定要认真备战电赛,作为连模电都没正经学的边缘菜鸟,一开始就是奔着控制题去的,那时候开始接触stm32,有一个具体的项目做载体,从51过渡到32还是比较快的,先看了看原子的视频,买了一块最小系统板,把基本的IO口配置,定时器PWM,串口等等熟悉了一遍,接下来就是搜各种往年的电赛帖子,开始看PID之类的内容。
风力摆绝对是练习PID的一个好项目,对32有一些基本的了解以后,最好是直接看别人的代码改,特别感谢网上大佬的帖子:
http://bbs.eeworld.com.cn/thread-476344-1-1.html
前前后后花了将近大半个月看懂程序(一开始啥也不懂真的费劲)
照着自己列的清单买配件,做实物加调完花了一个周左右,这里列一下清单:
stm32f103c8t6小系统板(图里是VET6,没影响) * 1
电机驱动 * 2(我用的是那种迷你的小红板,L298N太沉了)
8520空心杯电机(带桨叶) * 4
陀螺仪 * 1型号自选(我用的是个带串口的MPU6050模块)
万向节 * 1
导线,板,杆自备若干
具体原理请参照上面帖子,应该只需要改改电机驱动部分,这里我我就说一下过程中遇到的一点坑:
帖子里同轴的两个电机是并联的,制动方向相同,风力摆由正向制动变为反向制动时,两电机需要改变转动方向,然而空心杯电机改变制动方向需要一定时间(时间还不短),因此控制总是滞后,效果不好,当时改了很久都没发现毛病,最后想到这个,就把同轴的两电机单独控制了,这样的话,总共需要控制四路电机,需要单片机输出四路PWM,在某一轴上,两电机制动方向相反,每时刻只有一个电机在制动,需要反方向制动时,之前转动的电机停转,同轴的另一电机转动,达到反向制动的效果,这样空心杯就不需要改变转动方向,系统也更加灵敏了,实际更改过后效果完全达到要求。
贴图:
线很乱,主要是为了练一下刚学的PID,当时正值期末,电赛也不久要开始了,做完这个信心倍增,我把自己写的库整理了一下,控制题的程序模板已经基本成型了,事实上最后比赛用的就是之前做风力摆的模板。
附上视频:
电赛备赛-风力摆
板球当时觉得超级难,我觉得难点主要在小球位置检测,网上的方案大多是OV7725或者OV2640+stm32,自己写二值化的程序进行检测,网上的标准配置应该是,stm32f4+液晶彩屏(方便调试)+摄像头+舵机.
我一开始也是按这套方案来的(后面还有另一套方案),这套真的下血本了,那时候刚刚做完风力摆,花了不到一百,有点小飘,买完这一套巨心疼,后来真正电赛来了才知道,这点"小钱"…mmp
舵机控制倒还好说,毕竟框架好搭就是调参数的事,就是那个摄像头…之前32学的太简略了,问题立马就来了,DMA,DCMI,还有一些图像格式什么的都要重新学,那一阵子就是天天守着天脑抠这点东西,毕竟花了钱的,不能亏了.
网上程序看了不少,大多数是直接改原子的摄像头程序的,要用f4的DCMI,如果使用之前买的mini板,要自己插一堆的杜邦线,而且信号质量没法保证,偏偏手里没有原子的板子,剁手买了一块某宝上兼容原子程序的f4mini板,事实证明这个选择很对,方便程序移植,很多没用过的模块也都不用钻研太久,立即上手,满足电赛要求:
最小系统做多只能带存储,显示,按键,电赛可以直接用.
板球的程序也是在网上找了很久,这里贴出来:
http://www.51hei.com/bbs/dpj-168405-1.html
板球搭完机械结构,程序框架写好的时候,电赛赛清单已经出来了,板球没有进行完,不过总结下来难点在机械结构的选择和摄像头的使用,相比之下调PID显得不是那么难.
而关于摄像头,我建议用另一个方案,直接用OpenMV,这东西处理器用的是stm32H7,人家库也挺完善的(只适合用来玩或者搞点比赛)。电赛控制题想要往“智能”上靠,出关于摄像头做视觉的题可能性比较大。
做板球的时候在网上翻帖子有人用OpenMV,这东西省去了自己写二值化程序的麻烦,也不需要占用单片机资源,直接OpenMV处理完用串口把坐标发给单片机就行,这么做板球的难度一下就降下来了,就一个缺点,有点贵…
原定2号发清单的,8月1号中午清单就出了,立马就凭直觉划了重点:
1.可自带处理器的摄像头
2.二自由度云台
3.小车
4.三脚架
这次果断入手OpenMV,当天下午就把东西买齐了。
OpenMV1,OpenMV配套的云台1,舵机云台零件一套,舵机4
四轮小车(黄轮的那种),稳压模块若干,电机驱动若干,三脚架1
这一套下来将近500块大洋.
清单下来到开题的这几天,真的很重要,那时候各大论坛电赛板块天天逛,因为也考完试了,一天到晚泡在实验室。
当时比较多的是两种预测:
1.三脚架+云台+激光指定地点,小车+摄像头跟随激光
2.三脚架上放摄像头云台,追踪移动的小车
清单到发题之间的几天任务:
把遥控小车做出来;三脚架上放摄像头云台,跟踪运动的小车,不得不说这个选择还是很对的。
准备期间已经调好了云台的PID,OpenMV识别以及和单片机通信,
小车的遥控器用的是TFT触摸屏,还写了一个简单的操作界面,这些在最后的电磁炮上都有影子。
附上准备时期的成果视频:
2019电赛 备 赛 阶 段
8月7号
早上7点半,题目正式下发了,在床上看的题,看到H题以后,很惊喜,跟我们准备的挺像的,之后就立马下单了两套电磁炮(题目下发后半小时左右下的单),遗憾的是还是手慢了,卖家不回复(巨坑),到了下午才通知没货了,下午我又下了两单,淘宝上只剩下那种便宜的几十块的电磁炮了,没办法,整个第一天就把之前做追踪小车的程序改了改,把题目的功能框架搭好了,炮没到,第一天让队友回去睡觉了。
那天晚上旁边有几组在自己缠炮的线圈,但都失败了。
第二天
上午第一个炮到了,一个焦耳小偷升压电路,升到100V充个电要一分钟,还只能打2米多,显然不行,我们开始意识到炮也是个棘手的问题,整个第二天就在研究升压怎么搞能功率高充电快,那天下午又下单了一个本省的升压模块加上俩450V1000微法的电容,晚上尝试重新缠线圈希望能打远一点,结果把电容烧了,第一次尝试失败,这一天晚上就通了宵把报告准备的差不多了。
PS:前两天实验室几乎没有通宵的。
下图是我们的第一个炮:
第三天
买的第二个炮和单独买的升压模块都还没到(这里提醒大家电赛买东西一定看好发货地址,尽量找近的),可惜在北方这些东西都挺少的,我们就提前把供电的电路搭起来(模块化的),用继电器控制发射,测试了发挥部分的两问,自瞄和扫描寻靶问题都不大,就等炮来了调参数,这时候压力已经很大了,炮的问题真的耽误了很久.晚上让队友回去睡了,没办法,没有炮,现在完全下不了手。
(ps:我们赛区这边可以临走的时候封箱,所以我们还可以苟活一会儿)
第四天
一早,炮到了,这次的炮挺给力的,用的是淘宝常见的升压模块(小篮板)升到30V,电容用的是10000微法,充电4秒左右就可以发射,射程也达到要求,简单的换了炮管以后就开始争分夺秒的调参了。
那天下午在调参数,突然射程变近了,怎么也打不到3米,拿电表测了一次下电容,发现只能升到16V左右,35V电容加30V有点撑不住被击穿了,手里还真没有合适的电容,只有等新的升压模块到然后换方案了,晚上我们把报告的电磁炮理论分析、参数计算写了一下,因为实在是无从下手,只能提前准备一些增加印象分的东西,我们把之前做遥控车的触摸屏UI界面改了改,让参数输入在触摸屏上进行,这样也让整体美观多了,另外看到别人发个炮都要蹲在地上,我们考虑到评委测试时坐着比较舒服,就去隔壁装修的楼偷了根木头…,(效果看图,哈哈哈哈哈,当时脑洞也是绝了,后来发现现场是自己测试,我们这个造型当时也引来了围观)
之后的事情(之后的事情就一块说了)
也是一早,最后买的升压模块到了,当时看来是我们最后的稻草了,这个升压模块能升到450V,我们试了一下(炮管和线圈是之前那套剩下的),一炮直接干到对面墙上了,然而这个升压的最小电压也是250V,虽然把仰角调高能凑合用,但又有新的问题,我们买的继电器耐压到不了那么高,连着烧了俩,商家让我们把那个升压模块的反馈电阻改小点,如愿以偿,电压小了。(事后想想,这里亲手埋了一个巨坑,当时要是把继电器换成可控硅的话,也没有后面的破事了,借到了可控硅,我们三个小白研究了一会儿,咋用都没研究明白,所以还是选择继电器)。
至此,我们的炮的功能基本实现了,虽然一路下来坎坎坷坷,但是效果还是很好的,参数也在一点一点调,最后总归会拿奖的,我们甚至憧憬着拿到国一的场景,由于我们仨模电都还没学,我让他们俩去准备综合测评了(学模电),我一个人调参数。
这时候的炮:一切看起来都很顺利,参数也调得差不多了,我们用的是最简单的的查表法,每5cm确定一个参数,(别的组都是各种拟合,只能怪我们基础真的太弱了)。
最后的下午,我们在抓紧时间调参,发现弹道比较散,有时候8、9环,有时候4、5环这样子。由于我们是从后方填弹,有一个可拆卸的后盖,那个后盖的盖上时松紧程度不一,直接导致发射距离不可控,没错就是炮弹在炮管位置中那一丢丢的差距导致的,我们加固了后盖,尽量减小盖上时的偏差,改进后盖以后,炮弹发射距离突然变远了好多。
前方高能!!!
我下意识地就去调升压模块的电压了,因为商家跟我说可以改反馈电阻让输出电压下限变小后,我改了两次阻值,这次最低电压直接改到了80V(原来是250V),就在我我在面无表情的拧着无聊且枯燥的电位器,脑子里想着大一就拿了国一要功成名就时,突然传来了一小声‘pa!’,一串小火花蹭地疵出来,那一串的woc就差喊出来了,你tm千万别坏啊,这玩意儿我们只买了一个(因为实在是怪贵的),奇迹没有发生,升压模块当即升天,我原地爆炸。
最后的挣扎,还有可能么?
那个下午,升压模块升上天了以后,我又做了各种尝试。
第一个想法是在测评现场来一波极限操作。
想想不太可能,第二个念头是看看能不能换芯片,升压模块上芯片是磨了标的,我看着那个芯片的封装跟LM2596挺像的(当时傻到只认识LM2596),我就去稳压模块上找LM2596,结果测电压的时候,把它又炸了一块,整个下午,实验室光听着我们这边炸东西。
满身的汗味和花露水味,加上芯片烧了以后独有的香气,整个人有点迷糊了,我满脑子里想的是,要是能熬过去成功参赛,这次电赛我能吹四年。
看了看桌上乱的一批的失败品,前几天还是实验室里最靓的炮(我们是仅有的做成把参数输入界面做成触摸屏UI的,也是最先实现自瞄和自动打击的),现在全崩了。
就在这么想的时候,一眼瞟到旁边那个在前几天被击穿的电容。
要是找到替代电容,之前的低压方案可能还能用!
其实就在前几天电容坏了的时候,隔壁实验室的小伙子友情提供了俩50V4700微法的电容,只是当时这俩电容规格还不一样,一大一小,还有一个铝壳变形了,当时嫌太磕碜没用它俩。现在也就剩这一条路了,并联一下换上。那天下午效率出奇的高,一个小时左右就把原来的方案复原了,充到30v,我是拿在手里测试的,点发射那一瞬,有点像抽奖的心情,一路下来我们大起大落太多次了,这次成功,我给别人吹四年,失败,我给自己吹四年。看来老天还是想让我风光一把,炮弹不远不近,完美落地。而且更神奇的是,我们换方案以后,原来调出来的参数竟然偏差不大,这么喜庆的事情我激动得去给淘宝的老板说明情况。
这也算是逢凶化吉吧,因为之前我们老是发现继电器用着用着就不灵敏了(应该是电压过高或者电流太大,触点老化),我们当时在板子上加了两组继电器,用跳线帽选择,如果现场崩了一个,还有另一个可以用。换了低压方案以后,继电器再也没坏过。
一波未平,一波又起
继续调参数,同时做最后的检查,我们打算最后再通一个宵。
电池快没电了,下午给电磁炮的锂电充了几个小时电,晚上去洗了个澡,平复一下心情。
回到实验室,开始最后的冲刺。拔掉在充电的电池,把炮搬到走廊里,摆好靶子,开始测试。
刚发射第一颗子弹,一回头,发现升压模块着火了。
这个时候还被毒一波,我们太难了!
我们给电容充电用的是锂电池,估计是电池没加保护板没有过流保护,刚充电第一次放电电流太大把升压模块烧了,还好还有俩存货,把两个升压并起来了,就怕电流太大又给烧了,最后一晚上的测试,也不敢给电池充电了。
之后可算没再出什么幺蛾子。
基本可以稳定在7-10环,发挥部分也没什么问题。
(临走前我们还给它做了装饰,给整个炮贴了墙纸)
效果视频:
2019电赛-电磁炮
只要它的升压不炸,唯一的不确定因素,就只剩现场的光线了,现场光线不确定,因为我们测试的时候,光线的影响还是很大的,轻则测距不准,重则根本识别不到,当时觉得现场亮度因该适中,我们就根据经验选了一个颜色阈值。其实应该做成现场可调的,当时时间太紧,没有实现。
早上4点半的时候封箱,睡了半个小时,出发了,中午11点,抵达山师
现场测评
可能是我们这天人太多了,现场阻塞,S型排队检录,排了好几列,山师在外面没安排人导向,结果后来的学校也不知道排在哪,就往中间插,我们一开始就排最后,太阳底下站了两个小时,等到下午1点多才进去。慢慢也有点意识到,省赛也没有那么正规,虽然有统一的执行文件,但是每个赛区标准也不太一样。
进去以后提交报告,放作品,然后就一直在侯赛室等待,一直到下午4点多,人还是很多,里面工作人员又说买了车票的优先去比赛,这是什么操作,没看懂,然后陆陆续续有人说买了车票,我们眼看就成最后了,队友去买了张车票,说5点半的车,给工作人员看了一下,才安排上。但这一天的安排太不好了。
点到我们组以后,开始紧张了,脑子里又开始回荡这几天的奇葩经历,生怕电池装箱的时候忘了关,或者现场升压模块再炸了。
到了现场,有点失望,场地有亮有暗,中途还有靶子缺失的情况,得两个场地相互借,不过现场的志愿者还是很棒的,应该说有求必应吧。每个组有半小时的调试时间,我们一开始被安排到一个很暗的场地,我问能不能选亮的,然后挑了一个最亮的地方(刚好有太阳),这时候心里是很担心的,好在没什么大问题,测试都在7-10环,自瞄也特别稳,打了两个9环,旁边有个保安大爷还夸了我们,哈哈哈哈。
就在要开始了以后,太阳被楼挡住了,怎么也识别不到,woc,笑不出来了,标准翻车。半小时过了,我们找工作人员把边上窗户的遮阳板子都拿下来了,但还是无济于事,我问有没有手电筒,我们补个光,也没有。“手机行么?”我问评委,评委老师一男一女,男老师看起来很严肃。不过还是点了点头。基础部分我们这里会先问一句,你们基础部分可以实现么?如果实现了,那就只测第三问,我们两次都是7环。也就是说整个基础部分我们得了41分(满分50)。
下面是后来传出来的测评表
然后是发挥部分,老师答应我们可以拿手机补光以后,我们正要进去照,老师来了一句“你们只能在外面补光”,我们距离靶子有3m远,手机补光几乎没有效果,哎,最后求了一波老师,让我们进去了,我手拿两个手机,左右开工,照着靶子,队友操作,手机必须靠的特别近才能识别到,这样就导致补光不均匀,测距几乎没法用(摄像头测距只能靠识别的面积算距离)。结果可想而知,自动瞄靶射击部分直接脱靶,只给了“可以寻靶”的5分,扫描打靶部分打了个2环,给了11分,原本我们自由发挥部分打算移动靶打靶,现在连识别都完蛋,也就白给了。
这样我们总分为:41+5+11=57,及格都没有。
评委老师仁至义尽了,该做的都做了。
装箱的时候,超级不甘心,明明这次离获奖那么近,要是早那么一点,太阳还在就好了,太背了,我们结束的时候,评委老师还过来说了两句:“这几天见过很多这样的了,有的现场没问题,有的就有问题,不管怎样,还是参数调的不好”,这话没毛病,电赛本就是七分实力三分运气,没运气的话,比赛开始之前就死了好几次了,不知道大三再来一次,还会不会不被这么蹂躏。
赛前我们做的准备真的相当充足,这也是我不甘心的主要原因,整个电磁炮90%的程序,都是在清单下发后,出题之前写好的,也就是说我们猜题基本猜准了。设计报告也是在赛前就写好了模板。
那几天最致命的问题是,物资采购,这个地方吃了太大亏了,直接导致我们到第四天才有一套能用的炮,中途也几次因为缺东西差点凉凉,其实那个升压模块买完之后,应该再物色几套电磁炮(那时候已经总金额已经超过1000了,第一次这么大手笔,我还是有点不适应)。
时间把握不到位,一开始我是打算从第一天就肝的,因为网上的帖子都是这种进度,我第二天就把铺盖搬进实验室了,那天晚上只有我们一组留在了实验室,结果那天晚上既没睡好,效率也不高,因为手头什么都没到,这个真的该好好养精蓄锐。到后来那几天又有点太放松了(因为东西做的差不多了),我们没有提前列规划表,这也导致我们最后一个晚上还通宵调参数,以至于来不及解决光线问题。
还有就是当时脸皮太薄了,没去找学长借鉴一波。
我们指导老师带的一个大四学长电磁炮拿了国一,我赛后去交流了一下,差距还是很大的,人家的国一是绝对的实力。
总结了一下我们的差异:
首先方案不同,他们使用定仰角,调电压的方式,这比我们定电压调仰角方案稳很多,因为我们有一些机械原因,而且仰角过大,炮弹在空中抛物线太高,会增加很多不稳定因素。
他们是高压,使用钢珠,我们低压使用小圆柱,我们的炮弹类似与一个小钉子,比较轻,空中的轨迹也不是很稳。
他们用的是激光测距,我们用的是摄像头测距,直到看到他们的方案,我才恍然大悟,这个是真的没想到,因为之前openmv例程上有测距的部分,思维就被局限了。
最后的结果是省二,这个结果不算鼓励,也不算质疑。说好的要吹四年,还是吹给自己听吧。
这篇笔记是比赛之后就想写的,因为备赛期间,网上的经验贴对我帮助很大,赛后写了一大半,后来由于别的事情一直在草稿箱里吃灰了,现在完成了后半部分,半年后再回忆起那段经历,忍不住佩服自己(哈哈哈哈)。之后参加过的比赛,很难再复现电赛时的激情了。