Park变换
Park变换的本质是静止坐标系αβ乘以一个旋转矩阵,从而得到dq坐标系,输入的i_α和i_β经过Park变换得到i_d和i_q(交直变换)。

数学公式
跟着转子旋转的“d-q”坐标系把cos,sin正余弦信号转化线性的了,theta角度是由位置传感器得到的已知变量。

simulink仿真

TI的实现
简单的两句计算,cos和sin(theta)是外部计算传入参数。对于三角函数,TI有自己的库去计算。而cos和sin(theta)不止只有在park中使用,其他地方也会使用,在这函数中再计算一次,未免多花时间了。

typedef struct {  _iq  Alpha;          // Input: stationary d-axis stator variable                          _iq  Beta;           // Input: stationary q-axis stator variable _iq  Angle;          // Input: rotating angle (pu) _iq  Ds;             // Output: rotating d-axis stator variable _iq  Qs;             // Output: rotating q-axis stator variable_iq  Sine;_iq  Cosine;          } PARK;                    /*------------------------------------------------------------------------------PARK Transformation Macro Definition
------------------------------------------------------------------------------*/
#define   PARK_MACRO(v)                                                                                        v.Ds = _IQmpy(v.Alpha,v.Cosine) + _IQmpy(v.Beta,v.Sine);   v.Qs = _IQmpy(v.Beta,v.Cosine)    - _IQmpy(v.Alpha,v.Sine);

ST的实现
ST的代码写很“规矩”,一步一步的。很多限幅检测。在对theta求角度的查表法也绕了一下。解决浮点计算,统一后,全使用int型的。

typedef struct
{int16_t hCos;int16_t hSin;
} Trig_Components;typedef struct
{int16_t alpha;int16_t beta;
} alphabeta_t;typedef struct
{int16_t q;int16_t d;
} qd_t;__weak qd_t MCM_Park( alphabeta_t Input, int16_t Theta )
{qd_t Output;int32_t d_tmp_1, d_tmp_2, q_tmp_1, q_tmp_2;Trig_Components Local_Vector_Components;int32_t wqd_tmp;int16_t hqd_tmp;// 传入theta 查表计算得到 cos和sin的值Local_Vector_Components = MCM_Trig_Functions( Theta );// 不保证溢出,先计算一次,然后各种限幅判断,最后再做IQ的赋值/*No overflow guaranteed*/// 计算 alpha*cos(theta)q_tmp_1 = Input.alpha * ( int32_t )Local_Vector_Components.hCos;/*No overflow guaranteed*/// 计算 beta*sin(theta)q_tmp_2 = Input.beta * ( int32_t )Local_Vector_Components.hSin;/*Iq component in Q1.15 Format */
#ifdef FULL_MISRA_C_COMPLIANCYwqd_tmp = ( q_tmp_1 - q_tmp_2 ) / 32768;
#else/* WARNING: the below instruction is not MISRA compliant, user should verifythat Cortex-M3 assembly instruction ASR (arithmetic shift right) is used bythe compiler to perform the shift (instead of LSR logical shift right) */// IQ的计算,计算完了,去各种限幅。 右移15是sin和cos/32768得到真正的值,又回到16位以内wqd_tmp = ( q_tmp_1 - q_tmp_2 ) >> 15;
#endif/* Check saturation of Iq */if ( wqd_tmp > INT16_MAX )hqd_tmp = INT16_MAX;else if ( wqd_tmp < ( -32768 ) )hqd_tmp = ( -32768 );elsehqd_tmp = ( int16_t )( wqd_tmp );Output.q = hqd_tmp;if ( Output.q == ( int16_t )( -32768 ) ){Output.q = -32767;}/*No overflow guaranteed*/d_tmp_1 = Input.alpha * ( int32_t )Local_Vector_Components.hSin;/*No overflow guaranteed*/d_tmp_2 = Input.beta * ( int32_t )Local_Vector_Components.hCos;/*Id component in Q1.15 Format */
#ifdef FULL_MISRA_C_COMPLIANCYwqd_tmp = ( d_tmp_1 + d_tmp_2 ) / 32768;
#else/* WARNING: the below instruction is not MISRA compliant, user should verifythat Cortex-M3 assembly instruction ASR (arithmetic shift right) is used bythe compiler to perform the shift (instead of LSR logical shift right) */wqd_tmp = ( d_tmp_1 + d_tmp_2 ) >> 15;
#endif/* Check saturation of Id */if ( wqd_tmp > INT16_MAX ){hqd_tmp = INT16_MAX;}else if ( wqd_tmp < ( -32768 ) ){hqd_tmp = ( -32768 );}else{hqd_tmp = ( int16_t )( wqd_tmp );}Output.d = hqd_tmp;if ( Output.d == ( int16_t )( -32768 ) ){Output.d = -32767;}return ( Output );
}

FOC中的Park变换(TI与ST)相关推荐

  1. FOC: Park变换电角度误差带来的影响

    关于坐标变换已经在这篇博客中提到<FOC中的Clarke变换和Park变换详解>,在FOC算法的实际调试过程中会遇到很多与理论有所偏差的问题,往往这些情况下,需要对理论有较深刻的理解,才能 ...

  2. 电机FOC中的坐标变换(CLARK+PARK+公式推导+仿真+C语言实现)

    0 前言 今天获知了,电机FOC包含了SVPWM.坐标转换.信号采集反馈.PID闭环控制等,这个控制策略,统称为FOC控制.一般SVPWM算法的实现是在静止的αβ坐标系上实现.而PID控制器由于是对直 ...

  3. PMSM中常用的两种坐标变换——Park变换

    Xiaoxiaodawei 摘要: 同步旋转的合成磁场是由三项定子绕组在气隙中产生的,而Park变换就是用一个假想的.随转子同步旋转的绕组来等效替代原来的三相定子绕组.根据等效的原则,不论使用什么样的 ...

  4. PMSM FOC控制 Matlab/Simulink仿真之反Park变换

    1.Park变换的原理 在经过电流PID之后输出的是Ud,Uq是2相旋转坐标系,是不能直接控制电机的,要经过反Park变换 ,即2r->2s变换,原理还是投影定理. 2.Park变换的计算过程 ...

  5. FOC之Clarke变换和Park变换

    FOC坐标变换 这里简述FOC中用到的用到的Clarke和Park坐标变换所涉及到的公式,想要更加详细了解可自行百度. 1. Clarke变换(3s/2s) N3:三相绕组每相绕组匝数N_3:三相绕组 ...

  6. STM32_FOC_4_如何获得Park变换中的θ角-即电机的电角度_Plus

    STM32_FOC_2_如何获得Park变换中的θ角-即电机的电角度_heqiunong的博客-CSDN博客 前面我们谈到,寻找零电角度对应的编码器偏置量,然后用这个零电角度的编码器偏置量和编码器读数 ...

  7. PMSM FOC控制 Matlab/Simulink仿真之Park变换

    1.Park变换的原理 上一节,我们说过,PMSM foc 控制需要坐标变换,说到了Clark变换,其实在Clark变换后还需要Park变换,把静止的2相坐标转换到2相的移动坐标,即2s->2r ...

  8. STM32_FOC_2_如何获得Park变换中的θ角-即电机的电角度

    永磁同步电机一般都会安装编码器测量电机的机械角度.我们一般通过编码器测量的机械角度来计算电机的电角度. 第一步:如何获得电机在电角度为0°时,编码器读数 令,iq = 0, id = 一个合适值(比如 ...

  9. Clark与Park变换推导

    1.beta轴超前alpha轴90度 2. beta轴滞后alpha轴90度 参考资料:(124条消息) 电机FOC中的坐标变换(CLARK+PARK+公式推导+仿真+C语言实现)_qq_271581 ...

最新文章

  1. c语言程序设计自评报告,石家庄学院c语言程序设计自评报告.docx
  2. 读《大型网站技术架构:核心原理与案例分析》第一章:大型网站架构演化
  3. 数字和字符串的相互转化
  4. 过滤被7整除或者包含7的数子
  5. 用户模块开发 分类模块 商品模块 购物车模块
  6. 图片裁剪:CropZoom插件的应用
  7. 添加 centos 右键 terminal
  8. HTTP权威指南 文字版 带目录
  9. nbu备份社区版mysql_mysql数据备份之NBU
  10. 汉王手写板linux驱动下载,Hanwang汉王
  11. 我爱看的书-2021-4-17
  12. 午夜分享女人的绝对隐私
  13. 南京美食指南(完美篇)
  14. 2020年3月全国程序员工资统计,平均工资13820元
  15. webstrom怎么配置git并提交
  16. Linux(CentOS7)安装MySQL-5.7版本
  17. 一级导数和二级导数的意义
  18. 与IBM谈判搁浅 Sun及其CEO前景存疑
  19. Leopard中修改分辨率
  20. spark 学习(二) RDD及共享变量

热门文章

  1. 2016全球与中国市场示波器深度研究报告
  2. 免费开源很不错的报表工具xdoc
  3. iOS 二维码ZBarSDK类似微信的扫一扫
  4. 计算机、程序和 Java 概述 学习笔记
  5. Microsoft Word中自动编号有参考文献识别不到的问题
  6. matlab机器学习公众号,GitHub - zxw254470434/machine_learning_beginner: 机器学习初学者公众号作品...
  7. python项目实战——银行取款机系统(七)
  8. OpenLayers基础教程——常规的地图控件
  9. PostGre使用总结
  10. 24考研规划复习指导