请选择 进入手机版 | 继续访问电脑版
查看: 609|回复: 1

[经验分享] [必看]【大学生电子设计竞赛经验分享贴】风力循迹小车

[复制链接]

该用户从未签到

发表于 2018-7-26 16:17:37 | 显示全部楼层 |阅读模式

9825bc315c6034a84305f996c0134954082376c5.jpg
v2-d5334ec88efdd4c53f1da720bc52ac80_hd.jpg

最近整理实验室~突然翻到了之前的一个作品~风力循迹小车。

今天倒腾了一下修好了~一转眼就18年了,2016年大三参加湖南省大学生电子设计竞赛的情景还历历在目。

感恩本科时期的老师,也谢谢现在研究生的老师~谨写下这篇记录贴~也顺便回忆下这一路电子之路~

=========很正经的分割线==========

大一开始接触电子设计~到现在已经大几年了~已经走在奔三的路上了~

马上研二,最近一直在愁这个毕业的问题(天台风好大我好怕)


在这里做个稍微简短的说明

奇数年国赛(全国大学生电子设计竞赛),全国统一命题,第一天早上八点开题,官网获取题目信息,四天三夜后统一收集到每个省份指定的地点保存,大概一周后进行集中测评。赞助商是瑞萨公司,所以又名瑞萨杯~(值得注意的是,因为是瑞萨公司赞助,有一些题目必须要使用瑞萨公司的芯片),比赛时间大概是:八月中下旬(具体要看官网颁布的文件)。偶数年省赛,也就是每个省份的比赛,赞助商TI公司,同样有一些题目必须要使用TI公司的芯片。
比赛时间大概是:七月中下旬~而我们湖南省就比较厉害了~省赛虽然是TI公司赞助,但是我们湖南省是自己命题!(国赛还是和别的省份一样,和别的省份题目一样)不选用TI公司省赛提供的题目。所以湖南省的省赛比赛时间是:八月中下旬~并且比赛形式也不一样~别的省份不管是国赛还是省赛都是公开赛的式,也是说,可以在学校做好作品后,统一保存,统一时间测评打分。
湖南省的国赛选拨是公开的形式,但是省赛却不是如此~湖南省的省赛形式:时间是一天一夜24小时,全封闭赛,组委会 统一组织比赛选手到指定地点(一般是湖南某高校的实验室,前几年都集中在长沙,18年定在常德的文理学院)。
早上八点开题,像发卷子的形式一般,你会拿到一份文件,上面有比赛所有的题目,有电源题、高频题、信号测量题、控制题大致这几类~然后比赛选手选题,24小时内完成作品的制作,也就是第二天早上八点停止比赛。比赛的过程中不能使用网络,不能使用手机,不能与外界进行交流。只能使用你比赛前带进去的资料和书籍,并且不能使用成品的电路板,可以使用最小系统,其他传感器的使用情况要看组委会具体是怎么规定的。
其他电路必须在组委会提供的万能板(洞洞板)上进行焊接调试。像控制系统的电源电路,电源题目的逆变电路等是肯定需要在组委会提供的洞洞板上焊接的。绝对不能使用成品或者是你之前做好的电路。这样必违规,违规就是0分!

划重点,千万不要违反规则,能用什么不能用什么一定要搞清楚!否则你题目都做出来了,结果因为一个违规,

直接0分,多可惜。

风力循迹小车
这个题目我们拿了一个全省第一
测评的时候评委反复检查我们的电路和车的结构。
对着规则反复核实。好像想找我们一点麻烦~可惜没成功,就很开心~hiahiahia~






电子设计竞赛不管是国赛还是省赛,拿到题目之后,都不要急着下手,仔细的看完题目,仔细审题,这个很重要。

毫不夸张的可以这样说:赛题的每个字甚至每个标点符号都要思考,搞清楚这个题目到底是要做什么的。

题目就是规则

不管你做的多好,哪怕你基本部分和发挥部分全部做完了,题目功能实现的多完美,

but,违反了规则,照样0分。

=====================================================================
在这里我给大家讲个在测评现场真实发生的故事,2015年全国大学生电子设计竞赛湖南赛区。
经过四天三夜后,在湖南大学测评,我做的是风力摆控制系统,抽完测评顺序后,排在我们前面的是湖南某985高校的一个组。比赛还是比较人性化,他们那一组在测评的时候,我们在离他们不远的地方调试,(因为下一个就轮到我们了,组委会提供十五分钟到半小时的时间给我们做最后的调试准备)。房间不大,我能听到也能看到他们组的测试情况,测题目的第一个点的时候,第一个点测试成绩满分(做的真的牛皮,我都想给他们喝彩鼓掌),继续往下测基础部分发挥部分全部做完,结果测完全是0分,只有基本部分的第一个点得分(十五分)。所以最终成绩是15分。
==================================================================
                                                                               听到消息的我
                                                                                   满脸问号


QQ截图20180727121715.png

心里想着人家做得这么好才15分?那我不直接买车票回家了。


v2-6d27bb79b93913dd766e565281f7483c_hd.jpg


评委给出的解释大致如下:
  • 我让你测试题目第一点给我看,你测了。
  • 我让你测试题目的第二点,你给我看的是第一点的现象,第一点的现象完了之后才是第二点


也就是说,他们的程序没有做任务调度,没有做菜单选择。

而是在主程序里面把功能全部做到了一起,中间无需任何操作,自动执行完所有的题目功能。

大家可能会认为这样也没错啊~都不需要按键去选择功能,上电开机就能测试完所有的题目功能。多么人性化!

可是评委呢?

他们不会这么认为,评委评分是按照题目的顺序来的,一个点一个点的测试。

评委让你演示B功能,你就要立马调出B功能的现象给评委看,程序一运行就要看见B这个功能。

而不是执行完A功能再执行B功能。如果评委让你测试B功能,你却执行A功能,然后再演示B功能。

评委首先看到的是A功能,评委就会认为你的B功能没有演示,所以不通过,这个功能得分就是0。

(这是15年我遇见过真实的插曲~所以之后做一些比赛和其他的一些事情都让我养成了认真看文件的习惯)


回归正题,我们继续2016年的比赛分享,大家可以多多关注我的知乎【张巧龙】~或者微信公众号【大鱼机器人】

刚才大家看了2016大学生湖南省电子设计竞赛D题的题目,审题后我们可以发现这个题目的重点有以下3个:




1、车体尺寸大小

车身一定要符合要求,不能超过外形尺寸,我们在比赛现场有考虑过,外形尺寸是否包括轮胎。


如果不包括轮胎的宽度,那么我们的车身可以做宽一点,有利于风力小车转向。后面最终还是选择包括了轮胎的宽

<=300mm*200mm。

2、风动力循迹

风动力循迹这个可以解释为:装在车上的轮子或者电机不能提供动力来驱动小车,我们选择的是下面这种小黄电机。

然后拆掉了电机部分,只留下了机械部分。人手可以轻松转动的。轮胎也是这一种。

QQ截图20180727113817.png



无电机的转动结构展示

3、不能遥控器遥控

这个很好解释,小车行走的动力是风动力,那么前进后退左右肯定只能通过巡线。不能人为的遥控。

下面介绍下制作过程吧~

整体结构:
1.jpg

2.jpg

3.jpg

4.jpg

结构部分
我现在搭建的这个结构是比较符合题目的,完成题目的所有要点都是没有问题的~
建议大家都可以参考我这个结构。最关键的是2个提供风动力的电机安装位置。
必须底盘轮子安装在同一竖直线上,可以稍微偏离但尽量保持在统一竖直线上,
这样可以保证风力完全的作用于底盘转动的轮子上~ 风力的方向不会发生太大的偏移,如果偏移太大的话,会导致小车的行走情况变差。
电路部分
电路其实很简单,最小系统(提前购买好)、ST188、运放、130电机、电机驱动、风叶
1、最小系统:我们选用的是某宝上一个STM32F103C8T6最小系统,这个不需要多说,各位肯定都知道。
2、ST188+运放:光电式传感器,用来寻黑线的~这个太简单了~肯定难不倒大家。
网上一搜一大堆,我这里就不多BB了,如果不想自己焊接的话~可以直接网上购买寻迹模块,拿过来就能用。
我这里没有办法,必须要是焊接在组委会的提供的板子上,24小时内就需要完成,所以焊得比较乱(各位别嫌弃将就着看)
3、电机:这个是重点,组委会明码标价的指出,必须要使用130电机。
我给大家稍微介绍下,130电机就是我们平常买一些单片机开发板都会送的一个小电机,图如下。


QQ截图20180727110157.png

网上一搜,130电机一堆,从1块钱到几十块钱不等,几块钱的那一种是弱磁性的130电机,十几二十块的那种电机是强磁性的!
这个很重要!直接影响到了转速。强磁的转速高于弱磁太多了。弱磁性的130电机带动的叶子产生的风力是带不动小车的!
所以一定要选购强磁性的!转速大的130电机!
4、电机驱动
电机驱动也是一个比较重要的点,强磁的130电机,功率一般都比较大,肯定超过7W了(低于7W的电机可选电机驱动芯片进行驱动,超过了7W最好使用mos管搭建电路进行驱动),电流超过1.5A,2个电机的话就是3A,正常运行3A,堵转电流至少6A,功率较大。电机驱动选型就比较困难,有益于之前电子设计的积累,我之前用的比较多的电机驱动IC是TB6612fng。按照芯片手册,一个TB6612FNG可以驱动2个电机,但是我用6612测试过我自己这款130强磁电机,一个芯片驱动6612是肯定不行的。6612发热明显严重甚至了影响工作。而在比赛的现场,我是没有准备MOS管以及逻辑门,所以无法搭建电机驱动电路。

于是乎,骚操作来了!一个6612驱动2个电机做不到~那么我驱动一个呢?我试着把6612电机驱动的驱动口并联起来。
果然!成功了~电路串联,驱动电流是要叠加的!很幸运,我成功了!我使用了2个6612驱动了2个130强磁电机。虽然发热严重,但是能正常工作~(有想要做的伙伴最好使用MOS管搭建驱动电路,不建议采纳我这种方案)

5、风叶
一定要选正反转都有风的叶子!这个同样重要!后面在程序设计方面我会说
明。基本硬件部分大概就这些,其实就是电机驱动去驱动电机,单片机产生
PWM对电机进行调速。同时使用ST188搭建的寻迹模块检测地面上的黑线,做
过寻迹小车的人都知道~很简单。难点在程序里面!文章有点长,各位继续往看
程序部分
程序部分我们需要只需要设计3个子程序即可,
  • 第一个子程序:产生PWM对电机调速。
  • 第二个子程序:电机正反转程序。
  • 第三个子程序:检测地面的黑线情况。


重点也是难点:在比赛的现场,很多组别都能很快速的做出电路和结构,以及准备好上述三个程序!
可是车一直跑不起来换句话说就是不能按照跑道上的黑线进行寻线行走。为什么会这样?
其实他们都忽略了一个问题!小车是没有减速系统的,轮胎摩擦力不足以使得小车减速。
风力使得小车一直有个速度,不管速度恒不恒定,小车是一直往前面走的,小车速度会越来越快,就像一辆没有刹车的单车,惯性越来越大,越跑越快。速度控制不下来。
小车怎么会在跑道上乖乖的听话?所以如何控制小车速度,这是很成败的关键!
我们平常控制速度的方案就是在电机部分引入编码器,得到速度反馈,PID控制器控制速度。
这种方案是可行的,可以在轮胎转动轴上转编码盘测速。但是对于车的结构设计以及程序加大了工作量,24个小时太短了(做结构,焊电路,调程序,写技术报告)。
所以我引入了一个新想法,既然小车上的电机产生的风力使得小车速度越来越大,惯性越来越大。既然能加速,为何不能用它来减速呢?
电机正转产生的风力使得小车往前走,那么反转产生的风力不就能使小车减速吗?
这就是我之前有说过的一定要买那种正转反转都有风的叶子!
到这里,基本上我们解决了整体的电路和程序,还有最后一个问题就是任务调度,也就是,上述三个子程序如何互联,互相结合解决我们的工程。
我在程序中用了最简单的一个算法,switch,没错就是switch,解决了上述所有的程序问题。
为了方便大家看,我把名称都换成了中文拼音~
  1. void TIM3_IRQHandler(void)  
  2. {
  3.         if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  
  4.                 {
  5.                   TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );
  6.                         temp_a=CGQ_Scan(1);
  7.                         timer1++;
  8.                         if(timer1<=20)
  9.                         {
  10.                                 FANZHUAN_ALL();
  11.                                 TIM_SetCompare1(TIM2,3000);        //a1        
  12.                         TIM_SetCompare2(TIM2,3000);        //a0
  13.                         }
  14.                         else
  15.                         {               
  16.                          switch(temp_a)
  17.                               {
  18.                                       case 10:                                
  19.                                             FANZHUAN_RIGHT();
  20.                                         ZHENGZHUAN_LIFT();
  21.                                             TIM_SetCompare1(TIM2,6000);        //a1        
  22.                                    TIM_SetCompare2(TIM2,6000);        //a0
  23.                                            break;
  24.                                 case 20:
  25.                                             FANZHUAN_RIGHT();
  26.                                         ZHENGZHUAN_LIFT();
  27.                                             TIM_SetCompare1(TIM2,5500);        //a1        
  28.                                    TIM_SetCompare2(TIM2,5500);        //a0
  29.                                             break;
  30.                                 case 30:
  31.                                             ZHENGZHUAN_ALL();
  32.                                              TIM_SetCompare1(TIM2,5000);        //a1        
  33.                                    TIM_SetCompare2(TIM2,5000);        //a0
  34.                                             break;
  35.                                 case 40:
  36.                                         FANZHUAN_LIFT();
  37.                                         ZHENGZHUAN_RIGHT();
  38.                                              TIM_SetCompare1(TIM2,5500);        //a1        
  39.                                    TIM_SetCompare2(TIM2,5500);        //a0
  40.                                             break;
  41.                                 case 50:
  42.                                             FANZHUAN_LIFT();
  43.                                         ZHENGZHUAN_RIGHT();
  44.                                              TIM_SetCompare1(TIM2,6000);        //a1        
  45.                                    TIM_SetCompare2(TIM2,6000);        //a0
  46.                                             break;
  47.                                 default:break;
  48.                               }
  49.                                 if(timer1==100)
  50.                                 timer1=0;
  51.                         }
  52.      
  53.         }
  54. }
复制代码

风力小车寻迹视频


总结:讲了这么多~感谢各位坚持看完了~2年前就该写的帖子,如今才写,也算是对自己一个交代。

在我看来,电子专业相关的同学参加一些比赛是很有必要的,不单单是一个比赛一次经历,更多的是一种能力,

一种态度,与专业结合,用于实践,锻炼实践经验。

为工作或者考研做铺垫。

对于工作:并不是说在学校在比赛学的东西就能够用于工作,就能够在公司大放光彩,这是不现实的,我们在学校在比赛中学到的用

到的仅仅只是皮毛。对于公司、工作中的项目的要求会更高,产品稳定性要求更高。但是我们可以在比赛的过程中,学到一种态度,

解决问题的态度,坚持不懈的态度,不管是为人还是处世,这种态度、这种精神是很有必要的~学到一种方法和能力,解决问题的方

法,发现问题,不怕问题,迎难而上解决问题的能力。还有一些团队协作,协同解决问题,与他人沟通的能力等等...

对于考研升学,导师看重的能力无非干实事的能力,你做过比赛,做过项目,动起手头头是道。不需要太多培养的时间,招进团队就

能做事~哪个老师不喜欢?在此基础之上,加强下发表论文以及申请专利的能力,好了,你在同门师兄弟中无敌~

一次比赛不算什么~人生的路还有很长。

工作再回头来看这些比赛和经历,可能在人生长河里,这都不算什么。
但那却是我们的青春和我们的拼搏见证,多年后再回忆是多么的回味无穷。
仅此,致敬一起拼搏的青春学子!你和我,我们一起加油!

毕业,兵荒马乱,江湖再见,我们一起亮剑!

附上参赛作品的代码及资料
代码以及相关.zip (715.21 KB, 下载次数: 4)
QQ截图20180726213257.png
v2-3dde220d890ec24fe15286e65f8c266d_hd.jpg
v2-bdfc2bf03ba1ccd5e2296408dc0b8a84_hd.jpg
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

返回顶部