yj hung

ST TOF Sesonr-VL53L5(Turnkey gesture)

簡介 VL53L5CX系統由硬件模塊和運行在主機上的ULD軟件(VL53L5CX ULD)組成。 硬件模塊包含飛行時間 (ToF) 傳感器。 ST 提供軟件驅動程序,在本文檔中稱為“驅動程序”。 本文檔描述了主機可以訪問的驅動程序的功能。 這些函數控制傳感器並獲取測距數據,進一步使用ST Turnkey gesture來做到手勢辨識。 ToF 傳感器系統 1.1驅動架構和內容 VL53L5CX ULD 包由四個文件夾組成。 驅動程序位於文件夾/VL53L5CX_ULD_API 中。VL53L5CX主要適用於陣列式量測距離sensor,解析度式8*8或4*4可以選擇,由多點距離資訊可以演變出不同應用,在此介紹為手勢辨識應用(須先把VL53L5的驅動包先掛載起來) X-CUBE-TOF1 這邊也可以選用ST擴充包把code附加在STM32CubeMX上,可以照VL53L5CX configuration steps P11後照順序執行即可 線路參考 這邊要注意PWE_EN和INT與I2C_RST這幾PIN是需要接上的,因在初始化時會針對這個測試沒接上會出現錯誤 應用 SW Setting 這邊其實只需要下載F401範例其他部分直接incude即可使用 如圖這邊主要GesturesMZ這個資料夾主要是AI手是辨識主要檔案,可以由Example看input輸入項,使用ST的Nonaedge AI做擴充即可完成更多手勢辨識 參考

ST TOF Sesonr-VL53L5(Turnkey gesture) Read More »

STM32 RTC_Calendar(G0 Series)

RTC簡介 實時時鐘(RTC) 是一個獨立的 BCD 定時器/計數器。 RTC 提供具有可編程鬧鐘中斷功能的日曆時鐘/日曆。 RTC 還包含具有中斷功能的周期性可編程喚醒標誌。兩個 32 位寄存器包含二進碼十進數格式 (BCD) 的秒、分鐘、小時( 12 或 24 小時制)、星期幾、日期、月份和年份。此外,還可提供二進制格式的亞秒值。系統可以自動將月份的天數補償為 28、29(閏年)、30 和 31 天。只要芯片的備用電源一直供電,RTC上的時間會一直走。 STM32CubeMX設定 這邊為了準確性把Clock source由LSI改成LSE 這邊開啟重要的日期 RTC calibration clock output:RTC的1Hz輸出,可以做為秒跳時鐘源,每秒閃一次燈,電子表的:號。512Hz可以做為秒錶的時鐘源呀,秒錶是百分之一秒精度,512可以做到百分之一秒的四分之一精度。RTC reference clock detection:利用外部時鐘校正,其時鐘源必須要比LSE的時鐘還精準。 STM32 code RTC_HAL函式庫 這邊主要取前面4個來使用讀取出系統時間 參考

STM32 RTC_Calendar(G0 Series) Read More »

Taiwan Stock Selective by Python-1

前言 這邊是透過HaHow學院”Python小資族選股策略”課程彙整出精化資訊,有需要同仁可以透過左邊連結直接購買課程詳細閱讀。 本章節會介紹如何使用python爬蟲下載台股標的,並加工塞選出自己所需股票組合。這邊因台灣還未有免費且完善系統,因此這邊會由一個新手角度帶入,對於台股技術分析等這邊暫時不細部著墨,投資有賺有賠請選擇自己對應能承擔風險之標的,切勿all in避免家破人亡 使用IDE Python:Anaconda 環境配置 Anaconda是一個免費開源的 Python 發行版本,同時也內建了許多進行資料科學(data science)研究時常用的工具。➃ 講了這麼多,其實我也不是聽得很懂到底是什麼意思,只知道免費開源這四個關鍵字。因此第一步,先去 Anaconda 官網下載符合目前電腦的安裝檔。記得要選對安裝檔啊。不知道為什麼,我用的是 windows,但每次點進去,預設的載點都是 macOS 的安裝檔。 獲取財報資訊 首先我們要先看一下財報的網址: http://mops.twse.com.tw/server-java/t164sb01?step=1&CO_ID=1101&SYEAR=2017&SSEASON=3&REPORT_ID=C 在這一串網址中,有幾個重要的元素: 參考

Taiwan Stock Selective by Python-1 Read More »

STM32 USB_Device(CDC_Standalone)

前言 使用USB中的CDC類來虛擬串口 Virtual COM Port (VCP)進行通訊,一方面對於上位機來說顯示出來的就是個串口,所有操作都還是對串口的操作;另一方面實際數據傳輸是基於USB的,數據傳輸速度得到大大提升。本文將對STM32作為從設備使用USB的CDC類虛擬串口(VCP)進行通訊的相關內容做個說明。 USB簡介 從USB版本來說目前STM32系列MCU可以認為都是USB2.0的(現在還有了UCPD,對外接口外形可以是Type-C的,但是這個是只能用於PD3.0充電使用的,無法用於數據通訊)。對於STM32系列MCU而言,USB FS的使用只要使用 DM / D- 和 DP / D+ 這兩個引腳就行了,最多也就加上ID、SOF、VBUS這三個引腳。而使用USB HS大多數還需要外接PHY芯片(比如USB3300),這樣使用的引腳就多了,至少也要用到12個引腳。STM32系列MCU在使用USB功能的時候建議使用外部時鐘,外部無源晶體或有源晶振這些,因為USB對時鐘精度要求比較高。STM32 CDC VCP對於win10和較新版本的linux來說是免驅的,對於低版本的windows系統需要安裝驅動,驅動下載地址如下:STSW-STM32102 STM32 Virtual COM Port Driver STM32CubeMX建置 #注意這邊VCP USB中斷必須要開啟USB才能被電腦認到 Code結構 上述配置生成的代碼中,對於用戶來說USB使用相關的代碼都在 USB_DEVICE > App 中,這其中最重要的就是 usbd_cdc_if.c 文件,大多數時候我們只要改寫這個文件就可以實現相關需求了,該文件主要結構與說明如下: 參考

STM32 USB_Device(CDC_Standalone) Read More »

STM32 USB_Device(DFU_Standalone)

前言 目前,ST的USB驅動有兩套,一套是早期的獨立版USB驅動,官方培訓文件中稱為Legacy library;一套為針對其Cube系列的驅動,根據晶片不同可能有區別,具體見對應晶片的Cube驅動包,官方培訓文件中稱為Cube library。 USB結構 下圖為USB應用整體系統架構 USB device library USB驅動的整個驅動庫的架構如下圖: USB device library process USB device library 使用方法 第二步: 在usb_bsp.c/h文件中,實現 USB 需要使用的底層硬件資源。具體函數見上文及附件源碼文件的註釋。第三步: 在文件usbd_desc.c/h文件中,實現USB Device的各種描述符。具體函數見上文及附件源碼文件的註釋。第四步: 根據需要修改usbd_usr.c/h文件。第五步: 根據源代碼進行各種配置 第六步: 實現USB Device所使用的類的源文件。例如本文使用了USB Device 的CDC類,所以上圖中出現了usbd_cdc_vcp.c/h文件。第七步: 在自己芯片對應的stm32f4xx_it.c文件中添加USB中斷處理函數。第八步: 在main.c文件中,定義USB_OTG_CORE_HANDLE USB_OTG_dev全局變量,然後調用如下函數初始化USB Device 即可 參考

STM32 USB_Device(DFU_Standalone) Read More »

STM32WB LPTIM counter(Timing) API

前言 在STM32中,相對較新的MCU部分型號配有LPTIM定時器。 比如:STM32F7、H7高性能MCU,STM32L0、 L4低功耗MCU,以及新推出的G0、G4系列中都配有這種LPTIM定時器。 具體哪些MCU配有LPTIM,大家可以下載對應的數據手冊查看。 本文圍繞STM32WB講述其中的LPTIM定時器。 LPTIM block diagram LPTIM的RCC和其他定時器相比較,其RCC功能更加豐富。通過上面框圖可以發現,LPTIM 可通過多個時鐘源提供時鐘。它可以由內部時鐘信號提供時鐘,內部時鐘信號可通過復位和時鐘控制器 (RCC) 在 APB、 LSI、 LSE 或 HSI 時鐘源中進行選擇。 低功耗定時器時鐘選擇問題(重要) 1、lptim_ker_ck接口內核時鐘,供lptim使用。 lptim_ker_tim接入到CLKMUX雙路選擇器的一個輸入端,另一個輸入端是LPTIM_IN1或者LPTIM_IN2的輸入。也就是說LPTIM的計數器可以選擇lptim_ker_ck,也可以選擇LPTIM_IN1或者LPTIM_IN。2、最關鍵的地方來了(1) CLKMUX多路選擇器對應的是CFGR寄存器的bit0:CKSEL用於控制內核時鐘選擇由內部時鐘源(APB時鐘或LSE、LSI和HSI等任何其他內置振盪器)提供時鐘。也可以選擇由外部時鐘源通過 LPTIM 外部 Input提供時鐘。(2) Count mode對應的是CFGR寄存器的bit23:COUNTMODE計數模式位,用於選擇 LPTIM 使用哪個時鐘源來為計數器提供時鐘。可以選擇計數器在每個內部時鐘脈衝後遞增。或者在 LPTIM 外部 Input上的每個有效時鐘脈衝後遞增。3、應用的時候,我們可以選擇(1) CKSEL = 0 , COUNTMODE = 0表示LPTIM內核時鐘使用的內部時鐘源,計數器通過內部時鐘脈計數。(2) CKSEL = 0 , COUNTMODE = 1表示LPTIM內核時鐘使用的內部時鐘源,計數器通過外部輸入脈衝計數。(3) CKSEL = 1 , COUNTMODE = x表示LPTIM內核時鐘使用的外部時鐘源,計數器通過外部輸入脈衝計數。 定時器句柄結構體LPTIM_HandleTypeDef

STM32WB LPTIM counter(Timing) API Read More »

STM32WB IWDG Function Introduction

獨立看門狗(IWDG) 上一章說到待機模式可以通過IWDG喚醒,獨立看門口功能框圖如下。實際上獨立看門口狗就是一個遞減計數器,當計時器的值減到0時,IWDG會產生一個複位信號,系統復位重新啟動。為避免產生看門狗復位,則需在計數器減到0之前重載計數器,即“餵狗”。當程序出錯時沒有刷新計數器,計數器遞減到0,系統復位重新啟動,避免程序繼續錯誤運行。PS:Since its clock is an independent 32-kHz low-speed internal RC oscillator (LSI), it remains active even if the main clockfails. IWDG STM32CubeMX設定 超時時間 Tout = (4*2^prv) / LSI * rlv (s) prv是預分頻器寄存器的值,rlv是重裝載寄存器的值 由圖知 LSI 為 32 KHz,當 prv 取 IWDG_ PRESCALER_32 ,rlv 取 1000時,Tout=32/32*1000=1s。即設置 1s 的超時溢出。 因為設置超時溢出為 1 秒,所以這裡每隔 800 毫秒餵狗一次 HAL_IWDG_Refresh(&hiwdg); 參考

STM32WB IWDG Function Introduction 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 »

GPIO Setting for Different Speed

前言 這邊因在操作SPI,但SPI速度提升超過10MHz會出現CPOL/CPHA錯位的怪異現象,後來查詢許多方式,發現貓膩在GPIO設定上面,這邊針對踩雷部份GPIO SPEED SETTING做詳細設定說明,不限定在SPI上面所有通訊協定皆通用。  STM32 GPIO Ports  在STM32上面GPIO結構如下圖  STM32 GPIO Speed STM32CubeMX配置GPIO 輸出引腳,都會有速度GPIO_InitStruct.Speed 不同MCU型號,速度選項,有些有3個,有些有4個。一般定義在xxx_gpio.h文件中 STM32CubeMX配置,這邊default為設置最低因此如果要更動到其他高傳輸速度需要更動設定 PS:如果输出速度和配置速度不匹配,會明顯看到波形不正常這邊選用高低速差異如下 參考

GPIO Setting for Different Speed Read More »

VL53L0X TOF Sensor Introduction

一、介紹 1、原理 採用940nm垂直腔面發射激光器(Vertical-Cavity Surface-Emitting Laser,簡稱VCSEL)發射出激光,激光碰到障礙物後反射回來被VL53L0X接收到,測量激光在空氣中的傳播時間,進而得到距離。VCSEL相關知識 2、參數 超小體積:4.4 x 2.4 x 1.0mm 最大測距:2m 發射的激光對眼鏡安全,且完全不可見。 工作電壓:2.6 to 3.5 V 通信方式:IIC,400KHz,設備地址0x52,最低位是讀寫標誌位。0表示寫,1表示讀 二、HW接線 這邊接上I2C線路必須要上pull up 電阻規範比照I2C user manual 三、HW Cover規範 這邊Cover的安裝等規定,會有AIR GAP與COVER對於940nm穿透度的限制ST官方針對這個部分提供AN4907 Application note 做詳細說明 理想的蓋玻片有如下特點: (1)塑料或玻璃材料無結構缺陷 (2)無可導致指紋光散射或污跡敏感的表面缺陷 (3)在近紅外(940nm±10nm)和低霧度條件下,透過率>90% (4)不降低指紋免疫性的外塗層(抗指紋或抗反射塗層) (5)單一材料。使用雙重材料可能會改變性能。   理想的結構設計(蓋玻片蓋在VL53L0X上的結構)有如下特點: 氣隙小(<0.5 mm) 蓋玻片薄 蓋玻片與VL53L0X表明的傾角低於2度 嚴格的公差。 四、校準流程 (1)Data init          調用VL53L0X_DataInit()函數一次,設備上電後調用一次。把VL53L0X_State從VL53L0X_STATE_POWERDOWN改爲 VL53L0X_STATE_WAIT_STATICINIT。VL53L0X_State是初始化狀態機,看此變量的值可以就可以知道當前的初始化進度。 (2)Static Init

VL53L0X TOF Sensor Introduction Read More »

Shopping Cart