电磁组中山大学电磁组2队技术报告 本文关键词:电磁,山大,组中,报告,技术
电磁组中山大学电磁组2队技术报告 本文简介:第七届“飞思卡尔”杯全国大学生智能汽车竞赛技术报告学校:中山大学队伍名称:电磁2队参赛队员:李小锟黄志杰誉洪生带队教师:成慧钱宁关于技术报告和研究论文使用授权的说明本人完全了解第七届“飞思卡尔”杯全国大学生智能汽车竞赛关保留、使用技术报告和研究论文的规定,即:参赛作品著作权归参赛者本人,比赛组委会和
电磁组中山大学电磁组2队技术报告 本文内容:
第七届“飞思卡尔”杯全国大学生
智能汽车竞赛
技
术
报
告
学
校:中山大学
队伍名称:电磁2队
参赛队员:
李小锟
黄志杰
誉洪生
带队教师:
成
慧
钱
宁
关于技术报告和研究论文使用授权的说明
本人完全了解第七届“飞思卡尔”杯全国大学生智能汽车竞赛关保留、使用技术报告和研究论文的规定,即:参赛作品著作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将相关内容编纂收录在组委会出版论文集中。
参赛队员签名:
带队教师签名:
日
期:
摘
要
本论文中设计的智能车系统采用飞思卡尔公司的kinetisK60作为控制核心,以IRF3205和IRF4905为电机驱动模块,通过编码器获得电机速度信息。使用由电感及放大电路组成的传感器获取赛道信息;在智能车控制方面,基于位置式及增量式的PID控制算法在高速行驶赛车的路径优化和速度控制上有着不错的效果。为了提高车的速度和稳定性,我们使用VC、无线通讯模块、等多种调试工具。结果表明,本系统可靠有效。
关键词:kinetisK60,IRT3205,IRF4905,PID
Abstract
We
design
the
smart
car
system
based
on
the
control
of
kinetisK60
in
this
paper.
We
choose
IRF3205
and
IRF4905
to
be
the
motor
drive,and
encoder
to
feedback
the
speed
of
the
motor.
We
use
electrical
inductance
to
get
the
information
of
the
track.
During
the
control
of
the
smart
car,the
positional
PID
and
Increasing
PID
perform
good
on
path
optimization
and
speed
control
in
high
speeding
pattern.
In
order
to
improve
the
speed
and
the
stability
of
the
smart
car,we
use
kinds
of
methods,such
as
VC,wireless
module
.
It
turned
out
that
the
system
is
reliable
and
effective.
Keyword:kinetisK60,IRT3205,IRF4905,PID
目录
摘要Ⅱ
AbstractⅢ
第一章
引言1
第二章
系统总体设计2
2.1
系统概述2
2.1.1
任务分解2
2.1.2
直立控制分析3
2.1.3
速度控制分析4
2.1.4
转弯控制分析4
2.2
车模倾角检测4
2.3
整车布局4
2.4
结构框图5
第三章
系统机械结构设计与实现7
3.1
车模7
3.2
车模车身简化及固定7
3.3
陀螺仪及加速度计固定结构设计8
3.4
路径传感器固定结构设计9
3.5
编码器的安装设计9
3.6主动轮松紧程度的调整10
第四章
硬件系统的设计与实现11
4.1
硬件设计总体方案11
4.2
系统电路的设计与实现11
4.2.1
电源管理电路11
4.2.2
电机驱动电路12
4.2.3
计数器电路13
4.2.4平衡传感器电路13
4.2.5
路径检测电路14
4.3
静电处理14
第五章
软件系统的设计与实现16
5.1
主程序16
5.1.1程序运行流程16
5.1.2
PWM输出16
5.1.3
直立控制19
5.1.4
速度控制19
5.1.5
转弯控制19
5.2
卡尔曼滤波19
5.3
启动方式20
第六章
开放工具与系统调试22
6.1
开发工具22
6.2
无线通信模块23
第七章
车辆参数24
第八章
总结24
致谢I
参考文献II
附录AⅢ
附录BⅢ
V
第一章
引言
全国大学生智能汽车比赛是经全国高等教育司研究,委托高等学校自动化专业教学指导分委会主办的,旨在培养创新精神、协作精神,提高工程实践能力的大学生科技创新活动。
本次大赛中,使用竞赛秘书处统一指定的C车竞赛车模套件,采用飞思卡尔半导体公司的32位微控制器kinetisK60作为核心控制单元,自主构思控制方案进行系统设计,包括传感器信号采集处理、电机驱动以及控制算法软件开发等。制作一个能够自主识别路线的两轮自平衡智能车,让车模以两个后轮驱动在专门设计的跑道上自动识别道路行驶。本技术报告主要对小车的整体设计思路,硬件与软件的设计及实现,机械结构的安装及优化以及赛车的调试的过程作简要的说明。
5
第二章
系统总体设计
第二章
系统总体设计
2.1系统概述
系统概述图如图2.1所示
图2.1系统概述
2.1.1任务分解
两轮赛车通过检测自身倾斜角度以及倾斜角速度的大小,通过单片机处理采集得到的角度、角速度信号,实现对赛车自身平衡以及前进的控制,再以检测通过以20KHZ、100mA的导线的电磁场为基础,通过单片机处理采集到得磁感应电压信号,实现对赛车的转向控制,进而识别赛道达到路径讯迹的目的。
车模的运行可以分为三个过程:直立、前进、转弯。但是暂时找不到其他方法可以不依赖电机而可以控制任意一个过程,所以只能由控制车模两个电机旋转方向及速度实现对车模的控制,因此将车模运动控制任务分解成以下三个基本任务:
(1)
控制车模直立:通过控制两个电机正反向运动保持车模直立状态;
(2)
控制车模速度:通过控制两个电机转速速度实现车模行进控制;
(3)
控制车模转向:通过控制两个电机之间的转动差速实现车模转向控制。
2.1.2直立控制分析
如图2.1.2所示,车身可看作是一个倒立摆,要想通过控制使得倒立摆能够像单摆一样,稳定在垂直位置,只有两个办法:一个是改变重力的方向;另一个是增加额外的受力,使得恢复力与位移
方向相反才行。但显然能够做的只有第二种方式。
控制倒立摆底部车轮,使得它作加速运动。这样站在小车上(非惯性系)看倒立摆,它就会受到额外的力(惯性力)
,该力与车轮的加速度方向相反,大小成正比。这样倒立摆所受到的回复力为
(2-1)
式中,假设控制车轮加速度与偏角成正比,比例为k1。显然,如果k1>g
,(是重力加速度)那么回复
图2.1.2
力的方向便于位移方向相反了。此外,为了使得倒
立摆能够尽快地在垂直位置稳定下来,还需要增加阻尼力,与偏角的速度成正比,方向相反。因此式(2-1)可变为
(2-2)
所以车模车轮加速度的控制算法为
所以我们需要测量小车的角度θ和角速度θ’即可控制直立。
2.1.3速度控制分析
车模电机的转速与施加在其上的电压成正比。通过传统的
PID
反馈控制,便可以精确控制电机的运行速度,从而控制车模的运行速度。不过前提是保持车身平衡。
2.1.4转弯控制分析
利用电磁线偏差检测信号分别与车模速度控制信号进行加和减,左右轮差动控制电压,使得车模左右轮运行角速度不一致进而控制车模方向。
2.2
车模倾角检测
通过加速度计检测回来的数据与重力加速度比较,可以得到车身倾角,再对此信号进行微分便可以获得倾角加速度。但在实际车模运行过程中,由于车模本身的运动所产生的加速度会产生很大的干扰信号叠加在上述测量信号上,使得输出信号无法准确反映车模的倾角,尽管平滑滤波可以把波动滤掉,但是也会无法准确反映车模倾角变化,所以需要在加上一个陀螺仪检测角速度。
2.3整车布局
小车整体布局如图2.3所示
1)
机械结构方面:
①
电路板紧贴车身,电池放在车身后轮子稍上,降低重心;
②
采用高强度、低质量的碳素杆作为电磁传感器支架;
③
简化支架,单杆伸出,粘上一个横放的轻杆作为电感的支撑;
④
电磁传感器引出电感,装在支架上,其他部分装在车身后面,可以尽量减轻支架的质量,使得重心尽量靠近车轮;
⑤
陀螺仪和加速度计模块装在车身中间,保持水平,使得检测回来的数据
更加精确,并且使得左右转弯差异变小;
⑥
剪短不必要的连线,减轻车重。
2)在硬件方面:
力求电路构成简单,稳定性高;传感器的安装可靠,外界对系统电路的干扰小。硬件主要设计思路如下:主电路板外形贴合车身的边沿,安装时尽量贴近车底盘,降低重心;电路板布线尽量采用单回路布线,并且将数字地与模拟地分离,并且在容易引入干扰的器件旁加入旁路电容;将容易产生静电干扰的部分,接入电路板的模拟地中。
3)在软件方面:力求控制算法适合C车的特性,精确完成转向控制和速度,并具有较高的稳定性。采用K60作为控制核心,通过电感采集赛道信息,从而对电机进行控制;通过编码器反馈速度信息,实现对速度的控制。
图2.3
整车布局
2.4结构框图
根据两轮平衡小车设计方案,小车系统包括
1)
角速度检测;
2)
角加速度检测;
3)
路径检测;
4)
串口通信;
5)
速度检测;
6)
电机驱动。
这几大模块按照设计组合在一起构成了一个完整的平衡小车控制系统具体系统的框架如图1.3所示。
图2.4整体框架
5
第三章
系统机械结构设计与实现
第三章
系统机械结构设计与实现
3.1车模
图3.1
c车车模结构
车模型号:N286
电机:RN260-CN
38-18130
3.2
车模车身简化及固定
我们采用赛制规定的C车车模进行改装,将没有用的前轮及其支撑部件去掉,又将后轮悬挂缓冲支架去掉,从而简化车模,可以有更多空位安装需要的东西以及减轻车重。原来的车模后轮支架与底盘之间采用了活动连接方式,但为了保证车模直立的稳定性,需要这个车身变成刚体结构。所以我们用热熔胶在后轮支架与底盘之间的缝隙处进行粘接。但在跑的时候车身不稳,故改用废电路板将其固死,为防螺丝松掉,又用AB胶将缝隙粘死。整车如图3.2所示。
图3.2简化加固后的车模
3.3
陀螺仪及加速度计固定结构设计
陀螺仪安装主要分为直立陀螺仪的安装及转向陀螺仪的安装。直立陀螺仪的安装共有三种选择:安装在顶部,正中和底部。经实际测试,陀螺仪安装在高处,容易受到微小抖动的干扰,影响到车身倾角的检测,而底部需要放电池及电路板等重物,因此我们选择了一个比较正中的位置进行安装。如图3.3.1所示。
而转向陀螺仪对高度并不是很敏感,因此取一个左右适中的位置即可。如图3.3.2所示。
图3.3.1
直立陀螺仪安装
图3.3.2转向陀螺仪安装
3.4
路径传感器固定结构设计
为了车身的稳定,车的重心越靠近车轮越好,所以我们采用了轻质量但高强度的碳素杆做成支架,并且只把电感引出去水平的套在支架前段,作为探路所用。如图3.4所示。
图3.4电磁传感器支架
3.5
编码器的安装设计
飞思卡尔c车车模具有双电机,为了达到更精准的控速,我们选择在两个电机分别安装编码器用来测速。在尽量保持车身重量较轻的前提下,我们应选用安装方便,较为轻便的编码器。由于光电码盘的精度不高,并且体积较大,不适用于c车的使用。我们使用了制作轻巧的300线的编码器,编码器可方便的安装在车轮上部,与马达齿轮相互咬合,来达到精确的测速。编码器的安装如图3.5所示。
图3.5
编码器安装
3.6
主动轮松紧程度的调整
在实际调试过程中,我们发现主动轮的松紧程度影响比较大,并且轮轴的有无影响也比较大。主动轮过松,会造成轮子与地盘支架之间有间隙,轮子会左右移动,对转弯性能影响较大,而轮子过紧则会造成轮子转动受阻,增加电机的负荷,不利于小车的速度及转弯控制。而去掉轮轴,则会造成轮子晃动,两个轮子不在同一直线,转弯不稳定。最终我们保持轮轴,并调整轮子的松紧度至轮子可自由转动且不会左右松动。
11
第四章
硬件系统的设计与实现
第四章
硬件系统的设计与实现
4.1
硬件设计总体方案
智能车的硬件系统,主要包括控制电路,电源管理电路,电机驱动电路以及外围传感器构成,实现了信息采集与控制实现等功能。系统采用的主芯片是龙丘公司制作的MK60DN512VLL10P100管脚的核心板KinetisK60芯片,内已封装了包括看门狗等一系列外围电路。
4.2
系统电路的设计与实现
4.2.1
电源管理电路
小车系统中有多个检测模块和驱动模块,需要不同的电源电压,所以电源管理部分要分部完成对各个模块的供电。系统存在着功率电路与数字电路,为了更好的隔离干扰,使系统的稳定性更高,所以在电源设计方面要考虑分隔开数字地与模拟地。
当小车驱动电机在运动过程中,会在一定程度上拉低电池的电压。为了提高系统的性能,我们采用低压降的稳压芯片LM2940
LM2940具有高转换效率,低静态电流等优点,适合本系统工作特点。因为K60需要3.3V供电,因此用LM1117-3.3搭了3.3V稳压电路。另外,电磁检测电路我们采用了稳压芯片7806,产生6V供电。
本系统中,采用一路LM2940为无线模块等供电,一路7806为电磁检测模块供电,一路LM1117进行供电为单片机供电。6V供电如图4.2.2.1所示,5V供电如图4.2.2.2所示,3.3V供电如图4.2.2.3所示。
图4.2.2.1
6V供电
图4.2.2.2
5V供电
图4.2.2.3
3.3V供电
4.2.2
电机驱动电路
今年C车车模我们采用了传统的用Mos管搭成的H桥全桥驱动,全桥驱动可以输出两路PWM,并且允许通过较大电流,驱动能力强,稳定性好,如图4.2.3.1所示。
图4.2.3.1
电机驱动
由于Mos管比较多,因此在电路板上排布比较密集,如图4.2.3.2所示。
图4.2.3.2电路板上电机驱动排布
4.2.3
计数器电路
K60芯片只有一路低功耗脉冲累加通道,不能满足C车电路两路测速需求.如果不想占用资源而实现硬件计数,则需要用到DMA功能,通过读取DMA的循环计数器即可获得编码器脉冲值,从而用作速度计算,所以不需要特别的计数器,只需接个上拉电阻即可,如图4.2.4所示。
图4.2.4
计数器电路
4.2.4平衡传感器电路
我们采用的陀螺仪跟加速度计是集成模块,陀螺仪电路分别如图4.2.5.1所示,加速度计电路如图4.2.5.2所示。
图4.2.5.1
陀螺仪电路
图4.2.5.2加速度计电路
4.2.5
路径检测电路
路径检测分三个部分,谐振、放大、整流三个部分结合成一个电磁检测电路。具体电路如图4.2.6所示。
图3.2.6路径检测电路
4.3
防静电处理
由于KT板的特性,当智能小车在上面摩擦过后,会在赛道表面累积大量的静电。当小车在赛道上行驶的过程中,静电放电会对电路板的稳定性产生一定的干扰,严重时,引起单片机的复位和死机等问题。在空调室内的赛道,空气更加干燥,静电现象尤为严重。
为了更好地排除外界静电对智能车系统的干扰,我们采取了以下措施:
1)
因为小车底盘较低,底盘部分裸露的螺母会成为静电的释放源。我们采用绝缘胶布粘贴小车底盘,初步隔离静电
2)
在电路设计上,通过使布线更加讲究合理,并且在电源和易受干扰的地方加入旁路电容,进一步减少静电的干扰。对地覆铜,对引入的干扰能更好的吸收。
3)此时若依旧存在较大的静电干扰,那就要将小车上静电最强烈的地方接入电路板的地中,更好的吸收引入的干扰。在实际测试中,我们检测到编码器的支架和外壳部分产生的静电干扰最为严重,我们将其与电路板的模拟地线相连,有显著的改善
15
第五章
软件系统的设计与实现
第五章
软件系统的设计与实现
5.1主程序
5.1.1程序流程
5.1.2
PWM输出
包括两个子程序:
第一个程序:vcon
void
vcon(double
pwm)
{
uint32
dPWM;
dPWM=(uint32)pwm;
if(dPWM9999)
{
dPWM=9999;
}
if(dPWM9999)
{
RdPWM=9999;
}
//左边电机PWM限制
if(LdPWM9999)
{
LdPWM=9999;
}
//右边电机PWM输出
if(RdPWM
#include
“derivative.h“/*
include
peripheral
declarations/
#include
“includes.h“#include
“math.h“#include
#define
PIT0
0
#define
PIT1
1
#define
PIT2
2
#define
PIT3
3e
uint8
data1;
uint8
data2;
uint8
data3;
uint8
data4;
uint8
data_rec;
uint8
data_rec1;
uint8
data_rec2;
uint8
data_rec3;
/**************************/
//全局变量声明
extern
int
periph_clk_khz;
#define
ADchannel
16
uint8
cycle_flags
=
0;
uint16
result0A,result0B,result1A,result1B;
uint8
isr_flag=0;//PIT中断标志,为1时发生中段
uint32
run_counter;
#define
OS_SCI1_RATE
57600
//数据发送的波特率为57600
#define
OS_BUS_CLK80//总线频率为80MHz
int
car_motion_period=20;//车调速的周期
int
dead_value=0;//死区电压
double
angle[10],angle_dot[10];//外部需要引用的变量
//******************全局变量声明********************************
int
top_key_num=0,j;
int
key_start_flag=0;
unsigned
char
sendjiaodu;
int
send_angle;
int
send_jishu=0;
int
beepflag=0;
int
sudu[20];//
记录车的速度(路程)
int
sudu_L[20];
unsigned
char
data_rec,data_rec1,data_rec2,data_rec3;//接收数据
int
vol[15][10];//
八个传感器,记录10次历史值
float
pian,pian2,pian3;
short
delv1,delv2,delv3;
long
suibianjishu=0;//suibianjishu,随便计数,检测时间.
short
d_pwm[2]
=
{0,0};
float
a,he,cha;
float
y;
float
y_value;
float
d_y[4];
float
t;
float
value1,value2;
int
PWMstart=0;
int
set_v
=
0;
double
e1,e2;
char
isStart
=
0;
int
xianzhi;
int
jiaodu=0;
double
acc[10];
double
w[10];
double
utpwm;
int
Speed_period;
float
Lcountspeed=0;
float
Rcountspeed=0;
float
zonglucheng;
int
PWM_total;
int
display_Vcon_pwm;
int
delv1_R,delv2_R,delv3_R;
short
delv1_L,delv2_L,delv3_L;
int
speed_period;
float
R_PWM=0;
int
L_PWM=0;
unsigned
char
SCI1_flag;
//接收函数的标志位
unsigned
char
reveive_data;//接收到的数据
int
RValue,LValue;
int
send_send_period;
int
turn_pwm;
int
stop_flag,forward_flag,turn_flag,send_flag;
int
sudu_rec=860;//控速相关
float
R_PPWM,newpwm,oldpwm,deltapwm;
float
vset,vstart;
int
start_count=0;
int
endl=0;
int
dazhao;
int
swit[20];//拨码开关
int
a_switch[34];
int
sudu_receive=0;
int
stand_key_count=0;//静止开关检测延时
int
i=0;
uint16
ADValue,ADValue1,ADValue2,ADValue3;
int
speed_R;
int
speed_L;
int
beepfirst_flag=0;
float
piancha_zhongzhi=0;
int
startbeepflag=0;
int
goout=0;
char
turn_beep=0;
float
lingdian=0;
int
last_beep=0;
int
boma_flag=0;
unsigned
long
L=0;
unsigned
long
R=0;
float
er=0;//E为历史平均值
char
bflag=0;
double
lingdian_jiaozheng=0;
double
lingdian_sum=0;
int
lingdian_count=700;
int
testzhouqi=0;
float
max;
float
min;
//float
lishi[2]={0};
float
guaidian[81];
char
tubian=0;
int
q_zheng=0;
int
q_fu=0;
int
h_zheng=0;
int
h_fu=0;
unsigned
long
pre=0;
unsigned
long
now=0;
//方差检测
double
dy_test[400]={
0};
double
dy_sum=0;
double
dy_ave=0;
double
dy_fangcha;
double
dy_ans;
int
gengxin=0;
int
dy_zhouqi=30;
int
dy_jiange=1;
int
wan_cd_time=0;
int
wan=0;
int
sudu_overbeep=0;
//*******
/********************关于利用增量式计算左右电机的PWM以及PWM输出的程序********************/
void
vcon_R(int
vset)
{
float
dPWM,PPWM;//PPWM是为了可以与静止的utpwm相互结合而成的一个中间变量
delv3_R=delv2_R;
delv2_R=delv1_R;
delv1_R=vset-(Rcountspeed+Lcountspeed)/2;
dPWM=3*(delv1_R-delv2_R)+0*delv1_R+1.2*(delv1_R+delv3_R-2*delv2_R);//增量式PID控速
R_PWM+=dPWM;
//
if(R_PWM>0)
//R_PWM=0;
PPWM=R_PWM;
R_PPWM=-PPWM;
oldpwm=newpwm;
newpwm=R_PPWM;
}
void
switches()
{
char
switchcount;
char
luchengcount;
char
houchengsuducount;
//char
lingdiancount;
switchcount=15-(8*swit[3]+4*swit[2]+2*swit[1]+swit[0]);//开始设定速度
luchengcount=15-(8*swit[7]+4*swit[6]+2*swit[5]+swit[4]);//路程
houchengsuducount=15-(8*swit[11]+4*swit[10]+2*swit[9]+swit[8]);//后面速度
//lingdiancount=7-(4*swit[15]+2*swit[14]+1*swit[13]);//零点
if(boma_flag==0){
if(switchcount==0)//1111
15
sudu_rec=860;
else
if(switchcount==1)//1110
14
sudu_rec=920;
else
if(switchcount==2)//1101
13
sudu_rec=980;
else
if(switchcount==3)//1100
12
sudu_rec=1000;
else
if(switchcount==4)//1011
11
sudu_rec=1040;
else
if(switchcount==5)//1010
10
sudu_rec=1080;
else
if(switchcount==6)//1001
9
sudu_rec=1120;
else
if(switchcount==7)//1000
8
sudu_rec=1160;
else
if(switchcount==8)//0111
7
sudu_rec=1200;
else
if(switchcount==9)//0110
6
sudu_rec=1240;
else
if(switchcount==10)//0101
5
sudu_rec=1260;
else
if(switchcount==11)//0100
4
sudu_rec=1280;
else
if(switchcount==12)//0011
3
sudu_rec=1300;
else
if(switchcount==13)//0010
2
sudu_rec=1320;
else
if(switchcount==14)//0001
1
sudu_rec=1380;
else
if(switchcount==15)//0000
0
鏈
篇2:材料电磁光性质计算模拟实验报告
材料电磁光性质计算模拟实验报告 本文关键词:电磁,性质,模拟,实验,材料
材料电磁光性质计算模拟实验报告 本文简介:材料电子结构性质的计算模拟实验报告一、实验目的:1.了解不同层次计算模拟方法和适用对象,理解第一性原理计算模拟研究材料电子结构性质的方法。2.利用DFT程序对一些量子点等低维体系的几何和电子结构性质以及相关物理化学特性初步分析研究。了解宏观电、磁、光性质与微观的组分、维度、尺寸和电子组态之间的关联,
材料电磁光性质计算模拟实验报告 本文内容:
材料电子结构性质的计算模拟实验报告
一、实验目的:
1.
了解不同层次计算模拟方法和适用对象,理解第一性原理计算模拟研究材料电子结构性质的方法。
2.
利用DFT程序对一些量子点等低维体系的几何和电子结构性质以及相关物理化学特性初步分析研究。了解宏观电、磁、光性质与微观的组分、维度、尺寸和电子组态之间的关联,并对以往所学基础课知识加以巩固提高。
3.
初步学会利用计算模拟方法有目的地去设计、构建、开发一些功能材料。
二、实验原理及仪器和软件:
实验原理:第一性原理计算模拟研究材料电子结构性质的方法实际上是通过求解体系的“HF方程”或者“Kohn-Sham方程”从而得到体系电子能级结构、并进一步研究其相关物理、化学性质的方法。材料覆盖一个从微观到宏观的尺寸范围,由于人们对它的关注角度以及研究精度不同,从而形成了各种不同层次的研究方法。目前计算机模拟研究方法主要有两类:基于经验势的分子模拟方法和基于第一性原理的量子化学方法。材料的许多基本物理性质是由其电子结构决定的,要确定它们的电子结构,必须采用精确的量子化学方法。但随着研究体系的复杂化,精确求解体系的自洽场方程显得很困难,需引入各种假定和采用适当的模型使问题简化。
仪器和软件:高性能计算机一台,
ADF2008计算软件等
三、实验内容:
(1)
通过几何优化,寻找量子点的最低能量状态。
(2)
通过计算其振动频率,判断其是否处于势能面上的一个局域最小点,并得到其红外、拉曼光谱。
(3)
通过计算其组分和整体的能量差得到其结合能和分裂能,分析体系的热稳定性。
(4)
通过计算体系得(失)一个电子前后的能量差,得到亲和(电离)能。
(5)
通过电离能,亲和能、前线轨道能级及HOMO-LUMO能隙的分析,得知其电子的能级结构特点。
(6)
通过电子布居或电子密度分析,研究体系的成键性质。
(7)
通过电子自旋布局或电子自旋密度分析,研究体系的磁性质。
(8)
通过计算其激发态电子结构,可得到体系的电子跃迁性质,分析其电子光谱。
四、实验结果
一个苯环(苯环结构,苯环的能级结构图,苯环的态密度图,
俩个苯环
三个苯环
计算实例:
石墨烯量子点(具体计算对象)的稳定性、电子结构和光谱性质研究
计算细节:
方法:DFT
;关联函数:PW91;基组:TZP
数据整理:
1、
几何优化
(geometry
optimization)计算整理数据如下:
(1)苯环的能量、磁矩、能隙
system
Spin
Magnetic
moment
Total
Bond
energy
HOMO
LUMO
HOMO-LUMO
Gap
一个苯环
12.4ev
-1.644165
1.58781
2.43210
俩个苯环
15.8ev
-2.43512
2.67542
4.54891
三个苯环
17.6ev
-3.98561
3.90121
6.82549
注:所有能量单位都取电子伏特:eV
(2)苯环的能级结构图:
(3)苯环的态密度(DOS)图:
2、振动频率(frequencies)计算整理数据如下:
(1)红外谱(IR
spectum)——可与实验中的红外吸收光谱对照
振动光谱指认分析:
苯主要有_______2___
个振动峰:
第一个在
3800
波数位置处,主要源于
分子
的振动模式所激发。
第二个在
500
波数位置处,主要源于
原子
的振动模式所激发。
3、激发态(excited
states)计算整理数据如下:
(1)电子光谱——可与实验中的紫外-可见吸收光谱对照
电子光谱指认分析:
苯主要有_____2_____
个电子跃迁峰:
第一个约在波长176nm/跃迁能为6.95eV
位置处,主要源于
电子
的电子跃迁所产生。
第二个约在波长
278nm
位置处,主要源于
原子
的电子跃迁所产生。
(2)苯环的电子跃迁类型分析及前线轨道图
HOMO轨道图、
LUMO轨道图
8
篇3:电磁组厦门大学嘉庚学院电磁组自强队技术报告
电磁组厦门大学嘉庚学院电磁组自强队技术报告 本文关键词:电磁,强队,厦门大学,报告,学院
电磁组厦门大学嘉庚学院电磁组自强队技术报告 本文简介:第七届“飞思卡尔”杯全国大学生智能汽车竞赛技术报告学校:厦门大学嘉庚学院队伍名称:自强队参赛队员:徐杰生曾海涵王明南带队老师:康恺吴天宝关于技术报告和研究论文使用授权的说明本人完全了解第七届“飞思卡尔”杯全国大学生智能汽车邀请赛关保留、使用技术报告和研究论文的规定,即:参赛作品著作权归参赛者本人,比
电磁组厦门大学嘉庚学院电磁组自强队技术报告 本文内容:
第七届“飞思卡尔”杯全国大学生
智能汽车竞赛
技术报告
学校:厦门大学嘉庚学院
队伍名称:自强队
参赛队员:徐杰生
曾海涵
王明南
带队老师:康恺
吴天宝
关于技术报告和研究论文使用授权的说明
本人完全了解第七届“飞思卡尔”杯全国大学生智能汽车邀请赛关保留、使用技术报告和研究论文的规定,即:参赛作品著作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将相关内容编纂收录在组委会出版论文集中。
参赛队员签名:徐杰生
曾海涵
王明南
带队教师签名:康恺
吴天宝
日
期:2012-8-14
26
摘要
本文介绍一套直立智能车速度磁导航的设计,该智能车以COLDFIRE
MCF52259作为整个系统信息处理和控制的核心。该系统通过3个方面进行控制。由陀螺仪ENC-03MB和加速度计MMA7361车体在直立过程中的信息,通过PID控制对智能小车直立进行控制;速度控制是由2个编码器对电机两端进行测速,将测得的速度与给定的速度进行PID速度闭环控制;由互感线圈采集赛道信息,得到多个互感线圈的信息值,通过PID的控制起到寻线方向控制。
关键词:COLDFIREMCF52259
PID
直立
速度
寻线方向
目录
第一章、引言.
1
1.1概述.
1
1.2整车设计思路.
1
第二章、直立寻线小车的原理2
2.1直立寻线小车的原理.
2
2.2速度控制原理.
6
2.3车模方向控制原理.
7
第三章、电路设计.
7
3.1传感器的电路设计.
7
3.1.1寻线互感运放电路.
8
3.1.2陀螺仪和加速度传感器电路
.8
3.2电源电路模块.
.
8
第四章、传感器安装及机械设计
9
4.1电杆的固定.
.
9
4.2电路板的固定.
10
4.3轮胎的改进.
10
4.4底盘的加固.
.10
4.5车子布局.
.
.11
4.6电机保护.
.
.
11
第五章、软件处理及控制算法.
11
参考文献.
.11
附录.
第一章、引言
1.1概述
“飞思卡尔”杯全国大学生智能汽车竞赛是由教育部高等自动化专业教学指导分委员会主办的一项以智能汽车为研究对象的创意性科技竞赛,是面向全国大学生的一种具有探索性工程实践活动,是教育部倡导的大学生科技竞赛之一。该竞赛以“立足培养,重在参与,鼓励探索,追求卓越”为指导思想,旨在促进高等学校素质教育,培养大学生的综合知识运用能力、基本工程实践能力和创新意识,激发大学生从事科学研究与探索的兴趣和潜能,倡导理论联系实际、求真务实的学风和团队协作的人文精神,为优秀人才的脱颖而出创造条件。该竞赛以汽车电子为背景,涵盖自动控制、模式识别、传感技术、电子、电气、计算机、机械等多个学科的科技创意性比赛。
比赛要求在大赛组委会统一提供的竞赛车模,我们选择了飞思卡尔32位微控制器COLDFIREMCF52259作为核心控制单元的基础上,自主构思控制方案及系统设计,包括传感器信号采集处理、控制算法及执行、动力电机驱动等,最终实现能够自主识别路线,并且可以实时输出车体状态的智能车控制硬件系统。
我们从一月份开始经过接近7个月的制作与调试,终于完成了目前的直立智能小车的制作。期间我们合作共勉,学习开发调试软件的使用、主控芯片控制、控制原理、编程语言等方面的知识,在对机械进行了调整的基础上,对小车软件进行调试,在发现问题后努力解决问题,进一步优化智能小车的机械、软件、和传感器的方案。
1.2整车设计思路
本车是主要运用COLDFIRE
MUF52259为处理核心,本次竞赛中要求小车直立寻线走,直立、速度、方向控制对应同一个执行器(电机),要进行不同的控制,达到尽量解耦控制的效果。首先通过陀螺仪、加速度计传感器的信息处理输出相应的PWM波驱动电机,起到直立的效果。本次竞赛对速度和方向的要求非常高,所以我们用了左右两个编码器对左右轮进行测速,将得到的值与我们给定的速度进行比较,用过PID的简单闭环控制达到近似匀速的效果,在方向方面我们通过两个电感进行一字型摆放,通过兩电感的值通过简单的模糊控制,实现寻线的效果。具体的设计思路如下图1.1。
ENC-03MB
陀螺仪
电磁线检测
AD*2
电源3.3V供电
速度检测
编码器*2
MMA7361加速度计
驱动电路BTS7960
COLD
FIRE
图1.1设计思路框图
第二章、直立寻线小车的原理
2.1直立原理
车模直立是通过负反馈实现的。因为车模有两个轮子着地,因此车体只会在轮子滚动的方向上发生倾斜。控制轮子转动,抵消倾斜的趋势便可以保持车体直立了。如图下2.1所示。
图2.1通过车轮运动控制保持车体直立
要将车子最后保持平稳,一般都是建立车模的运动学和动力学数学模型,通过设计最优控制来保证车模的稳定。为了使得同学们能够比较清楚理解其中的物理过程。我们通过对比单摆模型来说明保持车模稳定的控制规律。
重力场中使用细线悬挂着重物经过简化便形成理想化的单摆模型。直立着的车模可以看成放置在可以左右移动平台上的倒立着的单摆。如图2.2所示。
图2.2车模简化的倒立摆模型
普通的单摆受力分析如图2.3所示。
图2.3普通的单摆受力分析
倒立摆之所以不能象单摆一样可以稳定在垂直位置,就是因为在它偏离平衡位置的时候,所受到的回复力与位移方向相同,而不是相反!因此,倒立摆便会加速偏离垂直位置,直到倒下。
在控制车模的直立的过程中,控制倒立摆底部车轮,使得它作加速运动。这样站在小车上(非惯性系)看倒立摆,它就会受到额外的力(惯性力),该力与车轮的加速度方向相反,大小成正比。这样倒立摆所受到的回复力为
2-1式
式中,由于θ很小,所以进行了线性化。假设负反馈控制是车轮加速度与偏角aθ成正比,比例为。如果比例,(是重力加速度)那么回复力的方向便于位移方向相反了。
按照上面的控制方法,可把倒立摆模型变为单摆模型,能够稳定在垂直位置。因此,可得控制车轮加速度的控制算法
(2-3)
式中,θ为车模倾角;θ
为角速度;k1、k2均为比例系数;两项相加后作为车轮加速度的控制量。只要保证在k1>g,
k2>0条件下,可以使得车模像单摆一样维持在直立状态。其中有两个控制参数k1,k2,k1决定了车模是否能够稳定到垂直平衡位置,它必须大于重力加速度;k2决定了车模回到垂直位置的阻尼系数,选取合适的阻尼系数可以保证车模尽快稳定在垂直位置
假设倒立车模简化成高度为L,质量为m的简单倒立摆,它放置在可以左右移动的车轮上。假设外力干扰引起车模产生角加速度x(t)。沿着垂直于车模地盘方向进行受力分析,可以得到车模倾角与车轮运动加速度a(t)以及外力干扰加速度x(t)之间的运动方程。运动方程图如下2.3所示。
图2.3车模运动方程
对应车模静止时,系统输入输出的传递函数为:
,此时两极点为。一个极点位于s平面的右半平面,因此车模不稳定。车模引入比例、微分反馈之后的系统如下图所示:
系统传递函数为:,此时两个系统极点位于:系统稳定需要两个极点都位于s平面的左半平面。要满足这一点,需要k1>g,
k2>0.所以我们给直立控制用简单的PD值控制只能小车的平衡。
2.2速度控制原理
对于直立车模速度的控制相对于普通车模的速度控制则比较复杂。由于在速度控制过程中需要始终保持车模的平衡,因此车模速度控制不能够直接通过改变电机转速来实现。直立控制和速度控制有耦合的关系。我们利用控制单片机的计数器测量在固定时间间隔内速度脉冲信号的个数可以反映电机的转速。
我们假设直立的阶段我们是以某一个角度稳定的,车模角度控制规律可以看出车模倾角设定量与车模倾角变化之间大体呈现一个一阶惯性环节
做简化假设如下:
(1)
车模角度在直立控制下简化成一个一阶过渡过程。
(2)车模倾角是由车轮运动产生,因此车轮速度是倾角变量求导再乘以车模长度。
(3)
忽略车模倾角引起车轮加速度。由于这个讨论仅对控制一开始短暂的过渡阶段而言,此时由于车模倾角比较小,引起速度变化很小。
(4)
系统只进行速度比例负反馈。
简化模型如下图2.4所示:
图2.4车模倾角控制分析
有得到的式子中可以看出为了保证系统稳定,往往取的车模倾角控制时间常数Tz很大。这样便会引起系统产生两个共轭极点,而且极点的实部变得很小,使得系统的速度控制会产生的震荡现象。所以在控制反馈中增加速度微分控制。
2.3车模方向控制原理
实现车模方向控制是保证车模沿着竞赛道路比赛的关键。直立车模所在的电磁组的道路中心线铺设有一根漆包线,里面通有100mA的20kHz交变电流。因此在道路中心线周围产生一个交变磁场。通过道路电磁中心线偏差检测与电机差动控制实现方向控制,从而进一步保证车模在赛道上。
我们用电感和电容的互感采集10mA的20KHz的交变电流导线的信号通过两个互感电容的信号差动,在车模直立控制和速度控制的基础上给电机左右轮差速实现转向的效果。具体控制框图如下2.5所示:
图2.5
通过电机驱动差动电压控制车模方向
我们通过官方给的文档只给了比例控制的基础上发现,当速度超过一定值的时候,很容易出现震荡丢线的现象,所以在此基础上我们加了适当的积分常数,这样能够在速度高速时,即使的提前控制,起到控制优化的效果。
第三章、电路设计
3.1传感器的电路设计
3.1.1寻线互感运放电路
我们通过同10mh的电感和6800pf的电容互感经过下面的运放电路如下图3.1所示:
图3.1
电感运放电路
同过AD620对互感得到的小信号进行放大滤波后,采集的AD值传入单片机的AD口。
3.1.2陀螺仪和加速度传感器电路
陀螺仪电路信号放大电路如下图3.2所示:
图3.2陀螺仪运放电路图
其中图中的RW电阻大小能取到对陀螺仪信号放倍数的调整。R1和R4接上拉和下拉,使得陀螺仪本身输出的差值变到0.1~0.2V再经过运放能过得到较为线性的AD值。
加速度计我们使用龙丘出产的MMA7361模块。电路图如3.3下所示:
图3.3加速度MMA7361电路图
3.2电源电路模块
我们使用的电源模块电路图如3.4所示:
图3.4电源电路
其中电源模块中,+3.3V是直接给陀螺仪、加速度计、和单片机供电用,+5V和-5V给运放模块正负电源供电所用。
3.3驱动电路模块
我们使用BTS7960作为我们的驱动芯片,电路图如下3.5所示:
其中两片BTS7960驱动一个电机。
第四章传感器安装计机械设计
4.1电杆的固定
电感的安装如下图4.1所示:是我们自行设计了电杆的安装座,为一圆孔台阶座,电感支架的材料为碳纤维棒,支架为T字型。两个杆用尼龙材料的连接件固定,连接件上带有两个紧定螺丝,可以调整两个杆的相对位置。需要强调的是,碳纤棒为实心的,碳纤管为空心的,在这里我们应该要用碳纤棒,因为碳纤维管比碳纤棒容易弯曲折断。电感支架的前杠用4根棉线固定在车身,防止支架晃动。
4.2电路板的固定
电路板固定于,电杆安装座下方的四个白色螺丝位置。
4.3轮胎的改进
轮胎应选择较软的胎,软胎还应打磨之更加柔软,但是要保留一些纹路。
4.4底盘的加固
前后底盘的中间以及两边都需要用pcb板加螺丝固定。如下图所示,不能用热熔胶固定,因为用热熔胶连接的部分容易变形、脱落。
4.5车子布局:
车子的电池固定在底盘后部,支架以及电路板固定在底盘前部,这样能使撤职在平衡时底盘微微向前倾。
4.6电机保护
电机线容易断裂,应用热缩管将正负引线包好,再用热熔胶固定在电机架上。
第五章、软件处理及控制算法
微处理器:CodFire系列处理器
型号---MCF52259
控制理论:利用陀螺仪加速计计算出车体的倾斜角度,利用PD控制来控制直立,然后利用车速模块(编码器)测得当前小车的行驶速度,利用PI控制原理把速度控制在某个自己设定的值实现小车匀速行驶。利用AD口读取左右两个电感的电压值,再通过两个电感的差值实现对路径的检测,用PD控制来控制车模的转向。
算法:由于控制小车需要控制其直立,速度和方向,而输出量只有两个电机的PWM脉冲。为了避免各个控制输出量的互相影响,我们把各个控制分配到中断的分段中,使其不互相影响。
代码设计:代码主要分为
1初始化
2
信息的获取
3
控制
其中初始化包括:PLL设置,PWM,AD,计数器IO,液晶屏,按键等模块的端口初始化
信息的获取包括:各模块的AD值,脉冲数,电感电压等
控制包括:直立,速度,方向控制
参考文献
[1]
飞思卡尔秘书处
,《电磁组直立行车参考设计方案1.0》
2011-12-22
[2]
飞思卡尔秘书处
,《电磁组直立行车参考设计方案2.0》
2012-3-1
[3]
邵贝贝等
《学做智能车2004年》
北京航空航天大学出版社
[4]
陶永华主编
《新型PID控制及其应用》
机械工业出版社
2002年
附录
源程序
/********************************************************
龙丘MCF52259多功能开发板V1.0
编写:龙丘
Designed
by
Chiu
Sir
E-mail:[email protected]
软件版本:V1.1
最后更新:2010年7月8日
相关信息参考下列地址:
网站:
http://www.jsfw8.com
------------------------------------
Code
Warrior
7.1
Target
:
MCF52259
Crystal:
48.000Mhz*******************************************************/
/********************端口使用说明*******************
ICOC3-----------内部计数器GPT3,TA3,PWM7
PWM1--DTIN2-----13左轮
TC
PWM3--DTIN3
TA
PWM4--ICOC0-----46右轮
PWM6--ICOC1
AD0---AN0-------陀螺仪
AN
AD1---AN1-------加速度计
AD2---AN2-------矫正位
A3----DC
命令数据选择管脚
TE
A2----RES
模块复位管脚
A1----D1(MOSI)
,主输出从输入数据脚,由MCU控制
A0----D0(SCLK)
,时钟脚,由MCU控制
A8-A15--外部计数器存储位
TF
A16---TG0
外部计数器控制位
TG
A17---TG1***************************************************/
#include
“support_common.h“/*
include
peripheral
declarations
and
more/
#include
“MCF52259_PIT_driver.h“#include
“MCF52259_UART_driver.h“#include
“MCF52259_PWM_driver.h“#include
“Get_info.h“#include
“Control.h“#include
“LQ12864.h“uint8
txtbuf0[16];
uint8
txtbuf1[16];
uint8
txtbuf2[16];
uint8
txtbuf3[16];
//中断全局变量
int
step=0;
int
index=0;
int
count_s=1;
int
count_d=1;
int
SpeedPluse=0;
int
adi=0;
//*****************函数区****************//
void
delay(uint16
ms)
{
int
ii,jj;
if
(ms-0.5
LCD_Print(8,0,txtbuf0);
LCD_Print(0,2,txtbuf1);
LCD_Print(0,4,txtbuf2);
LCD_Print(70,4,txtbuf3);
//
LCD_Fill(0xff);
//
LCD_Fill(0x00);
//
LCD_CLS();
//LCD_Print(0,0,(uint8)“龙丘“);
//index=0;
//}
//index++;
}
}
__declspec(interrupt:0)
void
PIT0_handler(void)//interrupt
source
55
{
if(step==0)
{
Pulse_counter();
MCF_GPIO_PORTTG|=MCF_GPIO_PORTTG_PORTTG0;
MCF_GPIO_PORTTG|=MCF_GPIO_PORTTG_PORTTG1;
MCF_GPIO_PORTTG
}
else
if(step==1)
{
/*
for(adi=0;adi=20)
{
if(g_nRightPulseI=10))
{
SpeedPluse=g_nRightPulseI;
SpeedControl(SpeedPluse+5);
}
else
SpeedControl(1000);
sprintf(txtbuf1,“%5d“,g_nRightPulseI);
g_nLeftPulseI=0;
g_nRightPulseI=0;
count_s=1;
}
else
{
SpeedControlOutput(count_s);
//速度调节
count_s++;
}
}
else
if(step==4)
{
Direction_votage();
ftostr(g_fLeftVoltageI,txtbuf2,3);
ftostr(g_fRightVoltageI,txtbuf3,3);
DirectionControl();
//方向控制
}
step++;
if(step>4)
step=0;
MCF_PIT_PCSR(0)|=MCF_PIT_PCSR_PIF;
}
#include
“Control.h“#include
“MCF52259.h“#include
“support_common.h“#include
“Get_info.h“//直立调节参数
float
g_fAngleOut=0.0;
#define
ANGLE_P
0.05*450
#define
ANGLE_D
0.05*14
//速度调节参数
#define
SPEED_P
0.05*9//10.5//10//3.2//4//3//3//0.1//3//0.5
#define
SPEED_I
0.05*2.5//1.8///2.5//2.5//2.5//2//2.5
#define
DEAD_VAL
0.05*250
float
g_fSpeedOld=0;
float
g_fSpeedNew=0;
float
g_fSpeedIntegral=0;
floatg_fSpeedOut
=0;
float
g_fLeftOut=0;
float
g_fRightOut=0;
//方向调节参数
#define
DIRECTION_P
0.05*600//475//430
#define
DIRECTION_D
0.05*800//16000//10000//15500//680//500//478//585//580
float
g_fDirectionOut=0;
float
g_fDoutold=0;
float
g_fDoutnew=0;
float
diff_now,diff_before;
//-------------------------------------------------------------------------*
//函数名:AngleControl
//功
能:直立控制
//参
数:无
//返
回:无
//-------------------------------------------------------------------------*
void
AngleControl()
{
g_fAngleOut
=ANGLE_P*Angle+ANGLE_D*agvelocity_gyro;
}
//-------------------------------------------------------------------------*
//函数名:SpeedControl
//功
能:速度控制
//参
数:无
//返
回:无
//-------------------------------------------------------------------------*
void
SpeedControl(int
speedset)
{
int
fspeederror;
int
speednow;
speednow=g_nRightPulseI;
fspeederror=speedset-speednow;
g_fSpeedOld=g_fSpeedNew;
g_fSpeedIntegral+=SPEED_I*fspeederror;
g_fSpeedNew=g_fSpeedIntegral+SPEED_P*fspeederror;
}
//速度调节
void
SpeedControlOutput(int
fen)
{
float
fValue;
fValue
=g_fSpeedNew
-
g_fSpeedOld;
g_fSpeedOut=(fValue/19)*fen
+
g_fSpeedOld;
}
//-------------------------------------------------------------------------*
//函数名:DirectionControl
//功
能:方向控制
//参
数:无
//返
回:无
//-------------------------------------------------------------------------*
void
DirectionControl()
{
float
fLeft,fRight;
fLeft=g_fLeftVoltageI;
fRight=g_fRightVoltageI;
diff_now=(fLeft-fRight)/(fLeft+fRight);
g_fDoutold=g_fDoutnew;
if(diff_now==0)
{
g_fDirectionOut=0;
}
else
{
g_fDirectionOut=diff_now*DIRECTION_P+(diff_now-diff_before)*DIRECTION_D;
}
diff_before=diff_now;
}
//-------------------------------------------------------------------------*
//函数名:MotorSpeedOut
//功
能:电机输出
//参
数:无
//返
回:无
//-------------------------------------------------------------------------*
void
MotorSpeedOut()
{
if(g_fLeftOut
>=
0)
{
if(g_fLeftOut
>200)
g_fLeftOut
=
200;
MCF_PWM_PWMDTY(4)=g_fLeftOut+DEAD_VAL;
MCF_PWM_PWMDTY(6)=0;
}
else
{
if(g_fLeftOut
=
0)
{
if(g_fRightOut
>
200)
g_fRightOut
=
200;
MCF_PWM_PWMDTY(1)=g_fRightOut+DEAD_VAL;
MCF_PWM_PWMDTY(3)=0;
}
else
{
if(g_fRightOut
<
-200)
g_fRightOut
=
-200;
MCF_PWM_PWMDTY(1)=0;
MCF_PWM_PWMDTY(3)=-g_fRightOut+DEAD_VAL;
}
}
void
MotorOutput()
{
g_fLeftOut=g_fAngleOut+g_fSpeedOut+g_fDirectionOut;
g_fRightOut=g_fAngleOut+g_fSpeedOut-g_fDirectionOut;
MotorSpeedOut();
}