为何要基于“小车”学习嵌入式控制?
0赞
[提要] 前文介绍了俱乐部的德活动构想,内容均是围绕小车展开?为何?此处做些解释,有不同意见欢迎指正!
关于选择“小车”作为载体学习嵌入式,在2007年写的一篇“工程训练项目—— 智能小车DIY”中已有所描述,通过这些年和大学生们的交流,发现小车的优势不止是在“需求明确”和 “趣味性强”两方面,更重要的是小车迫使编程者考虑“并发”过程。
很多学生编程的思维还停留于“线性”程序,即程序是一条条顺序执行的;且学校提供的练习似乎多为此类应用。但嵌入式控制必须学会同时处理若干事件,否则就难以提高,或者说基本不能实用。
最近在学习 uCOS,发现其核心就在于如何处理同时存在的激励?如何及时响应?如何区分轻重缓急?由于我编写过多年这类程序,有共鸣而容易理解。和一些学习嵌入式的大学生交流过,他们就觉得有些“混沌”,基本上是一些“半生不熟”的概念。
这几天因为要消化请别人帮写的Linux摄像头驱动,在看关于“ Linux驱动程序编写”的书籍。早就听说能编写 Linux 驱动就算是“高手”了,但不知为何?从书中得知,驱动程序的难点在于:除了内核的若干约定外,编程上的最大特点就是要考虑“并发”!也就是随时要留意,你所写的程序不一定是连续执行的,也许在某段运算进行一半就被打断,甚至是多字节变量处理还没有完成,就可能被取走导致错误,所以编写者必须时刻留意,了解程序的运行机制。
这样的思维习惯需要在日常编程中有所锻炼,常见的学习板很难提供这样的需求,MP3解码、Web Server、LCD 显示等练习均属于“线性”的思维,没有多个来源的随机激励,也无须考虑及时响应,所以这类程序编起来简单,看起来漂亮,可所获得的技能用起来却是花拳绣腿,无非胜任工作。
而小车则不同,只要其运行,就自然会产生若干并发的需求,特别是你想让小车能跑的遂心如愿。
最常见的需求就是控制速度,你需要不断监视速度的变化,同时改变电机的驱动功率(PWM),以保持小车运行在设定速度下;PWM是需要程序管理的。如果是两轮差分驱动,走直线时还要同时监测是否偏航,可以检测车轮,或者用陀螺仪等传感器,不论用什么方式,都必须是同时处理,而不能等一个处理完了再处理另一个,因为每个任务都“没完没了”。
此外,还需同步监视控制命令,随时根据命令改变速度设定,如果有传感器,还要采集传感器的数据,并根据数据做出反应,比如碰撞。
所以,从嵌入式控制学习考虑,选择小车最大的好处应该是营造了“并发”需求的环境。
当然,也并非只有小车满足这个需求,其它类似的东西很多,如流行的“四旋翼飞行器”,那个更酷(http://v.youku.com/v_show/id_XMTc3MTg1NjQ4.html),但对于多数人而言,有些太难了,也太贵!
权衡利弊,我觉得智能小车还是不错的载体。
——————————————
南京嵌入之梦工作室
