亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? pmsm.c

?? Source Code for Sensorless FOC for PMSM with PFC for dsPIC30F6010A
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
			SnapShotDelayCnt = 0;
			// Log data in the snapshot buffers
	       	if( uGF.bit.DoSnap )
	        {
		     SnapBuf1[SnapCount] = SNAP1;
		     SnapBuf2[SnapCount] = SNAP2;  
		     SnapBuf3[SnapCount] = SNAP3;   
		     SnapCount++;    
	         if(SnapCount == SNAPSIZE)
	            {
					SnapCount = 0;
	                uGF.bit.SnapDone=1;
	                uGF.bit.DoSnap = 0;
	            }
	         }
   		}
       	#endif
       
       
        // If the application is running in torque mode, the velocity
        // control loop is bypassed.  The velocity reference value, read
        // from the potentiometer, is used directly as the torque 
        // reference, VqRef.
       	
        // PI control for Q
        PIParmQ.qInMeas = ParkParm.qIq;
        PIParmQ.qInRef  = CtrlParm.qVqRef;
        CalcPI(&PIParmQ);
        ParkParm.qVq    = PIParmQ.qOut;       

        // PI control for D
        PIParmD.qInMeas = ParkParm.qId;
        PIParmD.qInRef  = CtrlParm.qVdRef;
        CalcPI(&PIParmD);
        ParkParm.qVd    = PIParmD.qOut;

        }
}

//---------------------------------------------------------------------
// The ADC ISR does speed calculation and executes the vector update loop.
// The ADC sample and conversion is triggered by the PWM period.
// The speed calculation assumes a fixed time interval between calculations.
//---------------------------------------------------------------------

void __attribute__((__interrupt__)) _ADCInterrupt(void)
{
		_RG0 = 1;
        IFS0bits.ADIF = 0;
        
        // Increment count variable that controls execution
        // of display and button functions.
        iDispLoopCnt++;
        
        // acumulate position counts since last interrupt  
        CalcVelIrp();  
     
        if( uGF.bit.RunMotor )
                {
                
                // Set LED1 for diagnostics
                pinLED1 = 1; 
                
                // use TMR1 to measure interrupt time for diagnostics
                TMR1 = 0;           
                iLoopCnt = TMR1;
		 
		        // Calculate qIa,qIb
                MeasCompCurr();
                
				// Calculate qAngle from QEI Module
				CalculateParkAngle();

                // Calculate qId,qIq from qSin,qCos,qIa,qIb
                ClarkePark();
                               
                // Calculate control values
                DoControl();
							
                // Calculate qSin,qCos from qAngle
                SinCos();

                // Calculate qValpha, qVbeta from qSin,qCos,qVd,qVq
                InvPark();    

                // Calculate Vr1,Vr2,Vr3 from qValpha, qVbeta 
                CalcRefVec();

                // Calculate and set PWM duty cycles from Vr1,Vr2,Vr3
                CalcSVGen();
                
                // Measure loop time
                iLoopCnt = TMR1 - iLoopCnt;
                if( iLoopCnt > iMaxLoopCnt )
                    iMaxLoopCnt = iLoopCnt;
                               
                // Clear LED1 for diagnostics
                pinLED1 = 0;
                }    
		_RG0 = 0;
}

//---------------------------------------------------------------------
// SetupBoard
//
// Initialze board
//---------------------------------------------------------------------

void SetupBoard( void )
{
    BYTE b;

    // Disable ADC interrupt
    IEC0bits.ADIE = 0; 

    // Reset any active faults on the motor control power module.
    pinFaultReset = 1;
    for(b=0;b<10;b++)
        Nop();
    pinFaultReset = 0;


    // Ensure PFC switch is off.
    pinPFCFire = 0;
    // Ensure brake switch is off.
    pinBrakeFire = 0;
}

//---------------------------------------------------------------------
// Dis_RPM
//
// Display RPM
//---------------------------------------------------------------------
void Dis_RPM( BYTE bChrPosC, BYTE bChrPosR )
{
	if (FilteredOmega < 0)
	    Wrt_S_LCD("-", bChrPosC, bChrPosR);
	else
	    Wrt_S_LCD("+", bChrPosC, bChrPosR);
	
	iRPM_old = iRPM;
	iRPM = (int)((float)(FilteredOmega / 32768.0) * 60.0) / \
           (SPEED_CONSTANT * diIrpPerCalc * diPoles * dLoopTimeInSec * 2.0);
    iRPM = (iRPM + iRPM_old) >> 1;
    Wrt_Signed_Int_LCD( iRPM, bChrPosC, bChrPosR);

	if (__OffsetTheta < 0)
	    Wrt_S_LCD("-", bChrPosC+6, bChrPosR);
	else
	    Wrt_S_LCD("+", bChrPosC+6, bChrPosR);
	
	iOffset_old = iOffset;       
    iOffset = __OffsetTheta/90;
    iOffset = (iOffset + iOffset_old) >> 1;
	Wrt_Signed_Int_LCD(iOffset, bChrPosC+7, bChrPosR);
}    

//---------------------------------------------------------------------
bool SetupParm(void)
{
    // Turn saturation on to insure that overflows will be handled smoothly.
    CORCONbits.SATA  = 0;

    // Setup required parameters
 
    // Number of pole pairs
    MotorParm.iPoles        = diPoles ;

    // Basic loop period (in sec).  (PWM interrupt period)
    MotorParm.fLoopPeriod = dLoopInTcy * dTcy;  //Loop period in cycles * sec/cycle

    // Encoder velocity interrupt period (in sec). 
    MotorParm.fVelIrpPeriod = MotorParm.fLoopPeriod;

    // Number of vel interrupts per velocity calculation.
    MotorParm.iIrpPerCalc = diIrpPerCalc;       // In loops 

    // Scale mechanical speed of motor (in rev/sec)
    MotorParm.fScaleMechRPS = MotorParm.iScaleMechRPM/60.0;

    // Scaled flux speed of motor (in rev/sec)
    // All dimensionless flux velocities scaled by this value.
    MotorParm.fScaleFluxRPS = MotorParm.iPoles*MotorParm.fScaleMechRPS;

    // Fraction of revolution per LoopTime at maximum flux velocity
    MotorParm.fScaleFracRevPerLoop = MotorParm.fLoopPeriod * MotorParm.fScaleFluxRPS; 

    // Scaled flux speed of motor (in radians/sec)
    // All dimensionless velocities in radians/sec scaled by this value.
    MotorParm.fScaleFluxSpeed = 6.283 * MotorParm.fScaleFluxRPS;

    // Encoder count rate at iScaleMechRPM
    MotorParm.lScaleCntRate = MotorParm.iCntsPerRev * (MotorParm.iScaleMechRPM/60.0);

// ============= Open Loop ======================
	// Motor End Speed Calculation

	MotorParm.EndSpeed = END_SPEED_RPM * MotorParm.iPoles * dLoopTimeInSec * 65536 / 60.0;
	MotorParm.EndSpeed = MotorParm.EndSpeed * 1024;
	MotorParm.LockTime = LOCK_TIME;

// ============= Encoder ===============

    if( InitEncoderScaling() )
        // Error
        return True;

// ============= ADC - Measure Current & Pot ======================

    // Scaling constants: Determined by calibration or hardware design.
    ReadADCParm.qK      = dqK;    

    MeasCurrParm.qKa    = dqKa;    
    MeasCurrParm.qKb    = dqKb;   

    // Inital offsets
    InitMeasCompCurr(0,0);    

// ============= SVGen ===============
    // Set PWM period to Loop Time 
    SVGenParm.iPWMPeriod = dLoopInTcy;      

// ============= TIMER #1 ======================
    PR1 = 0xFFFF;
    T1CONbits.TON = 1;
    T1CONbits.TCKPS = 1;    // prescale of 8 => 1.08504 uS tick

// ============= Motor PWM ======================

    PDC1 = 0;
    PDC2 = 0;
    PDC3 = 0;
    PDC4 = 0;

    // Center aligned PWM.
    // Note: The PWM period is set to dLoopInTcy/2 but since it counts up and 
    // and then down => the interrupt flag is set to 1 at zero => actual 
    // interrupt period is dLoopInTcy

    PTPER = dLoopInTcy/2;   // Setup PWM period to Loop Time defined in parms.h 

    PWMCON1 = 0x0077;       // Enable PWM 1,2,3 pairs for complementary mode
    DTCON1 = (0x40) | (dDeadTime / 2);     // Dead time
    DTCON2 = 0;
    FLTACON = 0;            // PWM fault pins not used
    FLTBCON = 0;

	IFS2bits.PWMIF = 0;
	IEC2bits.PWMIE = 0;

    PTCON = 0x8002;         // Enable PWM for center aligned operation

    // SEVTCMP: Special Event Compare Count Register 
    // Phase of ADC capture set relative to PWM cycle: 0 offset and counting up
    //SEVTCMP = 2;        // Cannot be 0 -> turns off trigger (Missing from doc)       
	SEVTCMP = PTPER;
    SEVTCMPbits.SEVTDIR = 0;

// ============= ADC - Measure Current & Pot ======================
// ADC setup for simultanous sampling on 
//      CH0=AN7, CH1=AN0, CH2=AN1, CH3=AN2. 
// Sampling triggered by PWM and stored in signed fractional form.

    ADCON1 = 0;
    // Signed fractional (DOUT = sddd dddd dd00 0000)
    ADCON1bits.FORM = 3;    
    // Motor Control PWM interval ends sampling and starts conversion
    ADCON1bits.SSRC = 3;  
    // Simultaneous Sample Select bit (only applicable when CHPS = 01 or 1x)
    // Samples CH0, CH1, CH2, CH3 simultaneously (when CHPS = 1x)
    // Samples CH0 and CH1 simultaneously (when CHPS = 01)
    ADCON1bits.SIMSAM = 1;  
    // Sampling begins immediately after last conversion completes. 
    // SAMP bit is auto set.
    ADCON1bits.ASAM = 1;  


    ADCON2 = 0;
    // Samples CH0, CH1, CH2, CH3 simultaneously (when CHPS = 1x)
    ADCON2bits.CHPS = 2;  


    ADCON3 = 0;
    // A/D Conversion Clock Select bits = 8 * Tcy
    ADCON3bits.ADCS = 15;  


    /* ADCHS: ADC Input Channel Select Register */
    ADCHS = 0;
    // CH0 is AN7
    ADCHSbits.CH0SA = 7;
    // CH1 positive input is AN0, CH2 positive input is AN1, CH3 positive input is AN2
    ADCHSbits.CH123SA = 0;


    /* ADPCFG: ADC Port Configuration Register */
    // Set all ports digital
    ADPCFG = 0xFFFF;
    ADPCFGbits.PCFG0 = 0;   // AN0 analog
    ADPCFGbits.PCFG1 = 0;   // AN1 analog
    ADPCFGbits.PCFG2 = 0;   // AN2 analog
    ADPCFGbits.PCFG7 = 0;   // AN7 analog

    /* ADCSSL: ADC Input Scan Select Register */
    ADCSSL = 0;

    // Turn on A/D module
    ADCON1bits.ADON = 1;
    
    return False;
}

void CalculateParkAngle(void)
{
 	smc1.Ialpha = ParkParm.qIalpha;
  	smc1.Ibeta = ParkParm.qIbeta;
    smc1.Valpha = ParkParm.qValpha;
    smc1.Vbeta = ParkParm.qVbeta;

	SMC_Position_Estimation(&smc1);

	if(uGF.bit.OpenLoop)	
	{
		if (Startup_Lock < LOCK_TIME)
			Startup_Lock+=1;
		else if (Startup_Ramp < MotorParm.EndSpeed)
			Startup_Ramp+=1;
		else
		{
            uGF.bit.ChangeMode = 1;
            uGF.bit.OpenLoop = 0;
            pinLED2 = !uGF.bit.OpenLoop;
		}
		ParkParm.qAngle += (int)(Startup_Ramp >> 10);
	}
	else
	{
		ParkParm.qAngle = smc1.Theta;
	}
	return;
}

void SetupControlParameters(void)
{

// ============= PI D Term ===============      
    PIParmD.qKp = dDqKp;       
    PIParmD.qKi = dDqKi;              
    PIParmD.qKc = dDqKc;       
    PIParmD.qOutMax = dDqOutMax;
    PIParmD.qOutMin = -PIParmD.qOutMax;

    InitPI(&PIParmD);

// ============= PI Q Term ===============
    PIParmQ.qKp = dQqKp;    
    PIParmQ.qKi = dQqKi;
    PIParmQ.qKc = dQqKc;
    PIParmQ.qOutMax = dQqOutMax;
    PIParmQ.qOutMin = -PIParmQ.qOutMax;

    InitPI(&PIParmQ);

// ============= PI Qref Term ===============
    PIParmQref.qKp = dQrefqKp;       
    PIParmQref.qKi = dQrefqKi;       
    PIParmQref.qKc = dQrefqKc;       
    PIParmQref.qOutMax = dQrefqOutMax;   
    PIParmQref.qOutMin = -PIParmQref.qOutMax;

    InitPI(&PIParmQref);
	return;
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产精品久久不卡毛片 | 欧美日韩欧美一区二区| 在线欧美日韩精品| 911精品产国品一二三产区| 久久久亚洲午夜电影| 亚洲图片欧美激情| 日本亚洲天堂网| 大胆亚洲人体视频| 91成人在线精品| 欧美电影精品一区二区| 国产精品国产三级国产普通话蜜臀| 一区二区欧美在线观看| 精品一区二区精品| 欧美国产亚洲另类动漫| 亚洲在线视频一区| 国产在线精品国自产拍免费| 91亚洲精华国产精华精华液| 日韩一区二区在线免费观看| 亚洲天堂成人网| 免费欧美日韩国产三级电影| 丁香五精品蜜臀久久久久99网站| 欧美撒尿777hd撒尿| 久久久影视传媒| 午夜视频一区在线观看| 成人黄色在线网站| 5858s免费视频成人| 一区视频在线播放| 美女www一区二区| 欧美曰成人黄网| 中文字幕成人网| 精品一区二区久久久| 欧美日韩小视频| 自拍偷拍国产亚洲| 国产成人午夜片在线观看高清观看| 欧美性色黄大片| 国产精品久久久99| 精品一二线国产| 4438x亚洲最大成人网| 亚洲欧洲综合另类在线| 国产成人在线网站| 日韩一区二区在线观看| 夜夜嗨av一区二区三区| 福利一区二区在线| 2023国产精品| 日本不卡视频在线| 欧美日韩国产bt| 亚洲一区二区在线观看视频| 成人精品国产福利| 久久综合九色综合97婷婷| 午夜精品久久久久久| 色天使久久综合网天天| 国产精品成人免费在线| 国产成人在线免费观看| 26uuu国产电影一区二区| 秋霞成人午夜伦在线观看| 欧美日韩精品一区二区三区| 一区二区三区四区激情| 97久久久精品综合88久久| 欧美激情中文字幕一区二区| 国产一区二区视频在线播放| 欧美xxxxx牲另类人与| 天堂资源在线中文精品| 欧美熟乱第一页| 亚洲午夜精品17c| 在线观看精品一区| 一区二区三区四区中文字幕| 色天使久久综合网天天| 一区二区三区在线视频观看58 | 国产精品久久久久影院色老大| 国产精品亚洲综合一区在线观看| 日韩欧美黄色影院| 久久国产尿小便嘘嘘尿| 欧美成人猛片aaaaaaa| 久久精品理论片| 精品国产乱码久久久久久图片| 麻豆国产91在线播放| 日韩视频免费观看高清完整版| 日韩精品每日更新| 欧美成人激情免费网| 韩国毛片一区二区三区| 久久亚洲精精品中文字幕早川悠里| 国产一区二区影院| 中文字幕av不卡| 99视频超级精品| 亚洲高清免费视频| 日韩亚洲电影在线| 国产尤物一区二区| 中文字幕中文乱码欧美一区二区| 99久久久国产精品| 亚洲一区二区四区蜜桃| 欧美群妇大交群的观看方式| 久久99精品久久久久婷婷| 26uuu精品一区二区三区四区在线| 国产成人在线视频播放| 亚洲女同女同女同女同女同69| 在线观看一区二区精品视频| 日韩电影在线免费| 国产亚洲午夜高清国产拍精品| jizz一区二区| 天天综合网 天天综合色| 精品卡一卡二卡三卡四在线| 成人开心网精品视频| 亚洲欧美日韩电影| 欧美一区二区三区在线电影| 国产福利不卡视频| 亚洲免费观看在线视频| 5566中文字幕一区二区电影| 国内外成人在线视频| 亚洲欧洲av在线| 欧美精品乱码久久久久久| 国产在线麻豆精品观看| 亚洲欧美怡红院| 3d成人h动漫网站入口| 国产精品911| 亚洲香蕉伊在人在线观| 久久精品人人爽人人爽| 色婷婷久久久综合中文字幕| 裸体在线国模精品偷拍| 亚洲欧洲日本在线| 日韩免费观看2025年上映的电影| 99久久精品国产导航| 日韩avvvv在线播放| 欧美高清在线一区二区| 欧美猛男超大videosgay| 国产精品系列在线观看| 午夜电影久久久| 国产精品天干天干在观线| 欧美日本一区二区三区| 成人黄色在线看| 美女视频一区在线观看| 亚洲免费三区一区二区| 久久久久国产精品厨房| 欧美日韩精品电影| 99久久er热在这里只有精品15| 精品在线视频一区| 亚洲综合免费观看高清完整版在线 | 日韩欧美在线一区二区三区| av不卡一区二区三区| 老司机一区二区| 亚洲综合一区二区三区| 国产欧美在线观看一区| 欧美一级片在线| 色呦呦国产精品| 国产精品一区二区在线看| 一区二区三区资源| 国产精品五月天| 精品日韩av一区二区| 欧美怡红院视频| 99精品视频中文字幕| 国产美女在线观看一区| 日韩主播视频在线| 一级日本不卡的影视| 国产女人水真多18毛片18精品视频| 这里是久久伊人| 欧美日韩久久久久久| 在线免费观看成人短视频| bt7086福利一区国产| 成人综合在线视频| 黄色小说综合网站| 蜜臀精品久久久久久蜜臀| 香蕉成人啪国产精品视频综合网| 成人欧美一区二区三区1314| 久久久www成人免费无遮挡大片| 日韩一区二区精品在线观看| 欧美三级视频在线| 在线精品亚洲一区二区不卡| 91亚洲精品一区二区乱码| 9l国产精品久久久久麻豆| 成人午夜在线免费| 国产99精品在线观看| 国产伦精品一区二区三区免费| 久久成人免费网| 久久se精品一区二区| 免费精品视频最新在线| 日本不卡一区二区三区高清视频| 亚洲成av人在线观看| 亚洲一区二区三区三| 亚洲主播在线播放| 亚洲国产精品一区二区www| 亚洲综合偷拍欧美一区色| 亚洲国产日韩a在线播放| 亚洲成在人线免费| 午夜精品爽啪视频| 首页综合国产亚洲丝袜| 香蕉影视欧美成人| 日韩avvvv在线播放| 另类综合日韩欧美亚洲| 精东粉嫩av免费一区二区三区 | 久久久美女艺术照精彩视频福利播放| 日韩欧美亚洲国产精品字幕久久久| 日韩精品在线网站| 久久久亚洲高清| 国产精品久久久久久久久免费桃花 | 日韩在线a电影| 免费在线观看一区二区三区| 国内精品写真在线观看| 国产成人三级在线观看| 成人免费精品视频| 91猫先生在线| 欧美日韩美少妇|