FOC中的PARK变换_TI和ST电机控制库的源码实现

news/2024/10/18 16:50:10/

FOC中的Clarke变换_TI和ST电机控制库的源码实现
FOC中的PARK变换_TI和ST电机控制库的源码实现
FOC中的反PARK变换_TI和ST电机控制库的源码实现

park变换

该变换将平衡两相正交平稳系统中的矢量变换为正交旋转坐标系。
参考框架_TI文档
数学公式:

{ I D = I α × cos ⁡ θ + I β × sin ⁡ θ I Q = − I α × sin ⁡ θ + I β × cos ⁡ θ \left\{ \begin{array}{l} I_D=I_{\alpha}\times \cos \theta +I_{\beta}\times \sin \theta\\ I_Q=-I_{\alpha}\times \sin \theta +I_{\beta}\times \cos \theta\\ \end{array} \right. {ID=Iα×cosθ+Iβ×sinθIQ=Iα×sinθ+Iβ×cosθ
跟着转子旋转的“d-q”坐标系成功把cos,sin正余弦信号转化线性的了。
theta角度是由位置传感器得到的已知变量。
在这里插入图片描述在这里插入图片描述

TI的实现

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

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 );
}

参考:
TI DMC MATH_13.1pdf
STM32 FOC 软件培训库pdf


被抛弃的写随笔公众号改写技术文章了,感兴趣的可以关注公众号:王崇卫
在这里插入图片描述


http://www.ppmy.cn/news/742941.html

相关文章

TI毫米波雷达开发中软件版本的说明

目录 1.确定芯片的版本 2.下载对应版本的SDK 3. 下载Uniflash 4.下载对应的mmWave Demo Visualizer的版本 5.下载对应的工具箱 6.如果用到采集卡&#xff0c;需要下载对应版本的mmWave Studio 7. CCS 1.确定芯片的版本 拿到EVM板之后先确定板子的型号。比如AWR1642 ES1…

TI常用库函数介绍

TI为它的DSP各系列芯片提供了高效实现的库函数&#xff0c;囊括通用领域和一些专用领域。本文集中介绍TI C66平台的通用库函数&#xff0c;包括其类别&#xff0c;具体功能以及使用注意事项等。 在使用前&#xff0c;当知悉以下几点&#xff1a; 函数进程由手动汇编而成&#…

TI单芯片毫米波雷达1642代码走读(〇)——总纲

前言 近年来&#xff0c;自动驾驶行业发展如火如荼&#xff0c;雷达技术也逐渐从军工封闭圈走向了开放的市场。 毫米波雷达具有全天候探测能力&#xff0c;特别是在雨雪雾天气以及夜间都能可靠工作&#xff0c;并且探测距离相对其他车载传感器非常远&#xff0c;对运动目标非…

TI DSP具体型号含义

例如&#xff1a;TMS320F2812PGFA 1.前缀&#xff1a;TMX实验器件 &#xff1b; TMP原型器件 TMS合格器件 2.系列号&#xff1a;320TMS320系列 3.引导加载选项&#xff1a;&#xff08;B&#xff09; 4.工艺&#xff1a; CCOMS ECOMS &#xff1b;EPROM FFlash &#x…

TI C2000系列DSP可配置逻辑块(CLB)设计说明

TI C2000系列DSP可配置逻辑块&#xff08;CLB&#xff09;设计说明 CLB结构概述CLB输入CLB输出CLB的TILE块 TILE内部深入分析查找表LUT有限状态机FSM计数器 CLB结构概述 基本级别配置中存在的四个 CLB 模块中的每一个都由一个输入信号选择器、 一个 CLB 逻辑块和一个外设信号多…

Tina-TI 电路仿真下载、安装、简单功能介绍

Tina-TI是众多基于SPICE算法的仿真软件之一&#xff0c;前身为 Tina&#xff0c;后缀 -TI 是因为里面的元件参数都是 TI德州仪器的。 电路仿真中&#xff0c;Multisim实在是太大&#xff0c;功能上对于绝大多数人来说应该都是过分冗余的。估计大多数人都是想画好运放部分电路&…

教你如何从TI官网上获取芯片的封装(以导出AD为例)

之前想画一个TM4C123G的板子&#xff0c;但是手头有没有TM4C123G芯片的封装&#xff0c;自己还懒得画&#xff0c;后来了解到一个从TI官网上获取封装的方法&#xff0c;特来此分享 本篇以TM4C123GH6PZ芯片为例导出AD封装 首先第一步&#xff0c;在TI官网说找到TM4C123GH6PZ这个…

PSpice for TI和TINA-TI的区别

关于PSpice for TI和TINA-TI的区别&#xff0c;下面用一个图进行说明。 从上图可以看出&#xff0c;PSpice for TI相对于TINA-TI来说&#xff0c;功能更加全面&#xff0c;因此尽量选择PSpice for TI去学习~