yj hung

STM32H5 USB Composite(DFU+HID)

前言 很多人在使用STM32建置USB Composite官方基本上僅給H503 CDC+HID,但部分客戶會有需求為DFU+other,這邊依據外掛包去修改 I-CUBE-USBD-Composite I-CUBE-USBD-Composite是一個非官方的軟體包,他協助我們快速建立一個模板,基本上把部分物件修改即可使用 如何安裝軟體包 下載地址:I-CUBE-USBD-Composite 1. Download AL94.I-CUBE-USBD-COMPOSITE.1.0.0.pack from repo. 2. Add AL94.I-CUBE-USBD-COMPOSITE.1.0.0.pack to CubeMX. Enable the classes you want Coding 第一步在usbd_conf.h修改數字0變成1 第二步在usbd_conf.修改&hpcd_USB_FS;變成&hpcd_USB_DRD_FS;因H5定義不同第三步在usbd_dfu.c數字要設定相反(如圖右邊NBR為1) 第四步增加usbd_dfu.h右側定義 第五步把usbd_composite.c中DFU順序往上 再來是生成時候會少的部分在usb.c中並把中斷優先序往上 在中斷stm32h5xx_it.c需要加上TP1_Set();和TP1_Reset(); 這部分在使用軟體包生成stm32h5xx_it.h會缺少需要額外加上 修改以上後基本上USB DFU剩下依據各系列去調整usbd_dfu_if.c/usbd_dfu_if.h這2塊即可HID或其他部分記本上已經完整所以不太需要修正 Driver Setting 因微軟Driver這邊沒有設定好所以需要手動讓系統認到需要照以下方式使用 這時會出現一個未知的裝置需要再次操作 參考

STM32H5 USB Composite(DFU+HID) Read More »

STM32H5 Daul Bank Implementation

前言 之前實做過L4 Daul bank,這邊針對H5在實做一次,但因H5的Daul bank架構邏輯與L4不同這邊在踩了坑後發現他會直接映射到另一個空間,這邊就針對H5這系列IC做深入介紹Daul bank,讓大家都可以避開坑洞快速順利完成專案 架構 因H5裡面的Daul bank初始就是開啟的,所以和G4或L4不同,他是一開始就切割成2塊獨立的區域在舊的L4或G4上是使用下圖去BFB去判讀轉跳 實作 在取得目前所在Bank位置來說因與G4或L4不同不是判讀BFB,所以這邊要修改一下 在取得不同Bank後轉跳這邊基本上透過reset會比較快速,因為如果透過address指向,必須2 bank code差異不能太大且個數據address需要固定住位置避免MCU邏輯異常(這塊範例code其實就有提供) 注意要點 因H5是個別獨立的Bank,所以轉換Bank是會連同起始address一起轉換,如下圖會連同所存取的Flash資訊憶起轉換,所以在判讀資料時候如果2個Bank有個存不同Data需要指向不同位置,而優先判讀是看在哪個Bank 這邊可以參考以下部分code擷取,第一不需要判讀在哪個Bank,然後針對不同Bank讀取不同Data做資料分析 另一個要點是雖然Address變更但在擦除Flash部分還是依照原先規則舉例目前在Bank1 要清除Bank1 第63 sectors程式會使用以下宣告 如果目前切換到Bank2 要清除Bank1 第63 sectors程式宣告方式也會與在Bank1相同如下,並不會因為不同Bank不同 參考

STM32H5 Daul Bank Implementation Read More »

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 »

BLDC Six Step Control(Sensorless)

前言 針對六步方波控制作原理做介紹,再開迴路區塊six step相對簡單通常有問題都是回授端,在Sensless回授上會以ST和NXP等文章做詳細介紹,在Debug路上能更加快速明朗,節省開發時間,coding結構會以ST為主要,這區塊會在實作環節說明 Six Step Control 一般六步驅動方式就是把MOS開合組合分成6個區塊讓馬達達到持續旋轉 這邊截用介紹其中2個步驟讓大家了解其旋轉方式 Sensorless Feedback 順向部分基本上不難,主要是後段回授控制( back EMF detection) 換相時機 由於中點電勢值始終為6V,CC’的線圈所產生的感生電動勢只能在以中點6V電位為基準點的基礎上疊加;仍舊假設在額定轉速下CC’上會產生5.7V的感生電動勢在t0時刻,如果我們去測量C點的電壓,其值應為6+5.7=11.7V;在t1時刻,C點的電壓值應為6-5.7=0.3V也就是說,在AB相通電期間,只要一直監測馬達的C引線的電壓,一旦發現它低於6V,就表示轉子已轉過30°到達了t0和t1中間的位置,只要再等30°就可以換相了。 ADC採集過零訊號 如果電調的MCU夠快的話,可以採用連續AD取樣的方式來測量C點電壓,不過貌似有點浪費,因為大部分採到的AD值都是沒用的,我們只關心它何時低於6V 。 雖然無法預測接下來的 30° 電角度是多長,但是剛剛過去的上一個換相週期,即兩個換相點之間 60° 電角度的長度是可以測量的。於是可以用近似的辦法,用上一個換相週期,即 60° 電角度的時間減半,作為接下來的 30° 電角度延時時間。這種辦法是可行的,因為馬達的轉速是漸變的,相鄰兩個換相週期的時間相差不會很大。 參考

BLDC Six Step Control(Sensorless) 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 »

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 »

Shopping Cart