stm32的语音识别_免费开源基于STM32的智能垃圾桶之舵机控制(HAL库)
生活随笔
收集整理的這篇文章主要介紹了
stm32的语音识别_免费开源基于STM32的智能垃圾桶之舵机控制(HAL库)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
大家好,我是『芯知識學堂』的SingleYork,前面給大家簡單介紹了<基于STM32的智能垃圾桶之成員簡介>、<基于STM32的智能垃圾桶之語音識別>和<基于STM32的智能垃圾桶之語音播報>,今天筆者將要給大家介紹我們這個DIY智能垃圾桶套件中“舵機控制”的詳細使用。關于舵機的基本知識,網上一搜一大把,筆者在此就不跟大家做過多解釋了,本例中,筆者使用的是SG90模擬舵機:這個舵機的三根線分別為:GND(棕色)、VCC(紅色)、PWM(黃色),按照下圖所示的接線方法,直接接到我們的OWL Micro F1 - EXT擴展板的舵機接口上即可:舵機跟擴展板的硬件連接非常的簡單,實際上,筆者設計的專用的四路舵機接口跟舵機的線序是一一對應的,直接插上去就OK了,筆者就不多說了。硬件連接搞定了,那么,我們應該產生怎樣的PMW波形來控制舵機的轉動角度呢?SG90的舵機要求控制舵機的 PWM 信號頻率在50Hz左右,即周期為 20ms 的 PWM 信號,當該信號的高電平部分在0.5ms - 2.5ms之間時,對應舵機轉動的角度,具體對應情況如下表:了解了舵機的控制原理后,接下來,筆者就要來給大家介紹軟件部分的實現。軟件部分筆者主要給大家介紹如何通過STM32CubeMX來配置生成代碼(最終的綜合代碼,筆者不是采用STM32CubeMX來配置,而是采用移植的方式來實現),關于CubeMX的基本操作,包括軟件安裝、芯片支持包安裝什么的,請大家自行百度。首先,我們打開STM32CubeMX軟件(筆者使用的是5.6.1版本),在“New Project”選項中使用“Start My project from MCU”的方式新建工程,點擊“ACCESS TO MCU SELECTOR”跳轉到MCU選擇界面:在彈出的MCU選擇界面,我們找到“CMU/MPU Selector”菜單,然后直接選擇我們所使用的MCU—STM32F103C8,然后在右側的“MCUs/MPUs List:1 item”中雙擊STM32F103C8便可新建一個CubeMX工程:接下來,我們來開始配置RCC時鐘,如下圖所示,在工程外設選擇和引腳分配選擇“Pinout&Configuartion”界面,找到“System Core”選項下面的RCC,單擊RCC在“RCC mode and Configuration”界面,將“High Speed Clock(HSE)”設置為“Crystal/Ceramic Resonator”,即:使用外部晶振。接下來,進入系統時鐘配置界面“Clock Configuration”,在這里,我們選擇使用外部8MHz晶振,并配置系統時鐘為72MHz,這里有很多選項,如果我們不知道怎么選的話,直接在“HCLK(MHz)”輸入框中,直接輸入72然后回車:在輸入72并回車之后,會彈出如下對話框,點擊“OK”即可完成時鐘一鍵配置(有些芯片可能會需要手動微調):最終得到的時鐘配置如下圖所示:接下來,我們繼續回到工程外設選擇和引腳分配選擇“Pinout&Configuartion”界面,因為我們的OWL Micro F1 - EXT擴展板上面控制四路舵機的引腳分別非PA6、PA7、PB0、PB1,正好是定時器TIM3的CH1、CH2、CH3、CH4通道,所以我們使用TIM3的功能來實現四路舵機的控制,在“Pinout&Configuartion”界面找到“Timers”,然后選擇TIM3,同時勾選“Internal Clock”使能內部時鐘源,并將定時器的四個通道分別設置成“PWM Generation CH1”、“PWM Generation CH2”、“PWM Generation CH3”、“PWM Generation CH4”:根據定時器Update時間計算公式Tout=((arr+1)*(psc+1))/Tclk(其中,Tout為定時器溢出時間,arr為重裝載值,psc為預分頻系數,Tclk為定時器的輸入時鐘頻率(單位為MHz)),我們將定時器TIM3的參數設置如下:設置定時器預分頻器為719(即:720-1)可以得到100KHz的定時器計數時鐘; 設定定時器計數周期為1999(即:2000-1),這樣定時器的頻率為50Hz,即可得到20ms的周期; 設置定時器的通道1(CH1)-通道4(CH4)為PWM模式1,脈沖數為150,即可得到1.5ms的高電平時間。 其他設置,采用默認設置即可。 定時器配置完成后,我們接下來就可以配置“Project Manager”里面的參數,首先是Project里面的設置,這里主要是設置一下“Toolchain/IDE”就可以了,筆者使用的是MDK-ARM編譯器5.29版本,所以這里選擇IDE為MDK-ARM,最低版本號選擇V5.27。在Code Generator里面,我們可以根據自己的使用習慣選擇,筆者這里僅在默認選型中多勾選了一個“Generate peripheral initialization as a pair of“.c/.h” files per peripheral”選型,即:為每個外設單獨生產一對“.c/.h”文件。其他的設置,都使用軟件默認設置即可。工程配置完成后,我們就可以使用CubeMX工具直接生產MDK的代碼了,點擊右上角的“GENERATE CODE”按鈕,代碼就可以自動生成了:代碼生成完成之后,彈出的提示似乎有點不正常,帶有一個灰色的“感嘆號”,而且,當我們點擊“Open Folder”時候,會出現另外一個提示“…………but MDK-ARM V5.27 project generation have a problem”,這似乎是在提醒我們,剛才生成的MDK工程有問題。那么為什么會出現這個問題呢?這是因為我們的CubeMX工程所在的路徑和文件名都包含了中文字符,似乎CubeMX對中文的支持不太友好。筆者重新在桌面建了一個名為“Smart_Rubbish”的文件夾,同時將CubeMX工程名也都改成了英文的“Smart_Rubbish”:接下來,我們再來點擊“GENERATE CODE”按鈕自動生成MDK代碼,終于,沒有問題了,這個時候,我們可以選擇點擊“Open Project” 直接打開工程,或者點擊“Open Folder”打開工程所在的文件夾:打開MDK工程文件后,點擊左上方的“Rebuild”按鈕,編譯工程,可以看到沒有錯誤也沒有警告:接下來,我們點擊魔法棒“Option for Target”,在Debug界面選擇“ST-Link Debug”:點擊“Settings”按鈕,在“Flash Download”選項中,勾選“Reset and Run”,在“Pack”選項中,去掉“Enable”前面的“√”(這里尤其是要注意,很多小伙伴在使用高版本的MDK軟件下載工程的時候反應,即使勾選了“Reset and Run”在程序下載后也不會自動運行,非要重新上電或者按一下復位按鈕才能運行,所以這里要記得去掉這個“Enable”的“√”):雖然CubeMX工具可以很方便的自動生成代碼,但是用戶代碼部分,還是需要大家手動編寫的,如果我們直接將剛才生成的代碼下載到MCU中去,我們會發現,板子上的四路舵機接口無任何反應。這是因為,我們還需要在程序中手動啟動定時器的PWM輸出。我們只需要在定時器TIM3初始化完成后,添加啟動定時器TIM3的4個通道PWM輸出的代碼即可,如下圖所示:在添加用戶代碼的時候大家需要注意,如果大家不希望每次修改CubeMX工程后把我們添加的代碼覆蓋掉,那么我們添加用戶代碼的時候一定要添加在“USER CODE BEGIN”和“USER CODE END”之間,比如筆者這里就將代碼添加到了“USER CODE BEGIN 2”和“USER CODE END 2”之間,這樣的話,就不用擔心萬一需要修改CubeMX工程重新生成代碼的時候將我們自己添加的代碼覆蓋掉了。現在,我們可以將代碼重新編譯,然后再下載到MCU中,這個時候我們可以用示波器或邏輯分析儀查看四路舵機接口的PWM波形如下圖所示:我們會發現,PWM波的頻率為50Hz,周期為20ms,跟我們設置的一致。我們再將示波器調整一下,測量一下PWM波的高電平寬度,可以看到,也正是我們設置的1.5ms:按照我們之前介紹的PWM波高電平的時間與舵機旋轉角度的關系我們可以知道,這個時候,舵機應該是在90°的位置,那么,如果要讓舵機旋轉到0°位置,那么我們只需要修改PWM的PLUSE值即可,接下來,我們再添加以下代碼,讓舵機在0°和90°之間來回旋轉:同樣的,筆者是將代碼添加到了“USER CODE BEGIN 3”和“USER CODE END 3”之間。重新編譯后下載代碼,我們可以看到舵機每隔1秒在0°和90°之間切換(筆者這里演示只接了一個舵機,實際上,接一個舵機也是一樣的效果,只是接多個電機的時候,可能要考慮一下USB線的供電能力,尤其是后面接上語音識別和語音播報模塊的時候,最好使用1A以上手機充電頭供電):至此,我們的這個DIY的智能垃圾桶項目中的舵機控制部分就介紹完畢了,在下一講中,筆者將要給大家介紹這個項目的最后一個部分內容,那就是綜合的代碼,在綜合代碼中,筆者會將語音識別、語音播報、舵機控制的代碼全部整合到一起并進行講解,敬請關注!原創不易,轉載請務必注明出處!
end
有你想看的精彩『免費開源』基于STM32的之成員簡介『免費開源』基于STM32的之語音識別『免費開源』基于STM32的之語音播報知識改變命運『芯知識學堂』伴你前行
▼
長按關注我們,不錯過每一篇好文
點個在看再走唄!總結
以上是生活随笔為你收集整理的stm32的语音识别_免费开源基于STM32的智能垃圾桶之舵机控制(HAL库)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux手机刷机包制作工具_ROM制作
- 下一篇: 注解不自动导包_玩转SpringBoot