版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、摘 要本文详细介绍了基于ARM Cortex M4的磁导航自主路径识别系统的设计与实现过程。本系统以飞思卡尔32位单片机MK60DN512ZVLL10为控制核心,通过电感检测赛道上通电导线产生的磁场来判断赛道信息,从而控制小车自主行驶。对电感切割磁场产生的信号,先进行了选频,然后使用运放对信号进行放大,再利用肖特基二极管对交流信号进行检波,最后送入AD中获得小车在赛道上的位置信息。在控制小车自主循迹中,方向与速度控制上分别使用了位置式PID与增量式PID。在调试PID参数以及系统时,还使用了上位机软件。 关键词:磁导航 自主路径识别 MK60DN512ZVLL10 PIDAbstractThi
2、s paper describes the design and implementation process based on ARM Cortex M4 magnetic navigation path independent recognition system. This system MK60DN512ZVLL10 Freescale 32-bit microcontroller to control the core, through the inductor wire produces a magnetic field detection circuit is energized
3、 to determine the track information to control car autonomous driving. Cutting the magnetic field generated by the inductor signal, the first for a selected frequency, and then use the op amp to amplify the signal, and then use the AC signal Schottky diode detector, and finally into the AD position
4、information obtained in the car on the track. In self-control car tracking in the direction and speed control are used positional PID and incremental PID. PID parameters during commissioning and system, also used the PC software.Key Words:magnetic navigation path independent recognition MK60DN512ZVL
5、L10 PID目 录摘 要IAbstractII引 言- 1 -1硬件电路- 2 -1.1单片机最小系统板- 2 -1.2电源模块- 2 -1.2.1 LM1117- 2 -1.2.2 LM2940- 3 -1.2.3 LM2576-ADJ- 3 -1.2.4 主板总体设计- 4 -1.3 电机驱动模块- 4 -1.4 传感器模块- 6 -1.4.1磁感应传感器- 6 -1.4.1.1 选频电路设计- 6 -1.4.1.2放大电路设计- 7 -1.4.1.3检波电路设计- 7 -1.4.1.4磁感应传感器整体设计- 7 -1.4.1.5磁感应传感器的实际电路设计- 8 -1.4.2速度传感器-
6、 8 -1.4.3起跑线检测传感器- 8 -2 机械调校- 10 -2.1 舵机的安装- 10 -2.2 前瞻的固定- 10 -2.2.1电感的排布- 10 -2.2.2前瞻的长度- 11 -2.3 编码器的安装- 11 -2.4 降低重心- 11 -3 软件编写- 13 -3.1 开发环境- 13 -3.2 程序下载- 13 -3.3 底层驱动编写- 13 -3.3.1 GPIO模块- 14 -3.3.1.1 打开时钟- 14 -3.3.1.2 设置引脚功能- 15 -3.3.1.3 GPIO口方向设置- 15 -3.3.2 PIT模块- 16 -3.3.2.1 时钟设置- 16 -3.3.
7、2.2 使能PIT模块- 16 -3.3.2.3 计算并设定定时器初始值- 16 -3.3.2.4 使能PIT定时中断- 17 -3.3.3 ADC模块- 17 -3.3.3.1 ADC设置步骤- 17 -3.4 控制模块- 18 -3.4.1方向控制- 18 -3.4.2速度控制- 18 -3.4.3电感值处理- 19 -3.4.4丢失处理- 20 -3.5调试系统- 20 -3.5.1 调试工具- 20 -3.5.1.1 上位机软件- 20 -3.5.2.2 无线串口- 21 -3.5.2 PID参数整定- 21 -结 论- 24 -参考文献- 25 -致 谢- 26 -附 录A- 27
8、-附 录B- 29 -引 言近年来,无人驾驶汽车发展的飞速,所谓无人驾驶汽车就是车可以自动驾驶无需人工控制。国外比较有代表性的是谷歌无人驾驶汽车,通过各种传感器检测到其他车辆。国内的无人驾驶汽车也发展的比较快,比较有代表性的就是,2011年的国防科技大学发明的无人驾驶汽车。无人驾驶汽车有很好的发展前景,我们不需要再亲自开车,就有了更多的时间干其他事情,无人驾驶汽车还可以用于送货等。但是无人驾驶汽车还有很多难题恶待解决,比如无人驾驶汽车是否可以应对紧急情况,这就需要无人驾驶汽车变得更加智能。本论文详细介绍了采用飞思卡尔32位的MK60DN512ZVLL10作为控制核心,通过检测道路中心的通电导线
9、的磁场使小车实现自主路径识别,对研究无人驾驶汽车具有现实意义。其实现了通过电感检测磁场来获取赛道信息,并利用获取的赛道信息来控制舵机转向,即控制小车行驶方向。为了让小车更快的自主循迹并且不冲出赛道,对速度还进行了控制,比如直道加速、弯道减速等。1硬件电路硬件系统主要是由最小系统板,放大电路,主板,电机驱动等组成。在设计硬件电路原理图与PCB时,使用的是Altium Designer 9。1.1单片机最小系统板Kinetis芯片是首款基于ARM Cortex M4内核的微控制器,基于飞思卡尔创新的90nm薄膜存储器(TFS)闪存技术,具有独特的Flex存储器(可配置的内嵌EEPROM)。Kine
10、tis芯片融合了最新的低功耗革新技术,具有高性能、高精度的混合信号能力,宽广的互连性,人机接口和安全外设。我使用的最小系统板是Kinetis系列的MK60DN512ZVLL10,外观如图1.1所示。图1.1 MK60DN512ZVLL101.2电源模块电源模块好比是大厦的基石,小车的稳定运行是以电源模块稳定供电为基础的。为小车供电的是信号为7.2V 2000mAh Ni-Cd电池,需要提供给单片机、放大电路等3.3V的电源,提供给电机驱动、编码器等5V电源。因此,我们采用了低压差集成稳压器,低压差集成稳压器是线性稳压器的一种,相比于传统的线性稳压器、开关式电压稳压器等有结构简单、线性度好等优点
11、。1.2.1 LM1117为了给单片机与传感器提供3.3V的电压,我们选用了三端稳压器LM1117。LM1117输出电压有可调式和固定式,我们使用的是3.3V固定输出电压。对于给传感器模块供电电路也是相同的。原理图如图1.2所示。图1.2 3.3V单片机电源1.2.2 LM2940硬件电路上多处用到了5V的电源,包括电机驱动、编码器、无线串口等,还提供给了单片机与传感器的输入电压。我们选用了低压差集成稳定器LM2940来提供5V电源,电路原理图如图1.3所示。图1.3 5V电源1.2.3 LM2576-ADJ舵机的额定工作电压为5V,为了能让舵机反应更快、更灵敏,我们通常会增大给舵机的电压,我
12、们给舵机提供的电压是6V,使用的是开关式电源变换器LM2576-ADJ,ADJ的意思就是可以调节。可通过调节R6可变电阻来改变输出电压。电路原理图如图1.4所示。图1.4 6V舵机电源1.2.4 主板总体设计主板总体供电示意图如图1.5所示,实物图如图1.6所示。图1.5 电源供电示意图图1.6 主板实物图1.3 电机驱动模块智能小车的动力来源于一台直流电机,电机不仅要有较快的速度,还需要有较高的加速度,因此对电机的转速要求较高。实现直流电动机正反转的电路有很多,比较常用的电路就是H桥驱动电路,因其形状类似于字母”H”而得名。H桥驱动电路示意图如下图所示。从电路图上,很容易看出,当开关Q1、Q
13、4接通时,电流从左往右流过电机,电机正转;当开关Q3、Q2接通时,电流从右往左流过电机,电机反转。由此来控制直流电机的正反转。H桥示意图如图1.7所示。图1.7 H桥驱动电路示意图但是,当电机运行时,必须要保证Q1、Q2以及Q3、Q4不能同时导通,可使用图1.8电路示意图来解决。图1.8 H桥控制电路示意图驱动芯片我用的是英飞凌公司的BTS7960集成半桥驱动器,BTS7960有着出色的性能和极高的稳定性。使用两片BTS7960搭成一个H桥驱动电路,来控制电机。电机驱动原理图如图1.9所示,实物图如图1.10所示。图1.9 电机驱动原理图图1.10 电机驱动实物图1.4 传感器模块1.4.1磁
14、感应传感器小车需要通过检测道路中心的通有100mA导线的磁场来实现路径识别,使用的交变电流频率为20kHz,那么磁场检测就显得尤为重要了。现在测量磁场的方法很多,可以通过电感、磁阻、霍尔元件等交变磁场传感器来测量磁场。我使用的是10mH工字型电感,如图1.11所示。图1.11 10mH工字型电感1.4.1.1 选频电路设计电感切割磁场会产生感应电动势,但是这个感应电动势信号太弱,只有几十毫伏,而且噪声很多,会受到周围不同频率的磁场的干扰。因此,电感切割磁场产生的电动势需要进行选频,减少其他干扰信号的影响。利用电感电容即可组成简单的并联谐振电路来实现选频电路,谐振频率要求为20kHz,则可以通过
15、公式1-1计算出C的值。2fL=12fC (式1-1)将L=10mH,f=20000Hz代入公式,可以得到C=6.3 nF左右,在市场上能够买到的最为接近6.3nF电容的标称电容为6.8nF。电路图如图1.12所示。图1.12 并联谐振电路1.4.1.2放大电路设计选频后的信号还是很弱,因此为了能够更加准确地获得赛道信息,还需要对感应电压进行进一步的放大,这也是信号检测最主要的部分。可以选用运算放大器进行电压放大,运放在选型上应该选择低噪音、动态范围大、高速、单电源、增益带宽积较高的运放。运放的选择有很多,我们试过由TI公司生产的LMV358,虽然LMV358价格便宜,容易购买,但是其增益带宽
16、积仅有1MHz,在20kHz的信号频率下,开环增益仅有50倍,而一般放大倍数要大于100倍,所以性能一般。在运放芯片的不断尝试中,我们最终选择了性能卓越的OPA2350,也是TI公司生产的高速、单电源、至轨运放,其增益带宽积达到了38MHz,在20KHz频率下开环增益达到了1900倍,这足以看出来OPA2350性能非常的出色。1.4.1.3检波电路设计经过选频和放大后的电压信号仍然是交流信号,如果直接将交流信号接入单片机的AD端口,使用单片机直接采样交变电压信号的话,采集数据的处理方面比较麻烦。所以,一般将交流信号整流为直流信号再送入AD中进行处理。可以使用肖特基二极管,对信号进行检波处理,以
17、便可以获得更大的动态范围。1.4.1.4磁感应传感器整体设计从电感切割磁场产生感应电动势要经过选频、放大、检波,最后再送入AD中。过程如图1.13所示。图1.13 放大电路过程1.4.1.5磁感应传感器的实际电路设计放大电路使用的运放芯片是OPA2350,电感切割磁场产生的电动势经过选频、放大、检波等步骤。设计的电路图如图1.14所示,实物图如图1.15所示。图1.14 放大电路原理图图1.15 放大电路实物图1.4.2速度传感器小车在自主循迹过程中,速度的控制很重要。小车在直道上加速行驶,进入弯道后减速行驶,否则很容易冲出赛道。而在控制小车速度的环节上,首先得获得小车的当前速度,然后才能决定
18、是加速还是减速。用于测速的传感器通常有霍尔传感器、光电传感器、测速电机、编码器四种,我们选用了测量精度较高,稳定性较好的编码器来进行测速。根据精度要求,我们购买了360线的欧姆龙编码器,为数字量输出,可供单片机直接采集以获得速度值。1.4.3起跑线检测传感器智能小车除了能够实现自主循迹外,还要有跑完一圈后自动停车功能。电磁组的赛道在起跑线处有永磁铁,用来检测起跑线。选择干簧管来检测永磁铁无疑是最简单的方法,干簧管我也试了很多种,有的好用有的不好用,好不好用是以可以检测的最高高度衡量的,而且有的干簧管外表是玻璃的,很容易打碎,经过选择,发现了外面有塑料包装的干簧管,不容易损坏,我最终使用的是这个
19、,检测高度大约有1.5CM,这个高度已经足够了。当然磁铁的大小不同,稍微有些差异。2 机械调校2.1 舵机的安装小车转向是通过舵机来驱动的,所以舵机的安装会影响到小车转向的角度和灵敏度。由于小车上面的空间有限,为了合理利用,将舵机安装位置挪到了两前轮之间。舵机的固定需要支架,使用了铝合金材料的支架,不仅结实而且特别轻,不会使小车的重心向前移。舵机的安装如图2.1所示。图 2.1 舵机的安装2.2 前瞻的固定2.2.1电感的排布智能小车的前瞻应该尽量长点,正所谓“站得高看得远”,足够的前瞻量能提前获得赛道的信息以便更好的控制小车。当使用多个传感器的时候,传感器之间的距离越大,便越能获得更多的赛道
20、信息。我使用的是两个电感的方案,两个电感之间的距离为25cm左右,如图2.2所示。图2.2 电感的排布2.2.2前瞻的长度由于车模不限制长度,所以为了能够提前获取赛道信息以便更快的响应,我增加了前瞻的长度。当然,并不是说前瞻越长越好,而是需要一个合适的长度,与控制算法有关系,要结合实际情况。但是,短前瞻效果肯定不好。前瞻的材料使用的是碳纤维杆,为了减轻前瞻的重量,使小车的中心不往前移,我试了不同直径的碳纤维杆,以小车行驶时前瞻不颤动为标准,选用了直径为4*2mm的规格。前瞻的固定如图2.3所示。图2.3 前瞻的固定2.3 编码器的安装编码器的安装需要注意的事项就是齿轮的咬合,包含编码器与差速、
21、差速齿轮与电机。调节齿轮之间的距离,然后打开电机听声音可以判断齿轮咬合的松紧。如果转动声音尖锐,则表示齿轮咬合的太紧。如果声音零碎,则表示齿轮咬合的太松。齿轮咬合的太松,容易损坏齿轮,齿轮咬合的太紧,影响电机。所以,调整齿轮咬合,以松紧合适为准,既不松动,也不卡滞。编码器的安装如图2.4所示。图2.4 编码器的安装2.4 降低重心为了让小车运行稳定,转向灵活,过弯时不侧翻,通常会降低小车的重心。小车上最重的就是电池了,所以为了降低小车的重心,我将电池的高度往下降了,并且位置往后移动一点。还去掉了小车上一些无关紧要的零件,最大限度的减轻小车的重量,使小车运行起来轻便,转向灵敏,加速减速更快。电池
22、的安装如图2.5所示。图2.5 电池的安装3 软件编写3.1 开发环境Kinetis是基于ARM Cortex M4核心的,可以使用飞思卡尔公司推出的面向嵌入式应用开发的软件工具CodeWarrior(简称CW),还可以选用第三方的开发环境,我使用的是嵌入式系统开发工具IAR。软件界面如图3.1所示。 图3.1 IAR界面3.2 程序下载程序写好之后,还需要下载到单片机中,我们使用的是USB接口的J-LINK下载器,将电脑与单片机通过J-LINK连接后,在IAR界面的右上角有个下载按钮,点击下载即可。IAR程序下载界面如图3.2所示。图3.2 IAR程序下载界面3.3 底层驱动编写Kineti
23、s芯片是首款基于ARM Cortex M4内核的微控制器,基于飞思卡尔创新的90nm薄膜存储器(TFS)闪存技术,具有独特的Flex存储器(可配置的内嵌EEPROM)。Kinetis芯片融合了最新的低功耗革新技术,具有高性能、高精度的混合信号能力,宽广的互连性,人机接口和安全外设。Kinetis系列微控制器第一阶段产品有五个系列,如图3.3所示。图3.3 Kinetis微控制器产品组合3.3.1 GPIO模块GPIO即输入输出端口,常用于输入或输出逻辑信号。3.3.1.1 打开时钟使用GPIO需要先启用该端口的时钟,否则无法使用,而时钟需要通过SIM模块的SIM_SCGC5寄存器设置,SIM_
24、SCGC5寄存器图3.4所示。图3.4 SIM_SCGC5寄存器将SIM_SCGC5寄存器的第9、10、11、12、13位设置为1,IO口模块获得系统时钟,然后才能正常工作。可以使用宏定义来实现,不容易出错。宏定义的代码如下:#define SIM_SCGC5_PORTA_MASK 0x200u#define SIM_SCGC5_PORTB_MASK 0x400u#define SIM_SCGC5_PORTC_MASK 0x800u#define SIM_SCGC5_PORTD_MASK 0x1000u#define SIM_SCGC5_PORTE_MASK 0x2000uSIM_SCGC5寄
25、存器的设置代码如下:SIM_SCGC5|=SIM_SCGC5_PORTA_MASK|SIM_SCGC5_PORTB_MASK|SIM_SCGC5_PORTC_MASK|SIM_SCGC5_PORTD_MASK | SIM_SCGC5_PORTE_MASK;3.3.1.2 设置引脚功能Kinetis系列的单片机的IO口一般都有复用功能,所以我们只有通过设置启用GPIO功能,IO口才能使用,所以打开时钟之后就需要将使用的引脚设为GPIO模块,通过设置引脚控制寄存器(PORTx_PCRn)来实现。该寄存器如图3.5所示。图3.5 PORTx_PCRn寄存器引脚复用功能通过设置MUX即可,将MUX设为
26、1则该引脚GPIO功能即启用。代码如下:PORTE_PCR0= 0x00000100;/E0引脚设置为GPIO模式还可以通过宏定义的方式,宏定义如下:#define PORT_PCR_MUX(1) 0x000001003.3.1.3 GPIO口方向设置大多数单片机的IO口都是双向的,当然功能强大的Kinetis系列的单片机也不例外。在使用IO口前,需要设置IO口为输入或者输出,可通过设置IO口方向寄存器,即GPIOx_PDDR寄存器来确定IO口为输入还是输出。GPIOx_PDDR寄存器如图3.6所示。图3.6 IO口方向寄存器GPIOx_PDDR其中,PDD为引脚方向设置位,PDDx=1是将引
27、脚x设置为输出,PDDx=0是将引脚x设置为输入。具体代码如下:GPIOE_PDDR|=0X00000001;/E0设置为输出3.3.2 PIT模块中断程序的作用是,中断发生后,当前程序会被立即暂停,然后进入中断程序,等中断服务程序执行完毕,再恢复现场,并回到断点处继续执行刚才的程序。不同的中断源,触发中断的事件也不同。在单片机的应用中,经常会用到的一种中断就是定时中断,当定时时间到时则触发中断。定时中断在智能车中最主要的应用就是测速,而Kinetis中的PIT模块用来做简单的定时是最简单的一种。PIT模块即周期定时模块,主要功能是用来产生定时中断。定时中断的原理是通过对总线时钟进行计数,当计
28、数递减到0时即产生中断,我们可以通过给每个计数器赋予不同的初值来获得想要的中断周期,每次中断后,计数器便会自动加载我们自己设定的初值,如此反复即实现了定时中断的功能。3.3.2.1 时钟设置如果要使用定时中断的话,就需要先打开时钟。通过寄存器SIM_SCG6的设置可以打开PIT模块的时钟,将寄存器SIM_SCG6的第1215位设置为1即可打开PIT时钟,具体代码如下:SIM_SCGC6|=SIM_SCGC6_PIT_MASK;/打开pit时钟其中SIM_SCGC6_PIT_MASK为宏定义:#define SIM_SCGC6_PIT_MASK 0x800000u3.3.2.2 使能PIT模块开
29、启PIT模块的时钟之后,需要使能PIT模块,通过设置PIT模块控制器即PIT_MCR来实现,PIT_MCR寄存器如图3.7所示。313029282726252423222120191817161514131211109876543210ReadMDISFRZWriteReset00000000000000000000000000000010图3.7 PIT_MCR寄存器其中,MDIS为模块使能位,默认为1,1为禁止状态,将其置0即可。具体代码如下:PIT_MCR=0;/PIT模块使能3.3.2.3 计算并设定定时器初始值下面便要设定定时器的初始值来实现自己想要的定时周期了。因为每次中断重新载入
30、计数器初始值需要一个时钟周期,然后递减到0,所以我们在计算计数器初始值时需要考虑这个额外的时钟周期,即每两个周期中断一次。由此可得:计数初值LDVAL = (定时周期/ 模块时钟周期) -1或者:计数初值LDVAL = (定时周期*模块时钟频率) -1将计数初值LDVAL赋值给定时器初值寄存器PIT_LDVALn即可,具体代码如下:PIT_LDVAL0=time*60000-1;/计数器初始化,time为中断周期,单位ms3.3.2.4 使能PIT定时中断最后还要使能定时器,使能中断。用于设置对应通道的定时器是否使能以及是否产生中断请求的寄存器为定时器控制寄存器PIT_TCTRLn,如图3.8
31、所示。313029282726252423222120191817161514131211109876543210ReadTIETENWriteReset00000000000000000000000000000000图3.8 PIT_TCTRLn寄存器其中,TIE=1为定时器中断使能,TEN=1为定时器使能。具体设置代码为:PIT_TCTRL0=PIT_TCTRL_TEN_MASK|PIT_TCTRL_TIE_MASK;/定时器使能,中断使能其中PIT_TCTRL_TEN_MASK与PIT_TCTRL_TIE_MASK为宏定义:#define PIT_TCTRL_TEN_MASK 0x1u#
32、define PIT_TCTRL_TIE_MASK 0x2u3.3.3 ADC模块智能车既然是自主循迹,那作为智能车“眼睛”的传感器是必不可少的,而电磁小车的传感器是电感,电感通过切割通电导线周围的磁场产生电压,但是单片机本身无法对电压进行处理,需要进行AD转换,即将模拟量转换为数字量。ADC实际上是一把用来丈量电压大小的尺子,对于3.3V供电的Kinetis芯片而言,能够丈量电压的范围就是03.3V。3.3.3.1 ADC设置步骤a. 打开ADC模块时钟。b. 选择时钟和分频系数。c. 设置采样精度,是否启用长采样时间、高速模块,设置触发方式,是否启用硬件均值滤波、硬件比较,选择采样通道。d
33、. 选择使用硬件触发还是软件触发。e. 等待转换完成,读取结果。其实,很多寄存器无需设置,使用默认值即可。3.4 控制模块3.4.1方向控制在方向控制上,我采用的是两个电感的方案,通过两个电感值用公式3-1:pos=(long)(Sensor0-Sensor1)*K/(long)(Sensor0)*Sensor1) (式3-1)其中pos值代表小车中心偏离赛道中心的程度量,K值可以根据实际情况进行测定。获得赛道中心位置值后,还需要通过赛道中心值来控制舵机,我使用的是PD控制,控制公式3-2:SERVO=(int)(CENTER+P*pos+D*poserro+D*preposerro/2) (
34、式3-2)其中CENTER为舵机中值,然后根据实际情况不断地调节P与D的值,直道控制效果最佳为止。3.4.2速度控制在速度控制上,我们使用了比较经典的PID控制,具体是增量式PID控制,增量式PID控制可以使小车的速度变化比较平稳连续,如果使用位置式PID的话,小车的速度就会变化的比较大,不利于小车的平稳运行。/增量式PID速度控制/公式:增量=KP*En-KI*En-1+KD*(En-1-En-2)int PID_Control(int curr_Value)/传入当前值int currError;/当前误差int increment;/增量值currError = ideal_speed
35、- curr_Value;/当前误差increment = (int)(P_value*currError);/增量值lastError = currError;/记住上次的误差prevError = lastError;/记住上上次的误差return increment;3.4.3电感值处理AD转换后的电感值由于比较杂乱,通常要对大量的电感值进行预处理,然后再利用处理后的电感值控制小车自主循迹。可通过软件滤波来滤出干扰信号,来获取更为有价值的信号。通过一个算法即可实现,我们使用的是中值滤波,对因偶然因素而引起的波动有很好的克服作用。具体算法代码如下。unsigned int ADCmid(i
36、nt channel) /ADCmid:(中值滤波)获取1路通道channel中值滤波后的A/D转换结果 int i,j,k,mid; i = ADCvalue(channel); j = ADCvalue(channel); k = ADCvalue(channel); if (i > j) mid = i; i = j; j = mid; if (k >= j) mid = j; else if (k >= i) mid = k; else mid = i; return mid; 电感值通过中值滤波后,我们还进行了均值滤波,使电感值变化比较平稳,不至于跳变的特别厉害,具
37、体算法代码如下。unsigned int ADCave(int n,int channel)/ATDave:(均值滤波)对1路通道channel的A/D转换结果求n次平均值 int i; int ave=0; for (i=0; i<n; i+) ave += ADCmid(channel); ave /= n; return ave;3.4.4丢失处理小车在沿着赛道循迹的过程中,遇到弯道特别大的时候,由于小车的前瞻,电感检测到的赛道信息很弱,甚至为0。这时候,小车前瞻上的两个电感值均为0,如果按照比较两个电感值的大小来判断赛道是直道还是弯道的话,就会判断错误,明明是弯道,却识别成了直道
38、,以至于冲出赛道。因此,需要对这种特殊情况进行处理,即电感值丢失处理。当两个电感值都变为0前,肯定有一个变化的过程,即在进入大弯道时,小车会转弯,当两个电感值都变为0时,保持上一个转弯状态,甚至将舵机“打死”在一边即可。3.5调试系统3.5.1 调试工具3.5.1.1 上位机软件在调试小车的时候,难免会遇到各种问题,比如小车不知道什么原因突然冲出赛道了,可能在同一个地方冲出赛道很多次。我们单纯去看控制代码是无法知道为什么小车冲出赛道了,或与我们可以从单片机上的液晶显示屏看到一些数据,但是在小车在高速行驶的时候我们是无法去看数据的,这就需要我们采集小车在冲出赛道前与冲出赛道后的数据进行分析,才能
39、找到原因。为了实时监测小车在行驶过程中的数据,我们使用了上位机软件“Serial Digtial Scope”,即虚拟示波器,可以实时显示并自动绘图从单片机上发过来的数据,我们通过分析图形与数据便可以知道小车的状态。那么,如果小车冲出赛道,通过分析数据便很容易就知道原因了。虚拟示波器界面如图3.9所示。图3.9 上位机软件3.5.2.2 无线串口由于电磁小车需要采集的数据并不是很多,所以我们选择了使用无线串口工具来发送与接收数据。无线串口工具如下图所示,分为发送部分与接收部分,一个是插在主板上来发送从单片机上传输的数据,一个是插在电脑上接收发送过来的数据。无线串口实物图如图3.10所示。图3.
40、10 无线串口实物图无线串口工具使用前,还需设置波特率,要保证两个无线与软件上波特率相同,这样才能保证正常传输数据和数据的正确性。3.5.2 PID参数整定再好的控制算法,如果参数不整定好,控制效果也会一塌糊涂。我使用了上述的无线串口和上位机软件进行了速度与方向的PID参数整定。在PID参数整定的时候,虽然可以通过理论的方法,但是往往在实际中,使用的是凑试的方法。系统的响应速度与比例系数P有关,P越大系统响应越快,但是太大的P值会导致系统振荡,不利于系统的稳定。增加积分系数I可以减少超调,增加系统的稳定性,减少振荡。增加微分系数D可以使系统超调量减少,稳定性增加。在试凑PID参数的时候,可以先
41、只使用P,将P值由小到大不断增加值,直到系统出现震荡。振荡的响应曲线如图3.11所示。图3.11 振荡的响应曲线然后就可以加入参数I,参数I的设定变化与参数P正好相反,先设定参数I为一个较大的值,然后逐渐减少,直到系统系统振荡消失为止。无超调的响应曲线如图3.12所示。图3.12 无超调的响应曲线最后再加入参数D,从0开始逐渐增加,直到满足条件。理想的响应曲线如图3.13所示。图3.13 理想的响应曲线在整定PID参数的时候,需要不断的调整各个参数的值,直到效果最佳为止。结 论本系统基本上实现了小车的自主循迹功能,并对不同的赛道进行了速度处理,小车跑完一圈后还实现了自动停车功能。在小车的机械方
42、面,结合很多前辈们的经验对小车进行了机械调教,不断的降低了小车的中心,使得小车在过坡道和高速行驶时平稳。在硬件电路方面,进行了模块化的设计,这样大大降低了各个模块之间的相互影响。分别设计了主板模块、放大电路模块、电机驱动模块等,还根据系统在调试过程中遇到的问题,对电路板进行了多次的改进。为了节省成本,使用网孔板手工焊接了检测起跑线模块,对干簧管的位置以及高度对实际情况进行了多次的尝试。在电感使用方面,我们也尝试过不同的方案,包括三个四个电感甚至更多,最终我们使用的是两个电感方案,两个电感程序处理起来比较简单。但是也有缺陷,电感少就代表获取赛道的信息量小,可能无法应对比较复杂的赛道。在程序控制方
43、面,使用的是经典PID控制,我们还有很多控制方案没有尝试,比如模糊控制等方案,这些都是值得进一步探索的,所谓的没有最好,只有更好。在尝试不同的控制算法过程中,还发现了,控制算法不一定要很高级很高深。其实,即使简单的PID控制也可以取得很好的控制效果,但前提是控制方法一定要是正确的。在整个系统设计的过程中,遇到了很多的问题,通过请教老师和上网查询都一一解决了。之前一直都是学的理论知识,通过毕业设计终于可以将所学知识进行了一次比较彻底比较全面的实践。参考文献1王宜怀嵌入式系统原理与实践M电子工业出版社,201232卓晴,黄开胜,邵贝贝学做智能车:挑战“飞思卡尔杯”M北京航空航天大学出版社,2007
44、.33潘峰 全国大学生飞思卡尔智能车大赛应用技能详解M中国铁道出版社,2013.14胡寿松自动控制原理(第4版) M科学出版社 ,200125刘金琨智能控制M北京:电子工业出版社,2005:126 谭浩强.C程序设计M.北京:清华大学出版社,2001:173 电磁组竞赛车模路径检测设计参考方案M.全国大学生"飞思卡尔"杯智能汽车竞赛秘书处,2010:46 童诗白.模拟电子技术基础M.北京:高等教育出版社,2001:67 刘迎春. 传感器原理设计与应用M . 长沙:国防科技大学出版社,2009.5:771108 陈懂. 智能小车运动控制系统的研究与实现D.南京:东南大学仪器科
45、学与工程系,2005:3 致 谢历时三个月的毕业设计终于完成了,期间虽然遇到了很多的棘手问题,但是在指导老师潘老师的耐心指导下都一一自己解决了。在做毕业设计的过程中,我遇到了问题去问潘老师,但是潘老师不会直接说出答案,而是反问我觉得是哪里出了问题,引导我自己思考问题,从问题的表象到问题的本质一步一步分析,问题自然而然就得到了解决。潘老师在我做毕业设计的时候,还对我的毕业设计提出了他的看法,而不是直接否认我的思想,他常说每个人都有自己的想法,说不定你的想法就是正确的,想法好不好实践一下就知道了。潘老师不仅知识渊博,而且善于引导学生自己思考问题,养成独立思考的好习惯,潘老师还提倡“做中学”,让我们
46、从实践中获取知识,而不是从书本上间接获取知识。潘老师在我做毕业设计的过程中给了我很大的帮助,在这里我由衷的感谢潘老师,感谢他的敦敦教导。在做毕业设计的时候,北京联合大学的智能车团队也给了我很大的便利,感谢他们的无私奉献,使我比较顺利的完成了毕业设计。我也要感谢我的父母,是他们的无私奉献,我才完成了我的学业。他们在我的人生道路上给予了我莫大的帮助,他们的支持是我不断前进的动力。最后,感谢各位老师能在百忙之中抽出时间来评审我的毕业设计,给我的毕业设计提出意见。附 录A1.主板2.放大电路3.电机驱动附 录B/*头文件*/#include "includes.h"#include
47、 "LQ12864.h"#include "flexnvm.h"#include "uart.h"/*/方向定义: 右边为负,左边为正#define KEYCODE_MASK 0x0000000F#define KEYCODE_SHIFT 0#define ROADMODE_NUM 50/*宏定义 常量*/#define RIGHT 4505#define CENTER 5025#define LEFT 5540 #define Para_Num 4/设定参数个数#define LOSTFLAG 50/丢失值 电感在弯道上会丢失这时需
48、要做丢失处理/*DFlash*/#define READword(address) (unsigned int)(*(volatile unsigned int *)(address)#define dflash_add_mask 0x800000u;/Dflash地址unsigned int Dflash_Address=0;int dflashdata=0;unsigned int d_flash_F; /dflash参数保存标志,保存在dflash0x0000中,若不为0xffff,则读取后面的参数,否则使用数组默认参数char *disparaPara_Num= "WANp&
49、quot;,"Fd","MAXSPEED","MINSPEED"/参数默认名称,可自行修改uint32 parameterPara_Num=17, 70, 280, 160; /12 30 35 1111 2 0 /参数默认值,可自行修改/*/uint8 qiapao_flag=0;/起跑线标志位 uint8 stop_flag=0; /停车标志uint8 start_flag=0;uint8 enable_stop;/*road mode */ int16 SERVO;/舵机值 uint16 Sensor8;/存放电感值得数组 ui
50、nt16 last_Sensor8; /*速度控制变量*/ int16 speed; int16 speed_out; int16 speedP,speedI,speedD; /*按键处理变量*/uint8 keyscan_F=0;uint8 keyflag=0;uint8 keycode=0;uint8 keycode_last=0;uint8 set_F=0;uint8 keycount=0; uint8 star_F=0;/*时间变量&&标志位*/int32 TimeCnt=0;int32 TimeCnt1=0;int32 TimeCnt2=0;int32 time_ms
51、=0;int32 run_time=0;uint8 test_flag=0;int32 stop_time;int32 road_mode_zhidao_time;int road_count=0;unsigned char judge=0; /0左侧丢失 1右侧丢失 2全部丢失 3正常int max;int min;byte lostflag=0;int left;int right; int lastleft,lastright; int lastservo=CENTER;int WANp;int Fd;float pos;float forepos;int lastpos;float p
52、oserro=0,preposerro=0;int lastsensor0=250,lastsensor1=250;int Speed_Out;int jl;unsigned char route_F;/道路标志,0直道,1,直道入弯道,2弯道int SET_CARSPEED;int speed1,speed2;int SPEED_CONTROL_P;int SPEED_CONTROL_I;int REALSPEED;int CARSPEED;int ek1,ek2,ek3;int MAXSPEED,MINSPEED,AIMSPEED;int sum,abssum;int sum1,abssum1;int sum2,abssum2;int zongcha,qhc,hqc,jdc;int road50=0;uns
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年内蒙古科技职业学院单招职业技能测试题库带答案详解(研优卷)
- 2026年南通师范高等专科学校单招职业倾向性考试题库附答案详解
- 2026年内蒙古体育职业学院单招职业倾向性测试题库含答案详解(轻巧夺冠)
- 2026年兰州石化职业技术大学单招职业适应性测试题库附答案详解(研优卷)
- 2026年南京工业职业技术大学单招职业适应性考试题库带答案详解(典型题)
- 2026年AI编程基础与进阶测试题及答案
- 2026年网络安全技术职称考试题目集密码学原理及应用
- 2026年职业健康与安全知识及应急处理考试题库
- 2026年汽车维修技师专业试题含汽车构造与维护保养
- 2026年个人理财规划与资产管理测试题
- 云南省昆明市2026届高三三诊一模摸底诊断测试政治试卷(含答案)
- 九年级地理中考区域分析与模拟诊断教学方案
- 河南省郑州市外国语高中2026届高一上数学期末联考试题含解析
- 高电位子午流注课件
- 2025至2030中国白兰地行业项目调研及市场前景预测评估报告
- 奥拉丁项目讲解
- 15.《青春之光》课件
- 工贸企业安全标准化
- 制造企业员工岗位责任制细则
- 口腔科获奖品管圈案例-提高口腔医护人员消毒隔离措施执行依从率PDCA成果汇报课件
- 小学思想品德试题含答案
评论
0/150
提交评论