📄 wushua.c
字号:
void AD_Sample(void)
{
// if(AD_Turn==0)
{
Power_Voltage=AD_Convert(AD_CHNNEL0); //采样电源电压
}
// else if(AD_Turn==1)
{
Speed_Voltage=AD_Convert(AD_CHNNEL1); //采样速度电压
}
AD_Turn++;
if(AD_Turn==2) AD_Turn=0;
//%%%%%%%%%%%%%%%%%%%%%%%
if(Power_Voltage>PWR_3_HIGH){PWR_LED3=1;}
else if(Power_Voltage<=PWR_3_LOW) {PWR_LED3=0;}
if(Power_Voltage>PWR_2_HIGH)
{
PWR_LED2=1;
}
else if(Power_Voltage<=PWR_2_LOW) {PWR_LED2=0;}
if(Power_Voltage>PWR_1_HIGH)
{
Pwr_Up_Num++;
if(Pwr_Up_Num>200)
{
Pwr_Low_Count=0;
PWR_LOW_STA=0; //退出正式欠压状态
Pwr_Low_Num=0;
Pwr_Up_Num=0;
}
PWR_LED1=1;
}
else if(Power_Voltage<=PWR_1_LOW)
{
PWR_LED1=0;
}
if(Power_Voltage>PWR_0_HIGH)
{
if(PWR_LOW) //欠压状态
{
PWR_LOW=0;
Pwr_Low_Count++;
if(Pwr_Low_Count>20)
{
PWR_LOW_STA=1; //进入正式欠压状态
ZHULI=1;
DIANDONG=0;
DINGSU=0;
}
}
Pwr_Low_Num=0;
PWR_LED0=1;
}
else if(Power_Voltage<=PWR_0_LOW)
{
PWR_LED0=0;
if(WORK_STA)
{
Pwr_Low_Num++;
if(Pwr_Low_Num>100)
{
PWR_LOW=1;
Pwr_Low_Num=0;
}
Pwr_Up_Num=0;
} }
if(!WORK_STA) Main_Flag1=0;
//%%%%%%%%%%%%%%%%%%%%%%%
if(BREAK_ST||PWR_LOW_STA)
{
Pwm_Duty=0;
Zhuli_Duty=0;
Zhuli_Count=0;
Zhuli_Count1=0;
Zhuli_Count2=0;
} //刹车状态duty=0
else if(PWR_LOW) //欠压不输出
{
Pwm_Duty=0;
}
else if(DINGSU)
{
Pwm_Duty=DS_Pwm_Duty;
}
else if(ZHULI) //在助力状态
{
if(!DIANDONG)
{
Old_ZL_Duty=Pwm_Duty;
if(Zhuli_Duty<1) Pwm_Duty=0;
else if(Zhuli_Duty<15) Pwm_Duty=64+6*Zhuli_Duty;
else Pwm_Duty=158;
if(Pwm_Duty<Old_ZL_Duty&&Pwm_Duty!=0)
{
Pwm_Duty=Old_ZL_Duty-2;
}
}
}
else //if(DIANDONG) //不在定速状态
{
if(Speed_Voltage<=START_RUN)
{
if(Pwm_Duty>3) Pwm_Duty-=1;
else Pwm_Duty=0;
CUR_LIMIT=0;
CUR_OVER=0;
}
if(Speed_Voltage>START_RUN)
{
if(WORK_STA)
{
Pwm_Duty=(Speed_Voltage-40);
if(Pwm_Duty>DS_Pwm_Duty)
{
if(Pwm_Duty-DS_Pwm_Duty>3)
{
Pwm_Duty=DS_Pwm_Duty+2;
}
}
if(Pwm_Duty>157) Pwm_Duty=158;
}
if(PWR_ON)
{
ERR_SPEED=1;
WITH_ERR=1;
Time_Err_Speed=255-Speed_Voltage;
Time_Err_Speed>>=1;
}
}
DS_Pwm_Duty=Pwm_Duty;
}
if(ERR_SPEED)
{
Pwm_Duty=0;
if(Speed_Voltage<75)
{
ERR_SPEED=0;
Disp_Data_Old=0x55;
}
}
if(Speed_Voltage<60)
{
Time_Motor_Ph=0;
}
if(Time_Motor_Ph>50)
{
Pwm_Duty=0;
CUR_OVER=0;
CUR_LIMIT=0;
}
Pwm_High=Pwm_Duty;
if(!UP_SPEED) //速度极限控制在80%
{
if(Pwm_Duty>135)
{
Pwm_Duty=135; //速度极限控制在86%
}
}
if(Pwm_Old>Pwm_High)
{
if(Pwm_Old-Pwm_High>40)
{
CUR_OVER=0;
CUR_LIMIT=0;
Pwm_Old=Pwm_High;
}
}
if(CUR_LIMIT) //限流状态, Duty=1/2 Duty
{
if(CUR_OVER)
{
if(Pwm_Low>Pwm_Old-65)
{
if(Time_Motor_Ph>2) {Pwm_Low-=1;}
else Pwm_Low-=2;
}
else
{
Pwm_Low=Pwm_Old-65;
}
CCPR1L=Pwm_Low;
}
else
{
if(CCPR1L>65)
{
CUR_OVER=1; //Current over status
if(Pwm_High>135) Pwm_High=135;
Pwm_Old=Pwm_High;
Pwm_Low=CCPR1L;//Pwm_High/2;//-Pwm_High/3;
CCPR1L=Pwm_Low;
}
}
}
else
{
if(CUR_OVER)
{
if(Pwm_Low<Pwm_Old)
{
Pwm_Low+=1;
}
if(Pwm_Low>CCPR1L)
{
if(Pwm_Low-CCPR1L>3) CCPR1L+=3;
else CCPR1L=Pwm_Low;
}
else CCPR1L=Pwm_Low;
}
else
{
if(Pwm_Duty>CCPR1L)
{
if(Pwm_Duty-CCPR1L>3) CCPR1L+=3;
else CCPR1L=Pwm_Duty;
}
else
{
CCPR1L=Pwm_Duty;
}
}
}
}
//*************************************************
//
// 助力霍尔检测子程序
//
//*************************************************
void Zhuli_Hall_DTC(void)
{
if(ZHULI_DTC)
{
Zhuli_High++;
if(Zhuli_High>100) Zhuli_High=2;
if(Zhuli_High==2)
{
Zhuli_Low_Bak=Zhuli_Low;
Zhuli_Low=0;
if(Zhuli_Low_Bak>1&&Zhuli_High_Bak>4&&Zhuli_High_Bak>Zhuli_Low_Bak+3)
{
if(ZHULI) //助力状态
{
Zhuli_Count++; //正转有效
}
}
}
}
else
{
Zhuli_Low++;
if(Zhuli_Low>100) Zhuli_Low=2;
if(Zhuli_Low==2)
{
Zhuli_High_Bak=Zhuli_High;
Zhuli_High=0;
if(Zhuli_High_Bak>1&&Zhuli_Low_Bak>4&&Zhuli_Low_Bak>Zhuli_High_Bak+3)
{
NOP();
}
}
}
if(TIME_ZHULI_OK) //助力信号检测1s到
{
Zhuli_Duty=(Zhuli_Count+Zhuli_Count1+Zhuli_Count2);
Zhuli_Count2=Zhuli_Count1;
Zhuli_Count1=Zhuli_Count;
TIME_ZHULI_OK=0;
Zhuli_Count=0;
}
}
//*************************************************
//
// 换相处理子程序
//
//*************************************************
void Change_Phase(void)
{
Phase_Dtc=PORTB;
Phase_Dtc>>=4;
Phase_Dtc&=0x07;
if((!WORK_STA)||BREAK_EN)
{
Phase_Dtc_Old=0;
PORTC=PHASE_DATA[0];
}
else
{
if(Phase_Dtc!=Phase_Dtc_Old)
{
Phase_Dtc_Old=Phase_Dtc;
PORTC&=0xFB;
if(Time_Motor_Ph<=50)
{
Phase_Ch_Count1++;
if(Phase_Ch_Count1>8)
{
Phase_Ch_Count1=0;
Time_Motor_Ph=0;
Phase_Ch_Count=0;
}
}
if(Time_Motor_Ph>50)
{
Phase_Ch_Count++;
}
if(Phase_Ch_Count>5)
{
Time_Motor_Ph=0;
Phase_Ch_Count=0;
}
PORTC=PHASE_DATA[Phase_Dtc_Old];
}
}
}
//*************************************************
//
// 主程序
//
//*************************************************
void main(viod)
{
Initial();
PWR_ON=1; //首次上电标志
ADON=1;
Phase_Dtc_Old=0xAA;
Disp_Data_Old=0xAA;
LOOP:
if((!WORK_STA)&&(!PWR_ON))
{
if(!WITH_ERR)
{
if((Main_Flag2&0xE0)==0)
{
WORK_STA=1; //开锁后开始运行标志
DINGSU=0;
DIANDONG=1; //在电动状态
ZHULI=0;
}
}
}
if(WITH_ERR) PWR_ON=1;
CLRWDT();
Change_Phase();
if(MS_1_OK)
{
MS_1_OK=0;
if(!CURRENT)
{
CUR_LIMIT=1;
Current_High++;
Cur_Over_Count=0;
}
else
{
CUR_LIMIT=0;
Current_High=0;
Cur_Over_Count++;
if(Cur_Over_Count>100)
{
Cur_Over_Count=100;
CUR_OVER=0;
}
}
}
if(MS_5_OK)
{
GIE=0;
MS_5_OK=0;
AD_Sample();
Led_Display();
Key_Dtc();
Zhuli_Hall_DTC();
if(KEY_PRO_EN) Key_Process();
GIE=1;
}
goto LOOP;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -