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

📄 close.c

📁 用freescale公司的DSP56F8013芯片实现的PMSM的SVPWM 驱动
💻 C
字号:
#include "Cpu.h"
#include "Events.h"
#include "Close.h"
#include "Smopos.h"
#include "Clarke.h"
#include "Iclarke.h"
#include "Park.h"
#include "Ipark.h"
#include "Filter.h"
#include "Curreg.h"

extern int Vbus;
extern int vsalfa;							
extern int vsbeta;
extern int k;
extern int sina[180];													
extern int cosa[180];											
extern int alfa;
extern int beta;
extern int isalfa;
extern int isbeta;
extern int thetae;
extern int theta;
extern int d1;														
extern int q1;								
extern int id;								
extern int iq;
extern int num;
extern int isalfae;								/* Q15 alfa axis estimated current */
extern int isbetae;								/* Q15 beta axis estimated current */
extern int istemp;
extern int gujun;
extern int thetabuf[5];
extern int nbuf;
extern bool filter1;

void Close(void)
{
	long int temp32;
	long int temp33;
	long int temp34;
	int temp=18919;										/* Q15 represent 0.5774 */
	int numv;

	numv=num+1;											/* modify the value to get better performance */
	if(numv>=360)
	numv=numv-360;
	
/* calculate the vsalfa and vsbeta */ 				
 	temp32=(L_mult(Vbus,k))>>16;						/* Q6 */
	if(numv<180)
	{
	temp33=(L_mult(cosa[numv],temp))>>16;				/* Q15 */
	temp34=(L_mult((int)temp32,(int)temp33))>>16;		/* Q6 */							
	vsalfa=(int)temp34;
	temp33=(L_mult(sina[numv],temp))>>16;				/* Q15 */
	temp34=(L_mult((int)temp32,(int)temp33))>>16;		/* Q6 */							
	vsbeta=(int)temp34;		
	} 
		
 	else 
 	{
	temp33=(L_mult(cosa[360-numv],temp))>>16;			/* Q15 */
	temp34=(L_mult((int)temp32,(int)temp33))>>16;		/* Q6 */							
	vsalfa=(int)temp34;
	temp33=(L_mult(-sina[360-numv],temp))>>16;			/* Q15 */
	temp34=(L_mult((int)temp32,(int)temp33))>>16;		/* Q6 */							
	vsbeta=(int)temp34;
 	}

 /* calculate the rotor position */
 	Clarke();											/* Ia->alfa, Ib->beta */	
 	isalfa=alfa;										/* Q15 */						
 	isbeta=beta;										/* Q15 */
 	
 	if(istemp==1)
 	{
 	isalfae=isalfa;
 	isbetae=isalfae; 
 	istemp=0;		
 	}
 
 	Smopos();											/* Rotor position calculate */
 
 /* calculate the id and iq */	
	theta=thetae;	
	theta-=70;											/* angle correction */
	if(theta<0)
	theta+=360;
	
 	Park(); 	
 	id=d1;												/* Q15 */
 	iq=q1;												/* Q15 */
 
 	Curreg();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -