1、换挡急促
if((CMD_DUTY>=0) && (CMD_DUTY<=5)){
ucGear_level = 0;
uiRPMtarget = 0;
gBitPwmquickflag = 0;
}
else{
switch (CMD_DUTY)
{
case 10:
case 11:
if(ucGear_level != 1){
gBitPwmquickflag = 0;
}
ucGear_level = 1;
break;
case 30:
case 31:
if(ucGear_level != 2){
gBitPwmquickflag = 0;
}
gBitPwmquickflag = 0;
ucGear_level = 2;
break;
case 60:
case 61:
if(ucGear_level != 3){
gBitPwmquickflag = 0;
}
gBitPwmquickflag = 0;
ucGear_level = 3;
break;
case 80:
case 81:
if(ucGear_level != 4){
gBitPwmquickflag = 0;
}
gBitPwmquickflag = 0;
ucGear_level = 4;
break;
case 90:
case 91:
if(ucGear_level != 5){
gBitPwmquickflag = 0;
}
gBitPwmquickflag = 0;
ucGear_level = 5;
break;
case 99:
case 100:
gBitPwmquickflag = 0;
if(ucGear_level != 6){
gAIcnt = 0;
uiRPMtarget = 1600;
}
ucGear_level = 6;
break;
default:
break;
}
}
void Speedcontrol(void)
{
static unsigned char cnt = 0;
if(gBitPwmquickflag == 0){
cnt++;
if(cnt < 30){
return;
}
cnt = 0;
}
if(bSpeedChange == 1)
{
uiRPMactual = 1785700 / uiSpeedTimer; //7 duiji
// uiRPMactual = 2500000 / uiSpeedTimer; //5 duiji
bSpeedChange = 0;
}
if(uiRPMactual < (uiRPMtarget - 200))
{
if(bCurrent_limit == 0)
{
if(ucGear_level == 6)//AI dang
uiPWMDuty_Final +=3;
else
uiPWMDuty_Final +=4;
}
}
else if(uiRPMactual < (uiRPMtarget - 50))
{
gBitPwmquickflag = 1;
if(bCurrent_limit == 0)
{
uiPWMDuty_Final ++;
}
else
{
gDowncnt++;
if(gDowncnt >= 2){
gDowncnt = 0;
uiPWMDuty_Final --;
}
}
}
else if (uiRPMactual > (uiRPMtarget + 200))
{
uiPWMDuty_Final --;
}
else if (uiRPMactual > (uiRPMtarget + 50))
{
gBitPwmquickflag = 1;
gDowncnt++;
if(gDowncnt >= 2){
gDowncnt = 0;
uiPWMDuty_Final --;
}
}
if(uiPWMDuty_Final > uiPWM_MAX)
{
uiPWMDuty_Final = uiPWM_MAX;
}
if(uiPWMDuty_Final < uiPWM_MIN)
{
uiPWMDuty_Final = uiPWM_MIN;
}
_dutr0h = (unsigned char)(uiPWMDuty_Final >> 8);
_dutr0l = (unsigned char)uiPWMDuty_Final;
_pwmsuf = 1;
}
PWM影响转速,当目标转速离实际转速相差较大时,转速提升就大一点,相差较小时,转速提升就小一点。
提升转速的场景有换挡和按压两种情况,换挡的时候把标志位置起来,然后进入speedcontrol函数里面识别到标志位就需要计时,没有识别到标志位则认为是按压状况,不需要计时器。
2、灯的亮度不同
增加暗的灯的灯光扫描次数,它的频率增加了,灯就变亮了。
同样的,由于暗的灯的扫描次数增加了,总的扫描次数也增加了。
相应的亮的灯扫描次数占的比重就少了,频率也小了,亮度就小了。
疑惑的点:以前挡位灯亮的时候,结合结构看不太出来颜色不均匀,现在挡位灯占的比重少了,颜色越看越不均匀。
3、芯海时钟配置
1、TM0CON寄存器
禁止定时器0--TM0CK/16--使能定时器0复位--时钟源选择CPUCLK
1、CPUCLK
cpuclk是受MCK~MCK/8影响的,它两的指令周期是2000KHz(默认)
时钟源是2000KHz,然后时钟分频是/16,所以时钟源分频后是125KHz,也就是0.008ms
2、TM0IN
定时器0的输入为CPUCLK或WDTCLK。在定时器0集成了一个分频器,分频的时钟TM0CLK作为8bits计数器的输入时钟。当用户设置了定时器0模块的使能标志,8bits计数器将启动,将会从00H递增到TM0IN。用户需设置TM0IN(定时器0模块终端信号选择器)以选择定时超时中断信号。当定时超时发生时,中断标志位会自设置,程序计数器会跳转到0004H以执行中断服务程序。
综上:我设置的TM0IN为25,时钟源分频后为0.008ms一次,所以中断服务函数每0.2ms执行一次。