大家好,又见面了,我是你们的朋友全栈君。
使用STM32F103的程序在这里:https://download.csdn.net/download/weixin_42089190/10456099
这个是报告:https://download.csdn.net/download/weixin_42089190/10456097
寄存器的配置其实大同小异,各位看官可以下载下来参考一下
转眼间2018年6月3日了,刚刚完成了校级电赛的选拔,完成了全部基本部分与部分发挥部分(校级题目比省级多了进出车库的发挥项,因此实际上对于16年省赛的题目要求是全做出来的)。想想一个多月的努力,不禁想要把自己的制作过程写出来,既是对自己的思路的整理,也希望能给后来人一些启发。今天先写出来,我以后会慢慢整理的。
msp430f5529以及msp430g2553,stm32f103用I2C与ldc1314以及ldc2214的代码都整理好了。大家可以到CSDN用积分下载。()
又一转眼,两年过去了。距离这个比赛已经好久。我此时(2020年5月28日)已然大四,马上要念研究生了。现在回头看这篇我刚开始接触CSDN写的文章,还没有学会markdown,而且认识也比较粗浅。大概会等毕业再进行详细更新,手头有的资料也会放上来。现在诸位看管暂且看这浅显的文字吧。文章末尾加了微信公众号,欢迎大家关注。
省赛今年推荐芯片加了一个FDC2214,这个芯片和LDC1614的寄存器几乎一模一样,我感觉应该好好练一练I2C,然后用I2C和2214和1614通信一下,肯定会有帮助!
因为是回忆,可能略有写散乱,希望诸君见谅。我会慢慢整理,最终版本应该会比较完善。
大家有什么问题,可以在下边评论,博主有时间会回答的。
目录
题目
车模的选择
1314的使用
2214的使用
路程识别
时间计算
硬币检测
七、发挥部分
八、其他发挥部分
九、感悟
一、题目
对于整个要求,我们先做了一个大致规划,1314检测线圈,PWM或者PID控制小车行走,12864显示路程,光电门测量路程,外部中断记录时间,MSP430G2553作为核心。蜂鸣器在发现硬币时响。
二、车模的选择
其实,车模的选择对于这个比赛很重要。
1、选择电机
尤其是电机,很重要。电机的扭矩不够大的话,程序所要求的最低速度根本达不到。为什么要最低速度,因为速度太快,车就可能跑偏……
2、轮胎
其次是轮胎,要三个还是要四个?抓地能力要怎么选择?四轮车就意味着你的一侧的轮胎是并联在一起的,三轮的话只需要后轮搞成万向轮,控制前面两个轮子就好。楼主当初查资料,人家说三轮转弯快,四轮直行快,看见就看见了,也没啥直观的认识,因此买了一个四轮的。
喏,像这样:
事实证明我还是太naive,因为给的速度过小,四轮车极容易堵转。(为了在缓慢速度下调节车子),最后我们还是把车换成了三轮的。后面加了个万向轮。结果,万向轮也容易被线堵住,我们没办法,车最后就成了这个鸟样儿:
当然,我们这个车也仍需要改进,因为万向轮的自由度太大,极易跑偏,其实应该加四个小柱子,把它们限定在一前面。(这个是听别人的建议,我们测评时没加限制)。现在回想,我认为,四轮车的话,又使用了好一点儿的电机,那驱动板就不能用L298N了,至少要用大电流的驱动模块,花几十块钱。
当然,为什么轮胎数量和抓地力有影响,其实归根结底还是电机的问题,电机不听话,给不了我们想要的速度,想让轮胎如臂指使,光靠那样的玩具电机是做不到的。而且,我们测评的时候,有很多同学使用四轮也相当6,(当然,测评时还有用履带的,相当稳)后来者们可以参考一下下面的电机:
当然,如果你是土豪,或者是玩儿飞思卡尔智能车的人,使用500多600多的车模,那你这一部分就完全不用操心了。
三、LDC1314模块
首先,对于土豪,大可以买一个1314的EVM评估模块,或者是1000的模块,大概是100多元,对于我们(露出贫穷的微笑),我们上官网申请了3个1314和1614的样片。而电路板使用了老师给的板子,1314的封装也贼坑,最后在老师的帮助下才焊接好。别看我说只说了一两句,对于没有板子,而且不会焊接鬼畜封装的人来说,这一部分相当难。
另外,1314想要检测金属,还需要线圈,1314是四通道,可以用四个线圈,离散量来检测。连续量貌似要用PID?(当然,听学长说,用PID也还真不一定有PWM跑得快……)线圈可以自己绕,也可以自己买,要是舍得,还可以自己让PCB工厂打印。
有了四个线圈,就可以将它们并排固定在车轮前面来检测,这是最常用的。还有些同学想法极其巧妙,使用的是1000,只有一个线圈,舵机在前面扫一下,车就前进一点儿,挺稳的,但是速度贼慢~
1314的主要原理就是连接上外部线圈,然后它会储存线圈送回来的Fsensor/F的频率比,如果检测到金属,这个值就会变大,硬币就会更大,然后这个值就放在寄存器里,我们通过II2C协议实时读取数据就可以了。
还有一件难事,就是对于没玩儿过的人来说,如何初始化1314呢,毕竟它只有英文手册,那我只能说,去啃手册吧。。。。楼主队友当时啃了将近10多天,才真正啃下来,能使用了。
1314的寄存器有R/W的,还有R的,像那种R类型的(比如STATUS),一般没啥用。还有一些没啥用的,比如OFFSETx(求偏差值的),RCOUNT(设置频率),这些需要设置,但设置却不需要太精细,随便写一个可能也没啥大影响。(个人感觉)比较重要的寄存器有DATAx,1314的最终结果就储存在这里,前几位是错误标志,后12位就是结果,如果线圈和1314模块接触不良,II2C读出的值就是4095,是不是很熟悉,就是12位都是1嘛。还有一些寄存器就很重要,比如CONFIG,你要一位一位地去看到底是啥用,可以结合百度文库已有的例程,在它的基础上修改。
2214的使用
有想和我讨论的,可以在 下方留言
可以这么说,1614和1314很像,2214和1614几乎一样。我今天用1314的程序仿写了一个2214的程序。明天就去找老师要板子。关于,它的使用,我感觉就是要注意DATA有两个寄存器,要先读高16位的寄存器,再读低16位的。
今天老师又让我们重读手册,因为2214是高精度嘛。我们根据1314程序改出来的值只有8位能用,但它可是一个28位的传感器呀!所以,还需要吃透2214的各种模式。
数据处理的时间,通道转换的时间,应该尽量短,否则就是浪费精度。
对于2214的各种管脚:
SD管脚是关断模式选择,直接悬空就好,毕竟我们需要使用它,而不是关闭,这个引脚没啥用。
INTB是中断引脚,可以配置为通知MCU系统状态的变化。
我感觉需要重新做的有:
1.更精确地配置时钟
2.多通道与单通道的配置
3.如何处理采集回来的数据(将long传回到PC)
问题:
1传感器的频率如何知道呢?
四、路程计算
怎么计算路程了,有用霍尔传感器的,我们用的是光电门和码盘,原理都一样。就是光电门给光,码盘上有空隙,码盘堵住光和不堵住光的时候,会有脉冲,这时候就可以用一个外部中断,来告诉单片机有一个空隙过去了,那计算空隙,路程就出来了。
如图:
五、时间计算
这个,大家尽可以用定时器,G2553有两个定时器,还有一个看门狗,我们就用了看门狗。都不用一进入单片机就关狗了~哈哈
六、硬币检测
硬币其实好检测,因为硬币要比铁丝更明显,会读铁丝,自然会读硬币了。然后用蜂鸣器表示一下就行。
七、发挥部分
大家觉得,对于小车来说,最重要的发挥部分是什么呢?没错,就是速度,速度!!!没有速度,再多的功能都是虚的。速度方面需要大家好好去调节。因为电池的影响,或者是重物的影响,此时调好的程序,到了彼时,就一点用都没有了。所以,大家在比赛之前,一定要预留几个小时,将车调到最佳状态,然后就什么都不要动了,静静地等待测评就好了。
这也是我们组所犯的错误,追求完美,想要完成所有功能,结果上台后车没调节好,天知道有多冤枉!而其它组别呢,一个个儿的只调节速度,真的是被坑惨了。
八、省赛之外的其他发挥部分
我们学校在省赛外的其他发挥部分就是识别车库并进入了,这个大家可能并不感兴趣,我今天就先不写了,之后完善。主要是用摄像头,7670和7725都可以。关键是带FIFO,再说一遍,关键是带FIFO。
另外,我们还做了一个语音模块,让小车更智能,这个之后说。
九、感悟
不要怕花钱 | 想做好比赛,真的是需要花很多钱的,大家不要图省钱。电路板,该打印就打印,博主小组花了70多打印了几十个线圈,一个个测的精度;买摄像头的时候也是先买的不带FIFO的,结果买回来发现根本用不了; |
---|---|
组里某个人要对日程有规划 | 什么时间干什么事,出什么成果,应该是有规划的,要不然时间就有可能无谓地浪费掉。 |
2018年6月3日第一次更新
2018年6月4日第二次更新
2018年6月6日第二次更新,更新1314部分寄存器设置
2018年6月27日第三次更新,更新2214部分寄存器设置
2018年7月3日第四次更新 更新对于2214的理解与难点
2020年5月29号第五次更新,更新个人微信公众号
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/135682.html原文链接:https://javaforall.cn