海濤 陸代澤 韋文 吳宗霖 海藍天



摘? 要:為了實現對各類信號源的模擬、捕獲和顯示,基于STM32設計了一個綜合實驗方案,并采取“信號發生+信號捕獲”的設計理念.以方波信號為例,利用STM32開發板,設計了一套方波信號源和相應的檢測系統,該系統利用一塊STM32按要求輸出不同類型的方波信號,另一塊STM32對方波信號進行捕獲.實驗結果表明:單片機1可成功實現對方波信號的模擬,單片機2則實現了對信號的捕獲與顯示,證實了方案的正確性與可行性.該方案是一種拓寬單片機實驗范圍的新思路,可應用于對工業現場各類信號源的模擬及捕獲.
關鍵詞:STM32;信號源;方波信號;輸入捕獲
中圖分類號:TP368;TN409? ? ? ? DOI:10.16375/j.cnki.cn45-1395/t.2021.01.004
0? ? 引言
目前,國內高校的單片機教學都是以51系列單片機為教學對象,實驗裝置多以51系列單片機為控制核心[1-4].雖然可以使用ATmega 16等性能更強的單片機替代51系列單片機,從而完成對實驗裝置的升級改造[5].但是實驗裝置采取的是實驗箱的形式,不僅笨重而且大都是偏向于驗證性的實驗[6].當學生需要進行一些創新性設計時,實驗裝置無法滿足要求,迫切需要新的單片機及理念來滿足學生的學習需求.與51單片機相比,STM32具有內核先進、高度集成、性能出眾、易于開發、便于攜帶的特點[7],且相關軟件、硬件資料完全公開[8].以STM32開發板代替原有的實驗裝置或實驗平臺,作為單片機實驗教學的延伸,有助于激發學生的創新能力,為單片機的實驗教學開拓了一種新的思路.
本文基于STM32開發了一個方波信號發生器及其檢測的實驗系統,即實驗由兩個綜合實驗構成(一個模擬輸出與輸入實驗).通過該實驗可使學生掌握STM32的信號發生、輸入捕獲、LED顯示以及定時器的原理和應用,起到舉一反三的作用.
1? ? 總體設計方案
設計目標是:使用STM32單片機1(簡稱單片機1)產生一個可調的方波信號,通過另一塊STM32單片機2(簡稱單片機2)捕獲方波信號并進行顯示.實現方式為:通過按鍵電路在單片機1上產生可調的方波信號,再由單片機2來捕獲單片機1產生的方波信號,最終利用液晶屏、示波器等對方波信號進行顯示.本次設計的方波信號發生與檢測系統的原理圖如圖1所示:單片機1通過PB5與PE5端口產生方波信號,單片機2使用PA0與PE3端口進行方波信號的捕獲檢測.
方波信號發生器在設計時要求具有待機、PB5端口輸出方波、PE5端口輸出方波以及可調相位差等4種狀態,并通過STM32上的LED燈DS0、DS1來顯示其狀態.設計的方波信號發生器預計能實現的功能如圖2所示.
從圖2可知,按鍵KEY0與按鍵KEY1是低電平有效,按鍵KEY_UP為高電平有效.由KEY0來實現狀態的切換選擇,通過KEY1與KEY_UP對方波信號進行控制.
2? ? 方波信號發生器的設計
2.1? ?硬件設計及與傳統發生器的對比
STM32常用的有STM32F103~F107系列,基于Cortex-M3內核且采取的是馮·諾依曼結構[9-10].本次實驗的單片機選取STM32F103系列,其芯片為STM32F103ZET6,用到的硬件資源有:指示燈DS0、DS1、按鍵KEY_UP、按鍵KEY0、按鍵KEY1.通過按鍵電路與STM32單片機結合產生相位不同、頻率不同的方波信號,并通過LED進行顯示.基于STM32F103ZET6方波信號發生器的電路原理圖如圖3所示.
傳統的方波信號發生器如圖4所示,由純硬件電路所組成,包括振蕩器、變換器、輸出級、電源等部分.方波信號的調頻、調幅等一系列控制操作均是通過旋鈕改變元器件的電阻值、電容值來實現,但此方法存在較大的不足:通過旋鈕調節很難準確調節出所需要的變量,在進行實驗時耗時較大且容易存在誤差;同時,頻繁地對元器件進行調節操作會造成器件的快速磨損,嚴重降低器件壽命,發生故障的概率相對較高.
而基于STM32的方波信號發生器是由硬件和軟件相結合來產生方波信號,其核心部分是由芯片STM32F103ZET6結合所編程序來實現方波信號的產生.與傳統信號發生器相比,其頻率和幅值的調節都是通過修改程序來實現,在相同實驗條件下,可克服傳統純硬件方波信號發生器的一些缺點.此外,其產生的方波信號可以通過單片機自身的顯示裝置進行驗證,更加直觀和易于操作.
2.2? ?軟件設計
方波信號實際上是一個二值函數,要使STM32產生一個可調的方波信號,即通過編程控制STM32的定時器,調節其I/O口電平輸出頻率.STM32擁有多個GPIO,且每個GPIO組都有16個I/O口[11].本次設計需要用到的I/O口數量為5個,其I/O分配表如表1所示.
本次實驗以MDK5.14為STM32的開發環境,根據要求在MDK Keil軟件使用C語言編寫程序,并燒錄到單片機中,調整定時器參數改變I/O口輸出頻率.方波信號發生器的程序設計流程示意圖如圖5所示.
如圖5所示:在STM32中,進行外設的配置操作之前先使能該外設時鐘,時鐘的使能通過調用函數RCC_APB2PeriphClockCmd()實現.而PB5與PE5初始化通過調用函數GPIO_Init()實現,目的是為了配置I/O口模式和速度.開啟AFIO時鐘,是為了對AFIO_EXTICRx(x=1~4)寄存器進行讀/寫操作而準備.按照圖5的流程圖編寫好程序后,通過與按鍵電路相結合,即可控制I/O口輸出電平的高低、頻率及脈沖寬度.
3? ? 方波信號的檢測
在STM32中,其輸入捕獲模式可以用來測量高電平的脈沖寬度或信號的頻率[12].若使用單片機2來檢測單片機1產生的方波信號,則需要通過STM32的定時器實現輸入捕獲[13].本次實驗使用TIM5_CH1(PA0端口)來捕獲高電平脈沖,方波信號捕獲主程序的部分代碼如下:
STM32輸入捕獲的原理為:對TIMx_CHx上的邊沿信號進行檢測,若檢測的邊沿信號發生突變(上升沿突變或者下降沿突變),則將定時器的當前值TIMx_CNT存放到與其相對應的捕獲/比較寄存器TIMx_CCRx中,從而實現一次信號的捕獲.
本次實驗TIM5的CH1先設置為上升沿捕獲,在第一次捕獲到上升沿的時候,清除TIM5的計數值、計數溢出次數等計時變量與相關寄存器,再設置PA0端口為下降沿捕獲.成功捕獲下降沿后,按照TIM5的計時公式算出高電平脈寬,并進行記錄,然后再次把PA0端口配置為上升沿捕獲,TIM5也重新計時.第二次捕獲到上升沿的時候,同理,算出時長,最后將前后兩個時間相加再運算,即可計算出方波信號頻率與周期.在知道方波信號周期的前提下,通過信號捕獲功能,即可得到兩個方波信號之間的相位差.
為了實現方波信號的捕獲與參數顯示,還需要加入LCD液晶顯示器的顯示程序,STM32的TFTLCD顯示模塊是一塊分辨率為240*320 的電阻觸摸屏,使用16位并口驅動[14],單片機2信號捕獲與顯示的程序設計流程圖如圖6所示.
4? ? 實驗驗證
為了驗證單片機1是否可以產生方波以及單片機2是否可以捕獲單片機1產生的方波,通過? ? FlyMcu軟件將MDK Keil中編譯無誤的方波信號發生器的程序與信號捕獲與顯示的程序分別燒錄到兩塊STM32開發板中進行驗證.同時使用杜邦線將單片機1的PB5和單片機2的PA0相連接,單片機1的PE5和單片機2的PE3相連接.觀察是否可以通過單片機1上的按鍵產生方波和對方波信號進行控制,且由單片機2捕獲其頻率并顯示.
方波信號發生器的輸出模式由KEY0進行選擇,當KEY0按下不同的次數時,單片機1的輸出模式及開發板上的指示燈DS0、DS1的顯示結果如表2所示.
由于STM32的DS0與DS1是低電平有效,因此,表2中,“1”代表指示燈不亮,“0-”代表指示燈交替閃爍.當單個指示燈交替閃爍時,相應端口產生方波信號,同時閃爍則說明兩個端口產生方波.
實驗中,單個方波信號的初始周期設定為? ?0.2 s,通過按鍵可在原有周期的基礎上增多或減少0.2 s.PB5與PE5同時產生方波信號時,兩個信號的周期均為1.2 s,周期的最大值設定為3.6 s.當存在相位差時,通過按鍵每次可在原有相位差上增加或減少36°.若方波信號同相,按鍵按下5次則將使方波信號反相(180°),再按5次又將恢復同相.
為了探究所設計方案的可靠性與準確性,首先以單片機1隨機產生12組不同頻率、不同周期以及不同相位差的方波信號,并以單片機2對其進行捕獲測量,通過多次反復試驗來觀測單片機2可否較好捕獲單片機所產生的方波信號.實驗數據的匯總結果如表3所示.
表3中,[T1]、[f1]和[T2]、[f2]為單片機1的PB5與PE5產生的方波信號的周期、頻率,[T12]、[f12]和[T22]、[f22]為單片機2的PA0與PE3檢測到的周期、頻率,[θ1]為單片機1發生的兩個波形的相位差,[θ12]為單片機2檢測到的兩個波形的相位差.
由表3的數據對比可知,在PB5或PE5端口單獨產生方波信號、PB5和PE5端口同時產生方波信號等不同情況時,單片機2捕獲后測量到的周期、頻率以及相位差等參數與單片機1產生的信號相差無幾.單片機1成功實現了方波信號的發生,單片機2則實現了信號的捕獲與檢測,達到了預期的目標.同時,多次反復的實驗結果也從側面證實了本文所設計方案的可行性與可靠性.
方波信號并不能直觀地看出,但在單片機1上可通過LED燈DS0和DS1來判斷是否有方波產生.當PB5端口產生方波時LED燈DS0閃爍;當PE5端口產生方波時LED燈DS1閃爍;當PB5與PE5同時產生方波時,DS0與DS1同時閃爍.以PB5端口產生方波為例,單片機1上的紅色LED燈閃爍(DS0),并且單片機2通過捕獲單片機1的方波信號后在液晶屏顯示其頻率,實驗結果及實物圖如圖7所示.
為了更加直觀地觀察出方波信號的相位差及其變化情況,當單片機1的PB5端口與PE5端口同時產生方波(可調相位差狀態)時,使用型號為TDS1001B-SC的示波器對單片機2捕獲后的波形進行測量.
實驗的步驟為:首先將KEY0按鍵按下3次使DS0、DS1同時閃爍,此時通過單片機1上的按鍵KEY1與按鍵KEY_UP對頻率進行調整,對相位差進行控制;之后通過這兩個按鍵對方波信號的相位進行調整和控制,并觀察示波器上波形的變化情況.示波器導出的測量結果如圖8所示.
5? ? 結語
通過利用STM32片機,成功設計了一個方波信號發生器及其檢測的實驗系統.單片機1產生了可調的方波信號,單片機2則實現了捕獲與顯示,并通過多次反復的實驗證實了設計方案的準確性與可行性.單片機1產生的方波信號亦可以由單片機1自己捕獲并顯示,其原理與單片機2的捕獲原理一致.本文成功實現了方波信號的模擬輸出和輸入捕獲,能推廣到對正弦波、鋸齒波、三角波和諧波等各類信號源的模擬上,也可以模擬應用現場的信號并進行發生和捕捉,降低實驗開發的成本及周期,拓寬了單片機的實驗范圍,也為綜合實驗開拓了一種新的思路.本次實驗綜合應用了STM32的定時器、I/O口、按鍵電路、輸入捕獲、LED顯示等多個模塊與功能,有助于學生掌握這些模塊的功能與應用,激發學生的學習興趣和自主創新能力.
參考文獻
[1]? ? ?王琳霖,王偉,曹國強,等. 基于單片機的機電控制實訓平臺設計[J].實驗技術與管理,2018,35(4):82-85.
[2]? ? ?朱向慶,黎東濤,蘇超益,等. 適合于項目教學法的三合一單片機實驗箱設計[J].實驗技術與管理,2013,30(7):55-59.
[3]? ? ?徐小棟,胡春,董守昆,等. 利用Proteus軟件構建單片機虛擬仿真實驗室[J].計算機與數字工程,2012,40(1):154-157.
[4]? ? ?許京雷. 嵌入式系統課程內容設置[J].中國教育技術裝備,2017(8):85-86.
[5]? ? ?海濤,陳明媛,駱武寧,等. 一種單片機實驗裝置升級改造的實現方案[J].實驗室研究與探索,2010,29(3):76-79,87.
[6]? ? ?朱向慶,何昌毅,朱萬鴻,等. 基于STM32單片機的通信技術實驗系統設計[J].實驗技術與管理,2019,36(8):81-84.
[7]? ? ?湯澤坤,唐培和,徐奕奕. 基于Stm32的光伏監控系統的設計[J].廣西科技大學學報,2015,26(4):54-59.
[8]? ? ?劉軍,張洋,嚴漢宇. 例說STM32[M].3版. 北京:北京航空航天大學出版社,2018.
[9]? ? ?沈紅衛,任沙浦,朱敏杰,等. STM32單片機應用與全案例實踐[M].北京:電子工業出版社,2017.
[10]? ?魏永輝. 嵌入式STM32下無源蜂鳴器發聲[J].科技展望,2016,26(24):163.
[11]? ?盧有亮. 基于STM32的嵌入式系統原理與設計[M].北京:機械工業出版社,2014.
[12]? ?潘宇. 基于FPGA和STM32的脈寬頻率測量方法[J].實驗室研究與探索,2017,36(2):83-86.
[13]? ?張洋,劉軍,嚴漢宇,等. 原子教你玩STM32:庫函數版[M].2版. 北京:北京航空航天大學出版社,2015.
[14]? ?潘盛輝,曹蓬,吳甜甜,等. 基于STM32的障礙物定位檢測系統設計[J].廣西科技大學學報,2017,28(3):97-102.