dsp30´úÂë ÏÂÔØ±¾ÎÄ

// ¸ù¾Ý±àÂëÆ÷ÀۼƼÆÊýÖµÀ´¼ÆËãתËÙ CalcVel();

// Ö´ÐÐתËÙ¿ØÖÆ»·

PIParmQref.qInMeas = EncoderParm.qVelMech; PIParmQref.qInRef = CtrlParm.qVelRef; CalcPI(&PIParmQref);

CtrlParm.qVqRef = PIParmQref.qOut; }

#endif

// QµÄ PI¿ØÖÆ

PIParmQ.qInMeas = ParkParm.qIq; PIParmQ.qInRef = CtrlParm.qVqRef; CalcPI(&PIParmQ);

ParkParm.qVq = PIParmQ.qOut;

// DµÄ PI¿ØÖÆ

PIParmD.qInMeas = ParkParm.qId; PIParmD.qInRef = CtrlParm.qVdRef; CalcPI(&PIParmD);

ParkParm.qVd = PIParmD.qOut; } }

//--------------------------------------------------------------------// ADCÖжϷþÎñ³ÌÐòÖ´ÐÐËٶȼÆËãÒÔ¼°µçѹʸÁ¿¸üÐÂÑ­»·¡£ // ADC²ÉÑùºÍת»»ÓÉ PWMÖÜÆÚ´¥·¢¡£

// ËٶȼÆËã¼Ù¶¨¼ÆËãÖ®¼äµÄ¼ä¸ôʱ¼äÊǹ̶¨µÄ¡£ //--------------------------------------------------------------------

void __attribute__((__interrupt__)) _ADCInterrupt(void)

{

IFS0bits.ADIF = 0;

// µÝÔö¿ØÖÆÏÔʾºÍ°´Å¥¹¦ÄÜÖ´ÐеļÆÊý±äÁ¿¡£ //

iDispLoopCnt++;

// ÀÛ¼Æ×ÔÉÏÒ»´ÎÖжϺóµÄ±àÂëÆ÷¼ÆÊý CalcVelIrp();

if( uGF.bit.RunMotor ) {

// ÖÃλÓÃÓÚÕï¶ÏµÄ LED1 pinLED1 = 1;

// ʹÓà TMR1À´²âÁ¿ÓÃÓÚÕï¶ÏµÄÖжÏʱ¼ä TMR1 = 0;

iLoopCnt = TMR1;

MeasCompCurr();

// ¸ù¾Ý qSin¡¢ qCos¡¢ qIa¡¢ qIb¼ÆËã qId¡¢ qIq ClarkePark();

// ¼ÆËã¿ØÖÆÖµ DoControl();

// ¸ù¾Ý qAngle¼ÆËã qSin¡¢ qCos SinCos();

// ¸ù¾Ý qSin¡¢ qCos¡¢ qVd¡¢ qVq¼ÆËã qValpha¡¢InvPark();

// ¸ù¾Ý qValpha¡¢ qVbeta¼ÆËã Vr1¡¢ Vr2¡¢ Vr3¡£CalcRefVec();

qVbeta

// ¸ù¾Ý Vr1¡¢ Vr2¡¢ Vr3¼ÆËãºÍÉ趨 PWMÕ¼¿Õ±È CalcSVGen();

// ²âÁ¿Ñ­»·Ê±¼ä

iLoopCnt = TMR1 - iLoopCnt; if( iLoopCnt > iMaxLoopCnt )

iMaxLoopCnt = iLoopCnt;

// ÇåÁãÓÃÓÚÕï¶ÏµÄ LED1 pinLED1 = 0; } }

//--------------------------------------------------------------------// SetupBoard //

// ³õʼ»¯¿ØÖưå

//--------------------------------------------------------------------

void SetupBoard( void ) {

BYTE b;

//½ûÖ¹ ADCÖÐ¶Ï IEC0bits.ADIE = 0;

// ¸´Î»µç»ú¿ØÖƹ¦ÂÊÄ£¿éÉϵÄËùÓйÊÕÏ¡£ pinFaultReset = 1; for(b=0;b<10;b++)

Nop();

pinFaultReset = 0;

// È·±£ PFC¿ª¹ØÊǹرյġ£ pinPFCFire = 0;

// È·±£Öƶ¯¿ª¹ØÊǹرյġ£ pinBrakeFire = 0; }

//--------------------------------------------------------------------// Dis_RPM //

// ÏÔʾ RPM

//--------------------------------------------------------------------

void Dis_RPM( BYTE bChrPosC, BYTE bChrPosR ) {

if (EncoderParm.iDeltaCnt < 0)

Wrt_S_LCD(\ else

Wrt_S_LCD(\

iRPM = EncoderParm.iDeltaCnt*60/

(MotorParm.fLoopPeriod*MotorParm.iIrpPerCalc*EncoderParm.iCntsPerRev);

Wrt_Signed_Int_LCD( iRPM, bChrPosC+1, bChrPosR); }

//--------------------------------------------------------------------bool SetupParm(void) {

// ¿ªÆô¿¹±¥ºÍ¹¦ÄÜÒÔÈ·±£Äܹ»Æ½»¬´¦ÀíÒç³ö¡£ CORCONbits.SATA = 0;