当前位置: 首页 > news >正文

arm_math.h、arm_const_structs.h 和 arm_common_tables.h

在 ​​FOC(Field-Oriented Control,磁场定向控制)​​ 中,arm_math.harm_const_structs.h 和 arm_common_tables.h 是 CMSIS-DSP 库的核心组件,用于实现高效的数学运算、预定义结构和查表操作。以下是它们在 FOC 控制中的具体应用场景:

以下的的函数名称可能不一致,但.H文件中可以找到;

​1. arm_math.h 的核心作用​

这是 CMSIS-DSP 的核心数学函数库,提供了 FOC 控制所需的关键算法:

  • ​坐标变换​​:

    • ​Clarke 变换​​:将三相电流(Ia, Ib, Ic)转换为两相静止坐标系(Iα, Iβ
    • // 使用向量运算实现 Clarke 变换
      arm_clarke_f32(Ia, Ib, &Iα, &Iβ);
    • ​Park 变换​​:将静止坐标系(Iα, Iβ)转换为旋转坐标系(Id, Iq)。
    • // 使用三角函数(依赖 `arm_sin_f32` 或查表)
      arm_park_f32(Iα, Iβ, &Id, &Iq, angle);
    • 逆 Park 变换​​:将旋转坐标系(Vd, Vq)转换回静止坐标系(Valpha, Vbeta)。
  • ​三角函数计算​​:

    • Park/逆 Park 变换依赖正弦/余弦函数,可通过 arm_sin_f32 或查表(arm_common_tables.h)实现
  • ​滤波算法​​:

    • 电流环或速度环的低通滤波器(如 arm_biquad_cascade_df2T_f32)。
  • ​PID 控制器​​:

    • 使用 arm_pid_f32 结构体实现电流环和速度环的 PID 调节。

​2. arm_const_structs.h 的预定义结构体​

该头文件定义了复数、滤波器结构体等,简化了 FOC 中复杂数据结构的初始化:

  • ​复数运算​​:
  • // 定义复数类型(用于 Park/逆 Park 变换中的复数乘法)
    typedef struct {
      float32_t real;
      float32_t imag;
    } complex32_t;
  • 滤波器配置​​:
  • 如二阶带通/带阻滤波器的预定义结构体,用于电流谐波抑制。

​3. arm_common_tables.h 的查表加速​

该头文件包含预计算的查找表(Lookup Tables),用于减少实时计算开销:

​正弦/余弦表​​:

// 预先生成的正弦表(例如 1024 点)
extern const float32_t sin_table[1024];
extern const float32_t cos_table[1024];

  • 在 Park 变换中直接查表代替 arm_sin_f32 或 arm_cos_f32,提升效率。
  • 适用于资源受限的 Cortex-M4/M7 微控制器。

​坐标旋转表​​:

预先计算的角度到旋转矩阵的映射,减少实时三角函数计算。

FOC 控制流程中的典型应用​

  1. ​电流采样与 Clarke 变换​​:

    // 三相电流 → 两相静止坐标系
    arm_vector2d_f32(Ia, Ib, &Iα, &Iβ);
  2. ​Park 变换(使用查表或数学函数)​​:

    // 使用查表加速正弦/余弦计算
    float32_t sin_theta = sin_table[(int)(angle * 1024 / (2*PI))];
    arm_park_f32(Iα, Iβ, &Id, &Iq, angle);
  3. ​PID 调节(arm_pid_f32)​​:

    // 初始化 PID 结构体
    arm_pid_instance_f32 pid;
    arm_pid_init_f32(&pid);
    
    // 计算电流环输出
    arm_pid_f32(&pid, error, &output);
  4. ​逆 Park 变换与 PWM 生成​​:

    // 旋转坐标系 → 静止坐标系
    arm_unpark_f32(Vd, Vq, &Valpha, &Vbeta, angle);
    
    // 逆Clark变换 → 三相电压
    arm_vector3d_f32(Valpha, Vbeta, &Va, &Vb, &Vc);
    
    // 空间矢量调制(SVPWM)生成 PWM 信号

​优化建议​

  1. ​定点 vs 浮点​​:

    • 若使用定点运算(如 q31_t),需调用 arm_math_q31.h 中的定点函数。
    • 浮点运算(float32_t)更易调试,但需确保 Cortex-M4/M7 的 FPU 支持。
  2. ​查表 vs 实时计算​​:

    • 查表法(arm_common_tables.h)可减少计算量,但需权衡内存占用。
    • 对于动态调整角度的应用(如无感 FOC),需实时更新查表索引。
  3. ​性能关键路径​​:

    • 将 Park/逆 Park 变换、PWM 更新等关键代码放在 DMA 中断服务例程(ISR)中,确保实时性。

通过合理组合这些组件,可以高效实现 FOC 控制的核心算法,同时充分利用 ARM Cortex-M 处理器的 DSP 扩展能力。

库arm_cortexM4lf_math.lib包含以下文件:打包成了一个库:

添加到MDK:

只要添加1和2就在初始化时添加了FPU浮点数,

__FPU_PRESENT == 1在第二张图中已经自动添加;

__FPU_USED == 1在第三张图中添加;

添加DSP

c++选项中添加:宏定义中添加3,4,5

相关文章:

  • 游戏引擎学习第217天
  • Day14:关于MySQL的索引——创、查、删
  • 【腾讯云智】20250329笔试算法题
  • QT聊天项目开发DAY02
  • NIPS2024论文 End-to-End Ontology Learning with Large Language Models
  • SpringBoot-Web开发
  • 网络空间安全(56)Laravel框架讲解
  • NoSQL入门指南:Redis与MongoDB的Java实战
  • gdb调试之.gdbinit 文件的用法
  • 最大子序和问题——动态规划/贪心算法解决
  • 2025年AI语音克隆工具全面评估与选型指南
  • Redis-基本概念
  • shield.io网站|markdown中适用的“徽标”
  • 使用ADB工具分析Android应用崩溃原因:以闪动校园为例
  • Gateway-网关-分布式服务部署
  • Python10天突击--Day 2: 实现观察者模式
  • 【LeetCode 热题100】二叉树构造题精讲:前序 + 中序建树 有序数组构造 BST(力扣105 / 108)(Go语言版)
  • 基于SpringBoot的宠物健康咨询系统(源码+数据库+万字文档)
  • OpenHarmony5.0.2 USB摄像头适配
  • win11安装更新报错:我们无法更新系统保留分区
  • 广州医药集团有限公司原党委书记、董事长李楚源被“双开”
  • 中国首艘海洋级智能科考船“同济”号试航成功,可搭载水下遥控机器人
  • 特朗普称即将与伊朗达成核协议,外交部:中方愿继续发挥建设性作用
  • 泉州围头湾一港区项目炸礁被指影响中华白海豚,官方:已叫停重新评估
  • 梅花奖在上海|话剧《主角》:艺术与人生的交错
  • 商务部:中方敦促美方尽快停止232关税措施