全国电子设计大赛马上就要开始了,最近有很多同学在询问如何准备电子设计大赛的测控类(控制题),我在这里做一个较为详细的备赛过程,为新手、老鸟们做一个简单的梳理,简化大家的参赛准备流程。帮助一些较为迷茫的同学快速获取奖项。整体指南分为三部分:硬件准备建议、软件准备建议、重要细节。
阅读前重要须知:今年TI承包电子设计大赛,从比赛形式或者题目上可能会产生一些未知的新改变,包括但不限于指定主控(优点:公平了些。缺点:可能导致硬件被垄断,一片难求、TI的代码生态圈做得很差,没例程。)、搞一些难度过高的东西(ROS、视觉、人工智能)、搞一些算控制但又不算控制的奇葩题目(参见18年手势识别系统)。具体还需要看官方通知。凡是涉及到xxxx芯片能不能用等【官方规则】性质的问题,请一定注意要询问当地赛区指导老师、负责人。以官方为准。别人说的都不管事。
首先我们来回顾一下最近三届比赛的题目。分别是风力摆、倒立摆、板球系统。硬件还需要在细分成两个方面。一个是主控等电子设备,在一个是控制题所需要的机械硬件。首先我们来看电子设备。电子设备从控制题目的角度来说大约分为四个小部分。分别是传感器、主控、执行器和供电电源。
这三届主流的方案用到的传感器有如下几种:陀螺仪姿态传感器、旋转电位器、AB相增量编码器等旋转位置测量传感器、摄像头。
比赛没有用到并且在电子设计中常用的传感器:人体红外开关、超声波、光电距离传感器、颜色传感器、激光距离传感器、电子罗盘(指引平面航向角,很少用到,但是yaw比陀螺仪准)、磁场传感器(测量磁场强度、或者是开关量等,同样很少用到)等等(欢迎补充)。
比赛中用到的主控主流有:
(1)51单片机系列:我个人认为很便宜,而且很多初学者探寻寄存器位操作都是51入门,但是遇到驱动摄像头这种任务,很多萌新都问51能做板球吗?我只能打个比方,假设驱动摄像头这个任务,好比让你从中国去俄罗斯。51单片机就好比自行车,STM32单片机就好比空客飞机,树莓派就好比任意门。同样几千公里的旅程,你选择哪个?如果非要从能不能这个角度回答,我必定说能,但是背后付出的时间和成本就完全不值得。总而言之,51在处理复杂任务方面力不从心,主频太低。
(2)MSP430系列:低功耗确实做得不错,但是关键在于,学生做比赛要的不是多强的芯片,多么低功耗的设计,他们要的是支持和资料,就算给他一台银河超级计算机,他可能都不会用。Ti所有系列的芯片都缺乏有效、有力的社区支持,和相关的资料(编码器范例、显示屏范例、摄像头等等)。网络上抄来的代码错误百出,虽然ti推出了energia这个编译器来解决不同硬件的兼容和资料库问题,但是感觉是个半拉子工程,函数库的丰富程度远远没有达到预期。Ti也有dsp、fpga,但是那些资料和入门学习,对于新手来说基本tan90,语言难懂加上资料紧缺,基本很少有学生使用ti系列芯片。Ti飞控是一个个例,因为背后有专业的工程师团队在给你写库函数,拿钱做事,减轻了你的工作量,也方便了很多。
(3)STM32系列。32在学生圈中资料可谓是超级多,要啥有啥,基本没有生态圈和资料缺乏这种问题。32主要分为F1和F4系列。F1和F4我个人认为在电赛中最明显的区别就是F1不能或者说不适合驱动、处理摄像头。他驱动摄像头帧率低的可怕,并不能满足控制系统需求。那些询问F1能不能做板球的同学可以否定这个方案了。如果非要说能,那得用openmv或者树莓派、nano等作为图像协处理器,数据出来给F1做pid控制,单独F1是很难完成摄像头处理任务的。相比之下,F4具有DCMI解码,且主频比F1高出1倍,经过测试可以稳定30FPS提供较低画质的图像处理,是满足图像处理的最低配置。其他功能二者没有过大的差别。如果你强行询问F1是否能够做板球,我给你的回答是:你可以把F1扔了,用51就够了。
(4)Arduino系列 arduino系列资料丰富程度可以与32相媲美,甚至开源的设计远远多于32。调试超级无脑,调用库函数超级无脑,不用说大学生了,就是一个基本没有基础的高中生也能完成arduino的程序设计。(本人高二自学的arduino)。它最大的优点就是函数库超级超级超级多,要mpu6050的数据,加个函数库抄抄代码就出来了,要编码器的换个编码器库函数抄一抄又出来了,Rush题目速度出奇的快,缺点是不支持在线debug,不能直接查看内存里面运行的数据,需要在串口打印flag和运行数据用于查找错误和测试,并且工程大了以后,例如300行以上编译器看起来很难受,过于简洁。更加致命的是无法添加中断,添加了显示屏等外设以后会导致pid运行周期变化。但是如果题目超级简单,使用arduino是最佳选择。
接下来是执行器系列。近年来主要使用的执行器有:步进电机、直流减速电机、空心杯电机、舵机、三相无刷电机。基本都是电机为核心作为执行器。驱动方式基本也就是PWM波了。需要注意的是需要购买相关电机驱动。
实物最后是机械部分。机械部分主要准备2-5mm各种螺丝螺母,3mm最常用。螺母最好买防滑防震带胶圈的,谁也不想装置运过去散架。以及各种长度、单通双通螺柱,可以买一个20-50元左右的各种型号螺柱盒子。需要联系最近的建材市场五金店寻找木材、包括木板或者木条,还有铝型材例如3030铝型材等等,以及铝型材配套的螺丝、倒角固定、支撑装置。有条件的实验室可以优先配备一台3D打印机,其次可以配备一台激光切割机。我使用的3D打印机行程是15cmx 15cm x15cm。我使用的激光切割机行程80cmx60cm,仅供参考。激光切割准备材料厚度为亚克力3mm-5mm。比如板球装置地板用了5mm,jetson nano外壳和摄像头支架用了3mm。还需要准备适当型号的碳纤维管,适当型号的万向节、法兰盘、联轴器。导电滑环这个倒立摆用了一次,可买可不买。如果赛题大致方向不发生变动,还是以操控某种机械达到闭环控制,以上清单应该够用。欢迎补充。工具在此不做赘述。
软件准备应分为三方面。
(1)熟悉往年赛题以及常用传感器,执行器,确保每一个关键电子元器件自己都有驱动、都能通过程序实现正常功能。比如摄像头能正常读取图像、陀螺仪正确读取角度、电机可以正常转动、编码器正确读取角度等等,这些需要赛前准备好,赛时copy就用,这是提升速度的关键。关于传感器和执行器的资料建议找卖家要,也可以自行寻找、设计编程。主控需要至少熟悉多路pwm输出、细分度占空比调整、按键中断、显示屏驱动、定时器中断等功能。说白了就是你得有工程文件,这些工程文件可以满足你手里型号的各种外设使用。一定要确保能够正常驱动,等比赛搞,或者比赛现看别人的“烂七八糟型号完全不对的驱动”自己改大概率没戏。
(2)在(1)的基础上熟悉pid算法,通过练习往年题,了解什么是pid,什么是位置式pid和增量式pid,pid如何通过单片机c语言实现,pid的输入、输出、限制幅度、pid控制的频率、pid串级控制、pid参数调整。这里还要说个细节,pid调整时完全可以通过Keil(以STM32为例)编译器,通过Jlink、STlink开启Debug模式用软件自带的Watch Window来查看变量和计算结果,使用熟练以后,基本不用什么上位机示波器之类的。既节省了串口上传的算力又节省了时间,
(3)前面的全部做完以后,准备一份工程,无论你是什么单片机,这份工程都需要实现以下几点功能,这非常重要!:实现显示屏驱动,能够显示自己想要的。实现按键切换数字(用于赛题切换)。实现按键控制单片机中变量0和1翻转(一键启动和紧急停止标志位)。实现按键参数调整,无论是通过9字键盘输入还是偷懒使用数码手表双按键上下调整均可。(用于赛中测评调整参数)。说白了就是提前把赛题确定的部分准备好,什么是确定的部分呢?按键切换题目、一键启动停止、参数调整。到时候把pid输入输出、传感器读取和执行器部分往里面一丢就行了,不用再花时间去搞这些确定的部分。
细节之一:一定要练习往年题,风力摆,倒立摆,板球,至少一道题。前期的投入带来的是解决问题的经验,经验在后期赛题较为困难时刻可以带来强大的优势,因为这种情况你见过,所以处理起来得心应手。如果你熟悉赛题考察的传感器、执行器、有自己常用的主控,那么很多工程可以copy过来直接用。如果三天比赛时期你还在纠结6050无法读数字、电机舵机不会驱动、按键如何读取,中断挂了导致单片机卡死,那么你将会浪费大部分宝贵的时间。同时也说明你没有一个扎实的基础。
细节之二:如果你前面的都照做了,往年题也设计实现了,那么电赛最终考察你的,实际上是设计方案和发现、解决问题的能力。比赛三天内你最先会遇到方案设计问题。一套好的技术方案决定了你会遇到多少问题。举个例子,板球用推杆电机做的人基本都是GG,用舵机的获奖最后最多。经过技术方案设计以后你会遇到技术方案中隐藏的问题,比如板球系统中舵机力臂、安装方式等等。这一系列需要你通过合理的推测加上控制变量法理性的去测试和解决问题,脑子要灵光,不要把注意力放在不重要的问题上。也不要眉毛胡子一把抓一边改机械一边调整pid然后还换了传感器,你都不知道是哪里带来的问题就直接乱改,肯定是问题越来越多。最后如果你顺利解决了这些问题,等待评测,记得留后路,易坏物品和零件一定要备份,设计的时候最好模块化、快拆化、防止测评出问题直接GG。
细节之三:硬件采购的话,我的意见是先做往年题,做完了往年题你基本就已经有了相关硬件和耗材。第一波硬件购买是随着你做往年题的过程中完成的。第二波硬件购买需要等官方清单出了以后再去购买,一般来说官方会提前一周发布需要的清单以供大家参考。到时候也会出现猜题目等等。
细节之四:组员的分工合作。我认为我的团队是在控制题目中较为均衡的。队伍三名成员,一名专门负责硬件电路设计和机械设计,擅长CAD、SW和AD,比赛时期11个按键的键盘就是这个老哥用洞洞板焊接制作的,机械图纸也是他转化出来的。另外两名成员更偏向于软件,一位负责单片机底层硬件和GUI,包括了各种外设驱动、按键切换、GUI显示等等较为偏向于驱动层的程序。我主要负责应用层,负责各个赛题的解决方案、pid控制、摄像头数据处理、参数调整等等偏向于控制应用的东西。这是我们队伍的组成,个人来说还是比较满意的,希望大家能够合理分工,共同努力。
细节之五:这个放在最后说,只要是人办的事情,肯定有空子钻。我之前一直在说树莓派等用来做电赛基本属于技术作弊,实际上也是因为使用linux系统外带opencv库过于简单了,板球这种简直是易如反掌,使用单片机做板球的同学驱动摄像头这一环节挂了一波人,噪点又挂了一拨人,寻找小球算法又是挂了一波,然后pid和机械没时间做了,可惜啊,用opencv几行代码就完全能够避开、解决这些问题。很多人会说了,‘’电赛是一个开放性的比赛,你做不出来是你自己菜,和我们用树莓派没关系。你行你也能用树莓派,有本事你来用啊,别看着我们用在那里吃柠檬。‘’这个我只能说,电赛的题目设计的略微过于困难,导致对于硬件有了苛刻的需求。但是由于主办方的某种程度上不作为、导致了硬件性能对赛题影响过大时,有人钻了空子。就像15年的轴流风机和空心杯电机大战,就像17年单片机和树莓派的争议,这感觉很像一场拳击比赛,两边都想赢,一边只找到了60公斤级的选手,另一边请到了200斤的相扑大师,打都没打一屁股就把对面压倒了。归根结底,主要是官方赛题门槛设计不合理、主控和硬件性能未能建立起一个合理的分级制度或者是考察方案。这点可以参考飞思卡尔,主控限制主频或者硬件指定,增强比赛的合理性和公平性。但是如果官方今年还是未有动作,那我只能说,法不责众,作弊的人多了就不叫作弊了。叫钻空子。钻空子的人多了,也不叫钻空子了,叫正当合理。至于今年控制题让用什么不让用什么,请参考官方后续规则。
全国大学生电子设计大赛3000人交流群:597962412
全国各地电子设计学习者和你一同走向国一!