基于电磁传感器的智能车路径识别控制系统 哈尔滨工程大学技术报告文档格式.docx
《基于电磁传感器的智能车路径识别控制系统 哈尔滨工程大学技术报告文档格式.docx》由会员分享,可在线阅读,更多相关《基于电磁传感器的智能车路径识别控制系统 哈尔滨工程大学技术报告文档格式.docx(53页珍藏版)》请在冰点文库上搜索。
传感器原理、自动控制、汽车电子、机械设计等。
在对这些知识的综合运用过程中,我们对这些知识有了更深入的认识和理解,并能将所学的知识运用于实践中。
在设计的过程中,我们参考了很多文献资料。
在组装车模和电路设计等过程中,我们的实践动手能力得到了极大的培养和提高。
在设计智能车控制算法过程中,我们设计使用了多种控制算法,如舵机的PD算法和电机的PI算法。
期间进行了无数次的实践和尝试,形成了最后的比赛方案。
在思考控制算法的过程中,我们一直在追求稳、快的目标,在这个过程中我们的创造能力和实践能力得到了很大的提高。
1.2技术报告结构
本技术报告的正文分为四个部分。
第一部分是对整个系统实现方法的概要说明;
第二部分是对机械结构的说明和对硬件电路的说明;
第三部分是对系统软件设计部分的说明;
第四部分是对开发工具、制作、安装、调试过程等所做的一些说明,以及模型车一些主要技术参数的说明。
关键字:
路径识别,智能车,PID,电磁传感器
第二章设计方案概述说明
由于本电磁智能车模型采用A型车模,通过电磁传感器阵列来采集电流约为20KHz、100mA的导线的电磁场强度来检测和识别路径,通过MC9S12XS128的AD口进行采集、处理,进而控制电机和舵机,进行模型车的智能控制。
2.1设计思路及方案的总体说明
根据电磁车循迹的要求,电磁车设计包括赛车的设计和恒流源的设计。
根据电磁传感器方案设计,赛车共包括五大模块:
电磁传感器模块、速度传感器、MC9S12XS128模块,电机驱动模块、电源管管理模块。
光电编码器
MC9S12XS128
电磁传感器
直流电机
PWM驱动
可充放电源
电源管理模块
伺服舵机
图2.1系统结构框图
恒流源的设计应包括:
方波信号的产生,恒流电路的设计,功率放大的设计,系统框图如下:
100mA、20KHz电流
功率电路
方波电路
恒流控制
电源
2.2系统各模块实现简介
1.电磁传感器模块
检测导线电流约为100mA,频率20KHz的磁场的大小,进行路径识别,并输出电压给MC9S12XS128采集。
2.速度传感器
利用增量式光电编码器进行速度的测量,反馈给单片机,构成速度的闭环。
光电编码器线数越多,同等速度下单位时间内所能检测到脉冲数也越多,因而速度检测的分辨率也更高。
另一方面,线数增多后,相邻脉冲间的持续时间会变短,脉冲检测的可靠性会因相邻脉冲的干扰而受到影响。
3.MC9S12XS129模块
构成系统的控制器
4.电机驱动模块
通过MC9S12XS128单片机输出的PWM控制,功率放大用来驱动电机,要求驱动电流足够大,要考虑到大电流对整个系统的影响。
5.电源管理模块
制作相应的电源电路,针对个模块的输入信号要求。
利用稳压芯片将电源稳成5V,供单片机和速度传感器供电,舵机利用二极管降压供电,而电机则利用电源直接供电。
6.恒流源模块
由单片机产生频率20KHz的的方波信号,驱动三极管构成的电流源,然后经H桥进行功率放大,产生恒流功率信号。
第三章机械及硬件电路设计
3.1机械设计
电磁A型车模的机械设计部分包括电磁传感器电路的安装,PCB主板的固定和连接,测速电路模块的安装,差速的调节,舵机的安装等,在机械设计过程中遵循以下原则:
转向灵活,加速性能良好,车本身摩擦小,车与地面摩擦大。
3.1.1电磁传感器的安装
电磁传感器电路,设计成一块24cmX2.5cmd的长条行PCB板。
综合考虑电磁传感器的探测距离、为了使模型车的行驶速度能更好的配合软件的控制算法,电磁传感器安装在车的正前方,前11.5cm,高6.5cm,电磁传感器电路板平行于赛道,利用长条形铝板固定,保证传感器在运动中的稳定性。
3.1.2PCB主板的固定
考虑到模型车的重心的高度和位置,主板放在模型的的前半部分,主板重心
离车前11.5cm,距离赛道高3.5cm,PCB主板长13cm,宽5cm,这样讲重心固定在车的重心偏前,对于车的摩擦和加速性能有很好的效果。
如下图所示:
3.1.3测速电路模块的安装
测速模块才用增量式编码器,增量式编码器的安装于车的最后部分,考虑到齿轮的间隙,编码器的中心安装距赛道2.5cm,编码器的中心距后轮中心为2.4cm。
3.1.4差速的调节
差距决定了转弯时的性能,差速调节时应该不能太松和太紧,而且要避免和电机齿轮的间隙。
3.1.5舵机的安装
舵机可以对称安装和不对称安装,考虑到舵机的力矩大小和其响应时间的大小,我们采用对称安装的方法,并将其控制半径加大,这样在损失了部分力矩大小的情况下加快了响应时间。
3.2硬件电路设计
3.2.1电磁传感器的设计
考虑到电流的大小,方向和频率,依据经可靠、稳定、经济的要求,我们选择33mH的电感,然后进行滤波、放大、检波;
其电路图如下:
33mH
R1
1MΩ
在三极管交流放大之后加入倍压检波电路,可以得到与交流的峰峰值成正比的直流信号,调整R1的阻值,可使三极管集电极的电压约为2.5V,此时的三极管处于较好的放大状态,用示波器测量,可得到集电极和检波输出波形如下图所示:
集电极输出波形检波输出波形
根据电磁传感器中电感的方向与磁场的关系,采用垂直方向放置时,其测量的磁场大小为Bx,且根据比奥沙法尔定义可知:
其特性如下图所示:
图3.2.1垂直方向传感器测量理论图
垂直方向传感器测量出的电压大小为:
根据实验测定的数据,利用MATLAB可得下图:
可得出以下结论:
实验数据与理论基本相同。
采用水平方向放置时,其测量的磁场大小为By,且根据比奥沙法尔定义可知:
水平方向电磁传感器测出的电压大小为:
图3.2.2水平方向传感器测量理论图
根据车与导线的位置关系如图:
其中:
AE=lA;
h为传感器距赛道的高度;
根据实验测得的数据,我们采用了垂直位置的传感器,根据电磁传感器采集出的电压的大小,两相邻的传感器的距离去3~5cm左右,我们采用相邻的两传感器间距为4cm。
3.2.2PCB主板的设计
要求主板的面积小,质量轻,其PCB如图所示:
3.2.3电源管理模块
把电压为7.2V的电池经LM2940稳压后,其电路图如下:
稳压后可以完成如下功能:
经过稳压芯片LM2940稳压后,输出5V电压以驱动单片机工作;
经过稳压芯片LM2940稳压后,输出5V电压以对传感器供电;
经过稳压芯片LM2940稳压后,输出5V电压对光码盘供电;
3.2.4电机驱动
利用MOS管构成双极性H桥,使电流更大,驱动能力更强,再结合逻辑电路,使其使用更安全,更稳定,如下图所示:
操作时序如下:
输入A
输入B
电机转向
1
正转
反转
停车
3.2.5恒流源的设计
恒流源的大小为50—100mA,频率为18KHz—20KHz,导线直径为0.1—0.3mm,根据模拟电子知识,恒流源应该有以下部分组成:
震荡电路有STC89C51通过定时器来输出频率为20KHz的方波信号,通过7805把12V稳成5V给单片机供电,横流控制时通过控制三极管be之间的恒定电压来控制集电极的电流的,是集电极的电流恒定,功率输出由H桥电路L298及其外围电路构成。
第四章软件设计
为了体现程序的模块性和可移植性,我们把程序分成各个模块进行分别处理,而各模块也有相应的形参做为接口,可以做到可移植性,通用性。
下面就这些模块的设计与实现分别进行详细阐述。
程序中用到的硬件资源有PWM模块、AD模块、脉冲累加器、普通I/O口,主程序流程图如下:
4.1传感器的测量算法
采用了垂直放置的传感器,根据采集到的数据,用MATLAB绘制出图形,并用直线拟合,
采集到的电压如下、MATLAB代码如下:
A=[8610814118422926728326322718514410883]/283;
B=-6:
1:
6;
plot(B,A);
gridminor;
C=[108141184229267]/283;
D=-5:
-1;
y1=polyfit(D,C,1);
x=-6:
0.1:
0;
y=40.6/283*x+307.6/283;
holdon;
plot(x,y);
如图的直线与原曲线在2—5cm处拟合很好,故用此段的线性来计算偏移量,用来控制电机和舵机。
4.2舵机的PD控制
根据电磁传感器采集到的偏移量,利用前后几次偏移量之差进行PD控制。
舵机转角为:
其中Kp为比例系数;
b为相对于中心的偏移量;
Kd为积分系数;
Diff为位置微分量
4.3增量式编码器的控制
增量式编码器的输出经PAC采集,采集上升沿的个数,用来测定当前速度,其程序流程图如下:
4.4速度PID控制算法及其改进形式
PID控制是工业过程控制中历史最悠久,生命力最强的控制方式。
这主要是因为这种控制方式具有直观、实现简单和鲁棒性能好等一系列的优点。
位置式PID算式连续控制系统中的PID控制规律是
4.1
其中
是偏差信号为零时的控制作用,是控制量的基准;
利用外接矩形法进行数值积分,一阶后向差分进行数值微分,当选定采样周期为T时,式4.1可离散为下面的差分方程
4.2
增量式PID算式。
根据式4.2得出
4.3
于是
4.4
式4.3的计算结果,反映了第k和第k-1次输出之间的增量,所以称为增量算式。
这个算式的结果是可正可负的。
利用增量算式控制执行机构,执行机构每次只增加一个增量,因此执行机构起了一个累加的作用。
对于整个系统来说,位置和增量式两种算式并无本质区别,只是将原来全部由计算机完成的工作,分出一部分由其他元件去完成。
然而,虽然增量式算式只是算法上的一点改进,却带来了不少优点:
算式只与最近几次采样值有关,不需要进行累加,不易引起误差累积,因此容易获得较好的控制效果。
计算机只输出增量,误动作时影响小,必要时可加逻辑保护,限制或禁止故障时的输出。
手动于自动切换时,由于步进电机具有保持作用,所以容易实现无扰动切换,机器故障时,也可以把信号保持在原位。
由于增量算式有上述优点,在实际控制中,应用得比位置式更为广泛。
第五章开发调试过程及主要参数
经过我们组队员的共同开发,设计,验证,我们依据所学的知识从入门到提高,经历的了开发工具的应用、方案的设计、调试过程如下。
5.1开发工具
采用了USB接口的HCS12BDM下载工具,是支持FreescaleMC9S12系列16位单片机的BDM调试工具。
软件上采用的是CodeWarriorforHCS12,经过源程序的编写,连接,通过BDM下载至MC9S12XS128,完成单片机的开发过程。
CodeWarrior是Metrowerks公司专门面向Motorola(Freescale)设计的嵌入式应用开发的软件工具,包括集成开发环境IDE,处理器专家库,全芯片仿真,可视化参数显示工具,项目管理器,C交叉编译器,汇编器,链接器以及调试器,支持在线编程和调试,给我们的开发,设计工作带来了很大的方便。
5.2制作调试过程说明
本系统采用MC9S12XS128作为主控制器,结合20KHz,100mA的恒流源,构成了智能路径识别系统。
各硬件部分我们通过制作PCB电路板安装在智能车的相关部位。
在车头我们制作了寻迹用的电磁传感器电路板,只要输入激励电源后,即可获取磁场强度。
通过杜邦线,连接到安装在车身中央的MC9S12XS128上。
主控电路板包括了电源管理电路、单片机接口电路,终点识别部分,留有电磁传感器信号输入接口、速度传感器信号输入接口、电源输入接口、舵机控制接口、电机接口等输入输出端口。
开始时的电流源让我们很头疼,在参考了网上的很多方案和设计之后,最终形成了方案,按照频率和电流大小的要求,先产生频率,后放大成功率信号,在队员们的共同努力和指导老师的指导下,终于完成了恒流源的制作。
车的重心问题一直是困扰我们的地方,车的重心前后方向调整,对智能车行驶性能有很大影响。
按照车辆运动学理论,车身重心前移,会增加转向,但会降低转向的灵敏度,同时降低后轮的抓地力;
重心后移,会减少转向,但会增大转向灵敏度,后轮抓地力也会增加。
因而调整合适的车体重心,让智能车更加适应跑道是很关键的。
根据实际调试经验,鉴于当前舵机响应较迟缓,因此,需要将车的重心前移,增加转向性能。
电机驱动是最脆弱的地方,有时会出现短路或起火的现象,由于我们的驱动加入了逻辑控制单元,操作的失误不会引起这种想象,我们经过试验和判断分析,原因可能是由于先给了驱动PWM信号,这时如果给驱动加上电压,由于这时加上了一个阶跃信号,导致上下桥臂的MOS管导通了,由于MOS管的电阻很小,经过的电流很大而导致MOS管烧毁。
经过我们组成员的共同努力,我们达到了:
在直道上,模型车的行驶的速度可达3m/s,直道入弯道时,根据弯道曲率半径的不同,模型车会相应的减速,同时伺服舵机转过一低的角度,平均速度达到了2.2m/s,且稳定性和快速性良好。
基本实现了预期目标。
5.3智能车主要技术参数
模型车的外形如下图所示:
主要技术参数如下:
项目
参数
车模几何尺寸(长、宽、高)(毫米)
395×
241×
78
电路电容总量(微法)
约1100uF
传感器种类及个数
电磁传感器×
9;
光电码盘×
1,
干簧管×
3
主要芯片
LM2940×
2;
MC9S12XS128×
1
车模重量
1.3Kg
赛道检测精度
3mm
电机个数
舵机×
1;
电机×
赛道检测频率(AD检测频率)
160KHz
功率(各部件都工作时)
15W
5.4存在问题及改进方法
虽然经过这么长时间的调试,毕竟这是第一届电磁组的比赛,存在的问题还很多,下面我们想说说存在的问题及改进方向。
首先,电磁传感器的方案中,输出电压与输入的磁场强度不成正比,这导致了测量时存在误差,可以采用补偿的方法加以消除,可以进行硬件和软件的补偿,还有一点就是前瞻问题,由于是刚开始接触电磁,我们组根据测得的数据和推测,电磁的前瞻应该能有约10—15cm的前瞻,可从不同方向的放置电磁传感器,如水平方向、Y轴方向上的,亦可成45°
放置,这样可以大概检测出弯道的曲率半径,从而更好的控制转向和速度。
然后,由电磁传感器测得的电压来计算相对偏移量的算法中,可以大幅改进,根据理论推导和实验测得数据,开发更稳定、更精确地算法,如拟合直线,二次曲线等方法,更精确的得出相对位置的大小。
使控制更快、稳、准。
最后,电机驱动的改进很有发展,目前电机驱动由于电流的限制,使加减速不是很明显,严重影响了快速性和灵活性,可以采用电流更大的电力电子装置来加大电流,是加减速性能得到提高。
5.5未来寄语
由于电磁前瞻问题的难度很高,开发设计的困难和算法设计的复杂很大,不过前瞻的设计还是以后电磁发展的一个方向,但我们觉得记忆赛道的算法更有前途,但同时也存在很大的风险,面临的挑战如下:
A)记忆赛道是的数据量太大,单片机难以满足要求;
B)如何区别赛道,如大S、小S,知道,圆弧曲率半径的区分;
C)由于记忆赛道中第一圈和第二圈的赛道长度不同,如何根据第二圈赛道的形状来对记忆赛道的误差修正;
D)根据不同的赛道来采用不同的设计方案。
参考文献
[1]宋文绪,杨帆.传感器与检测技术[M].第1版,北京:
高等教育出版社,2004.1。
[2]贾伯年,俞朴.传感器技术[M].第2版,南京:
东南大学出版社,2000.8。
[3]卓晴.黄开胜.邵贝贝.学做智能车――挑战“飞思卡尔”杯.北京:
北京航空航天大学出版社,2007.3.
[4]邵贝贝.单片机嵌入式应用的在线开发方法.北京:
清华大学出版社,2004.
[5]李仕伯.马旭.卓晴.《基于磁场检测的寻线小车传感器布局研究》,清华大学,2009.12
[6]李发海,王岩智.电机与拖动基础[M].第1版,北京:
清华大学出版社,2005.8。
[7]竞赛组秘书处.《路径检测设计参考方案》.2010.1。
[8]竞赛组秘书处技术组.《20KHz电源参考设计方案》。
参考程序:
主程序参考:
#include"
includes.h"
#include<
stdlib.h>
#defineKp_p0.43
#defineKd_p0.9//1.2时无任何抖动,而此时在中间时有些许抖动,但跑得效果不错
#defineVmax32
#defineVmin15
#defineVmid310
#defineFVmid-310
voidVa1(byte);
voidVa2(byte);
voidVa3(int);
voidVd1(byte);
voidVd2(byte);
voidVd3(int);
voidVd4(byte);
voidsysInit(void);
voidSpeedSetting(ucharM);
voidfun1(void);
voidfun2(void);
voidfun3(void);
voidfun4(void);
voidfun5(void);
voidfun6(void);
voidfun7(void);
voidfun10(void);
voiddead_zone(void);
voidcounttime(int,uchar);
voidSpeed_init(uchar);
intabss(int);
intdeadzone=90;
//unsignedchartable[10]={};
//欲拟合二次曲线,使速度是位置微分量DIFF的二次函数
intspeed_high=80,speed_min=70,speed0=0;
//speed=a0*x^2+c;
105,9976
intDiff_c=90,Diff_edge=450;
intconstspeed=50;
intc;
floata0;
intspeed_min0=0;
intspeed_high0=0;
intconstspeed0=0;
//*************************
intie;
//距导线的距离乘以100
intDiff=0;
intPos=0;
intSpeed=0;
floatSpeed_down=0,Kd_p0=0;
floatExc1,Exc2;
ucharT;
floatV;
intinitialization_flag=0;
//初始化完成标志位
ucharselect_speedflag=1;
intset_time=0;
intdetect_num=0;
//起始线捕获中断计数用以判断停车
intlostroad=4;
intlostnum=0;
intdelaynum=0;
ucharMARK=0x00;
//bit0表示ATD0转换完成一次;
//bit1表示ATD1转换完成一次;
ucharSensornum[50];
intDis[100];
charDiff_v[50];
charSensorminnum,FSensorminnum1,FSensorminnum2,K;
intADval[16];
//AD采集的值
charKK[12];
intADvalmax[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
intADvalmin[16]={1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024};
intADvaldev[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
//uintPWMarray[6]={0,0,0,0,0,0};
intProption[16]={0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
charsum=0;
intflag1=0;
intj=0,i=0;
//intdistance;
//导线到中心距离的100倍
intPe,Pe1,Pe2;
//导线到中心距
//intEx[7]={-1150,-780,-430,0,430,780,1150};
//传感器与车中心的偏差
intEx[7]={-1124,-768,-412,0,412,768,1124};
//传感器与车中心的偏差
unsignedcharshuma[11]={0x02,0x9e,0x24,0x0c,0x9