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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? pmsm.c

?? Source Code for Sensorless FOC for PMSM with PFC for dsPIC30F6010A
?? C
?? 第 1 頁 / 共 2 頁
字號:
 /**********************************************************************
 *                                                                     *
 *                        Software License Agreement                   *
 *                                                                     *
 *    The software supplied herewith by Microchip Technology           *
 *    Incorporated (the "Company") for its dsPIC controller            *
 *    is intended and supplied to you, the Company's customer,         *
 *    for use solely and exclusively on Microchip dsPIC                *
 *    products. The software is owned by the Company and/or its        *
 *    supplier, and is protected under applicable copyright laws. All  *
 *    rights are reserved. Any use in violation of the foregoing       *
 *    restrictions may subject the user to criminal sanctions under    *
 *    applicable laws, as well as to civil liability for the breach of *
 *    the terms and conditions of this license.                        *
 *                                                                     *
 *    THIS SOFTWARE IS PROVIDED IN AN "AS IS" CONDITION.  NO           *
 *    WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING,    *
 *    BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND    *
 *    FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE     *
 *    COMPANY SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL,  *
 *    INCIDENTAL OR CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.  *
 *                                                                     *
  **********************************************************************/

 /**********************************************************************
 *                                                                     * 
 *    Author: John Theys/Dave Ross/Jorge Zambada                       * 
 *                                                                     *
 *    Filename:       PMSM.c                                           *
 *    Date:           04/27/07                                         *
 *    File Version:   1.00                                             *
 *                                                                     *
 *    Tools used: MPLAB GL  -> 7.52.0.0                                *
 *                                                                     *
 *    Linker File:    p30f6010a.gld                                     *
 *                                                                     *
 *                                                                     *
 ***********************************************************************
 *10/31/03  2.00    Released    Motor runs fine, still some loose ends
 *
 *12/19/03  2.01    Cleaned up structure, created UserParms.h for all 
 *                  user defines.
 *
 *02/12/04	3.00	-Removed unnecessary files from project.
 					-Changed iRPM to int to correct floating point calc
 * 					problems.
 *					-CalcVel() and velocity control loop only execute
 *					after number of loop periods specified by
 *					iIrpPerCalc.
 *					-Added iDispLoopCount variable to schedule 
 *					execution of display and button routines
 *					-trig.s file changed to use program space for 
 *					storage of sine data.
 *					-Added DiagnosticsOutput() function that uses 
 *					output compare channels to output control variable
 *					information.
 *					-Added TORQUE_MODE definition to bypass velocity
 *					control loop.
 *					-Turned off SATDW bit in curmodel.s file.  The
 *					automatic saturation feature prevents slip
 *					angle calculation from wrapping properly.
 *04/27/07  4.00    -PMSM functionality added. Speed and Position Estimation
 *                  is used to control PMSM motors. ACIM is not supported.
 *
 ************************************************************************
 *      Code Description
 *  
 *  This file demonstrates Vector Control of a 3 phase PMSM using the
 *  dsPIC30F.  SVM is used as the modulation strategy. Currents are measured
 *  to estimate position and speed of PMSM Motors
 **********************************************************************/

/************** GLOBAL DEFINITIONS ***********/




/************* START OF MAIN FUNCTION ***************/
int main ( void )
{
	SMCInit(&smc1);

    SetupPorts();
	InitLCD();
    InitOutputCompare6();                       // Configure and intialize the Output Compare Module
   	SetupControlParameters(); 
	OC6CONbits.OCM = 0b110;                     // Set the Output Compare Module for PWM Mode
    T3CONbits.TON = 1;                          // Start Timer-3 Module

    while(1)
        {
        uGF.Word = 0;                   // clear flags
        
        // init Mode
        uGF.bit.OpenLoop = 1;           // start in openloop
		
		// init LEDs
        pinLED1 = 0;
        pinLED2 = !uGF.bit.OpenLoop;
        pinLED3 = 0;
        pinLED4 = 0;

        // init board
        SetupBoard();
        
        // init user specified parms and stop on error
        if( SetupParm() )
            {
            // Error
            uGF.bit.RunMotor=0;
            return;
            }
        
        // zero out i sums 
        PIParmD.qdSum = 0;
        PIParmQ.qdSum = 0;
        PIParmQref.qdSum = 0;
     
        iMaxLoopCnt = 0;
        
        Wrt_S_LCD("Vector Control  ", 0 , 0);
        Wrt_S_LCD("S4-Run/Stop     ", 0, 1);
                
        // Enable ADC interrupt and begin main loop timing
        IFS0bits.ADIF = 0; 
        IEC0bits.ADIE = 1;
		
        if(!uGF.bit.RunMotor)
            {	            
            // Initialize current offset compensation
            while(!pinButton1)                  //wait here until button 1 is pressed 
                {
                ClrWdt();               

                // Start offset accumulation    //and accumulate current offset while waiting
                MeasCompCurr();

                }
            while(pinButton1);                  //when button 1 is released 
			SetupParm();
            uGF.bit.RunMotor = 1;               //then start motor
            }

        // Run the motor
        uGF.bit.ChangeMode = 1;
        // Enable the driver IC on the motor control PCB
        pinPWMOutputEnable_ = 0;
        
		Wrt_S_LCD("RPM=            ", 0, 0);
		Wrt_S_LCD("S5-Cls. Lp S6-2x", 0, 1);
		
		//Run Motor loop
        while(1)
            {
            ClrWdt();
            
            // Write vector control variables to output compare channels
            // for observation on oscilloscope.
                          
            // The code that updates the LCD display and polls the buttons
            // executes every 50 msec.
            
            if(iDispLoopCnt >= dDispLoopCnt)
            	{
            	//Display RPM
            	Dis_RPM(5,0);
      			// Button 1 starts or stops the motor
                if(pinButton1)  
	                {
                    if( !uGF.bit.Btn1Pressed )
                        uGF.bit.Btn1Pressed  = 1;
                    }
                else
                    {
                    if( uGF.bit.Btn1Pressed )
                        {
                        // Button just released
                        uGF.bit.Btn1Pressed  = 0;
                        // begin stop sequence
                        uGF.bit.RunMotor = 0;
                        pinPWMOutputEnable_ = 1;
                        break;
                        }
                    }
                    
				//while running button 2 will toggle open and closed loop
                if(pinButton2)                  
                    {
                    if( !uGF.bit.Btn2Pressed )
                        uGF.bit.Btn2Pressed  = 1;
                    }
                else
                    {
                    if( uGF.bit.Btn2Pressed )
                        {
                        // Button just released
                        uGF.bit.Btn2Pressed  = 0;
                        uGF.bit.ChangeMode = 1;
                        uGF.bit.OpenLoop = ! uGF.bit.OpenLoop;
                        pinLED2 = !uGF.bit.OpenLoop;
                        }
                    }
				
				//while running button 3 will double/half the speed or torque demand
                if(pinButton3)                      
                    {
                    if( !uGF.bit.Btn3Pressed )
                        uGF.bit.Btn3Pressed  = 1;
                        LATGbits.LATG0 = 0;
                    }
                else
                    {
                    if( uGF.bit.Btn3Pressed )
                        {
                        // Button just released
                        uGF.bit.Btn3Pressed  = 0;
                        uGF.bit.ChangeSpeed = !uGF.bit.ChangeSpeed;
                        pinLED3 = uGF.bit.ChangeSpeed;
                        
                        #ifdef SNAPSHOT
                        uGF.bit.DoSnap = 1;
                        SnapCount = 0;
                        pinLED4 = 1;
                        #endif
                        
                        }
                    }
				
				if( uGF.bit.SnapDone )
                    { 
                                         
                     uGF.bit.SnapDone=0;
                     pinLED4 = 0;          
                        
                    }

                }  // end of display and button polling code              
                
            }   // End of Run Motor loop

        
        } // End of Main loop
        
    // should never get here
    while(1){}
}

//---------------------------------------------------------------------
// Executes one PI itteration for each of the three loops Id,Iq,Speed

void DoControl( void )
{
short i;
short TempAng;

    // Assume ADC channel 0 has raw A/D value in signed fractional form from
    // speed pot (AN7).
    
	ReadSignedADC0( &ReadADCParm );
	
    if( uGF.bit.OpenLoop )
        {
        // OPENLOOP:  force rotating angle,Vd,Vq

        if( uGF.bit.ChangeMode )
            {
            // just changed to openloop
            uGF.bit.ChangeMode = 0;
            // synchronize angles

            // VqRef & VdRef not used
            CtrlParm.qVqRef = 0;
            CtrlParm.qVdRef = 0;
			uGF.bit.DoSnap = 1;
			Startup_Lock = 0;
			Startup_Ramp = 0;
			// Initialize SMC
			smc1.Valpha = 0;
			smc1.Ealpha = 0;
			smc1.EalphaFinal = 0;
			smc1.Zalpha = 0;
			smc1.EstIalpha = 0;
			smc1.Vbeta = 0;
			smc1.Ebeta = 0;
			smc1.EbetaFinal = 0;
			smc1.Zbeta = 0;
			smc1.EstIbeta = 0;
			smc1.Ialpha = 0;
			smc1.IalphaError = 0;
			smc1.Ibeta = 0;
			smc1.IbetaError = 0;
			smc1.Theta = 0;
			smc1.Omega = 0;

            }

		CtrlParm.qVelRef = ADCBUF3/2; // Initial Torque Reference

        #ifdef	SNAPSHOT
		// 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;
            }
         }
       	#endif

        if(AccumThetaCnt == 0)
	    {
			CalcVel();
            PIParmQref.qInMeas = smc1.Omega;
		}

        CtrlParm.qVqRef    = CtrlParm.qVelRef;
       	
        // 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;
    }

    else
        // Closed Loop Vector Control
        {

		if(uGF.bit.ChangeSpeed)
		{
		    CtrlParm.qVelRef = ReadADCParm.qADValue/3;
		}
		else
		{
		    CtrlParm.qVelRef = ReadADCParm.qADValue/6;
		}

        if( uGF.bit.ChangeMode )
        {
            // just changed from openloop
            uGF.bit.ChangeMode = 0;
			PIParmQref.qdSum = (long)CtrlParm.qVqRef << 13;
			Startup_Lock = 0;
			Startup_Ramp = 0;
	    }               
                
        // Check to see if new velocity information is available by comparing
        // the number of interrupts per velocity calculation against the
        // number of velocity count samples taken.  If new velocity info
        // is available, calculate the new velocity value and execute
        // the speed control loop.

        if(AccumThetaCnt == 0)
        	{
	        // Calculate velocity from acumulated encoder counts
        	CalcVel();
        	// Execute the velocity control loop
			PIParmQref.qInMeas = smc1.Omega;
        	PIParmQref.qInRef  = CtrlParm.qVelRef;
        	CalcPI(&PIParmQref);
        	CtrlParm.qVqRef = PIParmQref.qOut;
           	}
       
        #ifdef	SNAPSHOT
		if(SnapShotDelayCnt++ == SnapShotDelay)
		{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品理论电影在线| 日韩av中文在线观看| 欧洲激情一区二区| 国产99久久久精品| 国产乱国产乱300精品| 蜜桃视频一区二区| 日韩高清不卡一区| 久久精品99国产精品| 午夜欧美电影在线观看| 综合分类小说区另类春色亚洲小说欧美| 国产日韩三级在线| 久久这里只有精品视频网| 2020日本不卡一区二区视频| 国产亚洲一区二区三区在线观看| 日产国产欧美视频一区精品| 国产一区二区三区四区五区入口| 蜜臀av性久久久久蜜臀aⅴ流畅| 麻豆精品国产传媒mv男同| 1000精品久久久久久久久| 色婷婷av一区二区三区大白胸| 成人精品在线视频观看| 国产成人综合在线观看| www国产亚洲精品久久麻豆| 激情五月播播久久久精品| 亚洲国产精品成人综合色在线婷婷 | 欧美在线影院一区二区| 色综合久久久久久久| 色综合久久久久综合体| 欧美性欧美巨大黑白大战| 日韩美一区二区三区| 国产精品欧美综合在线| 一区二区三区日本| 九九精品视频在线看| 不卡一区二区三区四区| 欧美日韩一区二区三区不卡| 亚洲欧美日韩国产另类专区| 蜜臀久久久99精品久久久久久| 福利一区福利二区| 欧美日韩综合色| 国产精品污网站| 日韩福利视频导航| 色偷偷88欧美精品久久久| 国产精品99久久久久久似苏梦涵| 日本女人一区二区三区| 一区二区在线观看视频| 91黄视频在线观看| 日韩精品专区在线| 日韩免费性生活视频播放| 91麻豆精品国产自产在线观看一区| 色一情一乱一乱一91av| 精品精品国产高清a毛片牛牛| 91精品国产品国语在线不卡| 久久久久久免费毛片精品| 精品国产精品网麻豆系列| 精品入口麻豆88视频| 久久人人97超碰com| 国产精品久久久久三级| 日韩电影一区二区三区四区| 久久久另类综合| 日韩av二区在线播放| 在线观看欧美日本| 国产精品久久久久久久久免费丝袜| 亚洲国产精品久久艾草纯爱| 91丨九色丨尤物| 国产精品久久久久久久久快鸭| 国产精品一卡二卡| 日韩精品中文字幕一区二区三区| 午夜免费久久看| 欧美日韩一区三区| 洋洋成人永久网站入口| 不卡一卡二卡三乱码免费网站| 久久人人97超碰com| 日韩**一区毛片| 欧美一区二区三区四区高清| 天堂久久久久va久久久久| 在线观看不卡视频| 亚洲夂夂婷婷色拍ww47| 日本电影欧美片| 亚洲小说春色综合另类电影| 欧美日韩亚洲不卡| 美女视频黄频大全不卡视频在线播放| 91精品在线免费| 久久91精品久久久久久秒播| 久久久美女毛片| 99久久99久久精品免费观看| 一区二区欧美国产| 欧美美女一区二区在线观看| 奇米色一区二区| 中文字幕一区二区三区视频| 99久久精品国产一区二区三区| 久久久久久电影| 色偷偷久久一区二区三区| 亚洲444eee在线观看| 日韩午夜在线影院| 国产伦精品一区二区三区视频青涩 | 99久久久无码国产精品| 亚洲精品国产无套在线观| 欧美午夜精品一区| 久久不见久久见免费视频1 | 成人久久视频在线观看| 亚洲日本在线看| 91精品国产品国语在线不卡| 国产精品一区二区在线观看不卡| 国产精品高潮呻吟久久| 欧美日韩一区不卡| 国产九色sp调教91| 亚洲国产乱码最新视频| 精品国产第一区二区三区观看体验 | 福利一区在线观看| 亚洲444eee在线观看| 欧美经典三级视频一区二区三区| 色综合视频在线观看| 久久丁香综合五月国产三级网站| 国产欧美久久久精品影院| 欧美日韩高清一区二区不卡| 国产老女人精品毛片久久| 亚洲大片精品永久免费| 国产精品网友自拍| 337p亚洲精品色噜噜| 日韩av电影一区| 一区二区三区免费在线观看| 精品va天堂亚洲国产| 欧美亚洲一区二区在线| 国产91精品精华液一区二区三区 | 日韩精品在线一区二区| 91啪九色porn原创视频在线观看| 麻豆一区二区三| 亚洲在线视频一区| 亚洲人成人一区二区在线观看 | 中文字幕欧美一区| 欧美成人午夜电影| 欧美性xxxxxxxx| 99久精品国产| 成年人午夜久久久| 国产一区二区三区在线观看免费 | 成人av免费网站| 裸体健美xxxx欧美裸体表演| 亚洲一区二区在线观看视频| 欧美国产精品久久| 精品久久久久香蕉网| 精品视频999| 91网站最新地址| 99精品久久久久久| 国产精品一区二区三区四区| 亚洲成av人片在www色猫咪| 亚洲欧洲www| 久久久www成人免费毛片麻豆| 欧美电影精品一区二区| 日韩一区二区三区视频在线观看 | 三级久久三级久久久| 一级特黄大欧美久久久| 亚洲欧美日韩中文播放| 亚洲人妖av一区二区| 亚洲色图欧洲色图| 久久久精品免费网站| 精品国免费一区二区三区| 欧美一区二区在线播放| 日韩欧美中文字幕一区| 日韩一区二区精品在线观看| 欧美不卡一区二区| 欧美电影免费观看高清完整版在线| 欧美一区二区三级| 欧美成人性战久久| 亚洲精品一线二线三线无人区| 久久综合国产精品| 国产精品不卡在线| 青青青伊人色综合久久| 婷婷一区二区三区| 精品一区二区三区欧美| 国产精品1区2区| 成人福利视频网站| 91黄色激情网站| 日韩一区二区在线看片| 久久久久久夜精品精品免费| 国产精品成人一区二区艾草| 亚洲成人tv网| 国产剧情一区二区| 色94色欧美sute亚洲线路二| 欧美日本高清视频在线观看| 欧美tk丨vk视频| 欧美激情综合在线| 一区二区三区加勒比av| 麻豆一区二区三| 色天使色偷偷av一区二区| 日韩欧美aaaaaa| 亚洲欧美色图小说| 国内一区二区视频| 97久久精品人人爽人人爽蜜臀| 欧美日韩黄色影视| 国产欧美一区二区精品久导航| 亚洲欧美日韩小说| 免费成人美女在线观看| caoporn国产精品| 欧美一区二区美女| 自拍av一区二区三区| 日本在线观看不卡视频| 99天天综合性| 精品黑人一区二区三区久久| 夜夜嗨av一区二区三区网页| 国产成人av电影在线|