点击上方“大鱼机器人”,选择“置顶/星标公众号”
福利干货,第一时间送达!
阅读文本大概需要 6 分钟。
0
前言本文作者:谢斌
曾经获得2017年控制题【板球控制系统】全国一等奖。
他之前有写过几篇关于比赛的文章,大家可以点击阅读。
全国一等奖,他的学习之路。
从0开始,三个月,获全国一等奖。
这次他继续分享经验。
正文
暑假接踵而至,还剩一个多月就是2019年全国大学生电子设计竞赛了,不知道准备参赛的朋友们是否已经开始准备练习了。
这次趁着暑假开始,国赛临近,写一篇提升篇的文章。因为我之前做的是控制方向,所以这篇文章大部分内容都是以控制为主,如果是电源或者其他方向的,可以关注公众号。后面会写。
首先,我还是要再提醒大家一次,基础非常非常非常重要。
建议把部分STM32的基础例程学透,如果是入门不久的朋友可以参考一下我之前写的基础篇的文章。
为什么一直强调基础?
在我看来,国赛就好像一门考试,是有时间限制的,就像刚过去的高考一样,可能你平时觉得你学的还可以,但是在比赛的时候,因为压力太大可能会出现很多未知情况。
比赛只看结果,即使你在平时可以做出来,比赛的时候万一出现了什么情况,没做出来,评委不会听你的任何解释,只会根据你现场做出的作品进行打分。
四天三夜的比赛时间,看似很长,但是在此期间,三个人需要根据题目商量方案,然后开始验证方案,如果一个方案不行,马上就得开始下一个方案的验证。
一般来说,是不允许我们在找bug上面浪费时间的,所以,基础就显得尤为重要,尽量减少因为自己在程序配置上出错的情况。
废话不多讲了,根据我自己之前的参赛情况,进行了一次总结。个人觉得,平时在练习的时候,要有意识的培养自己大局观,层次观。
1
大局观
何谓大局观,在我看来就是随便给你一个题目,你的脑海中立马就要想到如何来实现题目中的功能,用什么器件来实现题目中的功能,自己脑海中要形成多个清晰的设计方案和设计流程。
对于写软件的同学来说,在写程序之前自己心中要形成一个完整的代码体系;对于做硬件的同学来说,在pcb设计之前自己心中要有一个大概的整体布局。
就拿17年的滚球系统来说:
我们拿到题目就要想到:要控制小球运动肯定是要有传感器检测小球在平板上面的位置,想好是用摄像头还是用其他传感器;
要控制平板运动以此来间接控制小球在平板上进行各种运动,是用舵机还是步进电机还是其他控制器材;
既然做的是一个板球控制系统,用PID控制算法还是其他算法来实现控制系统的稳定度,入口参数用的是哪一个,如何与控制器件联系起来等等等等。
这个其实在很多公司的老员工都有这种大局思维,项目做的多的同学也会养成这种思维,只是可能他们自己都没有意识到。
我自己也是在国赛完总结的时候才意识到的。
2
层次观方案商量好后,自己要有一个清晰地设计流程。
对于写软件的同学来说,自己要很清楚自己应该先写哪个程序,后写哪个程序,可以在纸上简单的画一下整个设计的流程图;
对于设计硬件的同学来说,也要很清楚的知道先设计哪一部分,后设计哪一部分,一般还要预留几个端口,引出来以防万一。
一般来说,即使有好几个方案,设计流程一般都差不多,差异只在器材的选择上面。也拿17年的题目为例:
第一步:就要检测小球在平板上的坐标位置,写摄像头的图像处理程序,要实现能无误检测到小球在平板上面的坐标位置,如果小球没动,位置数据总有误差,可以加一个滤波程序;
第二步:写舵机或者步进电机的控制程序,要实现用舵机或者步进电机控制平板带动小球在平板上任意运动,这里只需要能控制小球做上,下,左,右,左上,左下等等方向的简单运动即可;
第三步:写定时中断程序,设计好控制间隔,整合前两步写的程序,把控制程序放定时器中断里面。比如我控制的是50ms的中断间隔,每50ms检测一次小球位置与目标位置的坐标偏差,再控制小球进行相应的运动。要实现小球能够到达任意给的一个目标点,允许有误差。
第四步:写PID算法程序,因为只用if来控制小球运动的话,一般都会发生超调和失调等等情况,小球会在到达目标位置后再往前运动一段距离,或者根本到不了不标位置。所以使用PID控制算法来完成对小球的精准控制。这里要求能控制小球精准到达平板上的任一目标点。
第五步:就可以按照题目来完成要求了,既然能实现小球的精准控制了,基本上已经可以完成题目基本部分的要求了。前四项要求基本上就是跟换小球的目标点来控制小球在平板上的各种运动。
第六步:是完成题目的发挥部分。一般国赛题目的发挥部分是在前四项的基础上增加难度,比如要增加一个对时间的控制,必须要控制小球在某个区域内停留固定时间再控制小球到下一个目标点去。
第七步:时间充足的话可以利用屏幕和按键做一个实时菜单,用少量按键在屏幕上进行选择,完成各个功能要求。
3
总结关于2017年控制题,具体的设计流程,网上有很多很多方案,所以具体的设计方案我不再阐述。我只给大家提一些方法和建议。除了上面讲的,我觉得还需要养成几个良好的习惯。我之前也是讲过,拿软件部分来讲:
第一:每次完成一个功能,就要复制一次工程,在复制的工程上面添加其他功能。防止自己在添加功能修改代码的时候出错,到时候改哪里都不知道,程序又写乱了,又忘记怎么恢复,那就真的是会很麻烦。
第二:要养成写注释的好习惯,自己定义的变量或者自己写的一些功能语句一定要多写注释,有时候代码量大了,写程序写的久了,自己写的东西都会看不懂。特别是国赛那几天,有时候你稍微休息一下,可能自己的程序都有些看不懂了。有注释的话就不用那么费劲的去回忆了。
最后,再给大家整点鸡汤吧。在准备比赛的过程中,注定会很累,很孤独。但是强者的道路注定都是孤独的。要努力,不放弃。
在你努力后,你会发现,等到比赛完的某一天,你可以笑着向别人讲述那些曾经让你哭的瞬间。
4
最后若觉得文章对你有帮助,随手点“在看”、转发分享,也是我继续更新的动力。
长按识别图中二维码关注
推荐阅读:
全国一等奖,他的学习之路。
从0开始,三个月,获全国一等奖。