代码

Axis_transform.c

  1. #include "Axis_transform.h"
  2. //Alpha = Iu
  3. //Beta = (√3/3*2^15*Iu + 2*√3/3*2^15*Iw)/(2^15)
  4. // 此坐标变化是IQ15格式 计算系数 小数点的浮点数据*2^15
  5. //克拉克变化输入时三相电流 电流传感器采集-4095到4096的IQ12格式
  6. void CLARKE_Cale(p_CLARKE pV)
  7. {
  8. pV->Alpha = pV->As;
  9. pV->Beta = _IQmpy((pV->As +_IQmpy2(pV->Bs)),18918); // 1/sqrt(3) 0.57735*2…^15=0.57735*32768 _IQ(0.57735026918963)
  10. }
  11. // Parking Id,Iq
  12. // Id = Ialpha*cos+Ibeta*sin
  13. // Iq = Ibeta*cos-Ialpha*sin
  14. // 卡拉卡是等幅值变化所以 输入 Alpha和Beta是IQ12格式输出还是IQ12 从-4095到4096
  15. //Sine和Cosine表格90度256个 参数是-1到1的IQ15 -32767到32768
  16. void PARK_Cale(p_PARK pV)
  17. {
  18. pV->Ds = _IQmpy(pV->Alpha,pV->Cosine) + _IQmpy(pV->Beta,pV->Sine);
  19. pV->Qs = _IQmpy(pV->Beta,pV->Cosine) - _IQmpy(pV->Alpha,pV->Sine);
  20. }
  21. //IParking Ia,Ib
  22. // Ialpha = Id*cos-Iq*sin
  23. // Ibeta = Iq*cos+Id*sin
  24. void IPARK_Cale(p_IPARK pV)
  25. {
  26. pV->Alpha = _IQmpy(pV->Ds,pV->Cosine) - _IQmpy( pV->Qs,pV->Sine);
  27. pV->Beta = _IQmpy(pV->Qs,pV->Cosine) + _IQmpy(pV->Ds,pV->Sine);
  28. }

Axis_transform.h

  1. #ifndef Axis_transform_H
  2. #define Axis_transform_H
  3. #include "stm32f10x.h"
  4. #include "IQ_math.h"
  5. typedef struct {
  6. int32_t As; // 三相电流A
  7. int32_t Bs; // 三相电流B
  8. int32_t Cs; // 三相电流C
  9. int32_t Alpha; // 二相静止坐标系 Alpha 轴
  10. int32_t Beta; // 二相静止坐标系 Beta 轴
  11. } CLARKE ,*p_CLARKE ;
  12. #define CLARKE_DEFAULTS {0,0,0,0,0} // 初始化参数
  13. typedef struct {
  14. int32_t Alpha; // 二相静止坐标系 Alpha 轴
  15. int32_t Beta; // 二相静止坐标系 Beta 轴
  16. int32_t Angle; // 电机磁极位置角度0---65536即是0---360度
  17. int32_t Ds; // 电机二相旋转坐标系下的d轴电流
  18. int32_t Qs; // 电机二相旋转坐标系下的q轴电流
  19. int32_t Sine; // 正弦参数,-32768---32767 -1到1
  20. int32_t Cosine; // 余弦参数,-32768---32767 -1到1
  21. } PARK , *p_PARK ;
  22. #define PARK_DEFAULTS {0,0,0,0,0,0,0} // 初始化参数
  23. typedef struct {
  24. int32_t Alpha; // 二相静止坐标系 Alpha 轴
  25. int32_t Beta; // 二相静止坐标系 Beta 轴
  26. int32_t Angle; // 电机磁极位置角度0---65536即是0---360度
  27. int32_t Ds; // 电机二相旋转坐标系下的d轴电流
  28. int32_t Qs; // 电机二相旋转坐标系下的q轴电流
  29. int32_t Sine; // 正弦参数,-32768---32767 -1到1
  30. int32_t Cosine; // 余弦参数,-32768---32767 -1到1
  31. } IPARK , *p_IPARK;
  32. #define IPARK_DEFAULTS {0,0,0,0,0,0,0} // 初始化参数
  33. void CLARKE_Cale(p_CLARKE pV); // 三相到二相变换 克拉克变换
  34. void PARK_Cale(p_PARK pV) ; // 二相到二相变换 怕克变换
  35. void IPARK_Cale(p_IPARK pV) ; // 二相到二相变换反怕克变换
  36. #endif /* Axis_transform*/