资 源 简 介
大一时参加第二届飞思卡尔智能车竞赛的源代码,使用BSD许可证发布.
包含很多有用的库, 源代码涉及了单片机的大部分功能.对DG128不熟的同学可以作为参考.
系统分四层, 硬件层,设备层,控制层和智能.
包含记忆算法.
当时我花了大约三个的时间去了解所用的单片机,并写完了硬件层和设备层的代码.这使我在后来的开发工作中不必去过多考虑的底层细节,能够把更多的精力放在控制和智能算法上面.项目中还包含了大量的测试用例以供参考.我基本上是采用边测试边开发的方法开发的.这是我认为大家可以学习的地方.
项目中的一些模块可能会对大家有用,我做一个简单的介绍.
dbg: 调试模块,控制LCD,调试用按键和串口, 包含一个菜单子模块, 自己写了一个printf函数,可以方便的从串口或者液晶屏输出信息.菜单模块也花了一些功夫,可以方便的添加菜单元素, 动态的查看和修改系统中某变量的值.
h: 硬件层,直接和I/O口与内部模块打交道.
d: 设备层,把传感器,马达,舵机等抽象出来.
c: 控制层,控制舵机,马达,采集道路信息.
s: 智能层,路径记忆和播放
为了不因为分层而影响效率, 分层并不是十分严格, 而且有很多地方是用宏来做层与层的衔接的. 系统在48MHz的采样和执行周期约为0.6~1ms之间.我认为这样的响应时间已经是比较高的了.
事实上我们的成绩并不理想.用记忆算法跑有的时候还不如不用. 赛后我分析了原因, 最主要的是我们的调速做的太差了,交大用的是千元的编码传感器,精度能到1/256圈, 也就是车每走15/256cm就能够感觉到速度的变化,而我们只用了4个磁铁加一个霍尔传感器,并且因为四个磁铁距离不同所以最后我们的车每跑15cm才能感觉到速度的变化.这样你的调速算法做的在好,也无济于事,这也是赛后才想通的.
记忆算法先不介绍,我之后会放一篇文章出来,专门讲这个.
我的大一下半学期的时间都用来干这个了,而且还付出了挂