Implementation

Position Controll(ext interface) on MCSDK6.x

前言 這邊因為MCSDK6.x版本後可以直接把位置控制生成出來,但這塊目前僅一般Encoder其他都需要修改,但這樣我們應該怎麼修改? 可以就從幾個範例來講解說明,針對I2C or SPI等等介面,基本上會是以ST生成的code去做調配,因此只有2環位置環+電流環 產生基本框架並且修改 因這邊使用MCSDK6.3.1版本基本上6.X以上版本皆是相同 在ST MCSDK上修改設定把Encoder打開 並且在以下要選成位置控制 Code修改邏輯 第一件事要先確認你多少頻率下會生成一個data,因為PWM採樣是在波峰週期如下圖採樣,基本上需要相同時間內完成不然就會產生運算錯誤,如果採樣太慢就要修改採樣頻率,變成不是每個上升周期都在採樣,可以參考下圖(ST初始設定是每個周期都會採樣) 在code方面是在以下位置 這部分是電流環觸發 採樣後UPdate 位置控制所做的計算主要在中頻任務中完成,因此要確保一個週期時間內可以採樣到全部數據並處理完畢(以30KHz為例全部任務就需要再33us完成,這樣Sensor 上報數據也會需要在33us內有data,如果沒有就需要拉長採樣週期去延長時間) 接下來就是針對已生成的位置控制在狀態內針對幾個部分修改1.CAL 2.Alignment 修改Alignment 原始encoder是使用打Id回測去對應目前角度做Alignment 這邊是使用初始給定角度,但這塊都是encoder專用所以不用設定 如果選用的sensor會記憶角度或可以直接設定為0,可以修改這邊使其變為0 以下總會整是Base 在Encoder底下出來的部分,因此其他interFace針對以下函數去修改即可調用原先架構 範例(使用多摩川encoder) 這邊額外寫一個函數去對比原來SetMecAngle(這邊留意只能用16bit的數據空間超過就需要全部自己重寫) 對比原先左邊和右邊概念不同,右邊是原先Encoder所使用方式因此原先部分是會打Id協助定位,但因為sensor本身輸出就是絕對角度,所以直接使用他的角度資訊操作 最重要的也是角度計算,這塊函數是會持續在中品任務中去update數值 其中Super.hElAngle這個是要塞入所使用sensor最重要的角度資訊,這邊需要針對需要特定條件在撰寫過 其他部分就可以沿用原先的code base 限制 這邊只能使用16bit以內數據,並且是2環架構,另外在位置路徑規劃上ST使用是標準的累積方式,因此並非全部都適合如股會出現暴衝等等現象都是路徑規劃沒有匹配 參考

Position Controll(ext interface) on MCSDK6.x Read More »

Routing a Power Inverter Design Guidelines

前言 客戶在馬達控制設計上常常會有layout上問題,但這邊很多是個架Know How,這邊ST提供重點關鍵設計指引避免在馬達控制上設計踩坑,最後導致ADC回授電路雜訊過多干擾實際馬達控制,另外也提供MOS設計規範指引讓客戶指引可以知道後續設計要點 Circuit loops Guidelines 基本上最重要一個要點就是避免大區域Loops設計(Avoid big area loops as much as possible!) Good component placement is the key 連接方式會建議使用 Kelvin connection/Star Connection 範例 Current loop area is minimized and there are no sensitive circuits inside it GND設計上會建議分開數位GND還有Power GND 其他MOS等設計可以參考下面文件Power MOSFETs: best choice guide for VRM applications 參考

Routing a Power Inverter Design Guidelines Read More »

Detail Know How For MCSDK

前言 針對Motor Control怎樣算好以及怎樣調整一直都是很多新入門玩家的痛,這邊針對一些實際案例與好用工具做詳細介紹,從一開始的Motor Pilot偵測馬達參數,到後續Open loop HW debug,接到Close loop start up 等等 MC-SDK v6.1 – FW lib features list 目前最新版本到6.3,但因手邊公開資料比較表還沒更新上去,基本上最主要差異在於Daul motor還有C0與H5加入 Motor profiler steps 基本上操作會在1min內結束超過1min會出現Fail,容易Fail會是在第3部,這邊最直接解決方式會是降低最大轉速讓ST算法執行完成或直接量測 Checking the Current Regulator 先來看看什麼是好的甚麼是不好的 一般會使用Open Loop先確認Debug HW,電壓設定基本上不用大10%左右就可以了 Close Loop Speed Adjust For Kp KI 這邊直接看2個結果,主要for降速度太慢或太快 參考

Detail Know How For MCSDK Read More »

MCSDK Json File Description

前言 MCSDK目前在6.3.0版本後面新增開發版自訂圖形化模式,相對便利,但在6.2.X版本中都是要去自訂修改Json才可以把自訂功能加上去相對來說是相對麻煩的,而且需要先去對MCU pin腳是否有吻合功能需求。這邊就教學2個版本在自訂開發版上要如何修改 MCSDK6.3.0 Board Define 在最新的6.3.0以上版本目前已知bug是加上FreeRtos會導致UART無法正常連線,如果自己搬移修改會導致MCU進入HardFault,但在自訂板子上多了圖形化介面很方便自己去修改 這邊操作就比較簡單大概就是選取MCU或Power版或整合在一起的板子,比照認知選取即可 MCSDK6.2.X Json File 低於6.3.0版本就比較麻煩會需要到以下路經的資料夾中複製出來檔案直接做文字修改 這邊可以先複製一快開發版JSON到桌面開啟後可以看到,在MCU板那塊選擇目前有支援的即可在把對應的pin填上但其實更快的是直接使用inverter去改寫會快很多 在inverter上就比較顯而易見針對各種回售補對應參數就快速很果,並且在ST官網上也有描述 小Note,在Power 板上面的描述針對Shunt電阻數值這塊可以使用舊版MCSDK5.4.8 針對Shunt阻值的修改如圖最後就可以使用計算器完成數值 參考

MCSDK Json File Description Read More »

Adding ADC channels and PINs in MCSDK 5.X

前言 馬達控制使用MCSDK時候因為ADC已被使用來採樣Shunt電流,這邊在現有的ADC上要再增加通道會需要考慮到取樣率等問題,如果直接用STM32CubeMX加ADC通道沒有做成是排成修改,會讓系統排成Fail,這邊主要是提供資訊如何在馬達專案上增加通道用在飛Shunt電阻採樣 實際操作 關鍵步驟 把標頭檔文件加入宣告,另外需要加入引用 新增 ADC 連接埠配置初始化程序以及控制引腳電平 最後使用內建函數配合排成 ADC channels注意事項 這邊如果依照原先增加方式通道是只有2可存放單純改通道數目會出現Hard Fault 仔細研究後會發現除了改以上通道外標頭檔的宣告文件RCM_MAX_CONV內也需要跟著修改 參考

Adding ADC channels and PINs in MCSDK 5.X Read More »

ST Motor Control Use Case and Debug

前言 客戶使用MCSDK5.4.8生成Hall sensor的code,但在馬達有負載起轉時候會出現馬達激磁聲音,但code部分並未新增甚麼東西,僅讓馬達停止後再起轉,這邊使用DAC接口方便Debug,最終找到演算法與部分需要改動與硬體需要調整部分解決了此問題 問題 這邊在起步出現激磁聲音,先確定相電流出現異常波形長如何,又因此Case是使用Hall sensor去做回授非sensorless,這邊去量測Hall訊號組合出下圖,看的出來再Hall訊號出現快速上下震盪,有些像HFI,但在MCSDK5.4.8這塊是被拔除的。 Debug過程 第一步:因不確定是不是在不對狀態下切換導致,因此先抓取Motor控制狀態,確保到idel狀態在進入馬達起轉或停止 第二步:結果做完第一步後也還是存在問題,接下來就一步一步查詢訊號異常部分來源是在哪邊但可以看到下圖異常部分Id是正常的,沒有注入雜訊,又發現Iq是有實際指令讓馬達去達到目標 第三步:確認是軟體部分後就去切開是回授端出問題還是順向端出問題,使用senorless run後並無發生起步問題,問題縮窄至Hall 回授先做一些調整,查看公版與打版差異,使用Hall回授公版會出現錯誤無法起轉,因此這邊提高Hall的濾雜訊電容,再把其提高,發生頻率有在減小 軟體解決方案 這邊確認後MCSDK5.4.8在起轉時並不是使用六部方波起轉完後再切換至FOC,因此會有空白區域預猜現象,只要有雜訊出現就會使其猜不准出現震盪 因此這邊會從HALL_CalcElAngle in hall_speed_pos_fdbk.c下手詢問原廠後再6.1.2有針對這部分做修正,因此把修正部分加入 參考

ST Motor Control Use Case and Debug Read More »

ST Motor Control Adjust Method-2

前言 此章節會針對MCSDK 常遇到問題去做講解與調整介紹,相關資料位置也會整理出來方便大家在馬達控制上更加快速上手 MCSDK程式主結構 在使用MCSDK Gen code出來,主程式段落與數學對照式如下圖 ST這邊提供3種方案去補強需求下面會介紹這3種方案MTPA/Feed Forward/Flux weakening,這3種方案都可以直接在MCSDK上勾選開啟 MTPA(Maximum Torque Per Ampere) MTPA控制方式與id=0控制方式的區別 這個從轉矩方程最容易看出來,轉矩分為永磁轉矩Tr和磁阻轉矩Tm,而id=0只剩下Tr。這會導致電流的利用率不高,系統的效率降低。所以id=0的控制比較適用於隱極式電機(Ld=Lq),而對於凸極式電機並不最優,所以需要重新考慮控制策略。 Flux Weakening 弱磁即減弱磁通,該方法以降低轉矩為代價,使電機轉速超過其額定轉速。 弱磁控制減弱了永磁體產生的氣隙磁鏈 λpm的影響,從而降低了得到的 d 軸磁通 λd。如圖 Feed Forward 僅具有前饋行為的控制系統對其控制信號以預先定義的方式作出響應,不會對負載作出響應;它與同樣具有反饋的系統形成對比,反饋系統根據輸出如何影響負載,以及負載可能會如何變化來調整輸出;負載變化視為系統的外部環境。 常見問題 Problem: ‘SW error’ fault message appears and the motor do not even try to start Source: the FOC execution rate is too high and computation can not

ST Motor Control Adjust Method-2 Read More »

ST Motor Control Adjust Method-1

前言 在使用ST FOC電機庫時,當使用Hall信號作為位置信號時,需要輸入同步電角度數據,這個數據根據當前使用電機的特性進行輸入,會在每次Hall信號變化時同步電角度,如果角度偏差較大時會影響控制效果,可能帶來效率或者電機的震盪,初始測試還是有必要的,本文詳細說明測試注意事項以及測試方法。 測試準備 如果電機沒有虛擬中點接出,需要連接三個相同阻值電阻到電機的三相接線上,電阻另外一端連接到一起作為虛擬中點; 將Hall信號接入5V電,並且在H1上接入上拉電阻;接入示波器,轉動電機,測試反向電動勢信號以及Hall信號; 波形測試及計算結果 測試一個電週期的時間,這個週期對應360度; 測試電機A相反向電動勢最高點到H1的時間,圖中粉色為電機A相反向電動勢,紅色數字端口D0為H1信號; 該電機同步電角度: 同步角度添加到代碼 如果使用Workbench的話,添加到電機參數中,如圖: 如果直接寫入程序中,則將數據寫入PMSM motor parameters.h文件參數中 參考

ST Motor Control Adjust Method-1 Read More »

Add Position Controll on MC SDK 5.x

前言 在 MC SDK 5.x 中有兩個環路控制,分别是电流環和速度環(力矩環),有些應用需要使用到位置環,比如無人機的雲平台馬達控制,地鐵閘門等等應用,本文將闡述如何在現有 ST 馬達涵式庫基础上增加簡易的位置環,使其能夠擁有3環控制方式使其更加穩定 理論基礎 如果在有減速齒輪馬達上,需要加入速度環以更快速的到達到給定位置,也就是三環控制:位置環+速度還+電流環,框架同如下: 實作步驟 在MCSDK上增加DAC模塊。如果MCU上没有DAC模塊,可以使用TIMER+RC濾波電路模擬輸出DAC;下圖為使用DAC配置,需要配置Userdefined DAC1/2。 增加以下變量或函數用於位置環控制 位置環 PID 結構體 PID_Handle_t PIDAngleHandle_M1 位置控制的結構體 Position_Handle_t 位置角度誤差 Position_GetErrorAngle 位置環速度参考輸出計算 Position_CalcSpeedReferrence 位置環力矩参考輸出计算 Position_CalcTorqueReferrence 参考 mc_position.h 以及 mc_position.c mc_task.c 文件修改 增加 DAC 輸出程序 增加位置控制程序 在 mc_task.c 的中頻任务函数 TSK_MediumFrequencyTaskM1 中增加位置環差值數據計算,根據差值計算,當差值在閥值之上的話進行速度控制,否則進行力矩控制 修改参考電流計算 馬達累積圈數計算 測試 參考 【ST 实战经验】MC SDK 5.x 中增加位置环 MC SDK 5.x 介绍

Add Position Controll on MC SDK 5.x Read More »

Motor Control Workbench 程式架構-2

前言 上篇描述了STM32 Motor Control Workbench所生成的主程式架構,這邊會接續說明3個依附在主架構下的核心任務流程與架構,主要分成3個部分安全任務、中頻任務、高頻任務。其中安全任務主要是針對溫度、電壓、電流去做保護,中頻任務是在執行速度環與狀態執行,最後高頻任務是在FOC演算法執行 安全任務 中頻任務 高頻任務 API使用 介紹完主要程式流程後接下來是去使用上層API使馬達轉動下表示已建立好API 主要是在程式When回圈內去設定以下2個涵式馬達就可以運轉起來 範例參考 需要實現以下速度控制代碼參考如下 參考 STM32電機控制–API函式應用 ST SDK5.0電機正反轉及轉速控制 【基于NUCLEO-F746ZG电机开发应用】8.程序框架-三大核心任务简介

Motor Control Workbench 程式架構-2 Read More »

Shopping Cart