【正文】
如图 所示,主函数完成的功能为等待视频信号输入,之后调用信号处 理函数对视频信号进行处理,提取赛道信息并进行分析计算。 行中断流程图 所示,行中断流程图完成的主要功能是读入单行的视频信号。 行中断流程图 场中断流程图 所示,场中断完成的主要功能是执行输出,以及变量清零,为下 一场图像的接收做准备。第五章 开发与调试 软件开发平台软件开发平台为Code 。图 开发界面。CodeWarrior的功能非常强大,可用于绝大部分单片机、嵌入式系统的开发。用户可在新建工程时将芯片的类库添加到集成环境开发环境中,工程文件一旦生成就是一个最小系统,用户无需再进行繁琐的初始化操作,就能直接在工程中添加所需的程序代 第五章 开发与调试 手动设置单元通过按键可以设定当前工作模式,这样就可以根据现场情况决定采用不同 的控制策略。图 手动控制按键 状态指示单元为了在调试过程中指示小车的状态,本设计采用了LED 指示灯( 示)、数码管和蜂鸣器。图 状态指示单元第六章 总结和展望本文详细介绍了为第四届全国智能车大赛而准备的智能车系统方案。该系统以Freescale 32位单片机MK60DN512Z作为系统控制处理器,采用基于的摄像头的图像采样获取赛道图像信息,通过边缘检测方法提取赛道黑线,求出小车与黑线间的位置偏差,采用PID方式对舵机转向进行反馈控制。通过速度传感器对小车形成速度闭环控制。 文中介绍了赛车机械结构和调整方法,赛车各个主要模块的工作原理和设计思路,并叙述了系统开发过程中所用到的开发工具、软件以及各种调试、测试。 综合来看,智能赛车分硬件和软件两部分。硬件部分主要是赛车的安装和调整,以及电路板的设计。软件部分是本文的重点,除了基础工作外,主要分为两部分:(1)图像处理 在图像处理部分,我们只是把黑线的位置提取出来了,并没有进一步判断出它的实际意义,也就是说,单片机下一步根据黑线决定方向和速度的过程和人的思考过程还是有很大差别的。这种模糊的判断可以保证系统正常工作,是由于我们的跑道比较简单,一旦面对复杂的道路信息就不行了。所以在软件方面可以尝试向智能化发展,模拟人的思维,让系统可以应付更加复杂的道路。(2)车体控制 车体控制主要分为速度控制和舵角控制。速度控制相比去年有了很大进步,更短的控制周期使加减速更及时,也是速度更加平滑。更好的加减速性能使小车在不同赛道跑出响应的极限速度。舵机控制关系到方向的选择,好的舵机控制不仅要准确循线,还要能够沿最优路线前进。 总结整个设计过程,我们学到了很多,也克服了种种困难,不仅使我们得到了对已有知识进行实践的机会,更培养了一定的科研能力,拓宽了知识面,尤其是在硬件电路方案的确定过程中,经过不断的反复试验,最总确定了现在这套成熟稳定的方案。展望未来,智能车技术必将在更广阔的领域得到广泛应用。参考文献[1] 王锦标,方崇智.《过程计算机控制》.北京:清华大学出版社出版,2003.[2] 邵贝贝编,:清华大学出版社,2004.[3] 卓晴,黄开胜,:北京航空航天大学出版社,2007.[4] National Semiconductor .LM1881 Video Sync Semiconductor, Inc,2003.[5] Freescale Semiconductor MC33886,Technical Data Freescale Semiconductor,Inc,2005.[6] Motorola MC34063A DCDC Converter Control Circuits National Semiconductor,Inc,2003.[7] (第五版).北京:国防工业出版社,2000.[8] :北京工业大学出版社,2004.[9] :福建科学技术出版社,2003.[10] :科学出版社,2005.[11] (第二版).北京:机械工业出版社,2002.[12] 迈克•:科学出版社,2004.[13] -:科学出版社,2000.[14] :电子工业出版社,2001.[15] :清华大学出版社,1999.[16] :化学工业出版社,2001.[17] Todd D Morton. . 北京:机械工业出版社,2005.[18] (日) :科学出版社,2004.[19] 李世华,2000,15(5)::626~628 38 附录一:电路原理图附录二:主要程序源代码/** ** Filename : ** Project : ProcessorExpert** Processor : MK60DN512ZVLQ10** Version : Driver ** Compiler : CodeWarrior ARM C Compiler** Date/Time : 20130312, 20:54, CodeGen: 0** Abstract :** Main module.** This module contains user39。【飞思卡尔竞赛摄像头组-睿思二队】资料下载页是本平台副主任编辑尹书成独自修改,高级编辑高冠吉合作校正的高标准文档内容,【飞思卡尔竞赛摄像头组-睿思二队】资料下载页的总结、中心思想和主题句均和原始内容相同,尹书成主要校正了【飞思卡尔竞赛摄像头组-睿思二队】资料下载页中出现的错字和别字,高冠吉检查并修改了其它不利于阅读的错误,他们的工作对本内容带来了质的提高,尹书成毕业于北京师范大学,出生于1987年,是汉滨区人,高冠吉毕业于河北大学,出生于1997年,是叶城县人,两位编辑都具有非常高的专业技巧和操作技能,尹书成和高冠吉的有效且努力的工作帮助我们获得大量稳定的原创高质量内容,使网站提供给用户的文档更优质和有效,高冠吉和尹书成对【飞思卡尔竞赛摄像头组-睿思二队】资料下载页这个文件的整理编辑工作得到平台所有用户和会员的肯定,在我们的平台上,用户可以复制或阅读页面中的所有内容,所见即所得,欢迎大家浏览平台。s application code.** Settings :** Contents :** No public methods**** *//* MODULE ProcessorExpert *//* Including needed modules to pile this module/procedure */include include include include include include include include include include include include include include include /* Including shared modules, which are used for whole project */include include include include /* User includes (include below this line is not maintained by Processor Expert) */include inc\//include void main(void){ /* Write your local variable definition here */// sint32 kkk = 1, ii。// float ddd。 /*** Processor Expert internal initialization. DON39。T REMOVE THIS CODE!!! ***/ PE_low_level_init()。 /*** End of Processor Expert internal initialization. ***/ /* Write your code here */ /* For example: for(。) { } */ Init()。/*define max_out 21000define min_out 13400define t_max 9000 uint32 i, ii, jj。 { for(i = 17100。 i max_out。 i ++) { Servo_Out_PWM(i)。 for (ii = 0。 ii 10000。 ii++)。 } for (ii = 0。 ii t_max。 ii++) for (jj = 0。 jj t_max。 jj++){。} for(i = max_out。 i 16600。 i ) { Servo_Out_PWM(i)。 for (ii = 0。 ii 10000。 ii++)。 } while (1)。 } /* while(1) { for (ii = 0。 ii 1000。 ii ++) { ddd = atan(kkk)。 kkk = ddd * 18000 / 。 } for (ii = 0。 ii 1000。 ii ++) { ddd = atan(kkk)。 kkk = ddd * 18000 / 。 } } */do { GetStatus()。 } while (_SetFunc(, ))。 _MAIN()。 /*** Don39。t write any code pass this line, or it will be deleted during code generation. ***/ /*** Processor Expert end of main routine. DON39。T MODIFY THIS CODE!!! ***/ for(。){} /*** Processor Expert end of main routine. DON39。T WRITE CODE BELOW!!! ***/} /*** End of main routine. DO NOT MODIFY THIS TEXT!!! ***//* END ProcessorExpert *//*** **** This file was created by Processor Expert []** for the Freescale Kinetis series of microcontrollers.**** *//* This file is define gear139。s flow path function * Create by dzcong1988 * Create at 2013/3/18 */include inc\include include Gear_1\inc\include Gear_1\inc\include Gear_1\inc\include Gear_1\inc\static sint32 Variable_reset(){ = 0。 = 1。 memset(amp。left_inf, 0, sizeof(_edge_inf))。 memset(amp。right_inf, 0, sizeof(_edge_inf))。}static sint32 Gear_fun_init(sint32 level){ // LED_Onboard_SetFieldValue(null, ONBOARD_LED, 0x00)。 _Frame_int = frame_int1。 _DMA_plete_int = DMA_plete_int1。 Line_need_init()。 Line_correct_init()。 Variable_reset()。 = 0。 = 。 return 0。}static sint32 buff_change(){ = 。 if ( == 0) { = 1。 = 。 } else { = 0。 = 。 } last_left_inf = left_inf。 last_right_inf = right_inf。}sint32 main_gear1(sint32 level){ Gear_fun_init(level)。 Motor_wake()。 Frame_Interrupt_On()。 while (1) { if () { int ii。 ServoOut()。 MotorOut()。 buff_change()。 Variable_reset()。 _RowScanVaribleReset()。 LED_Onboard_SetFieldValue(null,ONBOARD_LED,0Xfe)。 for (ii = 0。 ii CAMERA_LINE。 ii++) { _RowScan(ii)。 } _FrameScan()。 if ( != 0) { = Gear_servo_expect()。 = Gear_motor_expect(level)。 } else { left_inf = last_left_inf。 right_inf = last_right_inf。 } = Gear_servo_out()。 = Gear_motor_out()。 = 。 = 。 // Frame_Interrupt_On()。 LED_Onboard_SetFieldValue(null,ONBOARD_LED,0Xff)。 } } return 0。