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