2019全国大学生电子设计大赛H题 模拟电磁炮系统全国一等奖
作者 邓博远
队友 阿华 狗子
博主QQ 1015188236 如果还是不明白或者有什么问题欢迎大家一起讨论交流
2019.14更
赛后也和很多人交流了很多,其实就像我前面写的那样,电磁炮就是一个斜抛运动(炮台高度可忽略不计的情况下),那么公式其实就是我上面写的那个。。。博主改变的是倾斜角,但是为了减少硬件上的误差带来的影响,所以加入了一个可变的参数V(实测还是很有效)。有的队伍改变的是放电时间,其实就是初速度V。他们测的还是很准的,但是博主没时间测试了,不过不管是哪个方法吧,一定一定要稳住自己的机械结构还有电磁炮每次充电电压。保证这两个没问题的情况下,那么不管你用博主的方法还是控制其他变量,都会有很好的效果的。
经过了紧张的八月份,电子设计大赛终于落下了帷幕,这其中有太多的心酸只有电赛人才懂!而博主也即将升入大三,但是想给未来的电赛人留下点东西,于是2019.9.3开始写这篇文章
我们做的电磁炮系统,MPU6050做反馈,PID控制,俯仰角和航向角,openmv测距(博主手里的激光测距在比赛前半个月不知道被谁拿走了!!!!!!!!!mmp比赛前两天我还念叨不会测距吧,openmv确实测距会受光照影响很大,但是程序里可以补偿回来,具体怎么补偿,可以直接跳到下面的软件部分了),openmv的反馈回来的位置也是PID控制(为了让靶子在中心位置)。
整体装置如图
界面:
由于今年赛题和往年有一些不太一样,博主开始准备的是控制类题目,所以肯定是做了往年的控制类赛题,
具体的有17年板球控制系统
如图
15年的风力摆系统
如图
13年的倒立摆没做,但是博主和队友分析了倒立摆的原理。也看了很多倒立摆的所谓‘源码’,出于手头元件有限且时间紧所以没做实物。
我看赛题出来时和比赛结束后很多人在喷出题,说今年没有控制题和电源题,这里博主不做评论,但是博主觉得今年的题完全在第一次专家会议里面体现了出来,我记得当时直播说“大部分学生‘软’化,要提升学生全面能力”,别的题我没做不清楚,但是电磁炮这个我觉得还是和控制一样的(具体哪里一样在下面我会给出详细分析),而且非常考验参赛人的机械结构、基本的硬件基础、还有软件能力。当然如果有人非要喷,我也没办法。题目就是这样,我做好我自己的就行。
话不多说
先来带大家分析一下这个赛题
赛题出来的时候,估计会有很多人来选这道题还有F题(测纸,具体原因参考18年省赛题),因为这道题看似很容易,毕竟题目第一个基础是发射炮弹哈哈哈哈,
那么其实这个赛题出来的时候,可能有一些人被题目中的直流稳压电源供电干扰了,一般实验室里的直流稳压电源最多好像也就30多V吧(因为博主的实验室比较贫困。。见识的可能比较少),那么好多人用升压模块来给电压升到100V+。。博主采用的是降压整流,220V变160V然后整流桥变直流。瞬间就能给电容充满,然后用F4控制继电器来放电。
还有就是左右摆动的角度能不能和要求一样准,上下摆动的角度能不能打的准,最后就是发挥二,发炮弹的时间。。玩过游戏的都知道,甩狙不能当目标在中间才打出去,毕竟人是有反应时间的,然后开枪也有反应时间~所以看你怎么处理。
硬件部分
1.
电磁炮的炮弹和炮管选取。
我们一开始居然和傻子一样选取的塑料做炮弹哈哈哈哈哈哈哈,后来补了一下知识。。。我们最终选取强磁珠,然后炮管选取的是鱼竿(因为博主附近有一家渔具店),截取的炮管不要太长,太长摩擦力会影响很大,太短发射的不准,而且我们用的磁炮弹和炮管口径差不多,这样的话也避免了炮弹在炮管里面可能乱撞的情况。炮管13cm长,内径12mm,外径14mm,炮弹11mm。
如图
2.
炮管、线圈。
大家应该都是线圈加电容,这里我就不解释原理了,但是在这里线圈的缠绕有一些讲究,不能乱缠,要按照一个方向,我们当时是一圈缠到头再往回缠。大概是350圈左右(这个圈数好像有讲究emm但是我没仔细找)。
3.
***炮弹位置。
这个就真的挺重要的,因为炮弹的位置如果合适,才能打出最远的距离!!!!**秘密就是炮弹要放在线圈后面一点点,多了打不出去,少了还是打的近。我们一点点测试的距离。这样的话,炮弹在场中受力时间最长,也就是出口速度最大。
接下来是云台部分
其实这部分没必要多说,两个舵机(可以采用步进电机,细分驱动,能控制的很精确。但是博主手头只有一个细分驱动,我记得能到0点几的一个角度),因为博主这里采用的是6050做反馈,所以舵机控制也是完全没问题的,而且也能控制精确度(我设定的精确度在0.1)
openmv放那么高只是方便我们测距,并没有其他的意义。
最关心的软件部分哈哈哈
博主在比赛期间写的程序真的挺工整的,每个模式,每个模式对应的PID,每个模式对应的子函数。还是定时器的switch
按键选择模式,博主用的是触摸屏,但是一开始只把它lcd初始化了,触摸在发挥三初始化的哈哈哈哈然后你们就懂了吧
给分享一下重要代码吧
这是主函数,其实就是一些初始化,还有模式的选择,工作都在定时器中断里面做的
如下
选择模式然后执行。
最主要的我都写在了key.c里面了
这真的是比赛时候写的。。。后来也没有改动。。。真不敢相信我当时写的这么清楚哈哈哈(自恋一波)
好了好了接着说,算法呢,其实就是简单的斜抛运动啦,S=(V^2sin2x)/g,最终云台是知道的只是角度X,那么就是X=arcsin[Sg/(V*V)]/2,S是设定值或发挥中的测量值,是固定的。
那么博主呢,将初速度设为一个能更改的变量,因为如果测距测多了或测少了或者现场一些情况和实验室打的不一样了!那么你可以通过改变V,最终改变X,即俯仰角!!博主当时给的70(cm/s)还是很准的。
开机界面
模式一:上电就直接给电容充电,然后按键选择mode1,一个给继电器的管脚高低电平变换,发射。ok
模式二:选择模式设定,然后下面的是发射前角度,上面的是期望角度
模式三:和模式二大同小异,考的就是你能不能左右动~~
发挥一:这个和基础三是一样的界面。。就不再放一次了
不过是和openmv通信,然后确定红色的中心像素点在像素中心就好了,PID调节,调节好之后再测距并且发送测量距离,然后发送的时候带上自己定的暗号就好,比如0xFF,只要不是像素点能在的范围就好!!不过这时候要注意一下openmv和32通信的问题,数据处理稍微有一点麻烦。!八位变成32位而且要分辨暗号
发挥二:这个距离是定死的,但是要求在10s之内能扫一圈,所以博主定时器5s转半圈,而且在半圈之内调整好俯仰角,基本上第二次看见就发射,然后程序怎么就知道发射呢?举个例子,从左往右0-320是openmv的像素点位置,openmv发送过来位置,当从右往左扫到了,那就在165的位置要开炮!!!,这样才差不多是中心线打出去!!从左往右扫到了,同理,接收到155的位置开炮~
发挥三:触摸屏控制云台,然后有一个发射区的位置。
这道题怎么说呢,确实简单!!!很多人在自己学校做的都非常棒!但是考验大家的还有自己的东西的实用性啊。。。。你不能说以后你做一个产品,你自己测试的非常好,别人一用就炸了(举个例子),对吧,所以所有的误差都是我们要考虑的东西,那么对于我们来说,测距是不稳定因素,那么好,我去程序里面更改能直接影响它的因素就好了~。打远了,速度调大,打近了,速度调小。
还有就是继电器。。主控板。。。最好都准备两套。。。毕竟运输的路上emmm据我所知有很多死在了路上。。博主还是很幸运的~
其实电磁炮网上也很多现成的,如果大家以后做的话推荐买现成的,毕竟这个东西挺坑的。。。不过坑的地方我也都在硬件部分说明了,如果我还有没说到的欢迎大家讨论。
不过比赛就是比赛,他只是锻炼你的一个阶梯罢了,说明不了什么,自己学到东西才是真的!!
希望以后的小同学能更加努力,长江后浪推前浪,一浪更比一代强!!!
其实我不建议大家直接去找源码,因为你从别人的源码入手,比自己写要费脑子的多!!自己一定要基础好,然后有了思路写起来就没那么麻烦了!多动手!千万别嘴上功夫。包括做往年赛题,虽然要参考网上,但是记住,一定要自己想!当然博主的源码会在以后更新出来。
2019.9.3 河北地质大学邓博远
转载:https://blog.csdn.net/qq_43533717/article/details/100513193