dsp30代码 下载本文

头文件

UserParms.h

C文件

ACIM.c Encoder.c InitCurModel.c

UserParms.h

//#define TORQUE_MODE #define DIAGNOSTICS

//**************** 振荡器 ************************************ #define dFoscExt 7372800 // 外部晶振或时钟频率 (Hz) #define dPLL 8 // PLL比率

#define dLoopTimeInSec 0.00005 // PWM周期 - 100 uS, 10Khz PWM #define dDeadTimeSec 0.000002 // 以秒为单位的死区时间 // Derived

#define dFosc (dFoscExt*dPLL) // 时钟频率 ( Hz) #define dFcy (dFosc/4) // 指令频率 ( Hz) #define dTcy (1.0/dFcy) // 指令周期 (s)

#define dDeadTime (int)(dDeadTimeSec*dFcy) // 以 dTcys为单位的死区时间 #define dLoopInTcy (dLoopTimeInSec/dTcy) // 以 Tcy为单位的基本循环周期 #define dDispLoopTime 0.100 // 显示和按钮状态查询循环

//**************** 电机参数 ******************************** #define diPoles 1 // 极对数

#define diCntsPerRev 2000 // 每转的编码器线数

#define diNomRPM 3600 // 电机铭牌上的转速( RPM)

#define dfRotorTmConst 0.078 // 以秒为单位的转子时间常数,来自电机制造商

//**************** 测量 ************************************* #define diIrpPerCalc 30 // 每次速度计算的 PWM循环次数

//************** PI 系数 ************************************ #define dDqKp 0x2000 // 4.0 (NKo = 4) #define dDqKi 0x0100; // 0.125 #define dDqKc 0x0100; // 0.125

#define dDqOutMax 0x5A82; // 0.707设定该值以避免饱和

#define dQqKp 0x2000; // 4.0 (NKo = 4) #define dQqKi 0x0100; // 0.125 #define dQqKc 0x0100; // 0.125

#define dQqOutMax 0x5A82; // 0.707设定该值以避免饱和

#define dQrefqKp 0x4000 // 8.0 (NKo = 4) #define dQrefqKi 0x0800 // 1.0 #define dQrefqKc 0x0800 // 1.0

#define dQrefqOutMax 0x3FFF // 0.4999设定该值以避免饱和

//************** ADC换算 ************************************ // 标定常数 :由校准或硬件设计确定。 #define dqK 0x3FFF; // 等于 0.4999 #define dqKa 0x3FFF; // 等于 0.4999 #define dqKb 0x3FFF; // 等于 0.4999

//************** 弱磁 **************************************** // 在恒转矩范围内的磁通给定值。 // 根据经验确定、给出额定压 /频比 #define dqK1 3750; //

ACIM.c

/********************************************************************** **

* 作者 : John Theys/Dave Ross * **

* 文件名 : ACIM.c * * 日期 : 10/31/03 *

* 文件版本 : 3.00 * **

* 使用工具 : MPLAB -> 6.43 * * 编译器 -> 1.20.00 * **

* 链接文件 : p30f6010.gld * ** **

*********************************************************************** *10/31/03 2.00 发布电机运行正常,但仍有些遗留的小问题 *

*12/19/03 2.01 完成结构,为所有用户定义变量创建 UserParms.h。 *

*02/12/043.00-从项目中去除了不需要的文件。 * -将 iRPM 改为 int以纠正浮点计算问题。

* -CalcVel() 和转速控制环仅在 iIrpPerCalc指定的数个循环周期后执行 *

*-增加了 iDispLoopCount 变量以安排显示和按钮子程序的执行时间 * -trig.s文件改为使用程序空间来存储正弦数据。

*-增加了 DiagnosticsOutput()函数,该函数使用输出比较通道来输出控 * 制变量信息。

*-增加了 TORQUE_MODE 定义以忽略转速控制环。

*-关闭 curmodel.s文件中的 SATDW位。自动饱和功能阻止转差角计算正确 * 翻转返回。

************************************************************************ *代码说明 *

*该文件给出了使用 dsPIC30F实现的三相交流感应电机矢量控制实例。 *采用空间矢量调制作为控制策略。

***********************************************************************/ /*************************** 全局定义 ***********************/

#define INITIALIZE #include \ #include \ #include \ #include \ #include \ #include \ #include \ #include \ #include \ #include \ #include \

#include \ #include \ #include \ #include \

/*********************** 全局定义结束 ********************/

unsigned short uWork; short iCntsPerRev; short iDeltaPos;

union {

struct {

unsigned DoLoop:1; unsigned OpenLoop:1; unsigned RunMotor:1; unsigned Btn1Pressed:1; unsigned Btn2Pressed:1; unsigned Btn3Pressed:1; unsigned Btn4Pressed:1; unsigned ChangeMode:1; unsigned ChangeSpeed:1; unsigned :7; }bit;

WORD Word;

} uGF; // 通用标志

tPIParm PIParmQ; tPIParm PIParmQref; tPIParm PIParmD;

tReadADCParm ReadADCParm;