保护:
1、总电流最大30A,超过30A进行限流,限流30秒后切断电源输出,小车恢复初邕状态。
2、初次启动保护:小车上电后,如果电位器处于打开高速状态,小车不会前进,必须将电位器关闭再开启方可调节速度。
3、欠压保护:上电启动时电池电压低于11V,立即进入欠压保护;运行期间电压低于10.5V,30秒切断输出。
程序所采用的单片机是cypress的。
下面是主函数:
void main()
{
M8C_EnableGInt;
DELSIG_Start(DELSIG_FULLRANGE);
DELSIG_bCal(0x42,DELSIG_CAL_VBG );
if(!(PRT1DR & 0x10))
{
GreenLedFlash3();
GreenLedFlash3();
StudyIn();
while(1);
}
else
{
ReadOut();
if((ReadOutBuffer[0] == 48)&&(ReadOutBuffer[1] == 48)&&(ReadOutBuffer[2] == 48))
{
ReadOutBuffer[0] = 207;
ReadOutBuffer[1] = 198;
ReadOutBuffer[2] = 189;
}
}
Init();
start:
while(VehicleState == 0)
{
if (ADSample(CHANNEL_7) < 25) //CHANNEL_7所采样的是电机速度;
VehicleState = V_STOP;
RedLedFlash();
}
PWM_DisableInt();
Timer_EnableInt();
WorkMode = 0;
CurrentTime = 0;
VoltageTime = 0;
PWM = 0;
SystemInit();
PWM_WritePulseWidth(0);
while(1)
{
WorkMode = ADSample(CHANNEL_7);
if (WorkMode > = 26)
{
if (VehicleState == V_STOP)
{
PWM_Start();
VehicleState = V_RUN;
}
if(WorkMode > 240)
WPWM = 255;
else
{
WPWM = WorkMode+10;
}
if (CurrentTime == 0)
{
if (PWM < WPWM)
PWM++;
if (PWM > WPWM)
PWM--;
}
else
{
if (WPWM < 145)
PWM = WPWM;
}
Current = ADSample(CHANNEL_3); //电流采样;
if(Current > 43)
{
if (CurrentTime == 0)
{
CurrentTime = 1;
}
if (Current <= 45)
if(PWM < 220)
PWM ++;
if (Current > 49)
if(PWM > 68)
PWM -= 3;
}
else
CurrentTime = 0;
PWM_WritePulseWidth(PWM);
if (CurrentTime > = 30)
{
PWM_Stop();
CurrentTime = 0;
VehicleState = 0;
goto start;
}
}
else
{
VehicleState = V_STOP;
PWM_Stop();
PWM = 0;
WPWM = 0;
VoltageTime = 0;
CurrentTime = 0;
}
Voltage = ADSample(CHANNEL_5);//电压采样;
if(PWM > 26)
{
LV = ReadOutBuffer[2] - 8;
}
else
{
LV = ReadOutBuffer[2] ;
}
if (Voltage < LV)
{
if (VoltageTime == 0)
VoltageTime = 1;
}
else
VoltageTime = 0;
LedLight(Voltage);
if (VoltageTime > 30)
{
PWM_WritePulseWidth(0);
PWM_Stop();
Timer_Stop();
DELSIG_Stop();
while(1)
RedLedFlash();
}
}
}
if (ADSample(CHANNEL_7) < 25)这里面的25具体是怎么得出的。
PWM与WPWM两个相互比较,代表什么意思。
希望有高手能够指点下,在此表示感谢。