第五届飞思卡尔电磁车程序速度25.docx

上传人:b****5 文档编号:6209813 上传时间:2023-01-04 格式:DOCX 页数:11 大小:16.35KB
下载 相关 举报
第五届飞思卡尔电磁车程序速度25.docx_第1页
第1页 / 共11页
第五届飞思卡尔电磁车程序速度25.docx_第2页
第2页 / 共11页
第五届飞思卡尔电磁车程序速度25.docx_第3页
第3页 / 共11页
第五届飞思卡尔电磁车程序速度25.docx_第4页
第4页 / 共11页
第五届飞思卡尔电磁车程序速度25.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

第五届飞思卡尔电磁车程序速度25.docx

《第五届飞思卡尔电磁车程序速度25.docx》由会员分享,可在线阅读,更多相关《第五届飞思卡尔电磁车程序速度25.docx(11页珍藏版)》请在冰豆网上搜索。

第五届飞思卡尔电磁车程序速度25.docx

第五届飞思卡尔电磁车程序速度25

#include

#include"derivative.h"

#include"printp.h"

#definese1max(int*)(0x0800)

#definese3max(int*)(0x0802)

#definese5max(int*)(0x0804)

#definese7max(int*)(0x0806)

#definespoint294

#defineH110

#defineH210

#include"function.h"

voidinit(void);

intPWM_MIN=8100,PWM_MID=8800,PWM_MAX=9500;

intsdata1[spoint],sdata3[spoint],sdata5[spoint],sdata7[spoint];

inty[spoint];

intSE1,SE3,SE5,SE7;

intoffset1,offset3,offset5,offset7,lastoffset1,lastoffset3,lastoffset5,lastoffset7;

intSE1MAX,SE3MAX,SE5MAX,SE7MAX;

intservo_pwm,lastservo_pwm;

longintsum1,sum3,sum5,sum7;

intspeed,prespeed,presetspeed,distance,bendspeed=50;

intprint_flag=0,counter=0,startflag=0,stopflag=0,startdelay,startdelaycount;

intk1=24,k3=24,k5=24,k7=24;//校正系数

intstateSE7[3],stateSE5[3],stateSE1[3],stateSE3[3],diff1,diff3,diff7,diff5;

voidmain(void)

{

intn;

init();

PWMDTY01=PWM_MID;//舵机PWM波脉宽范围

ATD0CTL5=0x30;//启动AD

PITCE_PCE0=1;//启动PIT0

PITCE_PCE1=1;//启动PIT1

PITCE_PCE2=1;//启动PIT2

PITCE_PCE3=1;//启动PIT3

EnableInterrupts;

for(;;)

{

if(print_flag==1)

{

n++;

if(n==10)

{

n=0;

printp("%d",PWMDTY01);

printp("\n\n");

printp("1=%d3=%d5=%d7=%d",offset1,offset3,offset5,offset7);

/*for(n=0;n

{

printp("%d",sdata1[n]);

}*/

printp("SE1=%d%d%d%d",SE1,SE3,SE5,SE7);

//printp("diff1=%d%d%d%d",diff1,diff3,diff5,diff7);

//printp("\n");

printp("SEMAX=%d%d%d%d",SE1MAX,SE3MAX,SE5MAX,SE7MAX);

printp("speed=%d",speed);

//printp("k1=%dk3=%dk5=%dk7=%d",k1,k3,k5,k7);

//printp("\n\n");

//printp("%d",servo_pwm);

//printp("\n\n");

printp("\n\n");

print_flag=0;

}

}

}

}

#pragmaCODE_SEG__NEAR_SEGNON_BANKED

voidinterrupt12IOC4interrupt(void)

{

inti,j;

TFLG1_C4F=1;

TIE_C4I=0;

//prespeed=presetspeed;

startflag++;//按第一下,显示舵机的方向,按第二下,延时2S启动

for(i=0;i<500;i++)

for(j=0;j<0x0d53;j++);

TFLG1_C4F=1;

TIE_C4I=1;

}

voidinterrupt13IOC5interrupt(void)

{

inti,j;

TFLG1_C5F=1;

TIE_C5I=0;

if(PTJ_PTJ7==0)

{

bendspeed+=3;

}

else

presetspeed+=3;

if(PTT_PTT2==0)

{

presetspeed=70;

}

for(i=0;i<500;i++)

for(j=0;j<0x0d53;j++);

TFLG1_C5F=1;

TIE_C5I=1;

}

voidinterrupt22ADinterrupt(void)

{

sdata1[counter]=ATD0DR0;

sdata3[counter]=ATD0DR1;

sdata5[counter]=ATD0DR2;

sdata7[counter]=ATD0DR3;

counter++;

}

voidinterrupt69PIT3interrupt(void)

{

_asm(MOVB#$08,PITTF);

speed=PACNT;

PACNT=0;

if(startflag==2)

{

if(startdelay==0)

{

startdelaycount++;

if(startdelaycount>=100)

{

startdelay=1;

}

}

if(startdelay==1)

{

adjust_speed();

}

}

}

voidinterrupt68PIT2interrupt(void)

{

_asm(MOVB#$04,PITTF);

if(PORTA_PA0==0)

{

stopflag++;

PITCE_PCE2=0;

}

}

voidinterrupt67PTI1interrupt(void)

{

//***为下一个循环作准备****

_asm(MOVB#$02,PITTF);

counter=0;

sum1=0;

sum3=0;

sum5=0;

sum7=0;

PITCE_PCE0=1;

ATD0CTL2_ASCIE=1;

ATD0CTL5=0x30;

print_flag=1;

}

voidinterrupt66PIT0interrupt(void)//采样时间为2ms

{

inti,temp;

PITCE_PCE0=0;//关闭PIT

ATD0CTL2_ASCIE=0;//关闭AD

EnableInterrupts;//允许PIT2,3中断该程序

//***滤波****

filter(sdata1);

filter(sdata3);

filter(sdata5);

filter(sdata7);

//***求峰峰值***

for(i=0;i

{

sum1+=sdata1[i];

sum3+=sdata3[i];

sum5+=sdata5[i];

sum7+=sdata7[i];

}

SE1=(int)(sum1>>12);

SE3=(int)(sum3>>12);

SE5=(int)(sum5>>12);

SE7=(int)(sum7>>12);

//***找出相应的最大值***

if(PTT_PTT3==0)

{

if(SE1>SE1MAX)

{

SE1MAX=SE1;

}

if(SE3>SE3MAX)

{

SE3MAX=SE3;

}

if(SE5>SE5MAX)

{

SE5MAX=SE5;

}

if(SE7>SE7MAX)

{

SE7MAX=SE7;

}

save2flash(SE1MAX,SE3MAX,SE5MAX,SE7MAX);

}

SE1MAX=*se1max;

SE3MAX=*se3max;

SE5MAX=*se5max;

SE7MAX=*se7max;

if(SE1==0)

SE1=1;

if(SE3==0)

SE3=1;

if(SE5==0)

SE5=1;

if(SE7==0)

SE7=1;

//***求偏移*****

offset1=(int)sqrt(100*(unsignedlongint)((SE1MAX)*H1*H1/SE1-H2*H2))*24/k1;

offset3=(int)sqrt(100*(unsignedlongint)((SE3MAX)*H1*H1/SE3-H2*H2))*24/k3;

offset5=(int)sqrt(100*(unsignedlongint)((SE5MAX)*H2*H2/SE5-H2*H2))*24/k5;

offset7=(int)sqrt(100*(unsignedlongint)((SE7MAX)*H2*H2/SE7-H2*H2))*24/k7;

if(offset1>450)

offset1=450;

if(offset3>450)

offset3=450;

if(offset5>450)

offset5=450;

if(offset7>450)

offset7=450;

//***求servo_pwm***

stateSE1[0]=SE1;

stateSE3[0]=SE3;

stateSE7[0]=SE7;

stateSE5[0]=SE5;

diff1=stateSE1[0]-stateSE1[2];

diff3=stateSE3[0]-stateSE3[2];

diff7=stateSE7[0]-stateSE7[2];

diff5=stateSE5[0]-stateSE5[2];

for(i=1;i>=0;i--)

{

stateSE1[i+1]=stateSE1[i];

stateSE3[i+1]=stateSE3[i];

stateSE5[i+1]=stateSE5[i];

stateSE7[i+1]=stateSE7[i];

}

if(offset5+offset7>400)

{

if((offset7+offset3)>(offset5+offset1))

{

servo_pwm=((offset7+offset5-80)+((offset7-lastoffset7)-(offset5-lastoffset5)))*((PWM_MAX-PWM_MID)/200);

}

else

{

servo_pwm=((-offset7-offset5+80)+((offset7-lastoffset7)-(offset5-lastoffset5)))*((PWM_MAX-PWM_MID)/200);

}

if(servo_pwm+PWM_MID>PWM_MAX)

servo_pwm=PWM_MAX-PWM_MID;

if(servo_pwm+PWM_MID

servo_pwm=PWM_MIN-PWM_MID;

if(abs(servo_pwm-lastservo_pwm)>=PWM_MAX-PWM_MID+100)

servo_pwm=lastservo_pwm;

}

elseif((offset5+offset7)>280)//四个电感处在同侧

{

servo_pwm=((offset7-offset5)+((offset7-lastoffset7)-(offset5-lastoffset5)))*((PWM_MAX-PWM_MID)/100);

}

else

{

servo_pwm=((offset7-offset5)*3/2+(offset1-offset5+offset7-offset3)*4+((offset7-lastoffset7)-(offset5-lastoffset5))*2)*((PWM_MAX-PWM_MID)/350)+((diff3-diff7)+(diff5-diff1))*5;

}

//***求相应的PWMDTY01***

if(servo_pwm+PWM_MID>PWM_MAX)

{

servo_pwm=PWM_MAX-PWM_MID;

PWMDTY01=PWM_MAX;

}

elseif(servo_pwm+PWM_MID

{

servo_pwm=PWM_MIN-PWM_MID;

PWMDTY01=PWM_MIN;

}

else

PWMDTY01=PWM_MID+servo_pwm;

lastservo_pwm=servo_pwm;

lastoffset7=offset7;

lastoffset5=offset5;

prespeed=presetspeed-abs(PWMDTY01-PWM_MID)/((PWM_MAX-PWM_MID)/(presetspeed-bendspeed));

//***显示控制***

if(startflag==0)

{

if(PTJ_PTJ7==0)

display_speed(bendspeed);

else

display_speed(presetspeed);

}

else

display_position();

//***停车控制***

if(SCI0SR1_RDRF==1)

{

temp=SCI0DRL;

PWMDTY01=PWM_MID;

PWMDTY23=0;

PWMDTY67=0;

}

}

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

当前位置:首页 > 党团工作 > 入党转正申请

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

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