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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/77083.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/77083.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/77083.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android: gradient 使用

在 Android 中使用 gradient(漸變) 通常是通過 drawable 文件來設置背景。下面是可以直接用的幾種用法匯總,包括線性漸變、徑向漸變、掃描漸變(sweep)等: ? 1. Linear Gradient(線性漸變&#…

打造AI應用基礎設施:Milvus向量數據庫部署與運維

目錄 打造AI應用基礎設施:Milvus向量數據庫部署與運維1. Milvus介紹1.1 什么是向量數據庫?1.2 Milvus主要特點 2. Milvus部署方案對比2.1 Milvus Lite2.2 Milvus Standalone2.3 Milvus Distributed2.4 部署方案對比表 3. Milvus部署操作命令實戰3.1 Milv…

AI Agent 在醫療健康領域的深度應用剖析

引言 隨著人工智能技術的迅猛發展,AI Agent 在醫療健康領域展現出了巨大的應用潛力。它猶如一位智能助手,憑借其強大的數據處理和分析能力,滲透到醫療健康的各個環節,從疾病診斷、治療方案制定到患者康復監控,都發揮著…

樹莓派超全系列教程文檔--(28)boot文件夾內容

boot文件夾內容 boot 文件夾內容bootcode.binstart*.elffixup*.datcmdline.txtconfig.txtissue.txtinitramfs*ssh 或 ssh.txt設備樹blob文件 ( *.dtb )內核文件 ( *.img )overlays 文件夾 文章來源: http://raspberry.dns8844.cn/documentation 原文網址 boot 文件…

SvelteKit 最新中文文檔教程(20)—— 最佳實踐之性能

前言 Svelte,一個語法簡潔、入門容易,面向未來的前端框架。 從 Svelte 誕生之初,就備受開發者的喜愛,根據統計,從 2019 年到 2024 年,連續 6 年一直是開發者最感興趣的前端框架 No.1: Svelte …

【LangChain核心組件】Memory:讓大語言模型擁有持續對話記憶的工程實踐

目錄 一、Memory架構設計解析 1. 核心組件關系圖 2. 代碼中的關鍵實現 二、對話記憶的工程實現 1. 消息結構化存儲 2. 動態提示組裝機制 三、Memory類型選型指南 四、生產環境優化實踐 1. 記憶容量控制 2. 記憶分片策略 3. 記憶檢索增強 五、典型問題調試技巧 1. …

適應 AI 時代的軟件開發流程:用 AI + TDD 構建可維護項目

?? 適應 AI 時代的軟件開發流程:用 AI + TDD 構建可維護項目 本文面向有系統開發經驗的工程師,分享如何結合 Git 管理、AI 協作、YAML 驅動與 TDD 開發方式,高效構建一個可維護、可協作、可交付的嵌入式或通用工程項目。適合 BLE 模塊、協議棧組件、物聯網控制系統等項目落…

使用 chromedriver 實現網絡爬蟲【手抄】

1、引用 selenium 包 <dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>4.29.0</version> </dependency> <dependency><groupId>org.seleniumhq.seleniu…

Python項目--基于Python的自然語言處理文本摘要系統

1. 項目概述 自然語言處理(NLP)是人工智能領域中一個重要的研究方向&#xff0c;而文本摘要作為NLP的一個重要應用&#xff0c;在信息爆炸的時代具有重要意義。本項目旨在開發一個基于Python的文本摘要系統&#xff0c;能夠自動從長文本中提取關鍵信息&#xff0c;生成簡潔而全…

【Vue #3】指令補充樣式綁定

一、指令修飾符 Vue 的指令修飾符&#xff08;Directive Modifiers&#xff09;是 Vue 模板語法中的重要特性&#xff0c;它們以半角句號 . 開頭&#xff0c;用于對指令的綁定行為進行特殊處理 修飾符作用如下&#xff1a; 簡化事件處理&#xff08;如阻止默認行為、停止冒泡…

Reinforcement Learning強化學習--李宏毅機器學習筆記

個人學習筆記&#xff0c;如有錯誤歡迎指正&#xff0c;也歡迎交流&#xff0c;其他筆記見個人空間 強化學習 vs 監督學習 監督學習&#xff08;Supervised Learning&#xff09;&#xff1a;你有輸入和明確的輸出標簽&#xff0c;例如圖像分類。 強化學習&#xff08;Rein…

Windows VsCode Terminal窗口使用Linux命令

背景描述&#xff1a; 平時開發環境以Linux系統為主&#xff0c;有時又需要使用Windows系統下開發環境&#xff0c;為了能像Linux系統那樣用Windows VsCode&#xff0c;Terminal命令行是必不可少內容。 注&#xff1a;Windows11 VsCode 1.99.2 下面介紹&#xff0c;如何在V…

軟件測試之測試數據生成(Excel版)

這是Excel生成測試數據的函數使用 1.時間 1.1.時間 例生成2022-05-01之前一年內任意時間點: =TEXT("2022-05-01"-RAND()-RANDBETWEEN(1,365),"yyyy-mm-dd hh:mm:ss")1.2.年月日 yyyy-mm-dd 以當前時間生成10年的日期 =TEXT(NOW()-RAND()-RANDBETWE…

libwebsocket建立服務器需要編寫LWS_CALLBACK_ADD_HEADERS事件處理

最近在使用libwebsocket&#xff0c;感覺它搭建Http與websocket服務器比較簡單&#xff0c;不像poco庫那么龐大&#xff0c;但當我使用它建立websocket服務器后&#xff0c;發現websocket客戶端連接一直沒有連接成功&#xff0c;不知道什么原因&#xff0c;經過一天的調試&…

從 PyTorch 到 ONNX:深度學習模型導出全解析

在模型訓練完畢后&#xff0c;我們通常希望將其部署到推理平臺中&#xff0c;比如 TensorRT、ONNX Runtime 或移動端框架。而 ONNX&#xff08;Open Neural Network Exchange&#xff09;正是 PyTorch 與這些平臺之間的橋梁。 本文將以一個圖像去噪模型 SimpleDenoiser 為例&a…

Hadoop集群部署教程-P6

Hadoop集群部署教程-P6 Hadoop集群部署教程&#xff08;續&#xff09; 第二十一章&#xff1a;監控與告警系統集成 21.1 Prometheus監控體系搭建 Exporter部署&#xff1a; # 部署HDFS Exporter wget https://github.com/prometheus/hdfs_exporter/releases/download/v1.1.…

【Altium】AD-生成PDF文件圖紙包含太多的空白怎么解決

1、 文檔目標 AD設計文件導出PDF時&#xff0c;圖紙模板方向設置問題 2、 問題場景 AD使用Smart PDF導出PDF時&#xff0c;不管你怎么設置頁面尺寸&#xff0c;只要從橫向轉為縱向輸出&#xff0c;輸出的始終是橫向紙張&#xff08;中間保留縱向圖紙&#xff0c;兩邊大量留白…

大廠面試:六大排序

前言 本篇博客集中了冒泡&#xff0c;選擇&#xff0c;二分插入&#xff0c;快排&#xff0c;歸并&#xff0c;堆排&#xff0c;六大排序算法 如果覺得對你有幫助&#xff0c;可以點點關注&#xff0c;點點贊&#xff0c;謝謝你&#xff01; 1.冒泡排序 //冒泡排序&#xff…

大模型開發:源碼分析 Qwen 2.5-VL 視頻抽幀模塊(附加FFmpeg 性能對比測試)

目錄 qwen 視頻理解能力 messages 構建 demo qwen 抽幀代碼分析 驗證兩個實際 case 官網介紹圖 性能對比&#xff1a;ffmpeg 抽幀、decord 庫抽幀 介紹 聯系 對比 測試結果 測試明細 ffmpeg 100 qps 測試&#xff08;CPU&#xff09; decord 100 qps 測試&#x…

git的上傳流程

好久沒使用git 命令上傳遠程倉庫了。。。。。溫習了一遍&#xff1b; 幾個注意點--單個文件大小不能超過100M~~~ 一步步運行下面的命令&#xff1a; 進入要上傳的文件夾內&#xff0c;點擊git bash 最終 hbu的小伙伴~有需要nndl實驗的可以自形下載哦