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

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

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

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

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

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);

\n\n"

);

1=%d3=%d5=%d7=%d"

offset1,offset3,offset5,offset7);

/*for(n=0;

n<

spoint;

n++)

{

%d"

sdata1[n]);

}*/

SE1=%d%d%d%d"

SE1,SE3,SE5,SE7);

//printp("

diff1=%d%d%d%d"

diff1,diff3,diff5,diff7);

\n"

SEMAX=%d%d%d%d"

SE1MAX,SE3MAX,SE5MAX,SE7MAX);

speed=%d"

speed);

k1=%dk3=%dk5=%dk7=%d"

k1,k3,k5,k7);

servo_pwm);

//printp("

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++);

TIE_C4I=1;

voidinterrupt13IOC5interrupt(void)

TFLG1_C5F=1;

TIE_C5I=0;

if(PTJ_PTJ7==0)

bendspeed+=3;

else

presetspeed+=3;

if(PTT_PTT2==0)

presetspeed=70;

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;

ATD0CTL2_ASCIE=1;

ATD0CTL5=0x30;

print_flag=1;

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

inti,temp;

PITCE_PCE0=0;

//关闭PIT

ATD0CTL2_ASCIE=0;

//关闭AD

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

//***滤波****

filter(sdata1);

filter(sdata3);

filter(sdata5);

filter(sdata7);

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

counter;

sum1+=sdata1[i];

sum3+=sdata3[i];

sum5+=sdata5[i];

sum7+=sdata7[i];

SE1=(int)(sum1>

>

12);

SE3=(int)(sum3>

SE5=(int)(sum5>

SE7=(int)(sum7>

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

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>

offset3=450;

if(offset5>

offset5=450;

if(offset7>

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);

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<

PWM_MIN)

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);

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***

PWMDTY01=PWM_MAX;

elseif(servo_pwm+PWM_MID<

PWMDTY01=PWM_MIN;

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)

display_speed(bendspeed);

display_speed(presetspeed);

display_position();

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

if(SCI0SR1_RDRF==1)

temp=SCI0DRL;

PWMDTY01=PWM_MID;

PWMDTY23=0;

PWMDTY67=0;

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

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

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

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