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

📄 curreg.c

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

extern int id;										/* Q15 */
extern int iq;										/* Q15 */
extern int idref;									/* Q15 */
extern int iqref;									/* Q15 */
extern int udout;									/* Q6 */
extern int uqout;									/* Q6 */
extern int ualfa;									/* Q6 */
extern int ubeta;									/* Q6 */
extern int d1;										/* Q6 */
extern int q1;										/* Q6 */
extern int alfa;									/* Q6 */
extern int beta;									/* Q6 */
extern int theta;									
extern int sina[180];			
extern int cosa[180];
extern bool negative;
extern int gujun;
extern int xdtemp0;									/* Q6 */
extern int xqtemp0;									/* Q6 */

void Curreg(void)
{
	long int temp32;
	long int temp33;
	
	int errid;										/* Id error */
	int erriq;										/* Iq error */
	int kpd=512;									/* Q8 */				
	int kid=128;									/* Q8 */
	int kcd=8192;									/* Q0 */
	int kpq=512;									/* Q8 */	
	int kiq=128;									/* Q8 */
	int kcq=8192;									/* Q0 */
	int udmin=-2200;								/* Q6 d axis min value */
	int udmax=-2100;			 					/* Q6 d axis max value */
	int uqmin=-100;									/* Q6 q axis min value  */
	int uqmax=100;									/* Q6 q axis max value */
	int udtemp;										/* Q6 used to calculate ud */
	int uqtemp;										/* Q6 used to calculate uq */
	
/* d axis adjustment */	
	errid=idref-id;									/* Q15 */ 
	
	temp32=(L_mult(kpd,errid))>>18;					/* Q6 */ 
	udtemp=xdtemp0+(int)(temp32);					/* Q6 */ 				
	
	if(udtemp>udmax)								/* Q6 */ 
	udout=udmax;
	
	else if(udtemp<udmin)							/* Q6 */
	udout=udmin;
	
	else
	udout=udtemp;									/* Q6 */
	
	temp32=(L_mult(kid,errid))>>18;					/* Q6 */
	temp33=(L_mult(kcd,(udout-udtemp)))>>16;		/* Q6 */
	xdtemp0=xdtemp0+(int)(temp32+temp33);			/* Q6 */
	
/* q axis adjustment */	
	erriq=iqref-iq;									/* Q15 */
	
	temp32=(L_mult(kpq,erriq))>>18;					/* Q6 */ 
	uqtemp=xqtemp0+(int)(temp32);
	
	if(uqtemp>uqmax)								/* Q6 */ 
	uqout=uqmax;
	
	else if(uqtemp<uqmin)							/* Q6 */ 
	uqout=uqmin;
	
	else
	uqout=uqtemp;
	
	temp32=(L_mult(kiq,erriq))>>18;					/* Q6 */
	temp33=(L_mult(kcq,(uqout-uqtemp)))>>16;		/* Q6 */	
	xqtemp0=xqtemp0+(int)(temp32+temp33);			/* Q6 */
	
	d1=udout;										/* Q6 */
	q1=uqout;										/* Q6 */
	
	Ipark();										
	
	ualfa=alfa;										/* Q6 */
	ubeta=beta;										/* Q6 */
	
	Svpwm();	
}

⌨️ 快捷键说明

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