2019电赛总结(序)


2019电赛总结(序)

1 序

鄙人于某工大集成电路设计专业就学,但电子基础不佳,也是第一次写blog,希望能以blog这样的方式回望过去的一点一滴,将这份记忆留存下来,给以后的自己看,给有需要的同学们看。不忘过去,从失败里获取教训和经验,成为更好的自己。

本人自2018年9月起断断续续学了一段89C51单片机(起初是用的普中,后来进了一个电子实验室开始爱上清翔),水平大致能自己写个LCD1602,ds1302的样子,把基本的定时器摸得差不多,但是巧了:不会外部中断、串口通信、I2C。如果从头来的话,我会把这些基本的中断、协议摸清楚自己再做一遍。这些协议不止用于51,32单片机里,对于arm,RISC-V,FPGA,都是会重复接触到的东西,只要还在嵌入式的范围之内,学会了总没错。

因为自己学单片机没有人指导,也没有按教程来,所以学的很乱,该学的精髓没学,反而像显示器LCD之类的外设自己死磕,其实并没有必要自己写,拿到源码之后能修改、为自己所用就好了。其实很多东西自己写并不是最好的,别人的公开的东西都是经过验证磨炼的,不易出错。对于学一门技能而言,会灵活应用就行了,毕竟大学生有太多的其他事情,能留出的时间不多,在这一点点的时间里当然要有最大的收获。如果决心以后想做硬件工程师,那的确应该把每个器件都摸一遍自己写一遍

2 嵌入式与单片机省赛落败

在之后的很长一段时间里,都是断断续续在学单片机,也参加了安徽省的单片机竞赛,由于自己太菜所以没有获奖。那,说明一下自己的情况,高中从未参加过竞赛,对电子类一无所知;大一仅学过几个课时的C语言,和大众一样,不知道单片机,也不知道嵌入式为何物。大一浑浑噩噩过去了,拆了几次电脑,在小部门里打个杂,混混排球队,写了篇小说,跟着学长搞搞项目最后入股搞了一个创业公司。大二,和其他的工科生一样,每个周都是各种课,除了周三下午有点时间,其他时间排满了课程,各种作业和报告,还要复习功课,毕竟对数电有点意思。再加上,实验室由于个人的主动,越来越多的事情担在我身上:组织学校的单片机比赛进行,筹备物资,整理实验室资源等。单片机自然是落下了,代码也没怎么写,忘得比学的快,即便在比赛的四个钟头里思路很完整清晰,但是却无法用单片机实现,C语言就像客人一样,不能随心所用。赛后,极其感伤。一是配合不佳,两个人默契为0,二是都基础不够,无法应对硬件驱动问题,三是写代码没有灵魂,不能心想事成。这些问题都来源于少锻炼,不能将实际问题模型化,遇到数学实现问题(数据存储排序滤波之类)都绕过不谈。

3 电赛启航

省级大学生创新创业项目落空,半期考试也遇挫折,单片机竞赛更是脸面无存,于是,在2019年的5月。本来不打算参加电子设计竞赛我,毅然踏上了征程。队友还是单片机的队友,来自于机械专业他,心里也是不甘。最开始的选题是想做仪表类的作品,因为自己正好有门课在学fpga,想借此机会,更好地学fpga,也更好的完成电赛。但第三个队友就很迷了。第一次找到的队友,斗志不强,把比赛当做业余,投入时间很少。虽然他高中曾用arduino单片机拿过一些奖项,但是对于电赛通常都是用STM32或者K60,MSP430实现的。所以最后劝退了队友。第二次找到的队友是和我一个专业的同学,因为他也是实验室的成员,所以就想到了他。

由于实验室有个大佬去年模拟国赛拿了二等奖,所以十分崇拜,他让我们做控制类,说控制类简单(所以我们就入坑了——但是大佬比赛的时候居然不做控制!我们一直以为能跟着大佬做题,怎么也混口汤喝,拿个省三国二什么的……) 我们的选题也从仪器变成了控制。对于仪器题目,自己做心里没准,可能打水漂什么奖都没有所以就放弃了,现在看来,很不可取!任何题目,只要认真付出、努力去实践学习,一定能有所收获。并且每年做控制类的队伍太多(控制类是最容易入门的,所以专业性不强的同学也加入了进来)仪器什么题目还是相对容易拿奖的,省三总比成功参赛好吧。

起初,开了两次会,确定了做控制类题目。也大致划分了任务。控制类的核心是pid算法,对于当时一脸懵的我,还是咬紧牙接过任务。这一次,我担任了队长。(其实我不应该当队长,这点后面再说)

这里插一曲小故事。大学一路过来很多事情越发让我感觉到如果自己不百分百参与进去,这件事情就做不好:(数字电路的课程设计三人一组,从multisim电路搭建仿真调试成功,到答辩,搭建电路(几百根导线),完成不了功能,开始找问题,80%都是我在做。这也感谢实验室里对动手能力的培养,工程解决问题能力的学习。)(这个课程设计里很重要的经验,也是初入电子世界的同学们一定要注意的点:两个开发板、工具箱一定要共地!电机供电一定要和开发板分开、且共地:电机需要的电流很大!在使用元器件(74LSxx,电容电阻,包括杜邦线)一定要检查是否ok,买的变压器是否变压符合要求,电阻阻值是多少,杜邦线断没有,什么样的导线能承载多大的电压电流。

我们三个人对STM32都是白痴,这时候已经5.20之后,我下定决心在月底学完32基础的部分(库函数版本)。于是每天吃饭、睡前都是B站正点原子战舰版视频。我完全抛开了所有的课程,陷入了自己的世界里,实验课也没有去,可能是代签,也可能随意不签到,每天就泡在实验室里学32。一天入门GPIO,输出(LED,BEEP),第二天看GPIO输入(KEY),第三天看中断NVIC,外部中断,第四天看定时器,第五天看pwm输出,第六、七天看输入捕获,每一天都跟着视频调用库函数,配置各种参数,查查手册(一个是原子的开发指南,一个是中文参考手册,还有什么英文的忘掉了,去CSDN上看看大佬们的代码,学习配置函数)就视频半个小时绝对是不够的,(视频跳掉了很多过程)实际操作下来,起码要3~4个小时。并且这些只是复现了视频里的实验要求和功能,变换了要求自己还是不会。

4 PID简述

      于是6月初,一边刷知乎、CSDN看往届的学长们怎么参加电赛(一个月做好一辆小车,完善各种功能最后拿下果酱)一边考虑做一个小东西出来吧。于是盯上了实验室里废弃的小车,同学丙开始做硬件搭小车(说来挺挫,小车都不会玩,还是去CSDN上下载的源码学习)我开始研习PID算法,这时候已经6月初,在B站上刷了PID基础讲解.

     基本上理解之后,又拿了大佬学长给的一堆PID资源开始逐个观看(事实上,大佬学长只是收集了资料,绝对没有关注是不是好资料)光是看那不行啊,于是自己参照一个PDF文件开始学着写PID。PID算法C语言版链接.这样写的pid算法可以直接在VC6.0上跑(当然各位大佬可以在vs上跑,我太菜),能体验到数学公式实实在在变成代码的成就感。这份PDF上讲了很多东西,但是对于电赛基本的位置式、增量式PID就够了,想冲国一的大佬应该考虑模糊PID算法,那个调节是非常的快、稳、狠!这份C语言版的PID,缺点在于他的输入是系统给的,是一个非常理想的数据。

     而实际上,输入应该是传感器(比如超声波SR-04,激光,霍尔编码电机,陀螺仪MPU6050等)这些输入值值需要根据香农采样定理(我也不懂)进行采样,一般是设置一个定时器,固定多少ms执行这个采样函数,更新一次采样值输入PID的结构体里去。(采样间隔越短,输入越逼真,但是对单片机低速处理困难)(风力摆MPU6050用了20ms,板球用了50ms(这个取决于摄像头的帧数50ms=20帧),激光超声波大概100ms采样一次)(采样定时器的抢占优先级低,响应优先级随意)后续会跟进附上代码。

      另外一个就是执行单元的时间,舵机是20ms(50Hz)的pwm输出,空心杯电机是5ms。这个时间大于执行单元(电机)完成相应的运动需要的时间。也就是说,如果要求小球运动1cm,平均速度为100cm/s,那么20ms就能跑2cm,是能够满足要求的。但是,2cm就是这个运动系统的最小精度,每20ms才能修改一次运动方向。如果要修改精度,就需要控制木板的角度从而控制小球加速度a,从而控制平均速度。精度越小,模拟出运动的轨迹就越逼真。

     PID算法是将当前的采样值和上一次的采样值做比较,比如要求去5cm,上次在1cm,过了20ms,这次在2cm处,P项=3,I项=x,D项=1,输出=KpP项+KiI项+Kd*D项,如果系数K都是1,忽略I项的影响:即PD系统,输出为4,那么这个4将作为电压反应到pwm输出上,一般是把这个4当作定时器的比较值compare,和设置的arr(定时器重装值)构成了pwm的占空比。如果设置的重装值是10,那么pwm=40%。这个pwm将反应到电机上。如果是电机将以40%的转速(事实上并不完全线性)执行,来到达目标5cm。 电机带动系统在20ms内能移动多远,需要大致估算一下。满速都达不到要求的话,可能就凉了,该换方案了。精度也需要考虑进去。 这个过程中一定要考虑的是,这个输出4能不能满足要求。你要这个时间段20ms做这件事情,但是电机没有完成,所以需要用I项去弥补,或者合理放慢执行单元的时间。

     PID算法连接了传感器输入和电机输出,是一个闭环的操作。考验同学们的,是三个系数的运用。p能更快,i能补充(如果达到目标很慢,他就会发挥作用),d能提前预判刹车,避免超调,也是维持静态动作的利器。但是简单的pid一定是不够的,简单决定了他作用有限,模糊pid是真的强。

5 那之后

电赛总结(一)

电赛的一些经验

     队长最好是做硬件的同学担任。硬件决定了软件的上限,硬件队长能很好把控整个项目的实际情况和进度,软件同学只能在硬件的基础上进行实现,而不能超前,否则硬件达不到,软件代码白写(比赛第一天定下方案后软硬件同时进行,但是软件也只是大体框架的搭建)。队长以外的两个同学负责软件编写、机械结构、论文。软件部分,比赛前要多做题目,这样就能把常用的硬件驱动代码提前准备好,同时也能多了解算法的灵魂所在。数学公式到C语言单片机实现,其实是一件很困难的事情。只有灵活调动C语言为自己的大脑所用,想要什么功能就能实现什么,和代码合二为一,才算是一个合格的参赛选手。机械结构看实验室的条件了,可以提前买一些万向轮,水管,木条、木板,亚克力板之类的,方便加工。硬件部分就是一句话:多看原理图,多焊接电路!焊的多了,也就有感觉了。很多情况就能从容应对,也不至于测评时出现虚焊脱焊的问题。硬件要提前买好,一定要买三份!比赛的时候顺丰包邮可能都来不及!(容易买断货)

电赛官方培训视频链接.

  • 8
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2019复测CSDN是指2019年举办的子竞(CSDN)经过初后,对未能进入决的参选手进行再次测试的过程。子竞是一种以脑和网络为基础,通过虚拟世界中的游戏进行竞技的比形式。CSDN是中国领先的IT技术社区和全球软件开发者社区,为大量技术爱好者提供了技术交流、学习和分享的平台。 对于2019复测CSDN,主要是为了给未能进入决的选手提供进一步展示实力和提升技术水平的机会。在初中,参选手需要完成一系列的挑战和任务,并通过高强度的竞争脱颖而出,进入决阶段。而未能进入决的选手,通过复测CSDN,将有机会重新展示自己的技术能力,争取获得晋级的机会。 复测的方式可能会有一定的变化,可能包括技术面试、编程能力测试、项目展示等一系列环节,以全面了解参选手的技术实力和综合能力。参选手需要充分准备,展示自己的优势,以期获得更好的成绩。 对参选手而言,2019复测CSDN是一次重要的机遇,既是对于个人实力的检验,也是对于团队合作和技术交流的锻炼。通过积极准备和努力,选手们可以不断提升自己的技术水平,为将来的竞争做好充分准备。 对于CSDN而言,举办复测是提升竞的公平性和真实性的一种方式。通过对未能进入决的选手进行复测,能够真实反映选手的实力水平,为最终的胜者提供更公平的竞争机会。 总而言之,2019复测CSDN是一次为未能进入决的参选手提供展示和提升实力的机会,也为竞的公平性和真实性提供了保障。参选手应该充分准备,努力展现自己的技术水平,为未来的发展打下基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值