arm_math.h、arm_const_structs.h 和 arm_common_tables.h

在 ​​FOC(Field-Oriented Control,磁场定向控制)​ ​ 中,arm_math.harm_const_structs.harm_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_f32arm_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

相关推荐
星源~27 分钟前
tree 命令集成到 Git Bash:可视化目录结构的指南
git·单片机·物联网·嵌入式·项目开发
SKYDROID云卓小助手2 小时前
无人设备遥控器之自动调整编码技术篇
人工智能·嵌入式硬件·算法·自动化·信号处理
所念皆星海9112 小时前
图灵完备之路(数电学习三分钟)----数据选择器与总线
嵌入式硬件·通信·数电
liuluyang5303 小时前
ARM DStream仿真器脚本常用命令
arm开发·dstream
智者知已应修善业3 小时前
【51单片机节日彩灯控制器设计】2022-6-11
c语言·经验分享·笔记·单片机·嵌入式硬件·51单片机
开-悟4 小时前
嵌入式编程-使用AI查找BUG的启发
c语言·人工智能·嵌入式硬件·bug
许白掰6 小时前
【stm32】HAL库开发——CubeMX配置RTC,单片机工作模式和看门狗
stm32·单片机·嵌入式硬件·学习·实时音视频
DIY机器人工房7 小时前
0.96寸OLED显示屏 江协科技学习笔记(36个知识点)
笔记·科技·stm32·单片机·嵌入式硬件·学习·江协科技
国科安芯7 小时前
【AS32系列MCU调试教程】SPI调试的常见问题解析
单片机·嵌入式硬件·性能优化·硬件架构·硬件工程
LS_learner8 小时前
同步(Synchronization)和互斥(Mutual Exclusion)关系
嵌入式硬件