📄 pwm_120slc20.c
字号:
static UINT_8 speedvalflag = 1;
static UINT_16 cnt_wr_ref = 0;
//static const UINT_16 wr_ref_no = 133*4; //40 sec
static const UINT_16 SpdChgArray[3] = {100,200,400};
static void pwm_tujo(void)
{
SINT_16 set_tim;
SINT_16 stg_p;
SINT_16 w_si16;
UINT_16 speedchgdelay;
UINT_8 SpdChgIndex;
// //2005-8-9 8:21
// if ( 1 == tb2chg )
// {
//
// tb2chg = 0;
// tb2s = 0;
// tb2 = CARR_CNT_4K - 1;
// ir_tb2ic = 0;
// tb2s = 1;
// }
// //end of 2005-8-9 8:21
/* if ( wr_soft.wrd.hi > 1256) //50rps
{
if ( wr_act <= 2240 )
{
speedchgdelay = 750;//1200;//4800;//1200;//1Hz//1200;//1800; // 75*4ms elapsed? (CNT_WR_ACT_4K)
}
else
{
speedchgdelay = 250;
}
}
else
{
speedchgdelay = 200; //2Hz// 50ms elapsed? (CNT_WR_ACT_4K)
}*/ //2006.7.25
//SpdChgIndex = g_RxdDat[1]/3;
// if ( SpdChgIndex > 2) SpdChgIndex = 2;
if( g_RxdDat[1] < 3 )
{
SpdChgIndex = 0;
}
else
{
if ( g_RxdDat[1] < 7 )
{
SpdChgIndex = 1;
}
else
{
SpdChgIndex = 2;
}
}
speedchgdelay = SpdChgArray[SpdChgIndex];//800; //800*200/1000=160MS*2*PI 1HZ/S
// set_tim = CARR_CNT_4K - ((pwm_duty * (SINT_32)CARR_CNT_4K) >> Sft_DUTY_120_TIME);
set_tim = ((pwm_duty * (SINT_32)CARR_CNT_4K) >> Sft_DUTY_120_TIME);
if(set_tim >= (CARR_CNT_4K - 1)) set_tim = CARR_CNT_4K - 1;
if(set_tim <= 1) set_tim = 1;
ta4 = ta1 = ta2 = set_tim;
cnt_wr_act ++;
if(cnt_wr_act >= speedchgdelay)
{
cnt_wr_act = 0;
if(wr_ref > wr_soft.wrd.hi) wr_soft.wrd.hi+=1;
if(wr_ref < wr_soft.wrd.hi) wr_soft.wrd.hi-=1;
/* Modified by WRD 2006/07/26 8:34*/
//dlt_cnt_ref = K_WR_ACT_120SL/ (wr_soft.wrd.hi*6);
dlt_cnt_ref = K_WR_ACT_120SL/ wr_soft.wrd.hi;
/* End of Modified by WRD 2006/07/26 8:34*/
}
if(stop_chk() == 1) out_mode = STOP_MODE;
}
/****************************************************************************/
/* */
/* cal_duty */
/* */
/****************************************************************************/
static void cal_sub_wr_duty(void)
{
SINT_16 dlt_wr;
SINT_16 dlt_pwmduty;
SINT_16 dlt_act_cnt;
#ifdef DEBUG_SIM
TIMEBASETEST;
#endif
// if ( dlt_cnt > reloadcnt_map + chkoncnt_map )//
// {
dlt_30deg_cntmap = dlt_30deg_cnt;
dlt_30deg_cnt = 0;
commutation_FLAG = 0;
cur_dlt_cnt = dlt_cnt;
// dlt_cnt_ref = K_WR_ACT_120SL/ (wr_soft.wrd.hi*6);
// if ( dlt_cnt < 16 )
// {
// if ( dlt_cnt < dlt_cnt_ref )
// {
// dlt_cnt = dlt_cnt_ref;
// }
// }
if ( (wr_act > 754)&& ( 1== dlt_FLAG ) ) //)
{
//dlt_cnt_array[cal_cnt] = dlt_cnt;
// avr_dlt_cnt = dlt_cnt_array[0] + dlt_cnt_array[1] + dlt_cnt_array[2]
// +dlt_cnt_array[3] + dlt_cnt_array[4] + dlt_cnt_array[5]+dlt_cnt_array[6]
// + dlt_cnt_array[7] + dlt_cnt_array[8]
// +dlt_cnt_array[9] + dlt_cnt_array[10] + dlt_cnt_array[11];
dlt_sum -= dlt_cnt_array[cal_cnt];
dlt_sum += dlt_cnt;
dlt_cnt_array[cal_cnt] = dlt_cnt;
cal_cnt ++;
if ( cal_cnt > 11 ) cal_cnt = 0;
//modified on 2006-2-6 16:19
avr_dlt_cnt = dlt_sum;
dlt_act_cnt = dlt_sum;
if( wr_act > 1256 )
{
avr_dlt_cnt += 6;
}
// endof modified on 2006-2-6 16:19
avr_dlt_cnt = avr_dlt_cnt/12;
//avr_dlt_cnt = ((SINT_32)avr_dlt_cnt * 5641) >> 16;
wr_act = dlt_wr_conv[avr_dlt_cnt - DLT_OFFSET];//K_WR_ACT_120SL/(avr_dlt_cnt *6);
dlt_cnt = avr_dlt_cnt ;
}
else
{
if( 1 == dlt_FLAG )
{
dlt_sum -= dlt_cnt_array[cal_cnt];
}
dlt_sum += dlt_cnt;
dlt_cnt_array[cal_cnt] = dlt_cnt;
cal_cnt ++;
if ( cal_cnt > 11 )
{
cal_cnt = 0;
dlt_FLAG = 1;
}
//wr_act = K_WR_ACT_120SL / (dlt_cnt *6); /* 100531 = 4000(carier 4k) * 2 * pai * 2^2 */
avr_dlt_cnt = dlt_cnt;
wr_act = dlt_wr_conv[avr_dlt_cnt - DLT_OFFSET];
}
pre_dlt_cnt = dlt_cnt ;
reload_cnt = dlt_cnt >>1;//cur_dlt_cnt - reloadcnt_map;//
// if ( wr_act > 1269)
// {
// if ( wr_act <= 2204 )
// {
reload_cnt -= reload_cnt_offset;
// }
// else
// {
// reload_cnt += 8;
// }
// }
reload_cnt_cal = cur_dlt_cnt - reloadcnt_map;
reloadcnt_map = reload_cnt;
dlt_cnt = 0;
#ifndef SIM
dlt_wr_map = wr_soft.wrd.hi - wr_act;
dlt_wr = 0;
if ( wr_act <754)
{
dlt_wr = 0;
dlt_pwmduty = 2 * 2;
}
else
{
if ( wr_act <= 2204)
{
dlt_wr = 0;
dlt_pwmduty = 1;//8;//1
}
else
{
dlt_wr = 0;
dlt_pwmduty = 4;//10;//1
}
}
if ( wr_act < 1256 )
{
if((wr_soft.wrd.hi > 0) &&(dlt_cnt_ref < (pre_dlt_cnt * 6)))//(dlt_cnt_ref < pre_dlt_cnt )&&(wr_act + dlt_wr < wr_soft.wrd.hi )&&(wr_act <= wr_act_map )) //&&(wr_act <= wr_act_map )
{
if ( pwm_duty < 0x7fff) pwm_duty += dlt_pwmduty;
}
if((wr_soft.wrd.hi > 0)&&(dlt_cnt_ref > (pre_dlt_cnt * 6) ))// (dlt_cnt_ref > pre_dlt_cnt ))//&& ( wr_act > wr_soft.wrd.hi + dlt_wr )&&(wr_act > wr_act_map)) &&(wr_act > wr_act_map )
{
if ( pwm_duty > 0) pwm_duty -= dlt_pwmduty;//1;//(DLT_DUTY_120/4);
}
}
else
{
if ( cal_cnt == 3 ) // stage == 3
{
if (wr_soft.wrd.hi == wr_ref )
{
if((wr_soft.wrd.hi > 0) &&((dlt_cnt_ref * 2)< dlt_act_cnt ))//(wr_act < wr_soft.wrd.hi )(dlt_cnt_ref < pre_dlt_cnt )(dlt_cnt_ref < pre_dlt_cnt )&&(wr_act + dlt_wr < wr_soft.wrd.hi )&&(wr_act <= wr_act_map )) //&&(wr_act <= wr_act_map )
{
if ( pwm_duty < 0x7fff) pwm_duty += 1;//dlt_pwmduty;
}
if((wr_soft.wrd.hi > 0)&&((dlt_cnt_ref*2) > dlt_act_cnt ))// (wr_act > wr_soft.wrd.hi )(dlt_cnt_ref > pre_dlt_cnt ))//&& ( wr_act > wr_soft.wrd.hi + dlt_wr )&&(wr_act > wr_act_map)) &&(wr_act > wr_act_map )
{
if ( pwm_duty > 0) pwm_duty -= 1;//dlt_pwmduty;//1;//(DLT_DUTY_120/4);
}
}
else
{
if((wr_soft.wrd.hi > 0) &&((dlt_cnt_ref*2) < dlt_act_cnt ))//(wr_act < wr_soft.wrd.hi )(dlt_cnt_ref < pre_dlt_cnt )(dlt_cnt_ref < pre_dlt_cnt )&&(wr_act + dlt_wr < wr_soft.wrd.hi )&&(wr_act <= wr_act_map )) //&&(wr_act <= wr_act_map )
{
if ( pwm_duty < 0x7fff) pwm_duty += dlt_pwmduty;
}
if((wr_soft.wrd.hi > 0)&&((dlt_cnt_ref*2) > dlt_act_cnt ))// (wr_act > wr_soft.wrd.hi )(dlt_cnt_ref > pre_dlt_cnt ))//&& ( wr_act > wr_soft.wrd.hi + dlt_wr )&&(wr_act > wr_act_map)) &&(wr_act > wr_act_map )
{
if ( pwm_duty > 0) pwm_duty -= dlt_pwmduty;//1;//(DLT_DUTY_120/4);
}
}
}
}
#else
dlt_wr_map = wr_soft.wrd.hi - wr_act;
dlt_wr = 0;
if ( wr_act <754)
{
dlt_wr = 0;
dlt_pwmduty = 2 * 2;
}
else
{
dlt_wr = 0;
dlt_pwmduty = 1;
}
if ( wr_act < 1256 )
{
if((wr_soft.wrd.hi > 0) &&(dlt_cnt_ref < pre_dlt_cnt ))//(dlt_cnt_ref < pre_dlt_cnt )&&(wr_act + dlt_wr < wr_soft.wrd.hi )&&(wr_act <= wr_act_map )) //&&(wr_act <= wr_act_map )
{
if ( pwm_duty < 0x7fff) pwm_duty += dlt_pwmduty;
if ( phaseperiodbuf > 30)
{
phaseperiodbuf -- ;
}
else
{
phaseperiodbuf = 30;
}
}
if((wr_soft.wrd.hi > 0)&&(dlt_cnt_ref > pre_dlt_cnt ))// (dlt_cnt_ref > pre_dlt_cnt ))//&& ( wr_act > wr_soft.wrd.hi + dlt_wr )&&(wr_act > wr_act_map)) &&(wr_act > wr_act_map )
{
if ( pwm_duty > 0) pwm_duty -= dlt_pwmduty;//1;//(DLT_DUTY_120/4);
if ( phaseperiodbuf < 1200 )
{
//phaseperiodbuf = ((K_WR_ACT_120SL/wr_act)) + 10;
phaseperiodbuf ++;
}
else
{
phaseperiodbuf = 1200;
}
}
}
else
{
if ( stage == 3) //stage == 3cal_cnt == 3
{
if((wr_soft.wrd.hi > 0) &&(dlt_cnt_ref < pre_dlt_cnt ))//(wr_act < wr_soft.wrd.hi )(dlt_cnt_ref < pre_dlt_cnt )(dlt_cnt_ref < pre_dlt_cnt )&&(wr_act + dlt_wr < wr_soft.wrd.hi )&&(wr_act <= wr_act_map )) //&&(wr_act <= wr_act_map )
{
if ( pwm_duty < 0x7fff) pwm_duty += dlt_pwmduty;
if ( phaseperiodbuf > 30)
{
phaseperiodbuf -- ;
}
else
{
phaseperiodbuf = 30;
}
}
if((wr_soft.wrd.hi > 0)&&(dlt_cnt_ref > pre_dlt_cnt ))// (wr_act > wr_soft.wrd.hi )(dlt_cnt_ref > pre_dlt_cnt ))//&& ( wr_act > wr_soft.wrd.hi + dlt_wr )&&(wr_act > wr_act_map)) &&(wr_act > wr_act_map )
{
if ( pwm_duty > 0) pwm_duty -= dlt_pwmduty;//1;//(DLT_DUTY_120/4);
if ( phaseperiodbuf < 1200 )
{
//phaseperiodbuf = ((K_WR_ACT_120SL/wr_act)) + 10;
phaseperiodbuf ++;
}
else
{
phaseperiodbuf = 1200;
}
}
}
}
#endif
if(pwm_duty >= MAX_DUTY_120) pwm_duty = MAX_DUTY_120;
if(pwm_duty <= MIN_DUTY_120) pwm_duty = MIN_DUTY_120;
pwm_duty_map = pwm_duty;
wr_act_map = wr_act;
if ( reload_stg == 5 )
{
reload_stg = 0;
}
else
{
reload_stg ++;
}
if ( ActSpdCnt < MaxActSpd )
{
ActSpdCnt ++;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -