-
说明
:
下面程序取自
IFX 16
位机无传感器
PMSM<
/p>
电机矢量控制程序。程序架构
是
C
语言嵌套汇编。其中坐标系变换是汇编编写。有插图说明
,
便于更好的理解。
其中包括坐标系变换
,
磁链角估算
,PI
速度环电流环调节。
(
单片机
XC2236N,Tasking
p>
编译器
Cavin
整理
坐标系变换说明
:
双电阻采样得
到两相电流
(ia, ib,
由
abc
120°
静止坐标系
Clarke
变换
到直角坐标系
(iα,
iβ,
由
(iα, iβ
静止直角坐标
系
Park
变换到直角旋转坐标系
(i
q,
id
。直流
id
不变
,
通过
PI
速度环电流环得到期望直流
iq,
进行限幅控制。由
旋转坐标
系
(vq, vd
经过
Park
逆变换到静止坐标系
(vα, vβ
,
然后再经过矢量调制成
PWM
控制<
/p>
电机。
无传感器角度估算
:
由
Clarke
变换得到
(iα, iβ
和由
Park
逆变换得到的
(vα, vβ,
经
过低通滤波器
PT1,
再由直角坐标系变极坐标系得
到磁链估算角无传感器开环启动
策略
:
在定子中加入幅值及频率都受控的电流
,
若
PLL
收敛
,
切换到
FOC
闭环控制。
/**************
**************************************************
***
*********
***************
**************************************************
*******
****/
/**************
**************************************************
*******
*****
***
**************************************************
***************
********/
//*
**************************************************
***************
********** // @Function
int clarke_trans(int Phase_s, int Phase_t, int
*ia;
//
//--------------------------------------------
--------------------------------// @Description ia
= is
// ib = 1/sqrt(3*( (2 *
it + is
//
//---------------
--------------------------------------------------
-----------
// @Returnvalue (ib * 16 ,
//
//-----------------------
--------------------------------------------------
---// @Parameters
//
//-----
--------------------------------------------------
---------------------// @Date
09.01.2005
// Condition
optimization off / one
//**************
**************************************************
**
********** inline int
clarke_trans(int Phase_s, int Phase_t, int *ia
{
int retvalue;
__asm(
:
:
:
;
return retvalue;
}
<
/p>
****************************************
****************************
********/ <
/p>
//**************************************
****************************
**********
// @Function int park_trans(int e_a,int e_b,int
phi,int *a_b
//
//----------
--------------------------------------------------
----------------// @Description
park
transformation
//
//--------
--------------------------------------------------
------------------// @Returnvalue
Id_comp , Iq_comp
//
//--------------------------------------------
--------------------------------// @Parameters
//
/
/-------------------------------------------------
---------------------------// @Date
09.01.2005
// Condition
optimization off / one
inline int
park_trans(int i_a,int i_b,int phi,int *o_q
{
int retvalue;
__asm(
:
:
:
;
return retvalue;
}
/*************************
******************************************
< br>*********
<
/p>
****************************************
****************************
********/ <
/p>
//**************************************
********************************
******
// @Function int inv_park_trans(int e_a,int
e_b,int phi,int *a_b
//
//--
--------------------------------------------------
------------------------// @Description
inverse park transformation
//
//-----------------------
--------------------------------------------------
---// @Returnvalue
I_alpha , I_beta
//
//-----------------------
--------------------------------------------------
---// @Parameters
//
//-------------------------
--------------------------------------------------
-// @Date
09.01.2005
//
Condition optimization off / one
//****
**************************************************
************
********** inline int
inv_park_trans(int i_d,int i_q,int phi,int *o_b
{
int retvalue;
__asm(
:
:
registers */
;
return retvalue;
}
//*
**************************************************
***************
********** // @Function
int cart_polar_conv(int x,int y, int *angle;
//
//-----------------------
--------------------------------------------------
---// @Description
//
//-----------------------
--------------------------------------------------
---// @Returnvalue
//
//----
--------------------------------------------------
----------------------// @Parameters
//
//-------------------------------------
---------------------------------------// @Date
09.01.2005
// Condition
optimization off / one
//**************
**************************************************
**
********** unsigned int
cart_polar_conv(int x,int y, int *angle
{
unsigned int retvalue;
__asm(
CoACC = x * sqrt( 1 + (y/x^2 n
arctan( y/x n
<
/p>
p>
?
- arctan( y/x n
?
+ arctan( y/x n
?
- arctan( x/y =
90
?
- arccot( y/x = arctan(
y/x n
?
+ arctan( x/y =
-(90
?
- arccot( y/x =
-arctan( y/x n
?
+ arctan( x/y =
180
?
-
(90
?
- arccot( y/x =
180
?
-
arctan( y/x
n
?
- arctan( x/y =
-180
?
+
(90
?
- arccot( y/x =
-180
?
+
arctan(
y/x n
:
:
:
;
return retvalue;
}
<
/p>
//**************************************
****************************
**********
// @Function: a low pass filter 2012-9-13 17:58:43
// C calling format:
//
// int inline int pt1_controller32( int
*pt1_parameter, int X
//
//-
--------------------------------------------------
-------------------------// @Description
//
// PT1-Controller
// derived from transfer function
//
// Y_(k = Y_(k-1 + Z1_(k * X_(k - Z2_(k
* Y_(k-1
//----------------------------
------------------------------------------------//
Computing time
42 CPU-cycle
//
//-----------------------
--------------------------------------------------
---// @Returnvalue
//
// int
//-------------------------------------
---------------------------------------//
@Parameters
//-------------------------
--------------------------------------------------
-// Condition
optimization off / one
p>
//***************************************
***************************
**********
inline int pt1_controller32( PT1_array
*pt1_parameter, int X
//inline int
pt1_controller32( int *pt1_parameter, int X
{
int retvalue;
__asm(
:
:
:
;
return retvalue;
}
//********************************************** ********************
**********
// @Function void
ADC0_vStartSeq0ReqChNum(ubyte ubExtTrg, ubyte
// ubEnIntr, ubyte ubRFill, ubyte
ubChannelNum
//
//----------
--------------------------------------------------
----------------
// @Description This
function starts the conversion of the requested
// channel.
// NOTE -
// Before passing ubEnIntr argument as
1,make sure that Seq 0
// source interrupt is enabled.
// External Trigger -> 0,Indicates
software trigger
// (Conversion starts
once this function is executed
//
//------------------------------------------ ----------------------------------
//
@Returnvalue None
//
//-----
--------------------------------------------------
---------------------
// @Parameters
ubExtTrg:
// External Trigger : defines
external trigger.
// @Parameters
ubEnIntr:
// Enable Source Interrupt :
defines source interrupt
// @Parameters
ubRFill:
// Refill : defines the refill
// @Parameters ubChannelNum:
// Channel number : Name of the Request
Channel Number (0 -
// 15- see macros
defined in the header file
//
//---------------------------------------------- ------------------------------
-
-
-
-
-
-
-
-
-
上一篇:心电图查询手册--中英文
下一篇:国际关系类SSCI期刊列表