赞
踩
鄙人于某工大集成电路设计专业就学,但电子基础不佳,也是第一次写blog,希望能以blog这样的方式回望过去的一点一滴,将这份记忆留存下来,给以后的自己看,给有需要的同学们看。不忘过去,从失败里获取教训和经验,成为更好的自己。
本人自2018年9月起断断续续学了一段89C51单片机(起初是用的普中,后来进了一个电子实验室开始爱上清翔),水平大致能自己写个LCD1602,ds1302的样子,把基本的定时器摸得差不多,但是巧了:不会外部中断、串口通信、I2C。如果从头来的话,我会把这些基本的中断、协议摸清楚自己再做一遍。这些协议不止用于51,32单片机里,对于arm,RISC-V,FPGA,都是会重复接触到的东西,只要还在嵌入式的范围之内,学会了总没错。
因为自己学单片机没有人指导,也没有按教程来,所以学的很乱,该学的精髓没学,反而像显示器LCD之类的外设自己死磕,其实并没有必要自己写,拿到源码之后能修改、为自己所用就好了。其实很多东西自己写并不是最好的,别人的公开的东西都是经过验证磨炼的,不易出错。对于学一门技能而言,会灵活应用就行了,毕竟大学生有太多的其他事情,能留出的时间不多,在这一点点的时间里当然要有最大的收获。如果决心以后想做硬件工程师,那的确应该把每个器件都摸一遍自己写一遍。
在之后的很长一段时间里,都是断断续续在学单片机,也参加了安徽省的单片机竞赛,由于自己太菜所以没有获奖。那,说明一下自己的情况,高中从未参加过竞赛,对电子类一无所知;大一仅学过几个课时的C语言,和大众一样,不知道单片机,也不知道嵌入式为何物。大一浑浑噩噩过去了,拆了几次电脑,在小部门里打个杂,混混排球队,写了篇小说,跟着学长搞搞项目最后入股搞了一个创业公司。大二,和其他的工科生一样,每个周都是各种课,除了周三下午有点时间,其他时间排满了课程,各种作业和报告,还要复习功课,毕竟对数电有点意思。再加上,实验室由于个人的主动,越来越多的事情担在我身上:组织学校的单片机比赛进行,筹备物资,整理实验室资源等。单片机自然是落下了,代码也没怎么写,忘得比学的快,即便在比赛的四个钟头里思路很完整清晰,但是却无法用单片机实现,C语言就像客人一样,不能随心所用。赛后,极其感伤。一是配合不佳,两个人默契为0,二是都基础不够,无法应对硬件驱动问题,三是写代码没有灵魂,不能心想事成。这些问题都来源于少锻炼,不能将实际问题模型化,遇到数学实现问题(数据存储排序滤波之类)都绕过不谈。
省级大学生创新创业项目落空,半期考试也遇挫折,单片机竞赛更是脸面无存,于是,在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个小时。并且这些只是复现了视频里的实验要求和功能,变换了要求自己还是不会。
于是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是真的强。
队长最好是做硬件的同学担任。硬件决定了软件的上限,硬件队长能很好把控整个项目的实际情况和进度,软件同学只能在硬件的基础上进行实现,而不能超前,否则硬件达不到,软件代码白写(比赛第一天定下方案后软硬件同时进行,但是软件也只是大体框架的搭建)。队长以外的两个同学负责软件编写、机械结构、论文。软件部分,比赛前要多做题目,这样就能把常用的硬件驱动代码提前准备好,同时也能多了解算法的灵魂所在。数学公式到C语言单片机实现,其实是一件很困难的事情。只有灵活调动C语言为自己的大脑所用,想要什么功能就能实现什么,和代码合二为一,才算是一个合格的参赛选手。机械结构看实验室的条件了,可以提前买一些万向轮,水管,木条、木板,亚克力板之类的,方便加工。硬件部分就是一句话:多看原理图,多焊接电路!焊的多了,也就有感觉了。很多情况就能从容应对,也不至于测评时出现虚焊脱焊的问题。硬件要提前买好,一定要买三份!比赛的时候顺丰包邮可能都来不及!(容易买断货)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。