亿加合和智能车制作

标题: 大一时参加第二届飞思卡尔智能车竞赛的源代码 [打印本页]

作者: eic    时间: 2008-4-19 03:52
标题: 大一时参加第二届飞思卡尔智能车竞赛的源代码
(请到http://code.google.com/p/freescalesmartcar/关注最新信息,所有的东西都将发布在那里)

大一时参加第二届飞思卡尔智能车竞赛的源代码,使用BSD许可证发布.

包含很多有用的库, 源代码涉及了单片机的大部分功能.对DG128不熟的同学可以作为参考. 系统分四层, 硬件层,设备层,控制层和智能层.

包含记忆算法.

当时我花了大约三个的时间去了解所用的单片机,并写完了硬件层和设备层的代码.这使我在后来的开发工作中不必去过多考虑的底层细节,能够把更多的精力放在控制和智能算法上面.项目中还包含了大量的测试用例以供参考.我基本上是采用边测试边开发的方法开发的.这是我认为大家可以学习的地方.

项目中的一些模块可能会对大家有用,我做一个简单的介绍.

dbg : 调试模块,控制LCD,调试用按键和串口, 包含一个菜单子模块, 自己写了一个printf函数,可以方便的从串口或者液晶屏输出信息.菜单模块也花了一些功夫,可以方便的添加菜单元素, 动态的查看和修改系统中某变量的值.

h : 硬件层,直接和I/O口与内部模块打交道.

d : 设备层,把传感器,马达,舵机等抽象出来.

c : 控制层,控制舵机,马达,采集道路信息.

s : 智能层,路径记忆和播放

为了不因为分层而影响效率, 分层并不是十分严格, 而且有很多地方是用宏来做层与层的衔接的. 系统在48MHz的采样和执行周期约为0.6~1ms之间.我认为这样的响应时间已经是比较高的了.

事实上我们的成绩并不理想.用记忆算法跑有的时候还不如不用. 赛后我分析了原因, 最主要的是我们的调速做的太差了,交大用的是千元的编码传感器,精度能到1/256圈, 也就是车每走15/256cm就能够感觉到速度的变化,而我们只用了4个磁铁加一个霍尔传感器,并且因为四个磁铁距离不同所以最后我们的车每跑15cm才能感觉到速度的变化.这样你的调速算法做的在好,也无济于事,这也是赛后才想通的.

记忆算法先不介绍,我之后会放一篇文章出来,专门讲这个.

我的大一下半学期的时间都用来干这个了,而且还付出了挂了一科的代价,虽然没进决赛,但我已经极大的培养和锻炼了我自己,没什的可后悔的.我将不会参加第三届的比赛.我把源代码公开出来,希望大家能去其糟粕,取其精华,从中得到一些有用的东西.免得它放在我的硬盘里发霉生锈了.十分愿意和参加这项比赛的同学和老师交流,交换各自的想法和意见.同时也很希望能看到同学们在赛后吧自己的源代码贡献和公开出来.

如果任何BUG或建议请联系作者eic(superefei@hotmail.com)

eic, Apr. 17, 2008

[attach]126[/attach]
作者: vantasay    时间: 2008-4-19 17:05
标题: Re:大一时参加第二届飞思卡尔智能车竞赛的源代码
恩,十分感谢,也十分敬佩楼主的这种精神
作者: superyongzhe    时间: 2008-4-21 20:24
标题: Re:大一时参加第二届飞思卡尔智能车竞赛的源代码
不过你才大二,还有机会,我下星期一就校内比赛了,现在看来,希望渺茫,如果失败,我也就没机会校外比赛了。现在很着急啊!
作者: eic    时间: 2008-4-22 16:32
标题: Re:大一时参加第二届飞思卡尔智能车竞赛的源代码
只见下载, 不见回复, 同志们看了代码有什么想法请讲出来呀,给我点动力.
作者: demon    时间: 2008-4-23 06:53
标题: Re:大一时参加第二届飞思卡尔智能车竞赛的源代码
<><FONT color=#1a6be6 size=3>楼主很热心,也看的出来下了很大的工夫编这些代码,无论结果无何,我觉得能学到知识是最重要的,赞一个,我没什么别的给的,经验加500,金币+1000!</FONT></P>
作者: xcl521    时间: 2008-4-23 14:49
标题: Re:大一时参加第二届飞思卡尔智能车竞赛的源代码
<>我今年大三了,第一次参加飞思卡尔,和楼主比起来,真是有点自惭形秽了,感谢,顶一个,同时也希望高手们能把自己编写的定时,SCI之类的小程序,发出来,分享一下,赠人玫瑰,手<FONT color=#cc0033>有余香!!</FONT></P>
作者: lzyhx    时间: 2008-4-24 02:43
标题: Re:大一时参加第二届飞思卡尔智能车竞赛的源代码
赞一个
作者: zengfan155    时间: 2008-4-25 03:09
标题: Re:大一时参加第二届飞思卡尔智能车竞赛的源代码
<>对楼主这个大公无私的精神感到无比敬佩,</P><P>并准备向楼主学习</P>
作者: eic    时间: 2008-4-25 18:34
标题: Re:大一时参加第二届飞思卡尔智能车竞赛的源代码
<><FONT style="BACKGROUND-COLOR: #f7f5ee">希望大家能取得好成绩</FONT></P><P><FONT style="BACKGROUND-COLOR: #f7f5ee"><IMG src="http://www.intelligentcar.cn/images/Emotions/38.gif"></FONT></P>
作者: superyongzhe    时间: 2008-4-27 05:13
标题: Re:大一时参加第二届飞思卡尔智能车竞赛的源代码
今天仔细拜读了一下楼主的程序,真不敢相信楼主大一的时候,编程已经达到了如此高水平,分层思想,模块化,对C语言的操纵都如此娴熟。佩服佩服!!
作者: whut_wj    时间: 2008-5-3 18:09
标题: Re:大一时参加第二届飞思卡尔智能车竞赛的源代码
<>图像二值化,图像处理这一块做得差强人意,适应性不强.</P><P>速度控制和舵机控制反馈好像是开环啊</P><P>另外,感觉中断用太频繁了了,会降低CPU效率!</P><P>不过楼主的思路非常清晰,分块的思想大家都可以学习!</P><P>谢谢楼主的资源.谢谢!</P><P>&nbsp;</P>
作者: eic    时间: 2008-5-3 21:13
标题: Re:Re:大一时参加第二届飞思卡尔智能车竞赛的源代码
<><FONT style="BACKGROUND-COLOR: #f7f5ee">非常感谢楼上提得意见, 舵机控制是开环, 速度控制是闭环, 用了PID, 但也很烂的. 舵机我觉得直接控制就好, 用了反馈可能防抖好一些, 但可能会降低响应速度. 不知大家有什么看法.</FONT></P><P>图像处理上面, 我每次跑之前是要读一下赛道的黑白值的, 跑的时候是根据开始采集的黑白值跑的, 适应性我觉得还可以吧. 对黑线的检测能提供一个1mm精度的值, 但偏差也不小. </P><P>正如楼上说的, 中断用了不少, 是可以精简的.</P><P>这个论坛上有人已经做了通用的开发板, 我也希望有人能做一个通用的开发平台, 让大家的的成绩更好. </P><P>我记得第一届的论文集上上海电力学院的论文里写用实时操作系统写小车程序的响应时间比不用要快. 我认为那完全是谬论, 直接在底层跑怎么能比用操作系统慢呢</P>
作者: tiantiancan    时间: 2008-5-12 22:34
标题: Re:大一时参加第二届飞思卡尔智能车竞赛的源代码
<>佩服啊! 牛</P>
作者: lianpeng26    时间: 2008-5-25 01:58
标题: Re:Re:大一时参加第二届飞思卡尔智能车竞赛的源代码
我也是一个大三的学生了,现在接触这个单片机,感觉里面的资源挺不错的,我也看了楼主写的程序,一头雾水,惭愧,现在还没想通脉冲累加器和模数计数器怎么工作,要是有楼主这样的高人指点就好了。
作者: eic    时间: 2008-5-26 04:49
标题: Re:大一时参加第二届飞思卡尔智能车竞赛的源代码
<>对于单片机的功能, 大家一定要看文档, DG128不论是S12的核还是各个功能模块(如实时中断,PWM, AD等等)&nbsp;, 都有相应的文档, 应该养成看文档的好习惯, 不论是每个功能存器的用法还是一些电压电流的参数, 文档里都有介绍. 很多功能模块还包含原理图, 这都有助于了解单片机的内部结构, 学过数电的都能看懂. 现在FPGA这么流行, 将来不玩智能车了, 自己做单片机玩. 做单片机比玩单片机有意思多了.</P>
作者: forgive    时间: 2008-5-26 07:12
标题: Re:大一时参加第二届飞思卡尔智能车竞赛的源代码
佩服!
作者: shandazhangl    时间: 2008-5-31 07:19
标题: Re:大一时参加第二届飞思卡尔智能车竞赛的源代码
<>真是太强了!&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </P>
作者: percyzxp    时间: 2008-6-11 00:12
标题: Re:大一时参加第二届飞思卡尔智能车竞赛的源代码
<><FONT style="BACKGROUND-COLOR: #c7edcc">希望楼主再接再厉,佩服。赞一个</FONT></P>
作者: fengsanpi    时间: 2008-6-24 05:47
标题: Re:大一时参加第二届飞思卡尔智能车竞赛的源代码
下载不了???
作者: Roacher    时间: 2008-6-25 23:59
标题: Re:大一时参加第二届飞思卡尔智能车竞赛的源代码
&nbsp;&nbsp; 可以下载呀,而且速度很快&nbsp;&nbsp; 想看看楼主的速度控制算法,我们现在这方面才起步,时间紧迫
作者: haer    时间: 2008-7-10 00:53
标题: Re:大一时参加第二届飞思卡尔智能车竞赛的源代码
<>LZ很牛呀,我刚看的第一感觉就是太厉害了,才大一就能达到这水平,鄙人是自愧不如呀.学习,学习......想必LZ很早就开始学C了吧,偶大学前就没接触过编程的东东...落后咯.....向LZ学习,呵呵</P>
作者: tiger054    时间: 2008-7-12 03:26
标题: Re:大一时参加第二届飞思卡尔智能车竞赛的源代码
<IMG src="http://www.znczz.com/images/Emotions/2.gif">感谢楼主的无私
作者: luohua5280    时间: 2008-7-12 18:23
标题: Re:大一时参加第二届飞思卡尔智能车竞赛的源代码
楼主好水平啊 ,我都大三了,也不怎们能看懂你的程序啊,这是惭愧。看来我也要更加努力了哦
作者: mengcheng    时间: 2008-8-5 00:30
标题: Re:大一时参加第二届飞思卡尔智能车竞赛的源代码
<>感谢!</P><P>希望更多人传上来指导我们后来者学习</P>
作者: atongmu    时间: 2008-10-17 04:30
标题: Re:大一时参加第二届飞思卡尔智能车竞赛的源代码
<>能从中学到东西才是最好的</P>
作者: well_nature    时间: 2008-10-20 01:07
标题: Re:大一时参加第二届飞思卡尔智能车竞赛的源代码
<>感谢啊,我现在初学阶段</P>
作者: bichenglin    时间: 2008-10-24 00:04
标题: Re:大一时参加第二届飞思卡尔智能车竞赛的源代码
<>才发现原来LZ也是二工大的,我这个学弟要好好向你学习啊</P>
作者: eic    时间: 2008-10-24 05:29
标题: Re:Re:大一时参加第二届飞思卡尔智能车竞赛的源代码
<blockquote><img border=0 src=images/icon-quote.gif> <b>bichenglin:</b><br><>才发现原来LZ也是二工大的,我这个学弟要好好向你学习啊</P><P></blockquote></P><P>呵呵,有空可以聊聊,我在17206,如果我没猜错的话,我在你们楼上。</P>
作者: bichenglin    时间: 2008-10-28 01:51
标题: Re:大一时参加第二届飞思卡尔智能车竞赛的源代码
<>不是,我在16315。有机会一定向你请教请教。</P>
作者: weicheng259    时间: 2008-11-15 04:55
标题: Re:大一时参加第二届飞思卡尔智能车竞赛的源代码
为什么我不能下呢?||<IMG src="http://www.znczz.com/images/Emotions/21.gif">
作者: winter1217    时间: 2008-11-16 20:39
标题: Re:大一时参加第二届飞思卡尔智能车竞赛的源代码
怎么下载源代码啊
作者: lilunhui33    时间: 2008-11-19 00:31
标题: Re:大一时参加第二届飞思卡尔智能车竞赛的源代码
<><FONT style="BACKGROUND-COLOR: #c7edcc">赞一个!</FONT></P>
作者: 跑跑小车    时间: 2008-11-20 08:11
标题: Re:大一时参加第二届飞思卡尔智能车竞赛的源代码
谢谢楼主啦~~~好人哪
作者: 宋海永    时间: 2009-1-17 19:18
标题: Re:大一时参加第二届飞思卡尔智能车竞赛的源代码
<DIV><FONT size=2>非常感谢,可是不能下载。 <H1>Service Unavailable</H1></FONT></DIV>
作者: vvip66    时间: 2009-2-11 17:03
必须顶一下,绝对支持
作者: zhangq062336    时间: 2009-2-13 21:13
不错,谢谢啊
作者: lucev    时间: 2009-2-15 19:11
除了佩服,还是佩服。。。居然是一个和我一届的人在两年前写的程序。
简直就是一本学习S12单片机C语言的一本指导性教材。
相见恨晚啊。。。。
THANK U!!
作者: miao_2009    时间: 2009-2-15 19:27
先谢谢搂主,楼主这么热情相信代码一定写得很棒,我回头好好拜读,更希望得到楼主的大力帮助,谢谢!
作者: nilelixp    时间: 2009-2-16 19:02
顶一个
作者: zjl7223009    时间: 2009-2-16 20:49
真人玫瑰手有余香
作者: eic    时间: 2009-2-17 13:39
好久不来了, 没想到又有这么多人留言, 感谢大家对我的支持, 也希望大家能够在这次的比赛中取得好的成绩.

幸运的是今年大三的我又要参加本届的智能车竞赛了, 时隔一年很多东西仍然历历在目, 智能车友们, 加油!!
作者: lucev    时间: 2009-2-17 14:53
加油啦!
作者: simon86clj    时间: 2009-2-21 18:36
1# eic


楼主太有才了
作者: auqfvjfire    时间: 2009-2-24 15:43
厉害!!谢谢
作者: zhangsq32@126    时间: 2009-2-24 22:34
现在正在开始做方面的,希望楼主的程序对我有帮助,但在这里还是要先谢谢楼主

!!!!!
作者: k278959258    时间: 2009-2-25 07:56
大一的时候参加比赛
那什么时候开始玩单片机的??
作者: 宋海永    时间: 2009-2-26 19:19

作者: sdzhouwk    时间: 2009-3-9 15:55
XIEIXE
作者: niujingtao    时间: 2009-3-10 10:17

作者: youlianyiran    时间: 2009-3-21 21:52
谢谢了,楼主非常好啊
作者: fangxu6    时间: 2009-3-22 09:13
谢谢楼主, 想借用你的代码练习调试。
作者: zhouruizhao0419    时间: 2009-3-22 19:16
很好很强大,哎,我都大三了,就这一次了,不为什么荣誉,只是为了让我大学生活更有意义,还有就是一个很宝贵的经验
作者: liyang289631480    时间: 2009-3-22 19:36
感谢
作者: lixinjun1786    时间: 2009-3-24 18:30
真正有实力的人是不怕别人的借鉴。楼主你就是......
作者: eic    时间: 2009-3-24 21:15
有人问我什么时候学单片机 就是大一的时候开始学的 上大学之前不知道啥叫单片机 只学过写编程
作者: wsyn470    时间: 2009-3-24 23:31
赞楼主
作者: cys179    时间: 2009-4-18 12:16
好人!
作者: xuetingxun2010    时间: 2009-4-18 13:42
厉害!
作者: yanheng20070607    时间: 2009-4-19 22:45
感谢 楼主好人品啊
作者: yihai_11    时间: 2009-4-23 20:51
提示: 作者被禁止或删除 内容自动屏蔽
作者: chuyanliang    时间: 2009-5-1 19:11
xiexie!!!!!!!!!
作者: xbsf-写轮眼    时间: 2009-5-3 18:42
大家都说好,不回贴也不行了:强悍的人!
作者: leel    时间: 2009-5-3 21:00
怎一个赞字了得,同意10楼的。
作者: lanhai006    时间: 2009-5-7 11:23
很强大  想你学习
作者: liushuiyue    时间: 2009-5-8 21:48
:):)
作者: zjwwalex    时间: 2009-5-12 17:22
楼主很强,为什么不继续参加比赛了呢?希望有机会能多跟楼主交流一下,我是新手,很多东西都不懂
作者: chuyanliang    时间: 2009-5-13 22:35
谢谢!!!!!!!!!!!!
作者: Rabatbit    时间: 2009-5-14 22:00
谢谢了。LZ好人啊 。。
作者: 伴月迎风    时间: 2009-5-18 21:44
很好很强大啊  真希望在程序编写上得到楼主的帮助啊  现在的我只能看懂程序 可编写就比较困难了
作者: 伴月迎风    时间: 2009-5-18 21:44
很好很强大啊  真希望在程序编写上得到楼主的帮助啊  现在的我只能看懂程序 可编写就比较困难了
作者: abc43412119    时间: 2009-5-25 12:21
谢谢楼主,我也是一个初学着,大家一起努力吧
作者: hnieleejun    时间: 2009-5-31 13:20
实在是佩服!!!!
作者: xiaokk    时间: 2009-6-16 20:16
顶一个!
作者: zhouxiuj    时间: 2009-6-22 20:32
1# eic
作者: zhouxiuj    时间: 2009-6-22 20:34
楼主真是太厚道了,很佩服你这种精神,大一就开始起步,比我们早多了,呵呵!
作者: fuchanghu    时间: 2009-6-25 10:46
//////////////////////////////////////////////////////////
///////////////////////串口输出1个字节/////////////////////
//////////////////////////////////////////////////////////
void vPutChar(unsigned char ch)
{
  while(SCI1SR1_TC==0);                     //while(!(SCI1SR1&0x80));
  SCI1DRL=ch;
}

////////////////////////////////////////////////////////////
///                                                                                                                                                                                                              
///////////////////////////串口输入1个字节/////////////////
///                                                                                                                                                                                                           
///////////////////////////////////////////////////////////
unsigned char ucGetChar(void)
{
  while(!(SCI1SR1&0x20));         
  return SCI1DRL;
}
///////////////////////////////////////////////////////////        
        





        


void put(void)
{ unsigned int i,j;
  //for(i=0;i<ROWS;i++)
     {  
        //for(j=0;j<COLUMNS;j++)
             vPutChar(central);
     

       }
}
作者: fuchanghu    时间: 2009-6-25 10:47
void vSciInit(void)
{
    SCI1CR2=0x2C;
    SCI1BDH=0x00;
    //SCI0BDL = (unsigned char)((32000000UL /* OSC freq */ / 2) / 9600 /* baud rate */ / 16 /*factor*/);
     SCI1BDL=0x11;    //PORTBM BUS_COLOCK,波特率为115200
}





void PLL_Init(void)

{  /*
    CLKSEL=0X00;                        //disengage PLL to system
    PLLCTL_PLLON=1;                //turn on PLL
    SYNR=0x05;                                                                               
    REFDV=0x01;                        //pllclock=2*osc*(1+SYNR)/(1+REFDV)=32MHz;
    _asm(nop);                  //BUS CLOCK=16M
    _asm(nop);
    while(!(CRGFLG_LOCK==1));          //when pll is steady ,then use it;
    CLKSEL_PLLSEL =1;                  //engage PLL to system;
    */
    CLKSEL=0X00;                                // disengage PLL to system
    PLLCTL_PLLON=1;                        // turn on PLL
    SYNR =0x40 | 0x03;  // pllclock=2*osc*(1+SYNR)/(1+REFDV)=64MHz;                     
    REFDV=0x80 | 0x01;
    POSTDIV=0x00;  
    _asm(nop);          // BUS CLOCK=32M
    _asm(nop);
    while(!(CRGFLG_LOCK==1));          //when pll is steady ,then use it;
    CLKSEL_PLLSEL =1;   
}
作者: 0689    时间: 2009-6-29 21:29
钦佩
作者: gaojian    时间: 2009-7-3 10:16
谢谢楼主。我是新手。
作者: cughd    时间: 2009-7-4 04:38
看了这么多帖子,这篇是我见过的最震撼的帖子
作者: liuruipo    时间: 2009-7-4 10:48
1# eic 非常感谢
作者: zhoujie614    时间: 2009-7-4 14:46
楼主太牛了
作者: blacksunrise    时间: 2009-7-29 21:03
thack you very much
作者: lifugang    时间: 2009-8-6 12:42
非常感谢。
作者: fivetrees    时间: 2009-8-6 14:28
楼主确实让我钦佩!
作者: etgqqw    时间: 2009-8-10 17:47
学习了。有朝一天我也要像你那样
作者: dongrihanmei    时间: 2009-8-14 21:27
十分感谢楼主,真不错。如果大家都像楼主那么热心,互联网就更好用了··谢
作者: docwys    时间: 2009-8-18 18:21
代码写的可以,我现在刚入门 学学大家
作者: xiaokk    时间: 2009-8-19 10:27
楼主厉害!  支持楼主!
作者: lvlu2008    时间: 2009-8-28 21:17
我也大三了!!
作者: wshsw    时间: 2009-9-8 19:02
谢了lz
作者: liang88889999    时间: 2009-9-20 16:49
向楼主学习
作者: 早点睡觉。    时间: 2009-9-21 16:08
无敌了
作者: myf250    时间: 2009-9-21 20:58
顶顶,好好向楼主学习
作者: qiancy    时间: 2009-9-22 17:41
楼主很强大
作者: zjd1023    时间: 2009-9-22 23:38
感谢LZ
作者: yecheng110    时间: 2009-9-23 18:04
楼主很热心啊
作者: rain-cliff    时间: 2009-10-2 16:15
很感谢楼主的分享,狂顶一个!
作者: hezhiyong517    时间: 2009-10-7 14:54
呵呵,谢谢了,分享了
作者: 别问我是谁    时间: 2009-10-11 22:27
哎楼主 有才啊  我看了一天终于看完了代码  还有好多不是很明白 好好努力




欢迎光临 亿加合和智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2