【STM32入门】这个项目绝了,用手势来产生波形,基于手势控制的波形发生器
大家好,我是張巧龍,之前有給實驗室學生出了一道關于STM32的題:基于手勢控制的波形產生題,題目簡單,但綜合性較強。
有些學生完成的還不錯,個人覺得此題用來?入門?STM32再合適不過了。
展示視頻:
【入門STM32】基于手勢控制的波形發生器設計
特此放上,設計報告中的部分段落。
01?
?題目要求
基于手勢控制的波形產生器
1.1 題目說明
以 C / C++ 為基礎,采用正點原子STM32單片機為開發平臺,編寫一個波 形發生器程序,通過手勢可以控制波形相應參數(頻率、幅值、相位)。
1.2 要求
1.2.1 基本部分?
(1)? 進入一級菜單后,在屏幕上至少顯示 3 欄以上信息:手勢識別結果、按鍵產 生波形、手勢產生波形,對功能進行選擇時,左側需要有明顯的光標(可用 符號*代替光標);
進入二級菜單時,至少顯示 3 欄以上的信息,分別命名 為相應功能(可參考框圖名字也可自行命名);子菜單可以返回上級菜單(二級返回一級、一級返回初始界面)。
(2)??完成一級菜單下的手勢識別功能;在二級菜單下,結合手勢識別模塊,完成 九種手勢識別:上、下、左、右、前、后、順時針、逆時針,識別結果顯示在屏幕上以及串口上位機,通過手勢可以控制開發板載LED亮滅。?
(3)? 完成一級菜單下的按鍵控制波形產生功能;在二級菜單下,結合 STM32 內 置 DAC,完成波形產生功能(三角波、正弦波、方波),并通過按鍵可以 調整波形參數(頻率、幅值、相位)
1.2.2??發揮部分?
(1)??完成一級菜單下的手勢控制波形產生功能;在二級菜單下,結合 STM32 內 置 DAC,完成波形產生功能(三角波、正弦波、方波),并通過手勢可以 調整波形參數(頻率、幅值、相位)
(2)??系統代碼簡短,注釋較多,可讀性強,界面美觀。?
(3)??自行發揮(此部分必須要體現出參賽人員多做了工作)
02?
?系統設計
2.1 系統簡介
系統包括LCD顯示屏模塊、ATK-PAJ7620手勢識別模塊、放大模塊、電源模塊、交互模塊、控制模塊。通過上述六大模塊實現正弦波、三角波、方波的產生與控制。
各模塊之間聯系如下圖所示,LCD顯示模塊、電源模塊、控制模塊、手勢識別模塊、交互模塊同時作用于整個系統。保證系統進行正確的界面顯示、系統控制和系統的正常運行。
放大模塊連接在STM32波形輸出端,用于放大輸出波形,提高波形輸出的調節范圍,增加系統實用價值。
系統簡介
系統實物圖
2.2? 系統總體設計思路
系統包括LCD顯示屏模塊、ATK-PAJ7620手勢識別模塊、放大模塊、電源模塊、交互模塊、控制模塊。通過上述六大模塊實現正弦波、三角波、方波的產生與控制。
各模塊之間聯系如下圖所示,LCD顯示模塊、電源模塊、控制模塊、手勢識別模塊、交互模塊同時作用于整個系統,保證系統進行正確的界面顯示、系統控制和系統的正常運行。
放大模塊連接在STM32波形輸出端,用于放大輸出波形,提高波形輸出的調節范圍,增加系統實用價值。
系統總體設計思路
2.3??波形產生關鍵模塊
用DAC來產生波形,系統使用的是STM32F103自帶的DAC。為了提高DAC轉換的速度,使用DMA傳輸波形數據,DMA的觸發傳輸使用的是定時器的中斷。
系統使用的正弦波波形數據是通過math.h函數計算得到的數組,三角波通過自定義函數計算波形數據,這兩個波形一個周期內采樣了250個數據點;
而方波的則不同,方波每個周期只改變兩次DAC的值。
當用戶通過交互界面改變幅值參數時,會重新計算波形數據數組。當用戶改變頻率參數時,會重新計算DMA定時器的周期。波形的輸出和關閉則是通過改變DMA定時器中斷使能和DMA傳輸使能實現。
DAC模塊運行過程
波形函數為void Wave_Form_Init(u16 v,float flo,int s,int xf)。
參數為v:頻率、flo:幅值、s:相位、xf:波形。
波形函數的作用是根據傳入的參數計算各波形的兩個周期的數據,通過DMA傳輸給DAC進行數模轉換。
傳輸的數字信號范圍為0~4095,對應輸出的電壓為0~3.25V。系統將根據參數計算出250個數據作為一個周期的數據,計算公式為:
其中wave為儲存數據的數組,A為幅值參數、t為時間。
調用此函數時需要傳遞相應參數,函數會計算出兩個周期的數據點,然后經過DMA將數據快速傳入DAC,從而可輸出不間斷的波形。
波形函數的執行流程圖如下2-3所示:
波形函數運行流程圖
2.4? 手勢識別模塊
采用ATK-PAJ7620手勢識別模塊,用于識別手勢指令進行手勢控制。?
03?
?系統功能演示
3.1??菜單顯示演示
系統設計了多級菜單和初始化界面,界面美觀、合理,顯示內容多樣。提升控制便捷性,顯示過程不閃屏。
菜單包括初始界面、一級菜單、二級菜單、三級功能界面。
展示如下:
3.2? 波形產生演示
系統波形產生穩定,且可以在屏幕上顯示,但是由于波形頻率,峰值等參數調節范圍大,屏幕顯示需要不斷放大縮小。
3.3??相位移動演示
相位移動功能是通過與零相位波形比較才能在示波器中識別出,為此單片機將輸出兩個波形,其中標準波形相位恒為零,輸出波形相位隨參數調節而變化。
04?
?遇見的問題與解決方案
4.1?相位調節問題
第一是相位調節后的波形與原波形相似,無法判斷波形相位改變是否與調節位置一致。
第二是相位調節的實質是將波形左右平移,相對于DAC來說就是將一個周期中波形數字信號起始位置改變。但操作起來較為麻煩、
未解決上述問題,系統打開兩個DAC通道,同時輸出波形,兩波形參數一直,但相位不同。對比波形相位不會改變,另一波形相位跟隨參數的變換而變化從而解決了相位改變無法觀測問題。
在計算波形數據時,250個數字信號為一個周期,系統定義的傳遞數字信號的數組為500個數字信號。前后250個數據是一樣的。
再使用DMC傳遞數組數據。但只傳輸250個,根據相位的變化改變傳輸的起始位置從而實現了相位移動。
4.2 波形函數與LCD顯示函數內存沖突
在調試系統過程中發現波形產生函數,與LCD顯示函數存在內存沖突問題,導致波形產生函數通過DMA傳遞的數據會被影響,改變,從而導致了輸出波形失真或不輸出波形。另外還存在一些其他函數會影響開發的波形產生函數。
為解決波形產生問題,系統將波形函數中傳輸數字信號的數字定義為靜態變量,在系統運行之前分配靜態儲存空間給該數組,使數值儲存空間不會受其他函數影響。
調整了波形函數調用位置,使該函數的調用皆在LCD顯示函數之后。采用上述解決方法后,波形產生正常。
05?
?最后
由于篇幅有限,過多的細節在此不放了,有需要詳細設計報告以及代碼的,請加微信:great_xiaolong,加好友記得備注。
精彩推薦:點擊圖片即可跳轉閱讀
帶學生參加電賽,5個國一,2個國二!15個省獎!
大快人心,盜版串口芯片CH340的被判刑了,公司被罰400萬!
模塊化編程到底有多重要?
電烙鐵焊錫到底有沒有毒?
-END-
我是張巧龍,一名教電子的大學老師,歡迎關注!
總結
以上是生活随笔為你收集整理的【STM32入门】这个项目绝了,用手势来产生波形,基于手势控制的波形发生器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: warframe白金充值比例(Warfr
- 下一篇: 各种Arduino外设的用法,生动形象,