首页 > 编程知识 正文

循迹小车最简单程序,数字汽车大赛作品

时间:2023-05-03 10:51:47 阅读:175825 作者:4218

1024G 嵌入式资源大放送!包括但不限于C/C++、单片机、Linux等。关注微信公众号【嵌入式大杂烩】,回复1024,即可免费获取!

刚进公司的时候,公司组织了参观。 参观的时候,我看到了公司的AGV跟踪购物车。 是为了运送材料。 当我看到这些购物车时,我觉得很熟悉。 这让我想起了16年的TI杯电子设计比赛。 当时我们做的是跟踪小车。

我现在突然想起一件事。 当时我面试的时候,可能是我正好跟面试官说了这个跟踪车,所以被录用了,从事电机控制工作。 根据以前求职的经验,一家稍大的公司,看到我的简历上写着新能源专家,我觉得自己扔了垃圾桶。 我们部门招聘的要求不高,但软件好像也不是那么容易放进去。 软件大多是招收研究生的,我本科非电机、电子专业怎么进得去? 另外,当时面试我的是我们研究院的院长,电机控制专家啊。 那时我很满意,但现在,我意识到这是个洞。 很多时候是眼泪。 如果知道是来马达那边的我就不会来了~

大学期间参加了3次省级/国家级电子设计竞赛/单片机应用设计竞赛,均获一等奖。 现在,分享这些作品,以便有需要的朋友可以学习。 先共享跟踪购物车:

竞赛的主题是每年TI杯电子设计竞赛共出A问题~G问题共7个问题。 (关于16年TI杯电子竞赛的主题,感兴趣的请在后台回答。 2016年,获得)。 因为我们平时主要做控件的比较多,所以这次的竞赛选择控件类的主题——自动跟踪购物车。 这个主题和要求如下

方案选择和比较

几种功能的实现、方案选择分析如下。

一、主控芯片的选择

我们选择了STM32系列单片机中的STM32F103RBT6作为主芯片。 大学时代参加的TI杯两次都没有学好TI的MSP430。 比赛规则没有说禁止使用其他制造商的控制芯片,所以我们当然会选择我们熟悉的STM32作为控制芯片。

毕业后,本以为可以从事使用STM32和其他ARM内核芯片作为开发平台的工作,但意外中了TI的当。 现在工作中使用的是有TI的双核DSP芯片,正好也可以学习TI的产品。 在这方面学到的知识越来越多,平台只是基础,关键是APP,关键是用芯片平台开发什么样的产品。 在这一段时间的学习中感受到的是,TI官方写的代码没有ST官方写的代码漂亮~

二、电机驱动方案

采用专用芯片L298N作为电机驱动芯片。 L298N是一种具有高电压大电流的全桥驱动芯片,支持频率较高,单个L298N可以单独控制两个直流电机,并带有控制使能引脚。 该芯片作为电机驱动,操作方便,稳定性好,性能优异。 将L298N与单片机相结合,可以准确控制小车的速度。

三、传感器的选择

方案1:采用一张TI公司分发的LDC1314。 LDC1314提供匹配的信道,可以实现差分测量和比率测量。 LDC1314具有多通道、遥感功能和高分辨率。 高分辨率通道支持更大的传感范围,即使在2倍的线圈直径范围外也能保持良好的性能。 成功匹配的通道支持差分和比率测量。 LDC1314与单片机的通信方式是I2C方式。

方案2:采用一张TI公司分发的LDC1000。 LDC1000的通信方式为SPI通信,信道数为1。 LDC1000除了通信方式和信道数量与LDC1314不同以外,几乎与LDC1314兼容。

由于当时比赛中LCD1314的数量有限,我们选择了方案2的LDC1000传感器进行了跟踪。 由于LDC1000只有一条通道,因此无论线圈偏向哪个方向,检测到的值都会变小,但可以使用软件来弥补这一缺点,并实现准确的跟踪。

四、LCD1000的测量方案分析

通过采用一个电子开关(CD4052 )作为方案1:的辅助,LDC1000可以切换控制两个线圈以接近双通道的效果。

方案2:使用单片LDC1000单独检测金属丝,绕金属丝使线圈倾倒成v型、z型或s型,沿金属丝左右切割线圈前进。

考虑到程序算法的问题,在方案2中进行了测量。

五、小车转向的方案分析

方案1:使用舵机转向。 可输入周期性正向脉冲信号以控制舵机。 该周期性脉冲信号高电平时间通常在1 ms-2 ms之间,但低电平时间应该在5ms-20ms之间,并不严格。 典型20ms周期脉冲正脉宽与微伺服电机输出臂位置的关系为:正脉宽为0.5ms时对应的输出臂为-90。 与输入正脉宽为1.0ms时对应输出臂为-45,与输入正脉宽为1.5ms时对应的输出臂为0,与输入正脉宽为2.0ms时对应的输入

出臂为45°,输入正脉冲宽度为2.5ms时对应的输出臂为90°。所以使用舵机在小角度转弯时灵敏度并不高。

方案2:利用电机的速度差转向。它具有调速范围广、起动转矩大、控制功率小等一系列优点。

由于考虑到舵机小角度转弯灵敏度低的问题,因此我们采用方案2测量。

六、电机的选择

方案1:采用直流电机。直流电机转动力矩大,响应快速,体积小,重量轻,直流电动机具有优良的调速特性,调速平滑、方便,调整范围广;过载能力强,能承受频繁的冲击负载,可实现频繁的无级快速启动、制动和反转,能满足各种不同的特殊运行要求,价格便宜。我们选用减速比为1:74 的直流电机,减速后电机的转速为100r/min。

方案2:采用步进电机。步进电机是一种将电脉冲信号转换成角位移或线位移的精密执行原件。控制方便,体积小,灵活性和可靠性高,具有瞬时启动和急速停止的优越性,比较适合本系统控制精度高的特点。但步进电机的抖动比较大,输出力矩较低,随转速的升高而下降,且在较高转速时会急剧下降,其转速较低,不适用于小车等有一定速度要求的系统,价格还比较昂贵,所以这里不采用此方案。

由于直流电机价格便宜、控制简单。而且选用车轮直径为6cm的电机时,最大速度可以达到V=2πr·v=2*3.14*0.03*100/60=0.314m/s,能够较好的满足系统的要求。因此选用方案1。

软件及解决的算法分析

一、循迹算法分析

我们软件实现的整体思路很简单,首先看一下分析图:

我们我们记 LDC1000 读回来的数字量为 Ldc_Val, 根据我们自己铺的轨道,当线圈中心置于铁丝正上方时(在图中3号位置)的 Ldc_Val 约为 11000, 当线圈中心置于偏离铁丝一小段距离(图中4号位置)的 Ldc_Val 约为 9000,当线圈正好与铁丝相切时(图中1、4号位置)的 Ldc_Val 约为 5000。

我们设置了三种情况来控制小车循迹,一是当 9000<Ldc_Val<11000(当然,因为上限值与下限值都是一个大概值,所以这两个值可以根据实际测试需要修改)时,小车稍微往右偏一个小角度,小车右偏的条件左边电机转速大于右边电机转速(偏离的程度根据实际测试调整)。二是当 5000<Ldc_Val<9000(当然,因为上限值与下限值都是一个大概值,所以这个值可以根据实际测试需要修改)时,小车稍微往左偏一个小角度,小车左偏的条件右边电机转速大于左边电机转速(偏离的程度根据实际测试调整)。三是当 Ldc_Val=9000(这个值根据前面两种情况的修改而修改)时,小车稍微往左偏一个小角度,小车左偏的条件右边电机转速大于左边电机转速(偏离的程度根据实际测试调整)。如此反复(过弯的情况也是一样的),小车就会沿着铁丝做Z 形对铁丝做切割运动循迹前行。

二、硬币的检测

在除了上述三种情况下,再添加第四种范围,当 Ldc_Val>12000(此值根据实际测试调节)时,就是检测到硬币在铁丝边缘,此时蜂鸣器发声提示。但是,有些时候会导致蜂鸣器频繁发声,这种情况是因为蜂鸣器发声的 Ldc_Val 值太低,导致铁线处于线圈正下方时 Ldc_Val 值也会处于蜂鸣器发声的 Ldc_Val 范围内,这时可以把蜂鸣器发声的临界值调高些。

还有一种情况就是线圈会在没有硬币的地方会偶尔产生一个异常的数值,该数值处于蜂鸣器发声的 Ldc_Val 值范围导致蜂鸣器发声,对于这种情况,我们首先想到的是在程序上采用连续读取多个检测回来的数字量去除最大最小值的再求平均值的方法来滤除掉这些偶尔的异常值。

三、程序主流程图

实物图

小车共有三个轮子,其中车头两个轮子,车位一个万向轮(方便转弯),LDC1000安装在车头正前方。

代码获取

关注微信公众号【嵌入式大杂烩】回复关键词:循迹小车,即可获取。

总结

电子设计竞赛是组队参加的,这就不得不说我的另一位队友了。一位真正的电子发烧友,真正的喜欢电子,而我是伪电子发烧,竞赛取得一等奖一半以上是他的功劳。他是我的一位大学室友,我人生中的贵人之一啊。若不是他当初拉着我一起去搞智能测控,我现在应该是在车间里工作吧,而不是坐在办公室码代码。他的付出也得到了很好的回报,现在也在一家大公司里工作,在这里祝愿他。希望,未来我们有机会的话可以在一起工作,还可以合作。

TI杯电子设计竞赛的方式为:在4天3夜里完成作品的所有工作,包括硬件、软件及报告。这是个很好的锻炼过程,各位还在上大学的朋友有机会一定要积极参加,竞赛的过程很煎熬,但是会让你收获很多。

 

【往期精彩笔记推荐】

学习使用带参宏,提高编程基础(一)

学习使用带参宏,提高编程基础(二)

1024G 嵌入式资源大放送!包括但不限于C/C++、单片机、Linux等。关注微信公众号【嵌入式大杂烩】,回复1024,即可免费获取!

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。