yj hung

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 »

Daul Motor By using MCSDK6.X

前言 這次在雙馬達控制,ST使用MCSDK生成基本上是跟單馬達控制相同,但主要差異在於任務排程上有差異,這邊說明雙馬達控制上的流程,並比較雙馬達控制2種差異,在sensing端ST這邊的理論與實際code的操作,另外說明SVPWM的緣故抽載頻率是PWM的2倍 ST SDK6.X支援list 這邊ST支援雙馬達部分目前F4/F3/G4/F7,單馬達部分多C0/H5,需要留意F7和F1不完全支持 另外部分的code是額外非在SDK內可以生成,但在目前新版六步方波基本上可以生成但H7部分還是需要額外索取 雙馬達控制時序 以下是雙馬達使用SDK生成出的時序,主要可以看到ADC擷取採樣基本上都在TIM峰值附近但在update數值會是下一次循環中才更新,另外因MCU為單軌執行序在於TIM1與TIM8會有中斷後處理分開的現象(馬達1和馬達2之間的FOC順序可以根據ADC取樣點顛倒)透過修改 TIM1_CCER 暫存器中的 CC4P 位元來反轉 PWM 4 輸出。因此,當 TIM1 計數器在向下計數期間與 OCR4 暫存器值相符時,A/D 取樣開始。 執行 FOC 演算法後,計算要載入到 OCR4 暫存器中的值設定下一個 PWM 週期的取樣點,並且 A/D 轉換器配置為對正確的通道進行取樣。 Update Event Tasks ADC Interrupt Service Routine Tasks 備註:這邊有2個參數可以調整T-rise/T-noise增加穩定性 參考

Daul Motor By using MCSDK6.X Read More »

Azure RTOS ThreadX on STM32 MCU

前言 目前在最新系列H5/U5/U0 /C071使用STM32CubeMX建置出USB的基底都變成USBX是以Azure RTOS ThreadX 架構去撰寫,變成如果需要使用舊的FreeRTOS會必須自己搬移code相對變得麻煩許多,但因新的Azure RTOS在結構上優化這邊就嘗試研究撰寫整理文章 簡介Azure RTOS Azure RTOS 的核心是 ThreadX,它是一種即時內核,ThreadX 擁有多種競爭優勢,其中包括多種安全關鍵認證。Microsoft 提供Azure RTOS 也能夠最大限度地減少品質和可靠性問題,大大降低此類問題可能引發的冗長調試會話,總體上有利於 RTOS 用戶。 ST支援與架構 這邊會以主要THREADX架構往下生成 這邊留意Azure RTOS有支援USB PD但ST還未整合完全需要自己寫USB-PD is supported by ST USBPD library and applications provided in STM32Cube MCU packages. But it is not yet integrated with STM32 Azure® RTOS MW solution. THREADX簡介 ThreadX 是一個即時作業系統 (RTOS),專為嵌入式系統而設計 ThreadX 支援表如下 ThreadX操作 從

Azure RTOS ThreadX on STM32 MCU Read More »

How to create DLL by Visual Studio

前言 之前因都需要使用CMD呼叫外部工具去讓PC對微控制器發送HID指令,這邊就想嘗試把這塊整合成DLL使用call DLL方式去達成,一來可以簡化操作也可以比較快速達到目的,今天彙整網路上各個資訊把如何使用Visual Studio生成DLL做完整 建立一個 DLL專案 選擇建置DLL專案,並且新增一個 .h 的檔案 官方文件中提供了兩種方式可以匯出dll中的函式: 首先新建立標頭檔案“XXX.h”,它的作用是用來宣告需要匯出的函式介面。 在新增的標頭檔中,填入以下程式碼。 再來要加入「C++ 檔(.cpp)」 然後我們需要在‘XXXXl.cpp’中實現在‘XXXXl.h’中被宣告的函式,程式碼如下: 與其相對的還有一句程式碼是__declspec(dllimport),此修飾符的作用是告訴編譯器和連結器被它修飾的函式或變數需要從DLL匯入 這是由於C語言沒有過載,不會改變函式名。而C++中有過載,在編譯過程中會根據返回值和引數修改函式名。 如何呼叫dll 參考

How to create DLL by Visual Studio 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 »

State observer sensorless algorithm

前言 State observer sensorless algorithm是ST的SDK所使用的方式,這邊會來深入解說observer+PLL算法以對應ST MCSDK所要調整參數,讓在調整參數上更為快速能準確完成任務目標,所參考資料為ST MCSDK 6.3.0版本以下是眾多sensorless馬達控制這次僅針對State observer 永磁同步馬達的數學模型 永磁同步電機,在α-β軸系下的電壓方程的一般表達形式 對龍伯格觀測器進行離散化,設採樣時間為T,則離散化後的觀測器為右圖 鎖相環(Phase-Locked Loop) 上面已經算出了反電勢的估計值,直接透過反正切函數就可以分別計算出位置和速度了,如下: Sensorless tuning STO & PLL page 針對ST參數有一個對照表如下 參考

State observer sensorless algorithm Read More »

STM32 Ethernet Sever (UDP and TCP)

前言 上篇章節初步介紹ST MCU 在Ethernet 的設定與ping ID,本章節會介紹2種Ethernet常見的UDP 和TCP Sever and Client都會介紹到。並比較2者不同處與注意事項,下一篇章節就會在更進一步討論LWIP等問題 UDP Vs TCP 2者基本上都會使用到UDP比較常使用在無線傳輸,TCP比較常用在有線傳輸比較表如下,基本上可靠度TCP會比UDP好,但傳輸效率上TCP會比較慢 STM32CubeMX setting 這邊基本上跟之前設定相同,並沒有特別不論UDP或TCP都是一樣的 Coding For SERVER 這邊可以發現大部分都有建立好Function可以使用,除了一開始IP宣告主要的要點就是接收 UDP TCP UDP主要接收是寫在callback TCP是額外寫 UDP的部分是比較簡單,TCP部分會需要額外寫除了接收外還要寫處理流程等等比較嚴謹 tcp_server_recv Server Handle 參考

STM32 Ethernet Sever (UDP and TCP) Read More »

STM32 Ethernet for H7 Series

前言 Ethernet在ST高規格MCU中存在該Funtion,但都沒有機會認真研究,這次剛好有客戶提出問題在於Ethernet如果在開機狀態下不接上,事後在接上線路會無法連上ethernet,藉由這次機會來研讀該Function的使用方式與詳細細則 STM32CubeMX設定 先設定ETH設定RMII,這邊可以參考圖設計或英文文字設定 另外開啟LWIP,這邊是以10KB為一個單位的the Heap 注意一定要把LWIP_NETIF_LINK_CALLBACK選上,不然連線狀態改變不能進入拔下或插入網路線回呼函數 Cortex-M7設定Lwip使用DMA傳遞訊息,對應的DMA記憶體定義在sram。 H7的sram分為好幾段,高速段為cpu獨享,通俗點說就是這段允許使用者寫的程式使用,但不允許DMA使用。 所以為DMA定義的記憶體或數組要避開這一段。 另外Lwip使用DMA時有互動存取問題,避開這段後,也不能讓cpu像使用普通cache那樣亂序使用,否則將可能出現嚴重問題。 (1)Lwip不被允許使用cpu專用的高速L1快取(DTCM),只能用D2 Sram區域;(2)cpu可以無序存取cache,為防止這種情況,Lwip的DMA段必須是device類型或Strongly-ordered類型,保證有序;(3)透過MPU配置這段cache,其中一段允許share、允許buffer,長度為256Byte,放置TXRX互動存取頭;另外一段不share,不buffer,不cache;長度32k Coding (添加簡單的 Hello UDP ) 在 main.c 的開頭新增以下包含檔案: 在 main.c 寫入 參考

STM32 Ethernet for H7 Series Read More »

STM32H5 DMA 2D addressing Overview

GPDMA GPDMA 是一種系統週邊設備,是 AHB 匯流排上的雙埠主設備。 它被用於透過鍊錶在外部和/或記憶體之間傳輸資料。 所有 GPDMA 可程式傳輸均在系統層面提供更高效能,並使 CPU 無需執行這些資料傳輸任務。 STM32CubeMX建置 這邊和舊的DMA不同會全部都彙整到GPDMA處設定,在所需要開啟DMA的interface,設定會直接link到GPDMA設定這邊通常都設定標準模式 這邊注意不同通道會有不同字結長度 GPDMA Coding 這邊可以參考UART範例 參考

STM32H5 DMA 2D addressing Overview Read More »

STM32CubePrg API(example project)

前言 這邊因協助客戶需要把ST更新軟體鑲嵌在客戶自訂的軟體上面,因此這邊就深挖STM32CubePrg原始的接口,並把他逐步整合到客戶指定的樣板上,基本上架構是以STM32CubePrg為主,這邊interFace會以USB DFU為主介紹(HID等客製化方式不再此介紹範圍) STM32CubePrg Project 結構 這邊主要會拆成2部分一部份是設定連接MCU的資料與連接上更新的interface,首先我們會先到以下路徑開啟project 該資料夾是在安裝STM32CubePrg後就會存在C曹個人資料夾中 第一部分是Set MCU更新資料 這邊幾個注意事項這邊已USB為例 該路徑事需要指向Database內,確認需要被更新MCU為哪顆保留一個該檔案即可,也可以先使用ST-LINKV2連線該資料會出現在STM32CubePrg Information上,可以不用全部都採納,但指向路徑必須設定正確 更新主軸API(USB為例) 再來是選擇InterFace去完成,這邊選用USB 這邊基本上做FW download Function就是downloadFile 其他都是在檢測是否有正常連線到,這邊有測試該Function是否能帶入絕對路徑,結果是部分會fail,可能在內部最佳化部分絕對路徑相對資源所以會建議使用相對路徑去執行 參考

STM32CubePrg API(example project) Read More »

Shopping Cart