⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pwm_120slc20.c

📁 实现120无传感器变频输出
💻 C
📖 第 1 页 / 共 4 页
字号:
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 + -