yj hung

STM32Cube Tool Introduction-2

Preface  上篇章針對STM32CubeMX做完介紹後,這章節會進入程式編譯CubeIDE與燒入方式CubeProgram做深入介紹 STM32CubeIDE 網路資源主要撰寫主要以MDK與CubeIDE為大宗,這邊以CubeIDE為主軸介紹。第一步來先介紹基本介面如下圖 黃框:設定欄列表,主要最常使用到的是甲蟲符號的Debug與播放按鍵的燒入扭 紅框:為已開的專案型態 藍框:為程式編輯視窗 綠框:在程式燒入後可以去跑RAM等使用比率但非Stack/Heap Debug mode 這邊進入到Debug mode時候,可以看到分成3大區塊,最左手邊是可以看到目前程式運行到哪邊詳細確認,右邊眼鏡EXP位置可以即時去監控目前內部變數的狀況,中間程式區塊就是目前跑到的涵式區域。紅框區域是主要用在程式執行下一步或停止Debug mode,而黃色區塊跟一般程式一樣可以設定斷點 STM32CubeProgram 目前CubeProgram主要是用到是在於燒入與option byte setting,在於配置Flash等等是一個相對方便的軟體,下面可以看一下基本操作介面這邊注意一般ST給的公版都會支援ST-LINK,如果要使用SPI與I2C燒入等等就需要使用ST官方的ST-LinKV3 紅框:連接或燒入方式選定方式 黃框:燒入設定與實際燒入使用 橘框(OB):option byte setting 藍框:擦拭全部記憶體位置 中間區塊是顯示Flash位置與資料,且快按滑鼠左鍵2下可以直接修改內部數值 在燒入部分可以看到上圖,主要設定3個區塊 綠框:首先選擇要燒入的檔案,這邊可以選擇Bin檔或Hex檔 藍框:設定燒入的起始位置(一般是使用到雙Bank或切割APP才會需要設定此位置一般不特別設定) 紅框:開始燒入 下圖我們可以來看到Option Bytes設定(STM32與STM8最大不同在於Option Bytes已不會再額外生成檔案,因此再批量燒入時都會用Command line形式燒入) 上圖比較需要注意的設定是Read out Protection與User Configuration,這邊RDP一般是設定AA,設定BB可以防阻由外部程式讀取內部程式。但這邊切記如果CC是不可逆,一但切成CC燒入MCU就等同燒斷,無法在讀取與燒入其他程式。PS:這邊設定BB切回AA時,會觸發Flash資料全部擦除,因此設定BB就不用怕程式被盜取在User Configuration最常被使用到是Boot0/Boot1與IWDG設定,這邊每顆MCU在此區況設定都會有些許不同需詳細閱讀其reference manual更動Option Bytes時切記中途不要斷電(會導致系統錯誤可能會使Option Bytes錯亂無法復歸),等修改完成後在斷電重新上電,讓系統確實吃到新的設定 STM32CubeProgram Command Line 這邊ST有給予2種版本可以開啟CubeProgram,其中CLI開啟如下圖,可以在Bin的資料夾中找到指令部分可以參考ST官網UM2237文件,這邊提供一個當設定IWDG設定出錯無法在正常修改Option Bytes時的解法(以G031為例) .\STM32_Programmer_CLI.exe -c port=swd mode=UR -ob rdp=1              //RDP 設定為level1  (0xBB) .\STM32_Programmer_CLI.exe […]

STM32Cube Tool Introduction-2 Read More »

STM32Cube Tool Introduction-1

Preface  ST官方推出許多針對自家產品MCU的方便使用工具,在不同應用有不同的工具可以對應使用,本章節會針對STM32CudeMX做入門操作介紹。 STM32CubeMX ST在前置作業時為了方便大家能夠快速建置底層的code出了一款STM32CubeMX,CubeMX主要是用在前期MCU設置階段使用,後續編譯程式需要使用到其他軟體 由上圖有三個方框處分別是 綠框:之前所建置過的專案 黃框:初始乾淨的MCU專案(適用在自己製作板子使用) 紅框:以ST官方給的板子為基礎所建置出來的專案(EX:Nucleo board系列) 這邊可以透過上圖MCU/MPU Selector來去挑選所需要的MCU,其中Peripheral是一個很方便的塞選,可以依照所需求的腳位去塞選出對應的MCU選項(EX:ADC*3 CAN*2可以透過這個選取) Pin Setting 這邊以ST官方版子新建置Nucleo-64(STM32L433)為範例接續下去說明 上圖操作主要分成3大區塊下面就提點幾個區塊要注意的地方與簡單設置操作 綠框:主要是選擇各項功能開啟設定區域(EX:Can bus /UART/I2C等等) 黃框:主要是建置流程設定依序由左至右設置 紅框:這區域主要是看你所設定腳位圖示化區域 第一個要注意的地方是在SYS選單這邊,這邊是主要要注意試燒入設置的地方,這邊選擇Serial Wire,在最右側圖形化部分就會出現燒入時候預設的PIN腳(!!注意!!不要把腳位全部設置完畢,才發現沒預留燒入腳位要重新設計!!) 這邊綠色腳位是以使用開啟的,灰色部分則是還未使用,滑鼠可以移動到灰色區域然後左鍵,就會出現上圖選單。這邊就可以知道該腳位可以來做什麼用途(這邊建議是先使用上面所教先設置,在使用此方法更換所需要PIN腳位置)PS:這邊有一個小技巧是滑鼠壓住+ctrl壓住你綠色設置腳位,會出現黑色閃爍腳位,這就表示你可以更換的位置,直接拖移即完成更換 Clock Setting 該區域主要是在設置各線路所使用Clock的狀態,可以在方框內直接填入數字即可完成設置這邊要注意的是要依照datashhet做Clock分配,不然clock為MCU主要控制項目錯亂了會DeBug很久~沒特別就可以直接跳過 Final Setting 這邊主要是要設置下圖下拉式選單,後續要使用什麼編輯器去撰寫你的程式,因為我們主要使用ST官方給的STM32CubeIDE,我們這邊是選STM32CubeIDE,專案存取路徑與名稱設置好後,就基本設置完畢,按下右上方GENERATE CODE就可以生成專案程式了。 Other Setting 下圖是主要設置把GENERATE CODE的涵式庫單獨區分檔案出來方便你去編修(EX:I2C.h等等) 下圖區塊主要是設置涵式庫使用的層級,HAL為應用層為ST官方所提供,部分專業會想使用LL,LL主要是底層的程式方塊選用LL後最好搭配上面把.c/.h分離開來方便去撰寫 小結 本章節主要針對CubeMX做介紹適合新手閱讀,下章節會針對CubeIDE與CubeProgram作介紹 參考 STM32CubeMX STM32筆記(9):使用STM32CubeMX與Keil開發環境

STM32Cube Tool Introduction-1 Read More »

Low Power PWM(Timer) API on STM32WB

前言 隨者低功號產品越來越要求,ST就推出Low power應用的MCU與相對應腳位,其中ST MCU中的L系列就是專屬的Low power的MCU,另外部分MCU也有低功耗腳位的MCU 例如F7、H7、G0、G4與WB系列,本章節會針對LPTIM這隻腳位去做詳細解說與用法切換震盪來源 LPTIM功能 LPTIM:Low-power timer,即低功耗定時器(16bit)LPTIM與一般TIM不同處主要是在除了待機模式下全部電源模式保持運行,而且沒有內部時鐘源也能運行下圖我們也可以看到L0與G0不相同,因此不同的系列LPTIM的設置會有不同需要再確認(其中WB系列與G0系列相同) 注意:CLKMUX選擇對應的是CFGR寄存器的bit0:CKSEL,用于控制内核clock選擇由内部時鐘源(APB或LSE、LSI和HSI等任何其他內部震盪器)提供。也可以選擇由外部clock源通過 LPTIM 外部 Input提供。 LPTIM特性 內部clock:LSE、 LSI、 HSI 或 APB LPTIM輸入的外部clock(在沒有LP震盪器情況可以使用脈衝計數器)其中LPTIM具有Glicth濾波器(如下圖) LPTIM_ClockConfigTypeDef定義 Source可以選擇如下 #define LPTIM_CLOCKSOURCE_APBCLOCK_LPOSC  ((uint32_t)0x00U) #define LPTIM_CLOCKSOURCE_ULPTIM             LPTIM_CFGR_CKSEL 第一種表示LPTIM 使用內部clock(APB 或APB 或 LSE、LSI和HSI等)第二種表示LPTIM 由外部Clock通過 LPTIM 外部 Input1 提供Clock。 Timer底層配置(GPIO、Clock、中斷) HAL_LPTIM_Init就會调用HAL_LPTIM_MspInit PS:HAL_LPTIM_DeInit就會调用HAL_LPTIM_MspDeInit基本設置外還需要配置好GPIO、Clock、中斷才能完整使用,以下為配置LPTIM1使用PD13做PWM範例 小結流程 通過函数HAL_LPTIM_Init()做初始化 低功耗定時器的底層配置是通過函数HAL_LPTIM_MspInit()實現 選擇低功耗定時器支持的6種工作模式 PWM模式:使用HAL_LPTIM_PWM_Start()或 HAL_LPTIM_PWM_Start_IT() 單脈衝模式:在此模式下,當滿足條件時,輸出出可以切換高低電壓,使用HAL_LPTIM_SetOnce_Start()或 HAL_LPTIM_SetOnce_Start_IT() Encoder模式:HAL_LPTIM_Encoder_Start()或HAL_LPTIM_Encoder_Start_IT()!!注意非每個LPTIM都支持此模式!! 超時模式:HAL_LPTIM_TimeOut_Start()或 HAL_LPTIM_TimeOut_Start_IT() 計數模式:HAL_LPTIM_Counter_Start()或  HAL_LPTIM_Counter_Start_IT() 停止任何模式:用户可以通過调用相應的API來停止任何模式: HAL_LPTIM_Xxx_Stop

Low Power PWM(Timer) API on STM32WB Read More »

AMS_AS5600(Position sensor)

前言 A position sensor is a sensor that facilitates measurement of mechanical position. The AS5600 is an easy to program magnetic rotary position sensor with a high-resolution 12-bit analog or PWM output. The AS5600 is also equipped with a smart low power mode feature to automatically reduce the power consumption. Design Note AS5600有部分硬體設置重點,第一點是磁鐵選用,磁體尺寸盡可能是圓形因為他是感受磁場垂直變化(尺寸規範如下)且這邊注意磁鐵是使用對稱 第二點在裝置上也不能偏移太多,下圖是偏移對磁場變化影響圖與實際規範範圍圖,可以看到雖然是有容許裝置範圍但不可無限制偏移 Coding Sample 這邊選用I2C來做為範例可以先參考下圖Register map I2C傳輸 這邊只需要注意它的部分傳輸是分2筆,每筆DATA 8Bit因此在讀完整Data時與一般SPI不同是分2個register讀取

AMS_AS5600(Position sensor) Read More »

Inter-Integrated Circuit(I2C)

大綱 以下文章主要以I2C master為出發,如果是要尋找I2C slave 可點擊右邊文章 I2C的物理層 I2C傳輸數據線=> SDA數據線:時鐘 Ref:《IIC原理超詳細講解—值得一看》 Ps:的理論理想傳輸距離為通信,用於由於乾擾和傳輸速度的提高,實際上的IC只有15M遠,一般適合板極器件,不適合中長距離的通信本題STM32與硬體須注意事項 I2C數據傳輸 IIC的每一天偵查數據由9bit組成如果是發送數據 8bit data+1bit ACK如果是設備地址數據則8bit包含7bit設備地址+1bit方向 數據是由為一組而傳輸的,因此需要額外發送8位傳感器或應用程序體去設置接收設置PS:因傳輸訊號為先傳輸數據為雙線結構,所以傳輸數據發送端:地址(8bit)+數據(8bit) STM32CubeMX I2C設定 Ref:【STM32】HAL庫STM32CubeMX教程十二—IIC(讀取AT24C02) PS:共用Clock是需要盡可能避免的,因為會出現時序互相干擾現象,如需在使用時必須排好時間流程序 最後是轉出STM32cubeIDE可編輯的程式碼 I2C 程式撰寫 Ref:使用I2C STM32F0 HAL庫編程計算 另外也有以下4種Function可以使用 I2C傳輸失敗 針對第2點可以使用以下程式去解

Inter-Integrated Circuit(I2C) 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 »

Motor Control Workbench 程式架構

前言 這邊網路資源也算蠻多的一些相關知識可以參考FOC控制原理與电机应用开发实战指南-基于STM32中的影片知識,這邊會探討在ST的Workbench 在設定完成後所生成的code,主要在程式架構與重要程式碼說明,在了解架構後,就能夠自己加入所需要應用調整,後續會逐步介紹API應用與不同控制的改動 程式架構 下圖可以看到主要的整個程式運轉主架構,其中有2個中斷(Systick中斷與ADC中斷)可以由圖看出是程式的主核心,Systick中斷執行安全任務與中頻任務(速度環),而ADC中斷則執行高頻任務 Systick中斷 系统定时器是一个24bit的向下遞減的計數器,計數器每計數一次的時間為1/SYSCLK。當中內存數值寄存器的數值遞減到0的時候,系统定時器就產生一次中斷。這邊參考已默認1ms的定時中斷為範例來看參考代碼 中斷函數 MC_RunMotorControlTasks函數內容 ADC中斷 ADC中斷主要在Timer觸發後執行FOC座標轉變、SVPWM執行、電壓電流溫度採樣與PWM調整占比輸出(可以參考下圖)ADC初始化部分可以參考文件【基于NUCLEO-F746ZG电机开发应用】7.程序框架-两个重要中断,與一般初始化大致相同就不贅述只有在中斷部分有加入函示庫 ADC中斷 參考 【基于NUCLEO-F746ZG电机开发应用】7.程序框架-两个重要中断 【基于NUCLEO-F746ZG电机开发应用】6.程序框架 STM32 电机教程 18 – MC Workbench生成工程代码的电机调试

Motor Control Workbench 程式架構 Read More »

Motor Profiler and MotorControl Workbench

前言 ST這邊推出Motor Profiler 與 MotorControl Workbench方便可以把底層程式給建構完全,以及基本的API提供應用,在使用上與入門算蠻便捷容易上手的,且相對優點式的code是全面開放可以看到每個API的撰寫方式,此章節會著重在Motor Profiler and Workbench的操作使用上 The ST Motor Profiler software tool provides the following features: A PC software application to auto-measure electromechanical parameters of PMSM motors ; Embedded One Touch Tuning algorithm: a new algorithm that uses a single parameter to set up the speed controller according to the type of

Motor Profiler and MotorControl Workbench Read More »

AMS Position Sensor AS5047P introduction

簡介Position Sensor A position sensor is a sensor that facilitates measurement of mechanical position. A position sensor may indicate absolute position (location) or relative position (displacement), in terms of linear travel, rotational angle, or three-dimensional space. Postition sensor的樣式很多元下表展示 比較表 可以看到目前量測位置的Sensor有以上這6種為主流,目前市面上常使用的的分別為Indutive、Hall_Effect、Magnetic Encoder這3類,其中Indutive的門檻較高主要是需要參考PCB的線圈繞現有一定規範可以看下圖,可以看到不同的線圈繞線方式對於波形會有不同且一般廠商不會PCB繞線Suporrt設計與驗證,因此Hall_Effect、Magnetic Encoder為大宗其中因為價格因素又以Hall_Effect更為廣泛 AMS Magnetic Encoder工作原理圖 這邊介紹Magnetic Encoder是以AMS的為主軸介紹,可以看到下方比較表AMS比Allegro有更短的響應時間,雖然在解析度上輸,但響應時間在馬達控制上會更為重要。再來是AMS產品使用的是垂直磁場變化與一邊水平磁場不同有更好的抗周邊磁場能力 SPI Setting on STM32 and Coding Sample 這邊選比較需要解釋的SPI,看Datasheet裡可以看到每筆16bit的前2Bit是有額外定義,主要Data是由後面的14Bit來資料傳輸,但使用SPI傳輸完整還是16bit傳輸 這邊可以看到Datasheet裡分別有Read和Write傳輸這邊可以看到在讀取發送訊息後是下一筆Data的時間差才會收到DATA下面放上讀取範例 SPI讀取資料 SPI應用Position sensor 參考

AMS Position Sensor AS5047P introduction Read More »

Controller Area Network(CAN BUS) ON STM32

前言 控制器區域網路 (Controller Area Network,簡稱CAN或者CAN bus) 是一種功能豐富的車用匯流排標準。被設計用於在不需要主機(Host)的情況下,允許網路上的單晶片和儀器相互通信。 它基於訊息傳遞協定,設計之初在車輛上採用復用通信線纜,以降低銅線使用量,後來也被其他行業所使用。在碩士班論文底下有使用dsPIC30F4011(Microchip)晶片來實作CAN bus系統,如今因客戶需求開始研究起STM32 Can Bus的操作這邊會介紹接線與Can Bus範例程式等等操作 Can Bus接線 CAN 物理層的形式主要有兩種,左圖中的 CAN 通訊網路是一種遵循 ISO11898 標準的高速、短距離「閉環網路」,它的匯流排最大長度為 40m,通訊速度最高為 1Mbps,匯流排的兩端各要求有一個「120 歐」的電阻。 右圖中的是遵循 ISO11519-2 標準的低速、遠距離「開環網路」,它的最大傳輸距離為 1km,最高通訊速率為 125kbps,兩根匯流排是獨立的、不形成閉環,要求每根匯流排上各串聯有一個「2.2千歐」的電阻。 PS:這邊硬體接線請注意必加電阻與CAN transceiver ,千萬不要傻傻的MCU的Can腳位直接接出來!!!! MESSAGE TRANSFER(CAN通訊的資料格式) CAN2.0有兩種版本,CAN2.0A(Standard),CAN2.0B(Extended)。 Start of Frame(SOF):送出1位元dominant(0),用來同步。 Arbitration Field:表示節點的優先權,用來判別優先權。若多個節點同時傳送,在仲裁欄位逐一比對優先權, 位元為dominant(0)可優先傳送。長度有兩種11bits(Standard identifier)和29bits(Extended Identifier)。 RTR :為優先判斷與資料接收與否的識別 RTR=dominant(0),表資料要傳出,RTR=recessive(1),表要接收資料。 IDE: 標準格式(Standard identifier)為dominant(0);延伸格式(Extended Identifier)為 recessive(1)。 R0:保留 CAN Bus上的傳輸圖解 可以看到下圖分別有3個傳輸裝置分別是A、B、C會把資料同時放到Bus線路上這邊只要留意每個裝置傳輸時候給予微小delay時間即可避免資料傳輸重疊衝突 STM32cubeMX設置與範例程式 怎麼設定波特率呢?

Controller Area Network(CAN BUS) ON STM32 Read More »

Shopping Cart