376172272 发表于 2015-10-30 21:03

【2015电子设计竞赛】风力摆控制系统赛题解析+源代码开源

<div class='showpostmsg'>风力摆控制系统赛题解析及源代码开源TUTE 机电楼617智能仪器研究室(硬件设计:王晓君 算法设计:严兵 程序设计:吴思远)      参加过2015年全国大学生电子设计竞赛做风力摆控制系统的小伙伴们一定对这道题目印象深刻,不管是成功还是失败,各位肯定都是收获不少。看了网上各位大神的讨论,提出了很多解决方案和控制算法。大赛也过去了两个月,我也邻近毕业,各种事情,忙活了好长一段时间,现在趁这个空闲的机会,上上网跟各位小伙伴们分享我自己对这个题目的解决方案和看法,其中如果有分析得不对的地方,还希望各位指教。
       说了这么多,先来看一下用这套控制方案实现的视频。这个控制方案采用MPU6050做姿态反馈,从第一问到第七问全部采用闭环反馈控制,在视频中可以看到风力摆具有很强的抗干扰能力,基本上任何暴力干扰之后都能在5秒内恢复原来的运动状态,当然用风扇吹就更不在话下了。视频打不开的可以复制以下优酷链接打开。http://v.youku.com/v_show/id_XMTM3MDcwMDY0NA==.html?from=s1.8-1-1.2#pactionhttp://player.youku.com/player.php/sid/XMTM3MDcwMDY0NA==/v.swf视频看完了,我来说一下我的实现方案吧。一、题目分析       首先拿到这份题目,要把出题专家在题目中隐晦告诉你的关键字眼抠出来,揣摩出题专家的意图,才能尽可能的拿高分满分(大家都是高考过来人)。在下图中我把题目的关键字用红色标出来了。请看图!
通过刚才图片上面的分析,用一句话总结:专家想让学生做一个“伺服控制系统”,学过《自动控制系统》的同学肯定知道其中的意思。但是,叫“伺服控制系统”还是不够完整的,还缺少了此题最关键的字眼——随动系统!随动系统的定义是:若给定的输入信号是随时间变化的并且系统的输出量随输入量的变化而变化这种系统就称为随动系统。快速跟踪和准确定位是随动系统的两个重要技术指标。所以完整的叫法应该是“伺服随动控制系统”。注意!给定的信号是变化的!变化的!变化的!如果理解为固定的,就达不到想要的效果。题目分析完了,那么我要怎么做才能达到上面的要求呢?不要烦,我们逐条进行分析解决。二、选型方案       第一步,控制系统选型:刚才说了,我们需要做一个伺服随动控制系统,通常衡量伺服系统性能的指标有“带宽”、“精度”、“抗干扰能力”等。先说系统带宽,带宽反映风力摆跟踪的快速性。带宽越大,快速性越好。风力摆控制系统的带宽主要受到控制对象和执行机构的惯性的限制。惯性越大,带宽越窄。根据题目要求做“自由摆运动”,由单摆周期公式可以求得风力摆的摆动周期T在1.3-1.6秒之间,换算成频率f在0.625-0.77Hz之间,大家可以自己掐表计算一下摆动的周期。由此可知我们需要设计出一个带宽大于0.77Hz的控制系统(取0.8Hz)即可完成题目的要求。出题的专家制定的这个指标还是简单的,要知道现代伺服控制系统带宽已经超过了50Hz。角度采样率根据奈奎斯特采样定理,理论上选取fs>2f即可,但是题目中要求了系统最大调节时间,为了使得控制效果更好,需要取fs>10f甚至更高,在本次设计中采样率选取200Sa/s,控制周期5ms。第二步,电机选型:这是本题的最大争议,在此我也不想把这个争议扩大,所以我不讨论电机是否违规的问题。现在从实现效果这个角度来讨论电机的选型,不管黑猫白猫,抓到老鼠就是好猫!我把轴流电机、空心杯电机、无刷电机做成一个表格。

电机重量推重比 频率响应机动性抗干扰能力
轴流电机高<0.5<2Hz较低强
空心杯低3~84-8Hz较高很弱
无刷电机中7~123-7Hz高适中
       主要看推重比和机动性这一栏,推重比、机动性是航空器的专业术语,发动机在水平面上的最大推力和发动机的净重之比称为推重比。机动性是指风力摆在一定时间内改变运动速度、方向的能力。       从这个表格来看,推重比是我们选择电机的重要指标,而机动性是整个风力摆灵活性的重要指标。注意到赛题目说明部分的第9条:“赛题中要求的各项动作完成时间越短越好”。毫无疑问,出题人已经说明了要尽可能的提高系统的机动性。从最优实现效果来看,无刷电机和空心杯电机是更优的选择。但是为什么有人用轴流电机也能完成题目要求呢?答案就在频率响应上,第一步已经分析了系统带宽0.8Hz即可满足题目要求。如果题目规定15秒内完成20个单摆运动,这个难度就上来了,因为用轴流电机的系统带宽不够了。但是采用轴流电机有个好处,在圆周运动时即使做开环控制风扇干扰几乎吹不动。第三步,传感器选型:我们再说说精度(检测误差),检测误差包括传感器的误差和机械误差,是传感器和机械本身所固有的,控制系统无法克服。根据题目给出的±2.5cm偏差可以知传感器精度只要达到0.5°就可以了,所以用MPU6050传感器是可以达到题目要求的。机械误差则要求机械完美的对称,所有的东西都要对称,机械做的越好,最后出来的效果就越好。至于传感器的数据融合、滤波器设计部分请看程序贴图:计算三次角度然后求平均值,再经过卡尔曼滤波器滤波的角度值就可以使用了。角度数据一定要稳定,无高频干扰!三、算法设计       当硬件OK以后算法就是整个系统的核心灵魂了,俗话说条条大路通罗马,能够达到题目要求的方法有很多,这次比赛童鞋们用的算法大概有几种方式:逻辑判断法、查表法,定点PID法,力合成法,矢量方程法等等。有的队直接采用查表法开环控制也能取得不错的成绩,只要能够达到要求的算法都是OK的。来说一下我的算法设计吧,出题人在第一问就告诉了要做自由摆运动,从自由摆可以联想到2011年的B题——基于自由摆的平板控制系统。这是一个单摆,但是单摆是非线性运动,我们通常会把非线性的东西通过某种思路去近似成线性的(如二极管的伏安特性曲线等效模型),在单摆中,当采样率足够高时两个采样点之间的连线可以近似看成是线性的,有木有感到很熟悉?在高中物理学过了简谐运动,物体所受的力跟位移成正比,并且总是指向平衡位置。这是一种由自身系统性质决定的周期性运动。(如单摆运动和弹簧振子运动)实际上简谐振动就是正弦振动!其数学方程为θ(t)=Asin(ωt+ψ),A是振幅,ω是频率,ψ是相位。      好!说到这,来直接看一下题目第二问的要求(第一问直接跳过)。题目要求幅度可控,幅度可控是啥?不就是振幅A可控嘛,可控范围是多少?30-60cm换成角度。好了,分析完了,第二问就是一个A可设置的正弦运动,OK。至于线性度偏差,只要你机械搭对称了,这都不是问题,况且别忘了有X,Y两个方向的电机呢。把第二问的程序贴图出来:       第三问,摆动方向可设置。这里需要介绍一个知识点了:李萨茹图形。当风力摆同时参与两个相互垂直方向的简谐振动,风力摆的位移是这两个振动的位移的矢量和,如果两个振动的频率具有整数比关系时,风力摆的运动路径是稳定的封闭的曲线,这些曲线即李萨如图形。具体的理论推导和计算这里就不贴出来了,可以自行百度,现在直接把结论贴出来,李萨茹图形由以下参数方程定义:x(θ)=Asinθy(θ)=Bsin(θ+ψ)若A=B,ψ=任意,则曲线是椭圆;若A=B,ψ=π/2或3π/2,则曲线是圆;若ψ=0或π,则曲线是直线段。直接看图清晰明了,第三问我们只需要在X,Y方向分别进行频率相同,相位ψ=0或π,振幅A,B可设置的简谐运动即可很好的完成题目的要求。例如,想要45°怎么办?tan45=1,设置振幅A/B=1即可:      x(θ)=10*sinθ   y(θ)=10*sinθ   例如,想要60°怎么办?tan60=根号3,设置振幅A/B=根号3即可:x(θ)=根号3*sinθy(θ)= 1*sinθ例如,想要120°怎么办?tan120=-根号3,设置振幅A/B=-根号3即可:x(θ)=-根号3*sinθy(θ)= 1*sinθ细心的童鞋一定会发现,出题人对第三问的要求简单了,只要求摆动角度可控,但是通过上述方法不仅角度可控,摆长也是可控的!
把第三问的程序贴图出来:第四问,5秒内能够制动。这个没有什么运动路径可言,纯粹是考察大家的PID是否熟练掌握,PID目标值设为0°即可。注意D要给大一些,不要有积分。第四问的程序图:       第五问,画圆。出题人通过基础部分一步一步引导完成画圆,真是用心良苦。如果能够领会出题人的想法,把第二问、第三问完成好,这一问是水到渠成的事情。再次把第三问的图贴出来,如何画圆?若A=B,ψ=π/2或3π/2,则曲线是圆!OK!完成了,这是圆,而且画出来很圆!如果画出了椭圆,一定是相位ψ有偏差,调节一下相位即可!第五问的程序贴图:
       细心的童鞋会发现,题目做到这一步,θ(t)=Asin(ωt+ψ)这个方程就是贯穿本题的核心!如果你的系统做得足够好,就会发现这个方程的每一个参数你都可以自由的控制,结果就是你不仅可以让摆幅可控、摆动周期可控、摆动方向可控,而且可以画出以下这些曲线:       第六问:画圆抗干扰。考察伺服系统的抗扰动能力,出题人用这一问来把开环,半开环控制和闭环控制的队伍拉开距离。当一个干扰过来的时候,风力摆的运动方程肯定不是θ(t)=Asin(ωt+ψ)了,题目给出了系统最大调节时间为5秒,能够在5秒内恢复Asin(ωt+ψ)即可。这就牵扯到了伺服控制系统的重要指标——快速跟踪和准确定位。有很多种算法可以选择,例如常见的LQR、自适应、模糊控制、神经网络等等。相信绝大部分还是用了经典的PID算法,简单,快速,效果尚可!就看谁的PID调得熟练了,这个需要功夫在平时,多调多想多看就OK!PID需要调成大概是这样的波形,能够在一个周期之内快速跟踪正弦运动:如果你调成这样的波形是不行的,需要把K降下来,D调高:如果调成这样,波形相似相位跟不上,系统惯性大,请把D调高。
       第七问:其他部分,今年出题人给其他项分配了10分,想拿高分的队伍是必须拿下这10分的。前面说了,如果你的控制器做得足够好,是能够画出花样百出的图形的,有很大的发挥余地。有的队伍是画三角形、正方形、画8字,有的是做跟踪物体、手写写字、画斜直线,做漂亮的GUI界面等等都有。根据以往经验,在有限的时间内建议不要把时间花在漂亮的GUI界面上,要放在更多的运动控制上,牢牢把握题目考察的侧重点拿分!   总的来看,今年这道题目难度适中,出题人还是考虑得比较周全的,让各种风机各种算法都能够达到要求,众口难调,确实不简单。同时也反映了电赛控制类的趋势。从2011年的小车这种纯逻辑判断的题目到2013年倒立摆这种定点稳态系统再到2015年风力摆的动态跟踪系统,实现了从逻辑到算法、从静态到动态、从二维到三维的转变,准备2017年电赛控制类的同学要多多留心了。个人感觉功夫还需在平时,搞突击是不行的,多参加比赛,多接触实际的项目好处多多,机会留给有准备的人,相信你也可以!
   最后附上整个工程的STM32源代码包,大家可以打包下载!
</div><script>                                var loginstr = '<div class="locked">查看精华帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                               
                                if(parseInt(discuz_uid)==0){
                                                                                        (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                }
</script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

376172272 发表于 2017-11-4 08:30

本帖最后由 376172272 于 2017-11-4 08:31 编辑

风力摆控制系统电子设计大赛:https://wenku.baidu.com/view/515515c1f01dc281e43af018.html



风力摆控制系统设计报告:https://wenku.baidu.com/view/cb7b77aa10661ed9ad51f3f7.html



maxueming 发表于 2016-3-22 03:19

楼主很棒,求教,我用的空心杯响应速度没有那么快,机动性很不好,我看楼主的空心杯响应速度好好,求推荐型号

Grayman 发表于 2017-7-20 20:37

请问下楼主用的是什么的软件显示波形?

scccc 发表于 2016-7-12 21:17



这个好厉害!

maxueming 发表于 2016-3-22 03:19

楼主很棒,求教,我用的空心杯响应速度没有那么快,机动性很不好,我看楼主的空心杯响应速度好好,求推荐型号

Eason1874 发表于 2016-1-11 19:11

哪个园十字的架子是什么

郑小气聋子 发表于 2015-10-30 21:49

顶一个

michael_llh 发表于 2015-10-30 22:21

很棒啊!!!顶!!

michael_llh 发表于 2015-10-30 22:30

6050的放置位置是怎样的可以说一下吗?

ljj3166 发表于 2015-10-30 23:31

不错啊
顶一个

5之蒲公英 发表于 2015-10-31 11:04

顶,同样参加比赛只拿到三等奖的路过:Cry:

bbb201105 发表于 2015-10-31 12:26

好牛啊

tianshuihu 发表于 2015-10-31 13:35

赞,含金量很高啊

sjw1716094642 发表于 2015-10-31 15:00

比我的强{:1_103:}

16号哨兵 发表于 2015-10-31 15:37

顶一个,看看

凉翊 发表于 2015-10-31 19:11

看到帖子对题目的整体和细节有了新的感受,感谢分享

士比德 发表于 2015-10-31 20:09


376172272 发表于 2015-10-31 22:22



我们是放置在万向节的下端3厘米处,在视频里面可以看到亮红灯的地方就是

shen1994 发表于 2015-10-31 22:28

请求参考源码,感受一下您的代码风格,我很喜欢

lijian1995515 发表于 2015-10-31 23:16

很不错,结果怎么样

michael_llh 发表于 2015-11-1 01:14

376172272 发表于 2015-10-31 22:22
我们是放置在万向节的下端3厘米处,在视频里面可以看到亮红灯的地方就是

是水平放置的不?
能在四天三夜做成这样很敬佩,我们做的稳定不是很好。

376172272 发表于 2015-11-1 08:39



源代码已经上传了,在附件里面,可以下载的

376172272 发表于 2015-11-1 08:40



必须的水平放置,不然出来的数据还得再处理

18811707971 发表于 2015-11-1 09:20

赞,楼主很厉害,我虽然参加了,但没做控制类的,感觉能力还差得很远

lambo119 发表于 2015-11-1 16:23

全部开环控制拿到了国家二等奖。。。
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 【2015电子设计竞赛】风力摆控制系统赛题解析+源代码开源