代码
Axis_transform.c
#include "Axis_transform.h"
//Alpha = Iu
//Beta = (√3/3*2^15*Iu + 2*√3/3*2^15*Iw)/(2^15)
// 此坐标变化是IQ15格式 计算系数 小数点的浮点数据*2^15
//克拉克变化输入时三相电流 电流传感器采集-4095到4096的IQ12格式
void CLARKE_Cale(p_CLARKE pV)
{
pV->Alpha = pV->As;
pV->Beta = _IQmpy((pV->As +_IQmpy2(pV->Bs)),18918); // 1/sqrt(3) 0.57735*2…^15=0.57735*32768 _IQ(0.57735026918963)
}
// Parking Id,Iq
// Id = Ialpha*cos+Ibeta*sin
// Iq = Ibeta*cos-Ialpha*sin
// 卡拉卡是等幅值变化所以 输入 Alpha和Beta是IQ12格式输出还是IQ12 从-4095到4096
//Sine和Cosine表格90度256个 参数是-1到1的IQ15 -32767到32768
void PARK_Cale(p_PARK pV)
{
pV->Ds = _IQmpy(pV->Alpha,pV->Cosine) + _IQmpy(pV->Beta,pV->Sine);
pV->Qs = _IQmpy(pV->Beta,pV->Cosine) - _IQmpy(pV->Alpha,pV->Sine);
}
//IParking Ia,Ib
// Ialpha = Id*cos-Iq*sin
// Ibeta = Iq*cos+Id*sin
void IPARK_Cale(p_IPARK pV)
{
pV->Alpha = _IQmpy(pV->Ds,pV->Cosine) - _IQmpy( pV->Qs,pV->Sine);
pV->Beta = _IQmpy(pV->Qs,pV->Cosine) + _IQmpy(pV->Ds,pV->Sine);
}
Axis_transform.h
#ifndef Axis_transform_H
#define Axis_transform_H
#include "stm32f10x.h"
#include "IQ_math.h"
typedef struct {
int32_t As; // 三相电流A
int32_t Bs; // 三相电流B
int32_t Cs; // 三相电流C
int32_t Alpha; // 二相静止坐标系 Alpha 轴
int32_t Beta; // 二相静止坐标系 Beta 轴
} CLARKE ,*p_CLARKE ;
#define CLARKE_DEFAULTS {0,0,0,0,0} // 初始化参数
typedef struct {
int32_t Alpha; // 二相静止坐标系 Alpha 轴
int32_t Beta; // 二相静止坐标系 Beta 轴
int32_t Angle; // 电机磁极位置角度0---65536即是0---360度
int32_t Ds; // 电机二相旋转坐标系下的d轴电流
int32_t Qs; // 电机二相旋转坐标系下的q轴电流
int32_t Sine; // 正弦参数,-32768---32767 -1到1
int32_t Cosine; // 余弦参数,-32768---32767 -1到1
} PARK , *p_PARK ;
#define PARK_DEFAULTS {0,0,0,0,0,0,0} // 初始化参数
typedef struct {
int32_t Alpha; // 二相静止坐标系 Alpha 轴
int32_t Beta; // 二相静止坐标系 Beta 轴
int32_t Angle; // 电机磁极位置角度0---65536即是0---360度
int32_t Ds; // 电机二相旋转坐标系下的d轴电流
int32_t Qs; // 电机二相旋转坐标系下的q轴电流
int32_t Sine; // 正弦参数,-32768---32767 -1到1
int32_t Cosine; // 余弦参数,-32768---32767 -1到1
} IPARK , *p_IPARK;
#define IPARK_DEFAULTS {0,0,0,0,0,0,0} // 初始化参数
void CLARKE_Cale(p_CLARKE pV); // 三相到二相变换 克拉克变换
void PARK_Cale(p_PARK pV) ; // 二相到二相变换 怕克变换
void IPARK_Cale(p_IPARK pV) ; // 二相到二相变换反怕克变换
#endif /* Axis_transform*/