// ¸ù¾Ý±àÂëÆ÷ÀۼƼÆÊýÖµÀ´¼ÆËãתËÙ 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;