四天四夜,与时间赛跑,致敬电赛

作品封箱,电赛终于结束了。
组委会公布题目之后,本来打算做电源的我们,全体懵逼,A题强制性要求用TI公司芯片做控制器,而我们最常用的是STM公司的32系列处理器。C题和D题也与我们前期培训和调试的电路有点关系,但关系不大,题目也挺难,经过讨论,我们在8.7上午确定了比赛题目,H题,电磁炮。确定完题目之后,抓紧找相应模块,搭电路。作为队长,主调由我负责,包括编写代码。下面我以比赛日期,来讲述我的参赛历程。
8.7上午确定题目之后,队友负责电磁炮的电路搭建和打炮距离的测试。我负责硬软件调试。我打算用两个五相步进电机搭云台,因为实验室本来买的云台是用两个小舵机搭成的,且不考虑它的转角精度问题,也考虑到后期还要在云台上面装炮筒,Openmv,超声波等等,承重一定要达标。所以我用市场上普遍的俩个五相步进电机作为X轴和Y轴。没有ULN2003电机驱动模块,下午赶紧托人去买。根据题目要求,在200cm-300cm,有靶子在一d值,很明显d值是让自己测得,并手动输入距离,实现电磁炮的精准打击。第一想法就是用超声波,在8.7下午6点的时候,超声波已经调好了,用了STM32F103ZE最小系统板,加个OLED屏实时显示检测到的距离,在程序里我调用的屏函数,可以显示到小数点后三位,在200cm-300cm检测,数据很准确,完全OK!下面我又抓紧调试电机,在用ZE核心板实现对两个电机的驱动,ULN2003驱动模块需要12V的电压单独供电,所有要准备一套自己的辅助电源,确保有12V,5V,3.3V的电源供电口,因为我们前期已经准备,所以直接拿来用。在电机驱动电路搭完以后,在程序的主函数While循环里写下控制电机1和电机2正反转4个函数,测试电机和驱动模块,辅助电源系统是否能够正常使用。事实证明,都没有问题,当这些都测试完,已经是8.7晚上九点,接着写人机交互-键盘程序 ,题目要求用按键输入距离和角度,电磁炮可以自动改变方向和距离,说白了不就是用按键控制电机转吗?简单!但是考虑到,对两个变量实现控制,所以需要两个按键实现加减,距离单位是厘米,所以是三位数,角度根据题目要求,在X轴对电机控制两位数的转向就可以,所以开始想到的就是按键个数问题。距离三位数,三个按键,个十百,角度两位数,个十位,加减还需两个键,还要有确认键,加一起,光键盘至少就得8个,不行,太多了。到8.7晚上12点有了新的想法,用两个标志位即可,flag和flap,flag是距离的标志位,flap是角度的标志位。当flag0&&flap0,按键锁死,当flag1&&flap0,加减键控制距离的个位,当flag2&&flap0,加减键控制距离的十位………….以此类推,角度也是这样写。
在这里插入图片描述

到8.8夜里两点扛不住了,睡到8.8早上六点多,在八点多的时候,按键+云台+OLED,已经可以用按键控制云台的转向和输入距离,实现了H题基本要求第二三问。8.8下午队友那边在用Openmv识别红色靶心,因为Openmv使用Phython语言控制的,之前没接触过,通过官网现学,晚上队友已经识别到了红色,要把这个数据传送给我的控制器,就涉及到串口通信,我在编写串口部分代码时,将STM32的UART1设置成在上位机显示用的串口1,将UART2设置成与Openmv实时通信的串口2,前期调试表明已经接收到数据坐标,是16进制数,返回到电脑上位机是3H,8A之类的。
在这里插入图片描述分别为X坐标的高八位低八位,Y轴的高八位低八位,接下来考虑的就是怎么把接收到的16进制坐标转换成10进制并实时显示在OLED屏上,我在串口程序里用一个Unsigned char Buff[flag]数组接收摄像头传来的程序,在打印调用printf(“c%”, Buff[flag++]),然后OLED_string()或OLED_number()取Buff[flag++]变量显示,事实证明并没有这么简单,所以必须要用一个函数在32接收到数据之后,将16进制数据提取出X,Y的高八位低八位,进度卡在这里,到8.8晚上一直没有解决,队友那边的电磁炮电路迟迟搭不起来,很着急,因为电磁炮发射不出来,我现在的所有工作都白费,队友让我安心调代码,说没问题,
8.9凌晨两点睡了,六点多起来继续调摄像头,现在想一想,特别后悔没有和队友一起调电磁炮的基本电路,因为我在做的是发挥部分的题目,如果电磁炮射不出来,基础部分的题目都拿不到分,谈什么发挥部分?到了8.9中午的时候,摄像头的十进制坐标终于成功显示在OLED上,通过模拟8.13号比赛测试场地,测得几十组摄像头在识别红色靶心坐标,算得平均数,即坐标为(80,49), X,Y轴坐标误差,即errorx=16,errory=16,考虑到发挥部分最后一问是在X轴转动,X为-30°到30°循环转动,寻找靶心,即在Control_key函数里if(key==6&&sba(x_a-a)<=errorx)
{
自动开炮!
}
在这里插入图片描述
程序全部写完之后,就赶紧搭硬件调试,后来在调试硬件遇到好多问题,上一分钟的程序,下一秒就不好使,全部瘫痪,没有办法,代码调的太多了,不知道哪个是哪个了,无奈,重新写了一遍。
到了8.10凌晨2点,睡到凌晨6点。队友在通宵焊电磁炮的驱动电路,8.10下午总体测试,我担心的事情还是发生了,炮打不出去,赶紧排查各个器件,有没有短路,有没有烧。检查2104驱动电路,ZVS升压电路。后来把电路重新焊接一遍,一个电磁炮的发射电路调到8.11凌晨3点,终于可以发射了。再过5小时就要封箱了,抓紧测试数据,手动发炮,充电1秒,测得储能电容电压174V,钢珠的射程为250cm,测试几次之后,调试自动发炮。我在定时器3对继电器拉低400ms,key6按下,GPIOA推挽输出,即继电器的使能端。接入电路,测得0.4秒电容储能150多v,射程200多厘米,到了凌晨7点多,整体电路全部搭完,摄像头Openmv放置在最上面,当天测试的时候可以改变位置。整体上电之后,一堆问题来了!按键不能用,调整不了角度和距离,摄像头采集的坐标显示在OLED上,但是并没有实时刷新,电机也一直在发烫,第一反应就是检查程序有没有改错,程序没错之后,电路检查,发现Y轴的电机接反了,可能是太困了,看错接线端子了,哎。上电之后,5V辅助电源冒烟了,初步判断负载太多。改来改去,8.11早上8点10分,我这四天四夜调试的全部代码终于能够在我们的作品上面成功执行!按键调整模式,在OLED上输入距离,角度,电机自动调整位置,摄像头采集红色靶心坐标,实时显示在OLED上面,动态刷新。确认全部功能无误之后,转头对后面两个队友说:封箱
在这里插入图片描述

四天四夜,睡了14小时,最后的一天一夜没吃一口饭,没喝水。电赛,让我的能力提升了不止一个档次,感谢电赛,更感谢自己!

欢迎大家在留言区留言,有问题可以交流。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值