第五飞思卡尔智能车电磁组获奖程序Word格式文档下载.docx

上传人:b****1 文档编号:15335172 上传时间:2022-10-29 格式:DOCX 页数:14 大小:17.76KB
下载 相关 举报
第五飞思卡尔智能车电磁组获奖程序Word格式文档下载.docx_第1页
第1页 / 共14页
第五飞思卡尔智能车电磁组获奖程序Word格式文档下载.docx_第2页
第2页 / 共14页
第五飞思卡尔智能车电磁组获奖程序Word格式文档下载.docx_第3页
第3页 / 共14页
第五飞思卡尔智能车电磁组获奖程序Word格式文档下载.docx_第4页
第4页 / 共14页
第五飞思卡尔智能车电磁组获奖程序Word格式文档下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

第五飞思卡尔智能车电磁组获奖程序Word格式文档下载.docx

《第五飞思卡尔智能车电磁组获奖程序Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《第五飞思卡尔智能车电磁组获奖程序Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。

第五飞思卡尔智能车电磁组获奖程序Word格式文档下载.docx

signedintb=0,c=0,d=0,e=0,f=0,g=0,spe=0,r=0,l,x3,y,z,x1,x2,x4;

inttime;

intzd=0,flag;

intpp;

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

////电机PID定义

intSetPoint=0;

//设定目标期望值

intFeedBack=0;

floatKKp=1.5;

//比例常数

floatKKi=0;

floatKKd=0.6;

//微分常数

signedintEE0=0;

//当前误差

signedintEE1=0;

//Error[-1]

signedintEE2=0;

//Error[-2]

signedintEError0=0,EError1=0;

signedintiiIncpid=0;

intsp=0;

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

///舵机PID定义

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

floatKp=3;

floatKi=1;

floatKd=4.2;

//微分常数

signedintE0=0;

signedintE1=0;

signedintE2=0;

//Error[-2]

signedintError0=0,Error1=0;

signedintiIncpid=0;

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

////电机PID

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

unsignedintGetspeed(intcch1,intcch2)

{

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>

210)

sp=210;

if(sp<

0)

sp=0;

returnsp;

}

voidsudu(intSetPoint)

pp=Getspeed(SetPoint,FeedBack);

PWMDTY2=pp;

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

///舵机PID

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

intPcrtl(intch1,intch2)

E0=ch1-0;

Error0=E0-E1;

Error1=E1-E2;

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

E1=E0;

E2=E1;

returniIncpid;

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

voidshache(intsha,inttim)

{

PWMDTY3=sha;

time=tim;

PITCE_PCE1=1;

PITINTE_PINTE1=1;

//启用中断通道0

zd=0;

}

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

voidvIOPortInit(void)

{

DDRA=0X00;

//PROTB键盘输出

PORTA=0X00;

DDRB=0xff;

DDRJ=0xFF;

//PROTB

PTJ=0X80;

}

voiddelayms(intms)//40MHz--1ms

intii,jj;

if(ms<

1)ms=1;

for(ii=0;

ii<

ms;

ii++)

for(jj=0;

jj<

0xff;

jj++);

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

voidSetBusCLK_64M(void)

CLKSEL=0X00;

//PLL系统脱离

PLLCTL_PLLON=1;

//打开PLL

SYNR=0xc0|0x07;

REFDV=0xc0|0x01;

POSTDIV=0x00;

//pllclock=2*osc*(1+SYNR)/(1+REFDV)=80MHz;

_asm(nop);

//BUSCLOCK=64M

while(!

(CRGFLG_LOCK==1));

//当锁相环稳定时,使用它;

CLKSEL_PLLSEL=1;

//PLL系统进行;

voidECT_Init(void)/*ECT初始化,使用输入捕捉功能*/

TIOS=0x00;

//设为输入捕捉

TSCR1=0x80;

//定时器使能

TSCR2=0x07;

TIE=0b00000010;

//开中断

TCTL4=0b00001000;

//0,1触发电平:

//TCTL3=0b10101010;

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

voidPWMInit(void)

PWME=0x00;

//禁止PWM输出

PWMPOL=0xff;

PWMCLK=0x08;

PWMCTL=0x10;

PWMSCLB=80;

PWMCAE=0x00;

//左对齐

PWMPRCLK=0x44;

//PWM时钟CLOCKA,

PWMPER01=40000;

PWMPER3=250;

PWMPER2=255;

PWMDTY2=0;

PWMDTY3=31;

PWMDTY01=4675;

PWME=0x0f;

/*使能01,23通道*/

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

voidSCI(void)

SCI1BDH=0X01;

SCI1BDL=0XA0;

SCI1CR1=0X00;

SCI1CR2=0X08;

voidshacheV(intch3)

PWMDTY3=ch3;

while(FeedBack>

30);

PWMDTY3=30;

voidTERMIO_PutChar(unsignedcharch)

(SCI1SR1&

0x80));

//非空时,继续等待

SCI1DRL=ch;

unsignedcharTERMIO_GetChar(void)

returnSCI1DRL;

voidun(unsignedcharch)

0X40))

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

voidADInit(void)

ATD0CTL1=0x00;

ATD0CTL2=0X40;

/*使能AD,清除标志*/

ATD0CTL3=0XB0;

/*队列长度为6,依次存入结果寄存器,继续转换*/

ATD0CTL4=0X05;

/*8位精度,总线频率32分频*/

ATD0CTL5=0X30;

/*,多通道,连续,从AD0开始转换*/

ATD0DIEN=0x00;

//禁止数字输入

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

voidPACN_init(void)

PACTL_PAEN=0;

TSCR1=0X80;

//快速清除flag:

PAOVFPAIF

TSCR2=0X03;

PACNT=0;

PACTL_PAEN=1;

//启动脉冲累加器A

PACTL_PAMOD=0;

//事件计数方式

PACTL_PEDGE=1;

//PT7引脚上的出现上升沿时脉冲累加器计数器加1

TSCR1_TEN=1;

voidPit0_Init(void)

PITCFLMT_PITE=0;

//禁用PIT

PITCE_PCE0=1;

//启用定时器通道0

PITMUX_PMUX0=0;

//ch0连接到微定时器

PITMTLD0=0X0F;

//微时基0等于255个时钟周期

PITLD0=0XFFFF;

//超时期间=(PITMTLD+1)*(PITLD+1)/fBUS

//时间计算

//举例,16MHz总线计时器,最大超时时间等于:

//15*65536*/64000000=0.01536s.

PITINTE_PINTE0=1;

PITCFLMT_PITE=1;

//启用PIT

voidPit1_Init(void)

//PITCE_PCE1=1;

PITMUX_PMUX1=0;

//ch0连接到微定时器0

PITMTLD1=0X0F;

PITLD1=0XFFFF;

//time-outperiod=(PITMTLD+1)*(PITLD+1)/fB

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1