无刷电机控制程序 中断部分.docx

上传人:b****7 文档编号:8874409 上传时间:2023-02-02 格式:DOCX 页数:20 大小:17.64KB
下载 相关 举报
无刷电机控制程序 中断部分.docx_第1页
第1页 / 共20页
无刷电机控制程序 中断部分.docx_第2页
第2页 / 共20页
无刷电机控制程序 中断部分.docx_第3页
第3页 / 共20页
无刷电机控制程序 中断部分.docx_第4页
第4页 / 共20页
无刷电机控制程序 中断部分.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

无刷电机控制程序 中断部分.docx

《无刷电机控制程序 中断部分.docx》由会员分享,可在线阅读,更多相关《无刷电机控制程序 中断部分.docx(20页珍藏版)》请在冰豆网上搜索。

无刷电机控制程序 中断部分.docx

无刷电机控制程序中断部分

voidinterruptISR(void)//Interrupt+overflowinstructions

{

asm("clrwdt");

if(TMR1IF==1)//frommotor1

{

TMR1H=0XFE;//500*cycl.0.2us=0.1ms//set0.1ms

TMR1L=0X0C;

TMR1IF=0;//clear

T1_status=1;//setthestatus

timesheding++;

if(timesheding>460000)timesheding=0;

//T_sheding+=1;

//Time_hold_open1++;//forthetimeofholdingopen

//if(Time_hold_open1==100)

//{

//Time_hold_open1=0;

//if(Time_hold_open!

=0)Time_hold_open--;

//}

//*************************************************************forPWMof

T_phase++;

//if((begain==1)&&(chongqi==1)){if(T_phase>900)CCPR1L+=4;if(CCPR1L>220)CCPR1L=190;}

//*************************************************************forphasedelayandchangephase

T_phase_dly++;

if(change_phase_EN!

=0)

{

if(T_phase_dly>400)

{

////////enhance_force(direction);/////

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

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

if(CCPR1L

elseCCPR1L=current_limit_duty;

if(direction==1)

{

Code_now_temp=Code_SW_phase_A;//checkthephaseandmarkdown

Code_now_temp=Code_now_temp<<1;

Code_now_temp|=Code_SW_phase_B;

Code_now_temp=Code_now_temp<<1;

Code_now_temp|=Code_SW_phase_C;

for(code=table_code;;code++)//checkthe9valueinthetable

{

if(*code==Code_now_temp)//pointtothenextmovement

{

code++;

if(*code==0)code=table_code;

Code_now_temp=*code;

Code_now_temp=Code_now_temp>>1;

PW=CARRY;

Code_now_temp=Code_now_temp>>1;

PV=CARRY;

Code_now_temp=Code_now_temp>>1;

PU=CARRY;

break;

}

}

}

else

{

Code_now_temp=Code_SW_phase_A;//checkthephaseandmarkdown

Code_now_temp=Code_now_temp<<1;

Code_now_temp|=Code_SW_phase_B;

Code_now_temp=Code_now_temp<<1;

Code_now_temp|=Code_SW_phase_C;

for(code=&table_code[5];;code--)//checkcurrentvalueinthetable

{

if(*code==Code_now_temp)//pointtothenextmovement

{

if(*code==table_code[0])code=&table_code[5]+1;

code--;

Code_now_temp=*code;

Code_now_temp=Code_now_temp>>1;

PW=CARRY;

Code_now_temp=Code_now_temp>>1;

PV=CARRY;

Code_now_temp=Code_now_temp>>1;

PU=CARRY;

break;

}

}

}

//

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

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

T_phase_dly=390;

}

if(T_phase_dly==T_phase_dly_target){change_phase(direction);}

}

ADGO=1;//checkthecurrentper0.1mS

if(begain!

=0)

{

if(T_phase>620){if(T_phase%680==0)CCPR1L=CCPR1L+8;if(CCPR1L>220)CCPR1L=190;}

if(T_phase_dly>600)

{

enhance_force1(direction);

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

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

T_phase_dly=0;

}

if(T_phase_dly==T_phase_dly_target)

{

//change_phase(direction);//

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

if(direction==CW)

{

PW=Code_SW_phase_A;

PU=Code_SW_phase_B;

PV=Code_SW_phase_C;

}

else

{

PV=Code_SW_phase_A;

PW=Code_SW_phase_B;

PU=Code_SW_phase_C;

}

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

}

}

}

//if(T0IF==1)

//{

//T0IF=0;

//TMR0=0;

////

//}

/*if(change_phase_EN!

=0)

//{

if(T_phase_dly>400)

{

enhance_force(direction);

T_phase_dly=390;

}

if(T_phase_dly==T_phase_dly_target){change_phase(direction);}

}*/

//checkthecurrentper0.1mS

//ADGO=1;

//}

//ADGO=1;

//}

if(TMR2IF==1)TMR2IF=0;//ConfigasPWMgenerator

if((RBIF==1)||(INTF==1))

{

//********************************************************************phasedelay&acceleratethetargetspeed

if(code_direction==direction)

{

T_phase_dly=0;//timecounterforphasedelay

T_phase_dly_target=Motor_CMD_speed/3;//setthephasedelaytotaltimes

}

if(begain==0)

{

if(change_phase_EN!

=0)

{

//if((GateDegreeCode_now100))

//{

//if((closephase+30)<(T_phase))change_phase_EN=0;

//}

//if(GateDegreeCode_now<160){if(Motor_CMD_speed>mashudu){Motor_CMD_speed-=3;}}//7月一日改,目的是在全程能换开门

//backshudu=T_phase;

//if(GateDegreeCode_nowmashudu){Motor_CMD_speed-=3;}}//7月一日改,目的是在全程能换开门

//bac

//else

//if(GateDegreeCode_now>=back_check_mark){if(Motor_CMD_speed

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

t1=T_phase;

if((GateDegreeCode_now<=(back_check_mark))&&(GateDegreeCode_now>=90)&&(open_1st!

=is_1st)&&(chongqi==0)){if(t1>t0){if((t1-t0)>100){change_phase_EN=0;}}}

if((GateDegreeCode_now<=(back_check_mark))&&(GateDegreeCode_now>=90)&&(open_1st!

=is_1st)&&(chongqi==0)){if(t1>Motor_CMD_speed){if((t1-Motor_CMD_speed)>40)pid1++;}}

if(pid1>18)change_phase_EN=0;

t0=T_phase;

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

if(T_phase>Motor_CMD_speed)//马达速度偏小

{

PWM_Duty_Temp=250-CCPR1L;

PWM_Duty_Temp*=T_phase-Motor_CMD_speed;

PWM_Duty_Temp/=T_phase;

PWM_Duty_Temp/=10;

//比例因子

if((GateDegreeCode_now<(back_check_mark))&&(GateDegreeCode_now>=530)){if(PWM_Duty_Temp>11){if((sqi==0)&&(chongqi==0))change_phase_EN=0;}}

//if(sqi==0){if(PWM_Duty_Temp>5)PWM_Duty_Temp=5;}

CCPR1L=PWM_Duty_Temp+CCPR1L;

//if((GateDegreeCode_now>=(back_check_positon))&&(GateDegreeCode_now<(GateDegreeCode_MAX-12)))CCPR1L=CCPR1L+2;

if((GateDegreeCode_now>=(back_check_positon-28)))CCPR1L=CCPR1L+2;

}

else

{

if(CCPR1L>0)

{

PWM_Duty_Temp=CCPR1L;

PWM_Duty_Temp*=Motor_CMD_speed-T_phase;

PWM_Duty_Temp/=Motor_CMD_speed;

PWM_Duty_Temp/=10;

//if(PWM_Duty_Temp>4)PWM_Duty_Temp=4;

//if(GateDegreeCode_now>(code_ABS_MAX-5))CCPR1L=CCPR1L-6;

if(chongqi==1){if(PWM_Duty_Temp>4)PWM_Duty_Temp=4;}

CCPR1L=CCPR1L-PWM_Duty_Temp;

if(GateDegreeCode_now>=(back_check_mark+1)){if(CCPR1L<50)CCPR1L=50;}

}

}

//firstphase=

closephase=T_phase;

}

if(code_direction==direction)

{

closephase=T_phase;

if(direction==direction_close)

{

//ek1=ek;

//if(shuan>closephase)ek=shuan-closephase;

if(pid==0)

{

Close_speed=0;

if(shuan>(closephase*3/9))

{

//Close_speed+=2;

if(Close_speed>=255)Close_speed=255;

pid=1;

//Close_speed=200-Close_speed;

Close_speed=200;

}

}

//if(

pid1+=1;

//if(GateDegreeCode_now<50)Close_speed=255;

if(pid1==4){Close_speed=Close_speed+1;pid1=0;if(Close_speed>255)Close_speed=255;}

if(shuan>closephase){Close_speed+=2;if(Close_speed>255)Close_speed=255;}

//if((pid==1)&&(pid1==0)){

//if(shuan>(closephase+3))

//{

//ek1=ek;

//pid1=1;

//ek=shuan-closephase;

//if(ek1>=ek)Close_speed=1*(ek1-ek)/4+Close_speed;

//else

//Close_speed=(ek-ek1)+Close_speed;

//if(Close_speed<225)

//Close_speed=Close_speed+1;

//if(Close_speed>255)Close_speed=255;

//NOP();

//}

//}

if((closephase>(shuan+3)))

{

yanshi+=1;

//ek1=ek;

//if(yanshi>6)

//{

//if(closephase>shuan)ek=closephase-shuan;

//if(ek1>=ek)Close_speed=-(ek1-ek)-ek+Close_speed;

//else

//Close_speed=-2*(ek-ek1)-ek+Close_speed;

//yanshi=0;

//}

//closephase=shuan-closephase;

//shuan=shuan/5;

//closephase=closephase*5;

//CCPR1L=CCPR1L-closephase;

if(yanshi>4){if(Close_speed>4)Close_speed=Close_speed-2;yanshi=0;}

}

/*///////////////////////////////////////////////////////////////

if(pid==0)

{

Close_speed=0;

if(shuan>(closephase*3/7))

{

Close_speed+=2;

if(Close_speed>=255)Close_speed=255;

pid=1;

Close_speed=220-Close_speed;

}

}

//if(

pid1+=1;

if(pid1==4){Close_speed=Close_speed+1;pid1=0;if(Close_speed>255)Close_speed=255;}

if(shuan>closephase){Close_speed+=3;if(Close_speed>255)Close_speed=255;}

//if((pid==1)&&(pid1==0)){

//if(shuan>(closephase+3))

//{

//ek1=ek;

//pid1=1;

//ek=shuan-closephase;

//if(ek1>=ek)Close_speed=1*(ek1-ek)/4+Close_speed;

//else

//Close_speed=(ek-ek1)+Close_speed;

//if(Close_speed<225)

//Close_speed=Close_speed+1;

//if(Close_speed>255)Close_speed=255;

//NOP();

//}

//}

if((closephase>(shuan+3)))

{

yanshi+=1;

//ek1=ek;

//if(yanshi>6)

//{

//if(closephase>shuan)ek=closephase-shuan;

//if(ek1>=ek)Close_speed=-(ek1-ek)-ek+Close_speed;

//else

//Close_speed=-2*(ek-ek1)-ek+Close_speed;

//yanshi=0;

//}

//closephase=shuan-closephase;

//shuan=shuan/5;

//closephase=closephase*5;

//CCPR1L=CCPR1L-closephase;

if(yanshi>3){if(Close_speed>2)Close_speed=Close_speed-1;yanshi=0;}

}

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

if(pid==0){if(closephase<=(shuan*2)){pid=1;Close_speed=250;}Close_speed=1;}

else

{

if(Close_speed<=250){if(GateDegreeCode_now%5==0)Close_speed=Close_speed+1;}

//if(GateDegreeCode_now==(GateDegreeCode_MAX-92))Close_speed=221;

//if(Close_speed<=250){if(GateDegreeCode_now%5==0)Close_speed=Close_speed+1;}

//Close_speed=Close_speed+shuan-closephase;

if(closephase>(shuan+8))

{

yanshi+=1;

//ek1=ek;

//if(yanshi>6)

//{

//if(closephase>shuan)ek=closephase-shuan;

//if(ek1>=ek)Close_speed=-(ek1-ek)-ek+Close_speed;

//else

//Close_speed=-2*(ek-ek1)-ek+Close_speed;

//yanshi=0;

//}

//closephase=shuan-closephase;

//shuan=shuan/5;

//closephase=closephase*5;

//CCPR1L=CCPR1L-closephase;

if(yanshi>6){if(Close_speed>2)Close_speed=Close_speed-2;yanshi=0;}

}

//if(closephase>(shuan+6))

//{

if(shuan>(closephase+1))

{

ek1=ek;

ek=shuan-closephase;

if(ek1>=ek)Close_speed

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

当前位置:首页 > 高等教育 > 农学

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

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