第1-2届飞思杯全国生智能汽车邀赛技术报告83篇队drummer_第1页
第1-2届飞思杯全国生智能汽车邀赛技术报告83篇队drummer_第2页
第1-2届飞思杯全国生智能汽车邀赛技术报告83篇队drummer_第3页
第1-2届飞思杯全国生智能汽车邀赛技术报告83篇队drummer_第4页
第1-2届飞思杯全国生智能汽车邀赛技术报告83篇队drummer_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第一届“飞思”杯大学生智能汽车邀请赛技术基于 HCS12 的智能寻迹车模学校:福州大学DRUMMER林立凡队伍名称:参赛队员:带队教师:I关于技术和研究使用的说明本人完全了解第一届“飞思”杯大学生智能汽车邀请赛关保留、使用技术和研究的规定,即:参赛作品著作权归参赛者本人,比赛组委会和飞思半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术以及参赛模型车的、图像资料,并将相关内容编纂收录在集中。参赛队员签名:带队教师签名:日期:II目录第一章设计思路第二章机械部分和电路部分计与制作第三章设计第四章开发工具、制作、安装、调试说明第五章主要技术参数第六章总结第七章参考文献III摘要本文介绍了

2、一个寻迹小车系统,小车以飞思公司的MC9S12DG128 作为控制器,以脉宽调制()控制方式控制电机,采用红外寻迹的走法,采用状态量的办法控制小车的方向,利用历史量和超前检测估计路径趋势。:MC9S12DG128,MC33886,红外寻迹,状态量控制1引言机器人技术的发展,是一个科学技术发展共同的一个综合性的结果,同时,为社会经 济发展产生了一个影响的一门科学技术.它也是生产力发展的需求的必然结果, 也是人类自身发展的必然结果。随着计算机技术、微电子技术、网络技术等的快速发展,国民经济的飞速发展,机器人技术也开始进入到人们的日常生活中来了。本文介绍的智能车,主要是一个基于 HCS12 单片机的

3、的小机器人。它能够识 别路线,在专门设计的跑道上自动识别道路行驶,在不冲出跑道的基础上尽快得行驶完整段赛道。其整个制作过程的专业知识涉及控制、模式识别、传感技术、电气、计算机、机械等多个学科。整个智能车主要是由电源模块,路径识别模块,驱动模块及其控制模块等组成。其中的路径识别模块和控制模块是决定性能低高的关键模块。路径识别模块中的有采用光电寻迹,CCD 等方案。CCD 能更远更早地感知赛道的变化,但其信号处理比较复杂,计算量所需要的时间和空间亦比较大。智能的实现就是对外界信息做出合理的判断,采取适当的措施。导引线的感知相当给与给智能车一个视觉功能。红外传感器阵列在路面结构相对简单的情况下既可以

4、达到很好的效果,而且成本亦不高,信息的处理相对简单。所以在可选择的传感器中选用红外传感器。车头装置了了两排传感器,一定程度上提高了车子探测的范围,而对硬件和信息的处理能力需求也较低。而控制算法采用了对车子的行驶状态进行识别,分情况进行控制,有助于提高对各种赛道的适应性。这次的智能小车也是一个很好试验模型,对于今后从事这方面的研究也是一个很好的起点。2第一章 设计思路模型车设计制作的思路及方案:车体的硬件设计方案主要分为以下几个部分:系统框图11 红外传感器阵列考虑到各个管之间的差异经过测试后把对黑和白反映大,响应快的红外管对放在外侧,反映较小,响应较慢的管放在内侧,以次提高对弯道的反映灵敏采用

5、比较器 LM339度。为了处理的方便采用未调制的信号做发射用。来做电压比较,以次区别出黑线和白底。12 前轮转向舵机舵机使用主委会提供的 HS-925,它的工作电压为 4.8-6V,LM1117 产生的 5V 电源给他供电,使用 S12 单片机的 16 位经使用了一个由模式来控制舵机转角,根据主委会提供的资料,这个舵机可以工作在 50-200HZ,经过测试让它工作在 200HZ,使其能更快的响应。图 1.2,图 1.3 为舵机的工作特性图:3驱动电机电机驱动模块红外传感器阵列前轮转向舵机电源模块MC9S12DG128信息处理,电机,舵机控制图 113 电机驱动模块提供的电机为 RS-380SH

6、,其恒定工作电压为 7.2V,因此使用MC33886 做为电机驱动。MC33886 具有如下特点:15V 到 40V 连续可操作2输入信号:TTL/CMOS3频率可达 10KHZ4短路保护,欠压保护和过温保护因为提供的电池为 7.2V 的可充电镍铬电池,所以直接使用它对MC33886 供电。同时为了提高驱动能力,把 33886 中的两个半桥并联起来使用。通过 S12的8位 模式对电机进行控制,以此达到调速的目的。14电源模块因为系统中大部分模块的供电电压为 5V,而电池正常工作时的供电电压为7.2V,考虑到电机启动时可能引起瞬间较大的压降,所以为了保证在系统能够在较大的电压范围内正常工作,所以

7、选用低压差的 LM1117 作为电源模块的工作。LM1117 的特性为:1)输出电流可达 800mA42)工作温度范围宽3)具有最低工作压差为 1.2V从电池取电后使用三片 LM1117 为系统供电,其中一片给板供电,一块给舵机供电,一片给寻迹模块供电。15板板为主委会提供的MC9S12DG128微控制器为的MC9S12EVKX模块。根据系统的需要使用了其中的PORTA,PORTB,ATD,ECT,等模块。图 216 控制方案简介红外管对间的距离的粗细对于控制的调整量有很大的影响。最初测试时采用两对管并列,两对管之间的距离为略大于 2.5cm(实测时大概为 2.7cm),一对管在黑线上一对管在

8、外,控制采用最简单的状态判断,假设在黑线上为 1,白上为 0,因此最多有四种状态:10,00,01,11,因为黑线与管之间存在多种位置可能,所以通过设置寄存器来位置变化,以便程序将来的判断所用。控制过程包含直线,左转,右转,调整量因为信息量不多的关系无法作到精细。因此在在整个模拟赛道上行进时一直在做锯齿型的运动,速度低且系统对赛道结构的判断程度很差。由此得到了一些基本信息,包括下一步算法的应具有的性能,和车子本身的一些信息,例如舵机的响应等。5最终的方案采用两排 15 个传感器,作为整个外界信号的输入。双排 15 个管对,前排 6 个,后排 9 个,管对之间的距离稍有不同,后排两边的两对管对之

9、间的距离为 1CM,这样做是为了让车对大弯道的反应更灵敏,做如图 2。采用状态判断,前排做速度控制,后排做方向控制。图 3第二章机械与电路设计与制作2.1 机械部分在原有的底盘上,将后排寻迹模块用螺栓固定与车前方,前排寻迹模块用金属杆固定在舵机上方。系统板采用三脚支撑,因为底盘原有两个支撑杆,所以在中部加了一个支撑杆,并利用车模的剩余配件中的紧固件固定了系统板2.2 电路部分2.2.1 电源模块智能车系统根据各正常工作的需要,对配发的标准车模用7.2V 2000mAhNi-cd蓄电池进行电压调节。其中,单片机系统、路径识别的光电传感器和接收器电路需要5V电压,伺服电机工作电压范围4.8V到6V

10、,因此选用低压差的LM1117为以上3个模块供电,LM1117最大可以提供800mA的输出电流,经过测试在电池电力足够时,电源模块可以满足以上三个模块的工作需要,直流电机用7.2V2000mAh Ni-cd蓄电池直接供电。因此,设计电路如图:61CM 2CM图 4 电源模块2.2.2 寻迹模块的设计反射式红外传感器的原理:光电反射式传感器的工作原理如图 3 所示。发光元件发出光线,接收元件将反射光的强度转换成电压来进行信息传递。接受单元为光敏元件,常用光电二极管和光电三极管。它们接收到光的变化之后造成电流的改变,再经过放大及相关处理后可用于控制。反射表面图 5 红外发射接收原理图为车模的控制算

11、法主要取决于红外阵列的排布规则。在光电管阵列的设置上和控制算法方案上尝试两种方案,两种方案都把光电管设计成在检测区都至少有一个在黑线上的排布:方案 1:单排 6 个红外管对,管对之间的距离为 2CM,如图 1。采用类算7接 收发 射法。图 6方案 2:双排 15 个管对,前排 6 个,后排 9 个,管对之间的距离稍有不同,后排两边的两对管对之间的距离为 1CM,这样做是为了让车对大弯道的反应更灵敏,做如图 2。采用状态判断,前排做速度控制,后排做方向控制,如图 3。因为硬件条件的限制发现采用方案 2 所能达到的效果比方案 1 更好,所以我们最终选定了方案 2。传感器信号经比较器 LM339 和

12、参考电压比较,给出高低电平信号,LM339集成块装有四个独立的电压比较器,该电压比较器的特点是:1)失调电压小,典型值为 2mV;2)电源电压范围宽,单电源为 2-36V,双电源电压为1V-18V;3)对比较信号源的内阻限制较宽;4)共模范围很大,为 0(Ucc-1.5V)Vo;5)差动输入电压范围较大,大到可以等于电源电压;6)输出端电位可灵活方便地选用。LM339 集成块采用 C-14 型封装,图 4 为外型及管脚排列图。图 7LM339 类似于增益不可调的运算放大器。每个比较器有两个输入端和一个输82CM出端。两个输入端一个称为同相输入端,用“+”表示,另一个称为反相输入端,用“-”表示

13、。用作比较两个电压时,任意一个输入端加一个固定电压做参考电压(也称为门限电平,它可选择 LM339 输入共模范围的任何一点),另一端加一个待比较的信号电压。当“+”端电压高于“-”端时,输出管截止,相当于输出端开路。当“-”端电压高于“+”端时,输出管饱和,相当于输出端接低电位。LM339 的输出端相当于一只不接集电极电阻的晶体三极管,在使用时输出端到正电源一般须接一只电阻(称为上拉电阻,选 3-15K)。后排传感器部分的信号由比较器LM339跟比较电压比较后由S12的端口读出。前排传感器由S12的AD口转化后根据给定的阈值判断,并做相应的数据处理。传感器部分的单元电路原理图如下:图 82.2

14、.3 电机驱动模块直流电机的控制由单片机的信号来完成,驱动采用飞思半导体公司的半桥式驱动器MC33886。33886的电路下:9图 9根据datasheet中的说明,为了提驱动能力,改进了电路,把其中的两个半桥并联起来。既把两个OUT1并联,两个OUT2并联。图 1010第三章设计3.1 系统硬件描述系统中寻迹模块有 15 个输出信号,所以使用了 PORTA 的全部和 PORTB的最低位作为系统获取后排 9 个传感器的信号。前排 6 个传感器因为感应距离的关系,信号变化相对微弱,所以采用 PAD0 的低 6 位把为 6 个模拟信号量转化为 10 精度(10 位精度可使微弱变化体现出来,而且可以

15、进行数据处理消除一些光噪声干扰)的数字信号量供控制程序使用。电机驱动模块由做输入以便调速,因为电机调速无须用到很高的精度所以使用 8 位,使用模块的2。而舵机是整个系统的关键所在,方向调节要求有较高的精度,所以使用(6 和7)联立成 16 位使用。尝试采用利用离散状态量控制的办法来控制小车。利用状态量来控制小车最主要的是区间的划分,并以次作为舵机极限角度的分割依据,在整个控制过程中主要用离散的舵机旋转角度在控制车的方向。将后排 9 个管对分成正负两个位置区,中间的管对为位置 0,其他个管在其左右分为从-9-1,19 各 9 个位置。如图 5,-313579-9-7-1-5-8-6-4-20-2

16、-4-6-8图 11前排 6 个管对做如下划分:11-40246-2-6-5-3-1135图 12后排 9 个管对对路面的感应,通过比较器与参考电平比较,然后输出高低电平,由 S12 的 A,B 端口读入。前排的 6 个传感器因为要尽量正大感应距离的关系所以红外接收管在有收到反射光和没收到反射管时的变化不大,不适合用比较器来进行信号处理。因此,使用 S12 的 ATD 模块,采用 10 位精度的 AD通过办法对数据进行处理,以次判断出黑线和白色背景。系统以 250HZ 的速度采样 PORT A,PORT B,从得到的数据中判断出现在的位置,根据位置做方向调整。同时在每次调整前,利用 AD 模块

17、得出前排探测器的变化,判断前面的路况变化,据此做速度控制。3.2 系统设计系统控制的编写主要按照顺序执行的,从系统初始化开始,等待控制变量信号输入,到控制算法处理,再到受控变量输出。控制主流程图如下:图 1312定时中断程序主要完成对后排传感器的读入,判断出当前位置并将位置值存入历史数据队列中,做历史数据的差值运算。代码见附录 B。定时中断处理程序流程图:图 14控制程序主要完成对车辆的速度和位置控制,速度控决于前排传感器和历史量(主要取决于历史量),其中的一些参数在调试中确定。做角度调整时还有一些局部的调整,例如过大弯的判断并做加速行进,做过大弯动作后置标志位,以便下一步调整可以做稳定的动作

18、,而不会出现很剧烈的调整。代码见附录 B。控制程序流程图:13图 15前排探测器的 AD 转化和数据处理程序流程图:14AD 采样及数据处理方法:先把 6 个传感器对应的范围定为-5 到 5,利用的 AD 模块读入其 AD值,对其进行数字滤波,判断,确定黑线在传感器上所对应的区域。思路如下:对于同一批进来的 AD 值,黑线和白区域对应的值是不同的。对这批数值取最大值和最小值,以最大值和最小值的平均值作为黑线和白线的分界点。这种算法的好处是对整体环境光的依赖性比较小,可以根据环境光的强度自动调节黑线和白线间的分界点。同时为了区别全部黑线和全部白线的情况,利用以前的数据最大值和最小值的大小,若本批

19、数据最大值和最小值过于靠近,且接近以前的最大值或最小值,就认为是全部黑线或全部白线。代码见附录 B。第四章 开发工具、制作、安装、调试说明4.1 开发工具4.1.1开发工具使用METROWERKS的Codewarrior for S12作为开发工具。Codewarrior for S12是面向HC12或S12为CPU的单片机应用开发的括集成开发环境IDE,处理器库,全仿真,可视化参数显示工具,项目工程管理器,C交叉编译器,汇编器,器以及调试器。在制作过程中主要使用C语言,用到C交叉编译器,仿真等开发调试工具。4.1.2 硬件开发工具MC9S12DG128开发板及其附带的程序(可实现单板调试),

20、编程开发工具串口通讯线,PC。4.2 传感器传感器的制作和调试极为重要。一是因为在采样时是多个传感器协同工作,因而传感器的一致性。二是考虑环境条件的影响。环境主要来自于外界光的干扰。所有干扰的综合将导致光电传感器电平输出漂移,出现误动作。安装和调试阶段需采取一些克服干扰的措施。器件的一致性:一是发射/件两者的波长特性一致,有几个衡量特性的指标,如波长灵敏度特性、方向灵敏度特性等,这要求选择配对的型号。二是安15装状态,将各对传感器发射管与接收管间距、高低、偏角调节一致。因为这些因素都会影响光的反射和接收。光电传感器应尽量靠近地面,以便减少外界光源对传感器的。同时也不应该过于靠近,这样会受地面高

21、度影响过大,经过调试,比较好的垂直高度距离为5到10mm。离地面过远,光反射效果差,信号不强;离地面过近,会导致反射角度太大,加剧光漫射干扰的影响,故距离应该适当,以保证传感器具有最佳的反应。同时,为尽量减少外界杂散光的干扰,对接收管进行遮光处理,将各个接收管加装黑罩开,避免相互之间的影响。增加调节环节:在电每个传感器都增加了一个精密可可调电阻,这样可以保证每个传感器都有一个一致的初始工作点。最初使用普通的红外光电管对,使用中发现这种管对环境光干扰的抵抗能力不强,在接收管上加装黑色外罩后性能有所。但是为了系统的稳定选择了SANYO的SPI-315-34如图,这种小集成块的原理图如图,可见跟一般

22、的红外管原理是一样的,所以在调整了限流电阻后达到了预期的效果。图 17图18但是这种管的有效距离很近只有0.5cm-1cm,所以安装时只能让它尽量贴近地16面,这样反倒是提高了它对环境光的抵抗能力。在后排传感器上使用了这种集成红外管,但是前排红外传感器因为要做路径,所以不能使用这种管,使用原先的普通红外管。增加了外罩和通过的办法降低干扰,也达到了一定的效果。传感器的安装为了提高传感器的探测范围,可将传感器尽量向车前方安装。但是因为比赛规则中的车长限制,经过测试在车前4cm-5cm处安装方向传感器的效果最佳。在速度一定的情况下,舵机基本可以作出准确,及时的判断。4.3舵机舵机是通过HS12DG1

23、28提供信号来控制的,舵机装上去之后其的0度偏转角所对应的脉宽,和左右偏转极限角度及其对应脉宽的参数是非常重要的。通过发生不同脉宽的信号观察舵机的偏转情况可以确定以上的参数。使用S12的6716位输出,系统板的系统总线时钟设置为24M,因此为了分频到200HZ(舵机工作频率)后,设置周期为15000,得到根据这个舵机的工作特性,经过测试得到前车轮正向时,16位脉宽值为3850,左右极限角度为3850和。经过测试舵机大约有左右40度的极限角,取角度最小变化量40/9,大约为4.4。4.4整机调试在测试好各个模块的功能后利用模型车的一些剩余材料把系统板等装配起来。调试系统时先使用后排的传感器作为车

24、的方向调节和速度调节的输入量,同时程序也使用最简单的根据位置做调节的方法。假设位置量为K,调整角度为A,后轮驱动电机的占空比为V,初始占空比为Vori,调整基数v;A=K*4.4(-9=K=9);V=Vori-m*v;(m为一个与位置量有关的参数)就是说小车一直处于调整状态,让自己达到传感器阵列中的0位置位于黑线上方,状态量控制的基本就是这样,经过在赛道上的测试,小车在这种控制方17法下能达到很稳定的行驶,对赛道的判断精度相对较高,不过因为调整方法过于简单,所以速度无法。所以对局部程序做了调整,主要有:1)直道的阶梯加速。2)直道转弯道时的。3)以及在调整过程中,通过在程序中设置的寄存器以前的

25、调整动作来作为下一步动作的参考。经过一些改进后,车的整体运行性能有了一定提高,但是对于赛道的道路结构无法作出,所以车速的会遇到不稳定运行的状况,表现在对赛道结构进行判断后,动作会有延迟,分析原因一个是车速无法及时控制,一个是舵机的响应时间相对迟缓。因此在程序中加入了历史量统计的部分。但是根据历史量做调整并不清楚要用多少个过去的数据来判断当前趋势会比较有效。所以让车在赛道上数据,用进行数据统计。见附录A,由此得出大概取25个过去的位置量可以得出路径趋势。所以加上前排6个传感器,如图12。了最终的方案2,这样就形成了前排传感器做速度控制用,后排传感器做方向控制用的方案。前排传感器对前面路况做预先的

26、探测,并以得到的信息作为速度调整的依据,因为前排所使用的传感器对环境光敏感,且为了避免算法过去复杂,由前排传感器得出的结果主要是做直道入弯时的,和直道加速用。后排传感器相对比较稳定探测位置并以此做方向调整的依据。第五章主要技术参数5.1 改造后的车模总体重量,长、宽、高尺寸等基本参数改造后车模的总体重量为 0.8kg (不含电池)1)长 38cm2)宽 22cm3)高 14.5cm185.2 电路功耗,所有电容总容量1)运行时,整个系统的功耗约为 1.6w2)电容总容量:3*22uF+47uF+33nF=113.033uF5.3 传感器种类以及个数传感器使用普通的红外管对和 SANYO 的 S

27、PI-315-34,一共 15 个。其中前排 6 对普通红外管对,后排 9 个集成红外管对。5.4 除了车模原有的驱动电机、舵机之外伺服电机个数没有额外的伺服电机。5.5 赛道信息检测精度、频率赛道的检测频率为 250HZ。赛道检测精度(以 04 年韩国赛道为模拟赛道,以赛道中心线为基准):1)直道时,左右偏差绝对值=4cm2)弯道时,左右偏差绝对值=25cm第六章 总结很有幸参加这次大赛,通过这几个月的学习和动手制作从中学到了很多东西,的系统完成了寻迹,稳定控制等功能。对于 MC9S12DG128 这款单片机有了一定的了解,开发了其中的一些功能。通过学习这款单偏机让对学习单片机有了新的认识,

28、这种边学边动手的学习方法为来的学习开辟了一条新的道路。感谢的指导老师老师,老师。19参考文献1.单片机应用的开发方法M:,20042.单片机&DSP数字 IC 技术手册M:航空航天大学,20033MC33886 DATASHEETZ4MC9S12DT128 DATASHEETZ5LM1117 DATASHEETZ6LM339 DATASHEETZ20附录 A:对于一个自动控制系统来说,利用以前的历史数据,作为判断的一个,对于提高系统的控制能力有较高的意义。对于历史数据的数据量的选择是一个比较重要。如果保存得太多,处理的数据太过于滞后,当前的趋势;但如果保存的太少准确度又太低,为此,根据现场的数

29、据进行分析。让车子在赛道上运行30秒,这30秒内车头位置的相对误差。采样频率为100Hz.,得到以下3000个数据。图 A-1对图解进行局部放大,可以发现这幅的曲线为阶梯形。对图1的数据进行分析,可以得到平均每3.6个时间内数据变化一次。这说明采样的频率100Hz是足够的,不会出现在一个时间片里数据变化过大的情况。这对于更好的进行控制是有利的。图 A-2对这组数据进行数值微分,可以得到每点的近似变化率。如下图I20-2-6501001502002503006202-605001000150020002500图 A-3对于小车,如果出现摆动,数据上一般表现在上下两个极值间振荡。对数据极值点的轴向

30、距离进行分析,可以估计车子的摆动时间。相距的极值间的平均轴向距离为25,估计平均振荡时间为0.50S。II变化率10 80 60.40 20-0.2-0.4-0.6-0.8-10102030405060708090100百分比附录 B:主程序:#include/* common defines and macros */#include/* derivative information*/#includepll.h#includetimer.h#include.h#includemotor.h#includeprp.h#includeadc.h#includecontrol.h#pragma

31、LINK_INFODERIVATIVE mc9s12dg128b#define N 2externunsignedTimer_flag;externunsignedreg1;externunsignedreg2;externunsignedreg;externunsignedi;externunsignedj;externreg_his;now;a;void main(void) DDRB=0 xf0; /* PTB asoutput*/PORTB=0 xFF; /* LEDson */DDRA=0 x00;PORTA=0 xFF;DDRH=0 x00;IIIPTH=0 xff;PLL_Ini

32、t();_Init();Tmer_Init();ADC_Init();E|=0 x84;PORTA &=0 x7F;reg1=0;reg2=0;i=0;j=0;now=0;for(a=0;a=20;a+)rega=0;for(a=0;a=24;a+)/5个历史数据reg_hisa=0;Enableerrupts;for(;) Iif(Timer_flag) control(now);初始化和行进控制程序:#include pll.h#include .hIV#include/* derivativeinformation */#includetimer.h#includemotor.hexte

33、rn unsignednow;unsignedturnid;void_Init(void) POL|=0 x84;/7通道极性 1 ,2通道极性1CLK&=0 x7b;/时钟源设置67 clockBCLK|=0 x04;/2 CLOCK SBPRCLK=0 x30;/分频系数8,24M总线频率分为3MSCLB=0 x02;/ SB divided by 4CAE&=0 x7b;/波形特性 0left aligned1-center alignedCTL=0 x80;PER67=15000;/输出为200HZPER2=150;/3M/4/150=5000HZvoidrun(a,b)if(now=

34、 9| now=-9 | now=8 | now=-8|now=11|now=-11)turnid+;elseturnid=0;if(turnid=2) DTY67=a;/占空比DUTY为外部输入DTY2=b+20;delay();else DTY67=a;/占空比DUTY为外部输入DTY2=b;Vdelay();/计数24时,156个时钟周期,0。0000065S定时器初始化和定时中断程序:#includeprp.h#include/*common defines and macros */#include/*derivativeinformation*/#include.h#defineo

35、ffset783#definetiny80#defineangle03850/正向#defineN2#definev5unsignedTimer_flag;reg1;/nowreg2;/forwardreg11;reg_his26;/将两个采样值平均后的历史数据reg_diff26;/历史数据的差值unsignedk;/计数externnow;sum;void Timer_Init(void)/定时初始化程序MCCTL= 0 xC3;T= 0 x1770;/250hz/T = 0 x0bb8; /*T BUSCLOCK DIVIDEDBY375=500*/VIMCCTL |= 0 x04; /

36、* enable timer TCNTMCCTL */Timer_flag=0;voiderrupt 26 Downcount_ISR(void) /定时中断程序Timer_flag=1;MC|=0 x80; /*MC*/T = 0 x1770;/250hzT = 0 x0bb8;/PRESCALED375TO500HZif(PORTA&0 x7F)0 x7f)!=reg1)reg2=reg1;reg1=(PORTA&0 x7F)0 x7f;switch(reg1)case0 x01:now=0;break;case0 x21:now=1;break;case0 x20:now=2;break

37、;case0 x22:now=3;break;case0 x02:now=4;break;case0 x82:now=5;break;case0 x80:now=6;break;case0 x84:now=7;break;case0 x04:now=8;break;case0 x00:if(reg2=0 x04)now=9;else if(reg2=0 x10)now=-9;else if(PORTB&0 x01)0 x01)VIInow=-6;break;case 0 x41: now=-1;break;case 0 x40: now=-2;break;case 0 x48:if(PORTB

38、&0 x01)0 x01)now=-12;elsenow=-3;break;case 0 x08:if(PORTB&0 x01)0 x01)now=-5;elsenow=-4;break;case 0 x10:if(PORTB&0 x01)0 x01)now=-7;elsenow=-8;break;case 0 x86:now=11;break;/三管同上case0 x18:now=-11;break;case0 xa2:now=12;break;case0 xa6:now=13;break;/4管同上case0 x58:now=-13;break;default:now=100;/在黑线上V

39、IIIfor(k=0;kN;k+)regN-k=regN-k-1;if(now!=100) reg0=now;for(k=0,sum=0;kN;k+)sum=sum+regk;for(k=0;k24;k+) /25个历史数据reg_his25-k-1= reg_his25-k-2;reg_his0=sum/(N+1);for(k=0;k24;k+) /24个历史数据差值reg_diff24-k-1=reg_his25-k-1-reg_his25-k-2;AD初始化和启动程序:unsignedAD_Data8;voidADC_Read(void)i;for(i=0;i8;i+)AD_Datai=

40、 0;for(i=1;i=4;i+)/* start conver*/ATD0CTL5 = 0 x90;IX/bit7:DJM=1/1 = 右对齐/0 = 左对齐/bit6:DSGN =0/1 = 有符号/0 = 无符号/bit 5 :scan =0/SCAN 连续转换模式/1=连续转换模式/0=单次转换/bit4:mul =1/MULT 多通道采样模式/1= 多通道转换/0= 单通道转换/bit20CC CB CA:000 选择第0通道while(ATD0S0_SCF=0);AD_Data0+=ATD0DR0;AD_Data1+=ATD0DR1;AD_Data2+=ATD0DR2;AD_Da

41、ta3+=ATD0DR3;AD_Data4+=ATD0DR4;AD_Data5+=ATD0DR5;for (i=0;i=2;/* ADC_Init *Xvoid ADC_Init(void)ATD0CTL2=0 xc0; / enableADCATD0CTL3=0 x00;ATD0CTL4=0 x06;时钟初始化和启动程序:#include/*common defines and macros */#include/*derivative information */#includepll.h/*macro _BUSCLOCK */* PLL_Init */Set PLL clock to 4

42、8 MHz, and switch 9S12 to run at this rate/Inputs: none/Outputs: none/Errors: will hang if PLL does not stabilizevoid PLL_Init(void)/* ensure were runningthe controller at an appropriate clockspeed */#if (_BUSCLOCK != 24 &_BUSCLOCK != 4)#error pll.h: _BUSCLOCKhas to be set to 4 (MHz) or 24 (MHz)#end

43、if/* set PLL clockspeed */#if _BUSCLOCK =24SYNR = 0 x02;/ PLLOSC = 48 MHz#elseXISYNR = 0 x00;/ PLLOSC = 8 MHz#endifREFDV = 0 x01;/* PLLCLK = 2 * OSCCLK * (SYNR + 1) / (REFDV+1)Values above give PLLCLK of 48 MHz with4MHz crystal.(OSCCLK is Crystal Clock Frequency)*/CLKSEL = 0 x00;/*Meaning forCLKSEL:

44、Bit7:PLLSEL=0Keep using OSCCLK until weare ready to switch toPLLCLKBit6:PSTP=0Donot need to go to Pseudo-Stop ModeBit5:SYSWAI=0Inwait mode system clocks stop.But4:ROAWAI=0Donotreduce oscillatorlitude inwait mode.Bit3:PLLWAI=0DonotturnoffPLL in waitmodeBit2:CWAI=0Donotstopthecore duringwait modeBit1:

45、RTIWAI=0DonotstoptheRTI inwaitmodeBit0:COPWAI=0DonotstoptheCOP inwaitmode*/PLLCTL= 0 xD1;/*Meaning forPLLCTL:Bit7:CME=1;Clock monitor enable -reset if bad clockwhen setBit6:PLLON=1;PLL On bitBit5:AUTO=0;No automatic control of bandwidth, manualthrough ACQBut 4: ACQ= 1; 1 for high bandwidth filter (a

46、cquisition); 0 for low (tracking)XIIBit3:(Not Used by 9s12c32)Bit2:PRE=0;RTI stops during Pseudo Stop ModeBit1:PCE=0;COP diabled during Pseudo STOP modeBit0:SCME=1;Crystal Clock Failure - Self Clockmode NOT reset.*/while(CRG&0 x08) =0)/ Wait for PLLCLK tostabilize.CLKSEL_PLLSEL = 1; /Switch to PLL c

47、lock延时程序:#includeprp.h#include/* common defines and macros */#include/* derivativeinformation */i;j;void delay(void)for(j=0;j=24000;j+)/24000 6.5msvoid delay1(void)for(j=0;j=2400;j+)控制程序:#include /* common defines and macros */XIII#include/*derivativeinformation*/#includepll.h#include100hz.h#include

48、.h#includemotor.h#includeprp.h#includeadc.h#includepre.hextern unsignedTimer_flag;#defineoffset750#definetiny80#defineangle03850/正向#defineN 10#definevori 4v;unsignedcount;ition_now;extern unsignedregN;unsignedbigturn_id;unsignedeightid;unsignedsixid;unsignedfiveid;unsignedsevenid;externreg_diff;totl

49、e;pre_;void control(ition_now)XIVTimer_flag=0;totle=0;v=vori;for(count=0;count24;count+) totle=totle+reg_diffcount;if( totle8) v=0;pre_=pre(ition_now);if(pre_)PORTB &=0 x0F;run(angle0,40);return;elsePORTB|=0 xa0;switch(ition_now)case 100:/全黑run(angle0,0);/ANGLE0break;case 0:XVrun(angle0,35*v);/位置0de

50、lay();run(angle0,30*v);break;case 1: /位置1,-1run(angle0-tiny,23*v);break;case -1:run(angle0+tiny,23*v);break;case 2: /位置2,-2run(angle0-2*tiny,23*v);break;case -2:run(angle0+2*tiny,23*v);break;case 3: /位置3,-3if(bigturn_id=1) XVIrun(angle0,22*v);bigturn_id=0; elserun(angle0-3*tiny,23*v);break;case -3:i

51、f(bigturn_id=1) run(angle0,22*v);bigturn_id=0; elserun(angle0+3*tiny,23*v);break;case 4: /位置4,-4run(angle0-4*tiny,21*v);break;case -4:run(angle0+4*tiny,21*v);break;case 5: /位置5,-5if(sevenid) sevenid=0;XVIIrun(angle0-6*tiny,20*v); elserun(angle0-5*tiny,20*v);break;case -5: if(sevenid) sevenid=0;run(angle0+6*tiny,20*v);elserun(angle0+5*tiny,20*v);break;case 6:/位置6,-6run(angle0-6*tiny,19*v);sixid=1;break;case -6:run(angle0+6*tiny,19*v);sixid=1;break;case 7: /位置7,-7run(angle0-(7*tiny-4

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论