基于磁场导航智能车控制器的设计(5)

2018-12-25 22:40

第六章 结论

本设计自参赛以来经过查找资料,设计机构,组装车模,分析问题,编写程序阶段工作,直到系统成型,一共经过了五个月的时间,其间尝试了两路电感控制,四路电感做差控制;六点感“二”字排法等算法,最后我们选择了六路传感器作为最终的方案,能车控制系统的设计中所完成的工作如下:

(1)研究了传感器的排布对控制策略的影响,提出了合适的传感器排布方式,提高了寻线的准确性。

(2)并在实验的基础上证明了在本系统中电机可以近似为一阶系统,并由此完成了电机PID算法。

(3)在机构结构上进行了大量的理论分析及改进,并在此基础上完成了刹车制动算法。

由于水平有限,并且时间不足,有许多技术与算法都没有深入的研究,需要在以后继续研究中不断的完善,总结如下:

(1) 电机的PID并不能将电机的加速性能很好的表现出来。 (2) 电路的可靠性,抗高频电磁干扰的性能有待提高。 (3) 对路况信息的处理还有待提高,特别是有用信息的提取。

附页:

#include /* common defines and macros */

#include \#include

#include #include #include

#pragma LINK_INFO DERIVATIVE \

#define Led5 PORTE_PE5 #define Led6 PORTE_PE6 #define KEY PORTB_PB3

#define Led_left PORTB_PB5 #define Led_right PORTB_PB7

uchar n,r=0,z,flag,Flag=0; uchar count=0;

static unsigned int waittime = 0;

uchar FB=90,SH=45,SH1=45,V1=90,V2=90, V3=85,V4=150,V5=90,V6=90;

unsigned int AD_1; //AD 转换结果 unsigned int AD_2; //AD 转换结果 unsigned int AD_3; //AD 转换结果 unsigned int AD_4; //AD 转换结果 unsigned int AD_5; //AD 转换结果 unsigned int AD_6; //AD 转换结果

signed int Speed,x1,x2,y,x11,x22; //速度转换值 unsigned int time,numm,m;

unsigned int numm_last0,numm_last1,numm_last2, num_last0,num_last1,num_last2;

//-------------延时子程序--------------// void delay(unsigned int xms) {

int a,b,c;

for(c=0;c

for(a=0;a<=50;a++) {

for(b=0;b<=200;b++);

} } }

///////////////////////////////////// //// 电机 PID 定义

/////////////////////////////////////

//int SetPoint=0; //设定目标 Desired Value int FeedBack=0;

float KKp=0.5; //比例常数 Proportional Const float KKi=0;

float KKd=0.6; //微分常数 Derivative Const signed int EE0=0; //当前误差 signed int EE1=0; //Error[-1] signed int EE2=0; //Error[-2]

signed int EError0=0,EError1=0; signed int iiIncpid=0; int sp=0; int pp;

/////////////////////////////// /// PID 定义

//////////////////////////////

float Kp=4.5; //比例常数 Proportional Const 5.2 float Ki=1.5;

float Kd=3.5; //微分常数 Derivative Const signed int E0=0 ; //当前误差 signed int E1=0; //Error[-1] signed int E2=0; //Error[-2] signed int Error0=0,Error1=0; signed int iIncpid=0;

///////////////////////////////////// ///////////////////////////////////// //// 电机 PID

///////////////////////////////////// ////////////////////////////////////

unsigned int Motor_PID(int cch1,int cch2 ) {

//cch2=cch2/3;

EE0=cch1-cch2; //增量计算 EError0=EE0-EE1; EError1=EE1-EE2;

iiIncpid=(int)(KKi*EError0+KKp*EE0+KKd*(EError0-EError1)); EE1=EE0;

EE2=EE1; //存储误差,用于下次计算 sp+=iiIncpid; if(sp>90) sp=90; if(sp<10) sp=10;

return sp;

}

////////////////////////// //////////速度/////////// ///////////////////////// void Sudu(int SetPoint) {

pp=Motor_PID(SetPoint,FeedBack); PWMDTY1=pp; }

/////////////////////////////// ///////舵机 PID /////////////// ///////////////////////////////

int Steer_PID(signed int ch1 ,signed int ch2 ) {

E0=ch1-ch2; //增量计算 Error0=E0-E1; Error1=E1-E2;

iIncpid=(int)(Ki*Error0+Kp*E0+Kd*(Error0-Error1)); E1=E0;

E2=E1; //存储误差,用于下次计算

return iIncpid; }

////////////////////////////// //////////刹车//////////////// //////////////////////////// void shacheV(int sh_v) {

PWME_PWME0=1; PWME_PWME1=0; PWMDTY0=sh_v;

while(FeedBack>FB); PWME_PWME0=0; PWME_PWME1=1; flag=0;

Led_right=1; Led_left=1; }

/////////////////////////// /////////按键检测/////////// ////////////////////////////

void KEY_SCAN(void) {

if(KEY==0) {

delay(10); if(KEY==0) {

while(!KEY); z++;

if(z==1) {

FB=85; SH=45; SH1=45; V1=80; V2=80; V3=80; V4=150; V5=90; V6=80;

Led_left=0; Led_right=1; delay(500);


基于磁场导航智能车控制器的设计(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:生化期末复习答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: